本文介绍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便能确保隐私数据不会泄漏。
EDL(Enclave Definition Language)是SGX编程的核心,其中定义了所有围圈里对外读写、处理数据的函数。在编译阶段,SDK提供的Edger8r工具会根据EDL中定义的函数生成围圈和普通内存的桥接函数,并做相应的安全检测。
- 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
以源代码方式安装SGX
- 从官方Github下载源代码。
- 按README.md所述流程编译源代码。