本文介绍SGX的原理,并给出了安装说明。
前提条件
背景信息
英特尔SGX(Intel Software Guard Extension)是英特尔指令集架构的一个扩展。SGX为您提供了围圈(Enclave),即内存中一个加密的可信执行区域,由CPU保护您的数据和隐私不被恶意代码窃取。
SGX利用新增的处理器指令,在内存中分配一部分区域EPC(Enclave Page Cache),通过CPU内的加密引擎MEE(Memory Encryption Engine)对其中的数据进行加密。EPC中加密的内容只有进入CPU后才会被解密成明文。因此,在SGX中,您可以不信任操作系统、VMM、甚至BIOS,只需要信任CPU便能确保隐私数据不会泄漏。
实际应用中,您可以把隐私数据加密后以密文形式传递至云上的围圈中,并通过远程证明把对应的密钥也传入围圈。然后在CPU的加密保护下利用数据进行运算,结果会以密文形式返回给您。这种模式下,您既可以利用云计算强大的计算力,又不用担心数据泄漏。
EDL(Enclave Definition Language)是SGX编程的核心,其中定义了所有围圈里对外读写、处理数据的函数。在编译阶段,SDK提供的Edger8r工具会根据EDL中定义的函数生成围圈和普通内存的桥接函数,并做相应的安全检测。
函数分为信任函数(ecall)和不可信函数(ocall):
- ecall:定义在信任区域(trusted),在围圈外被调用,并在围圈内执行。
- ocall:定义在不可信区域(untrusted),在围圈内被调用,并在围圈外执行。
// demo.edl enclave { // Add your definition of "secret_t" here trusted { public void get_secret([out] secret_t* secret); }; untrusted { // This OCALL is for illustration purposes only. // It should not be used in a real enclave, // unless it is during the development phase // for debugging purposes. void dump_secret([in] const secret_t* secret); }; };
以安装文件方式安装SGX
需要先安装对应Linux内核版本的头文件,安装SGX时包括驱动、PSW、SDK等组件。
说明 样例中的Makefile默认安装目录是
/opt/intel/。
以源代码方式安装SGX
需要先安装对应Linux内核版本的头文件,安装SGX时包括驱动、PSW、SDK等组件。
说明 样例中的Makefile默认安装目录是
/opt/intel/。
- 从官方Github下载源代码。
- 按README.md所述流程编译源代码。