这张图改自Intel SGX手册的一张图(一年前看的,实在记不住在哪个位置了)。相对于那张图,我把PMH、ME两个硬件模块画上去了。
下图是Enclave初始化时硬件间关系图,Enclave初始化大致经历了(1)申请Enclave内存,(2)创建SECS数据结构,(3)加载Enclave代码进Enclave内存,(4)度量Enclave代码,(5)完成初始化。
图中最下面的内存中一块特定区域用作Enclave内存(一般称为Enclave Page Cache,EPC)。SECS是存储在EPC中的一个重要数据结构,用于Enclave管理。EPCM是存储于EPC中实施EPC访问控制的数据结构。CPU中的MEE硬件模块负责对EPC加密,防止物理攻击。CPU中的PMH硬件模块负责查询EPCM项并实施EPC访问控制。
以sgx_create_enclave为例初始化Enclave,源码流程如图所示。sgx_create_enclave扩展支持SGX PCL、Switchless Calls 初始化和Key Separation & Sharing (KSS).