  Remote attestation (RA) authenticates code running in trusted execution
environments (TEEs), allowing trusted code to be deployed even on untrusted
hosts. However, trust relationships established by one component in a
distributed application may impact the security of other components, making it
difficult to reason about the security of the application as a whole.
Furthermore, traditional RA approaches interact badly with modern web service
design, which tends to employ small interacting microservices, short session
lifetimes, and little or no state.
  This paper presents the Decent Application Platform, a framework for building
secure decentralized applications. Decent applications authenticate and
authorize distributed enclave components using a protocol based on
self-attestation certificates, a reusable credential based on RA and verifiable
by a third party. Components mutually authenticate each other not only based on
their code, but also based on the other components they trust, ensuring that no
transitively-connected components receive unauthorized information. While some
other TEE frameworks support mutual authentication in some form, Decent is the
only system that supports mutual authentication without requiring an additional
trusted third party besides the trusted hardware's manufacturer. We have
verified the secrecy and authenticity of Decent application data in ProVerif,
and implemented two applications to evaluate Decent's expressiveness and
performance: DecentRide, a ride-sharing service, and DecentHT, a distributed
hash table. On the YCSB benchmark, we show that DecentHT achieves 7.5x higher
throughput and 3.67x lower latency compared to a non-Decent implementation.
