sgx enclu

英特尔®Software Guard扩展指令和数据结构概述

 

发布时间: 2016年6月10日   最后更新时间: 2016年6月10日

 

 

这篇文章旨在向开发人员介绍有关英特尔®Software Guard扩展(Intel®SGX)指令和数据结构的知识。新交所提供18种指令和13种数据结构。

在此博客中,我们将学习以下主题

  1. 英特尔软件卫士扩展。
  2. 基础知识-环分离。
  3. SGX指令和数据结构。
  4. SGX内存访问控制。
  5. SGX控件结构访问。

英特尔®软件防护扩展(英特尔®SGX):

  • 安全区中隔离的安全关键代码。
  • 仅CPU受信任。
    • 透明内存加密。
    • 18条新指令。
  • 飞地不能损害系统。
    • 仅非特权代码(CPU Ring3)。
    • 内存保护。
  • 专为多核系统而设计。
    • 飞地的多线程执行。
    • 飞地和不受信任的代码的并行执行。
    • 飞地是可打断的。
  • 提供编程参考。

基础知识-环分离:

  • 4种不同的特权级别。
    • 0 =内核
    • 1,2 =设备驱动程序
    • 3 =应用
  • CPU在代码段寄存器CS中维护的当前特权级别。

SGX飞地:

  • 隔离区是代码和数据的隔离存储区。
  • 物理内存(RAM)的一部分留给了安全区。
    • 它称为Enclave页面缓存(EPC)。
    • EPC内存在主内存(RAM)中被加密。
    • 受信任的硬件仅由CPU-Die组成。
    • EPC由OS / VMM管理。

SGX指令和数据结构:

  • 18指令
    • 13主管指示。
    • 5用户说明。
  • 13数据结构
    • 与某个飞地相关的8个数据结构。
    • 与某些内存页面相关的3个数据结构。
    • 2个与整体资源管理相关的数据结构。

SGX主管说明:

主管指导

描述

ENCLS [EADD]

添加页面

ENCLS [EBLOCK]

屏蔽EPC页面

ENCLS [ECREATE]

创建一个飞地

ENCLS [EDBGRD]

通过调试器读取数据

ENCLS [EDBGWR]

通过调试器写入数据

ENCLS [EEXTEND]

扩展EPC页面测量

ENCLS [EINIT]

初始化飞地

ENCLS [ELDB]

加载EPC页面被阻止

ENCLS [ELDU]

加载EPC页面为未阻止

ENCLS [EPA]

添加版本数组

ENCLS [EREMOVE]

从EPC删除页面

ENCLS [ETRACK]

激活EBLOCK检查

ENCLS [EWB]

回写/使EPC页面无效

SGX用户说明:

用户说明

描述

ENCLU [EENTER]

输入飞地

ENCLU [EEXIT]

退出飞地

ENCLU [EGETKEY]

创建一个加密密钥

ENCLU [EREPORT]

创建一个加密报告

ENCLU [简历]

重新进入飞地

