置顶
为什么 SGX 应用开发难?
14
SGX 应用程序是一种基于划分的模型:在用户态的(不可信)应用程序(上图红色部分)可以嵌入 SGX TEE 保护的区域(上图绿色部分),被称为 Enclave。支持 SGX 的 Intel CPU 保证 Enclave 中的受保护内容是在内存中加密的,并且与外界强隔离。外界的代码如果想进入 Enclave 中执行其中的可信代码必须通过指定的入口点,后者可以实施访问控制和安全检查以保证 Enclave 无法被外界滥用。
由于 SGX 应用程序是基于这种划分的架构,应用开发者通常需要使用某种 SGX SDK,比如 Intel SGX SDK、Open Enclave SDK、Google Asylo 或 Apache Rust SGX SDK。但无论使用上述哪种 SDK,开发者会遭遇下面的开发困境:
- 必须将目标应用做二分:开发者需要决定哪些组件应该置于 Enclave 内部,哪些置于 Enclave 外部,以及双方如何通信。对于复杂的应用,确定高效、合理且安全的划分方案本身就是一件颇具挑战的工作,更不要说实施划分所需的工程量。
- 被限定在某个编程语言:无论使用上述哪种 SDK 开发,一个开发者都将被限定在该 SDK 所支持的语言,这通常意味着 C/C++(当使用 Intel SGX SDK、Open Enclave SDK 或 Google Asylo 时),而无法使用 Java、Python、Go 等更加友好的编程语言。
- 只能获得很有限的功能:处于硬件限制和安全考虑,Enclave 中是无法直接访问 Enclave 外的(不可信)OS 的。由于 Enclave 中缺乏 OS 的支持,各种 SDK 只能提供普通不可信环境下的一个很小的功能子集,这使得很多现有的软件库或工具都无法在 Enclave 中运行。
上述困境使得为 SGX 开发应用成为一件十分痛苦的事,制约了 SGX 和机密计算的普及度和接受度。