1. Intel 软件防护扩展技术 Intel® SGX
Intel® SGX 的设计主旨是为用户应用程序提供可信的执行环境,使得应用程序有能力在用户地址空间中开辟一段特别的,受保护的内存空间,并对这段受保护的内存空间实行严格的访问控制和加密操作来保障数据机密性和代码完整性,确保即使是 Hypervisor、BIOS,操作系统等特权应用都不能随意访问这段地址空间,这一段地址空间被称之为 Enclave(称之为飞地)。
按照文章的前部分介绍,把应用程序部署在云上,需要验证程序确实运行在 TEE 里,具体更多的 SGX 技术细节,请参见 Intel 官方的技术文档。以及 Intel 架构开发者手册。验证包括本地验证和远程验证。本地验证指在同一个平台上,让不同的 Enclave 互相验证 Trusted Computing Base(TCB)。远程验证是指让一个平台中运行的 Enclave 向远端的信赖凭证者 Relying Party 证明自己的 TCB,证明自己运行在 SGX TEE 中,并且没有被篡改,同时证明当前的 CPU SGX 安全版本信息。
SGX 应用程序涉及两部分:安全区和非安全区。开发者或者用户可以把涉及敏感数据的处理、Key 的保护等都放在 Enclave 里面,从而将应用程序的代码、数据划分为受信任和不受信任的组件,因此开发者或者用户需要决定哪些组件应该置于 Enclave 内部,哪些置于 Enclave 外部。
2. Intel 信任域扩展技术 Intel® TDX
Intel® TDX 旨在将虚拟机(VM)与平台上的虚拟机管理程序(VMM)和任何其他非信任域 Trust Domain (TD) 的软件隔离,以保护 TD VM 免受各种软件的安全威胁。
TDX 的设计思路是将整个虚拟机 VM 放在一个 TEE 可信执行环境里,这样不管应用在私有云还是公有云上,不需要再对应用程序和数据做受信任和不受信任的划分和修改,只要操作系统支持就行。
TDX 基本思路就是引入新的 CPU 工作模式,然后通过对内存加密技术,将两个虚拟机用不同的 key 加密,同时 key 由 CPU 来直接进行管理。本质上讲,TDX 是通过两种技术方式来配合实现,一种就是新的 CPU 模式,叫做安全仲裁模式 Secure Arbitration Mode(SEAM),第二种是多密钥内存加密技术方式 Multi-key Total-Memory-Encryption(MKTME)。SEAM 模式使用新的指令,例如 SEAMCALL, SEAMRET, SEAMOPS, TDCALL 等来实现和 TD OS,以及 Host/VMM 交互。同时,提供特定区域的物理内存来保护 Intel TDX Module 代码模块,通过 Intel Authenticated Code Module (SEAMLDR)来装载。多密钥内存加密 MKTME 技术中,MKTME engine 通过 PCONFIG 指令来分配和设置各个 TD VM 的内存加密 Keys。TDX 将内存分为两个部分,私有和共享内存。在 TDX 下还是需要在外部加固的,加固的时候需要共享内存,这部分内存外部是可以读取的,因为有些虚拟化或半虚拟化设备需要和外部通信时,是需要 host 操作系统有能力访问来提供网络等服务的。
对比
当前的 Intel® TDX 认证的本质原理和 SGX 认证类似,也需要提供远程证明来验证其运行在 TEE 环境里。更多详细的 TDX 技术说明,请参见 Intel 官方网站的 Intel® TDX 技术规范和白皮书。
Intel® TDX 和 Intel® SGX 是用来解决不同问题的。TDX 是把整个软件包不做修改直接放到虚拟机上就能实现安全,而 SGX 关注应用层面,通过对飞地 Enclave 来保障机密性和完整性,用户根据业务场景需求可以选择不同的技术。
参考文档
https://www.intel.com/content/www/us/en/developer/tools/trust-domain-extensions/overview.html
https://www.intel.com/content/www/us/en/products/docs/accelerator-engines/software-guard-extensions.html
https://cloud.tencent.com/developer/news/918918