SGX数据结构的详细信息

  1. SGX飞地控制结构(SECS):
    • 代表一个飞地。
    • 包含例如哈希,ID,大小等。
  2. 线程控制结构(TCS):
    • 飞地中的每个执行线程都与一个线程控制结构相关联。
    • 包含例如入口点,指向SSA的指针。
  3. 状态保存区(SSA):
    • 当在安全区中运行时发生AEX时,体系结构状态将保存在线程的SSA中
  4. 页面信息(PAGEINFO):
    • PAGEINFO是一种体系结构数据结构,用作EPC管理指令的参数
      • 线性地址
      • 页面的有效地址(又称虚拟地址)
      • SECINFO
      • SECS
  5. 安全信息(SECINFO):
    • SECINFO数据结构保存有关特定区域页面的元数据
      • 读/写/执行
      • 页面类型(SECS,TCS,普通页面或VA)
  6. 分页加密元数据(PCMD):
    • PCMD结构用于跟踪与分页页面相关联的加密元数据。与PAGEINFO结合使用,它为处理器提供了足够的信息来验证,解密和重新加载分页的EPC页面。
    • EWB写出(保留字段和)MAC值。
    • ELDB / U读取字段并检查MAC。
    • 包含安全区ID,SECINFO和MAC
  7. 版本阵列(VA):
    • 为了安全地存储逐出的EPC页面的版本,SGX定义了一种特殊的EPC页面类型,称为“版本阵列(VA)”。
      • 每个VA页面包含512个插槽,每个插槽可以包含从EPC逐出的页面的8字节版本号。
  • 退出EPC页面后,软件会在VA页面中选择一个空插槽;该插槽接收要逐出的页面的唯一版本号。
    • 重新加载EPC页面时,VA插槽必须容纳该页面的版本。如果成功重新加载页面,则将清除VA插槽中的版本。
  • 可以像其他任何EPC页面一样逐出VA页面。
    • 逐出VA页面时,必须使用其他VA页面中的版本槽来接收要逐出的VA的版本。
  1. 飞地页面缓存映射(EPCM):
    • EPCM是处理器用来跟踪EPC内容的安全结构。EPCM对于当前加载到EPC中的每一页仅保留一个条目。EPCM无法通过软件访问,并且EPCM字段的布局是特定于实现的。
    • 包含例如RWX,页面类型,线性地址,状态等。
  2. 飞地签名结构(SIGSTRUCT):
    • SIGSTRUCT包含有关飞地签名者的飞地信息。
    • SIGSTRUCT包含ENCLAVEHASH作为SHA256。
    • SIGSTRUCT包含四个3072位整数(MODULUS,SIGNATURE,Q1,Q2)。
  3. EINT令牌结构(EINITTOKEN):
    • EINIT使用EINIT令牌来验证飞地是否被允许发射。
    • 包含例如安全区的属性,哈希和签名者。
    • 使用启动密钥通过EINITTOKEN上的加密MAC进行身份验证。
  4. 报告(REPORT):
    • REPORT结构是EREPORT指令的输出
      • 飞地的属性
      • 飞地的哈希
      • 飞地签名人
      • 在飞地和目标飞地之间进行通信的一组数据
      • 使用报告密钥的报告上的CMAC
  5. 报告目标信息(TARGETINFO):
    • 此结构是EREPORT指令的输入参数。它用于识别安全区域,该安全区域将能够以密码方式验证EREPORT返回的REPORT结构。
    • 包含目标安全区的属性和哈希。
  6. 密钥请求(KEYREQUEST):
    • 此结构是EGETKEY指令的输入参数。
    • 它用于选择适当的密钥以及派生该密钥所需的任何其他参数。

SGX内存访问控制:

双向访问控制

  1. 从飞地到“外面”
    • 隔离恶意飞地。
    • 飞地需要与外界进行通信的方式,例如其“主机应用程序”。
  2. 从“外面”到飞地
    • 安全区内存必须加以保护。
    • 应用程序。
    • 特权软件(OS /虚拟机监视器(也称为Hypervisor))。
    • 其他飞地。

SGX MAC从飞地到“外部”:

从飞地到“外面”

  • 所有内存访问都必须符合OS / VMM的分段和分页策略。
  • 飞地不能操纵这些策略,只能操纵飞地内部的非特权指令。
  • 从安全区内部到安全区外部的线性地址的代码提取将导致“常规保护错误(0)”异常。

SGX MAC的“外部”区域:

从“外面”到飞地

  • 非安全区对EPC内存的访问会导致中止页面语义。
  • 从外部直接跳转到映射到安全区的任何线性地址都不会启用安全区模式,并且会导致关于页面的语义和未定义的行为。
  • 硬件使用逻辑到线性地址转换来检测并阻止隔离区访问,这些地址转换与用于分配页面的原始直接EA不同。检测到修改的转换会导致“常规保护故障”(0)。

SGX控件结构访问:

不能直接访问SGX控制结构

  • 每个EPC页面都有一种类型:SECS,TCS,普通页面或VA。
  • 非可以从飞地外部访问。
  • 从飞地内部只能访问“常规页面”。
  • SECS,TCS和VA由硬件初始化和处理。

 

 
 
附件尺寸
sgx指令和数据结构概述.pdf 344.9 KB
posted @ 2021-05-11 10:54  zJanly  阅读(166)  评论(0编辑  收藏  举报