  Users are demanding increased data security. As a result, security is rapidly
becoming a first-order design constraint in next generation computing systems.
Researchers and practitioners are exploring various security technologies to
meet user demand such as trusted execution environments (e.g., Intel SGX, ARM
TrustZone), homomorphic encryption, and differential privacy. Each technique
provides some degree of security, but differs with respect to threat coverage,
performance overheads, as well as implementation and deployment challenges. In
this paper, we present a systemization of knowledge (SoK) on these design
considerations and trade-offs using several prominent security technologies.
Our study exposes the need for \textit{software-hardware-security} codesign to
realize efficient and effective solutions of securing user data. In particular,
we explore how design considerations across applications, hardware, and
security mechanisms must be combined to overcome fundamental limitations in
current technologies so that we can minimize performance overhead while
achieving sufficient threat model coverage. Finally, we propose a set of
guidelines to facilitate putting these secure computing technologies into
practice.
