Intel SGX(3)——处理器

enclave 创建

度量

  • enclave 度量:每个 enclave 都由其属性及其页面的位置、内容和保护信息的散列表示。具有相同散列的两个 enclave 是相同的。该度量称为 MRENCLAVE,用于检查 enclave 的完整性。
  • 签名度量:每个 enclave 由其作者进行签名。 MRSIGNER 包含作者公钥的哈希值。 MRENCLAVE 和 MRSIGNER 是使用 SHA-256 哈希函数生成的。

数据结构

  • EINIT Token Structure (EINITTOKEN):EINIT 指令使用 EINITTOKEN 数据结构来确认是否允许运行 enclave。它包含 enclave 的属性、哈希值和签名者身份,使用通过 Launch Key 执行的 HMAC 进行身份验证。
  • Enclave Signature Structure (SIGSTRUCT):每个 enclave 都关联一个 SIGSTRUCT 结构,该结构由其作者签名并包含 enclave 度量、签名者公钥、版本号(ISV,反映安全级别)和产品标识符(ISVPRODID,以区分来自同一作者的 enclave)。它允许确保 enclave 未被修改,然后使用不同的密钥重新签名。

指令集

  • ECREATE:该指令实例化一个新的 enclave,定义其地址空间和信任根,这些信息存储在新分配的SECS 中。
  • EADD:该指令允许向 enclave 添加一个新的页面。操作系统全权负责选择页面及其内容,EPCM 条目的初始化信息表示页面类型及其保护。
  • EEXTEND:该指令允许以 256 字节的块将页面内容添加到 enclave 度量中,必须调用 16 次才能将完整的页面添加到度量中。
  • EINIT:该指令在初始化 enclave 之前检查其是否对应于它的 EINITTOKEN(相同的度量和属性)。它还检查 token 是否使用 launch key 签名。
  • EREMOVE:该指令从 enclave 中永久删除一个页面。

 

 说明

  1. 应用程序请求将其 enclave 加载到内存中
  2. ECREATE 指令创建并填充 SECS 结构
  3. 使用 EADD 指令将每个页面加载到受保护的内存中
  4. 使用 EEXTEND 指令将每个页面添加到 enclave 度量中
  5. EINIT 指令完成 enclave 创建

 

enclave 进入和退出

指令集

  • EENTER:该指令将控制权从应用程序转移到 enclave 内的预定位置。它检查 TCS 是否空闲并清除 TLB 条目,然后将处理器置于 enclave 模式并保存 RSP/RBP 和 XCR0 寄存器。最后,它禁用 Precise Event Based Sampling (PEBS) 以使 enclave 执行看起来像一个巨大的指令。
  • EEXIT:该指令将进程放回其原始模式并清除位于 enclave 内的地址的 TLB 条目。处理器控制权被转移到位于应用程序内 RBX 寄存器指定的地址,并且释放 TCS 结构。enclave 需要在退出之前清除其寄存器以防止数据泄漏。

说明

  1. EENTRY 指令被执行
  2. 保存应用程序上下文
  3. 将处理器切换到 enclave 模式
  4. EEXIT 指令被执行
  5. 将处理器切换到 normal 模式

 

中断处理

posted @ 2021-10-27 10:50  hunterDing  阅读(707)  评论(0编辑  收藏  举报