Intel® Enclave Access Control and Data Structures(二)

文章目录

  • 前言
  • 一、Overview of Enclave Execution Environment
  • 二、Terminology
  • 三、Access-control Requirements
  • 四、Segment-based Access Control
  • 五、Page-based Access Control
    • 5.1 Access-control for Accesses that Originate from non-SGX Instructions
    • 5.2 Memory Accesses that Split across ELRANGE
    • 5.3 Implicit vs. Explicit Accesses
      • 5.3.1 Explicit Accesses
      • 5.3.2 Implicit Accesses
  • 六、Intel SGX Data Structures Overview
  • 七、SGX Enclave Control Structure (SECS)
    • 7.1 ATTRIBUTES
    • 7.2 SECS.MISCSELECT Field
    • 7.3 SECS.CET_ATTRIBUTES Field
  • 八、Thread Control Structure (TCS)
    • 8.1 TCS.FLAGS
    • 8.2 State Save Area Offset (OSSA)
    • 8.3 Current State Save Area Frame (CSSA)
    • 8.4 Number of State Save Area Frames (NSSA)
  • 九、State Save Area (SSA) Frame
    • 9.1 GPRSGX Region
      • 9.1.1 EXITINFO
      • 9.1.2 VECTOR Field Definition
    • 9.2 MISC Region
      • 9.2.1 EXINFO Structure
      • 9.2.2 Page Fault Error Code
  • 十、CET State Save Area Frame
  • 十一、Page Information (PAGEINFO)
  • 十二、Security Information (SECINFO)
    • 12.1 SECINFO.FLAGS
    • 12.2 PAGE_TYPE Field Definition
  • 十三、Paging Crypto MetaData (PCMD)
  • 十四、Enclave Signature Structure (SIGSTRUCT)
  • 十五、EINIT Token Structure (EINITTOKEN)
  • 十六、Report (REPORT)
    • 16.1 REPORTDATA
  • 十七、Report Target Info (TARGETINFO)
  • 十八、Key Request (KEYREQUEST)
    • 18.1 KEY REQUEST KeyNames
    • 18.2 Key Request Policy Structure
  • 十九、Version Array (VA)
  • 二十、Enclave Page Cache Map (EPCM)
  • 二十一、Read Info (RDINFO)
    • 21.1 RDINFO Status Structure
    • 21.2 RDINFO Flags Structure
  • 参考资料

前言

本文来自于Intel vol3 Chapter 34 Enclave Access Control and Data Structures

本章介绍在 Intel SGX 体系结构中交互的主要概念、对象和数据结构格式。

一、Overview of Enclave Execution Environment

当创建一个保护区域(enclave)时,它拥有一段线性地址范围,处理器会对这个范围应用加强的访问控制。这个范围被称为ELRANGE。当保护区域进行内存访问时,会应用现有的IA32分段和分页架构。此外,ELRANGE内的线性地址必须映射到一个EPC页,否则当保护区域尝试访问该线性地址时会引发一个错误。

EPC页不需要在物理上连续。系统软件将EPC页分配给不同的保护区域。保护区域必须遵守操作系统/虚拟机监视器(OS/VMM)强制的分段和分页策略。OS/VMM管理的页表和扩展页表为保护区域的页面提供地址转换。硬件要求这些页面正确映射到EPC(任何失败都会引发异常)。

保护区域的进入必须通过特定的保护区域指令:
ENCLU[EENTER]、ENCLU[ERESUME]

保护区域的退出必须通过特定的保护区域指令或事件:
ENCLU[EEXIT]、异步保护区域退出(AEX)

当不在保护区域内尝试执行、读取或写入映射到EPC页的线性地址时,处理器会改变访问方式以保护保护区域的机密性和完整性。具体行为可能因实现而异。例如,读取保护区域页面可能会返回全1或返回密文缓存行。写入保护区域页面可能会导致写入被丢弃,或在稍后的时间引发机器检查。处理器将根据第4节和第5节中描述的方式提供这些访问的保护机制。

这些机制确保只有通过指定的保护区域指令进入保护区域的程序可以访问和操作保护区域的内容,而在保护区域之外的访问会受到处理器的保护以维护保护区域的机密性和完整性。

二、Terminology

对ELRANGE的内存访问由保护区域执行的指令发起,称为直接保护区域访问(Direct Enclave Access,Direct EA)。

由某些Intel® SGX指令叶函数(例如ECREATE,EADD,EDBGRD,EDBGWR,ELDU/ELDB,EWB,EREMOVE,EENTER和ERESUME)发起的对EPC页的内存访问称为间接保护区域访问(Indirect Enclave Access,Indirect EA)。表34-1列出了SGX1和SGX2扩展的间接EA的附加细节。

直接EA和间接EA合称为保护区域访问(Enclave Access,EA)。

任何不是保护区域访问的内存访问称为非保护区域访问(non-enclave access)。

三、Access-control Requirements

保护区域访问具有以下访问控制属性:
(1)所有内存访问必须符合分段和分页保护机制。
(2)从保护区域内部进行代码获取(code fetch)到保护区域外部的线性地址会导致 #GP(0) 异常。
(3)从保护区域内部进行影子栈加载(shadow-stack-load)或影子栈存储(shadow-stack-store)到保护区域外部的线性地址会导致 #GP(0) 异常。
(4)对EPC内存的非保护区域访问会导致未定义的行为。对于此类访问,EPC内存受到第4节和第5节中描述的保护。
(5)页面类型为PT_REG、PT_TCS和PT_TRIM的EPC页面必须在分配给保护区域时,通过ENCLS[EADD]或ENCLS[EAUG]叶函数将其映射到ELRANGE的线性地址。通过其他线性地址进行的保护区域访问会导致带有设置了PFEC.SGX位的 #PF 异常。
(6)对任何EPC页面的直接保护区域访问必须符合EPCM中该EPC页面当前定义的安全属性。这些属性可以在创建保护区域时(EADD)定义,也可以在保护区域使用SGX2指令设置时定义。未通过这些检查会导致带有设置了PFEC.SGX位的 #PF 异常。

目标页面必须属于当前正在执行的保护区域。
如果EPCM允许写访问,则可以向EPC页面写入数据。
如果EPCM允许读取访问,则可以从EPC页面读取数据。
如果EPCM允许执行访问,则可以从EPC页面获取指令。
仅当页面类型为PT_SS_FIRST或PT_SS_REST时,才允许从EPC页面进行影子栈加载和影子栈存储。
如果EPCM页面类型为PT_SS_FIRST或PT_SS_REST,则不允许进行非影子栈存储的数据写入。
目标页面不能具有受限的页面类型1(PT_SECS、PT_TCS、PT_VA或PT_TRIM)。
EPC页面不能处于BLOCKED状态。
EPC页面不能处于PENDING状态。
EPC页面不能处于MODIFIED状态。

这些属性和规则确保对保护区域的访问符合安全要求,并防止对保护区域以外的内存产生未授权的访问。

四、Segment-based Access Control

Intel SGX架构不修改逻辑处理器执行的段检查。所有来自保护模式下逻辑处理器的内存访问(包括保护区域访问)都要受到适用段寄存器的段检查。

为了确保外部实体不会以意外的方式修改保护区域的逻辑到线性地址映射,ENCLU[EENTER]和ENCLU[ERESUME]会检查CS、DS、ES和SS寄存器的段基址是否为零(如果可用,即非空)。这些寄存器具有非零的段基址值会导致 #GP(0) 异常。

在通过EENTER或ERESUME进入保护区域时,处理器会保存外部FS和GS寄存器的内容,并将这些寄存器加载为在构建时存储在TCS中的值,以便保护区域内部使用这些寄存器来访问线程本地存储。在EEXIT和AEX时,会恢复进入时的内容。在AEX中,FS和GS的值会保存在SSA帧中。在ERESUME中,FS和GS会从SSA帧中恢复。有关这些操作的详细信息可以在EENTER、ERESUME、EEXIT和AEX流程的描述中找到。

通过这些机制,SGX确保了对保护区域的访问受到段检查的限制,并提供了对FS和GS寄存器的正确保存和恢复,以便保护区域可以安全地使用这些寄存器。

五、Page-based Access Control

5.1 Access-control for Accesses that Originate from non-SGX Instructions

Intel SGX利用处理器的分页机制来为保护区域页面提供以页面为粒度的访问控制。如果某个页面属于当前正在执行的保护区域,那么该页面只能从保护区域内部访问。此外,保护区域访问必须符合第3节中描述的访问控制要求,或通过某些Intel SGX指令进行。如果不在保护区域内部,尝试执行、读取或写入映射到EPC页面的线性地址将导致处理器更改访问方式,以保护保护区域的机密性和完整性。具体行为在不同的实现之间可能会有所不同。

这意味着只有在保护区域内部,才能直接访问EPC页面。如果在保护区域外部尝试访问映射到EPC页面的线性地址,处理器将采取措施以保护保护区域的内容。这样可以防止未经授权的外部实体访问保护区域内的数据。

5.2 Memory Accesses that Split across ELRANGE

在处理器位于保护区域内部时,允许内存数据访问跨越ELRANGE(即部分访问位于ELRANGE内部,部分访问位于ELRANGE外部)。如果访问跨越ELRANGE,处理器会将访问拆分为两个子访问(一个位于ELRANGE内部,另一个位于ELRANGE外部),并对每个访问进行评估。如果代码获取访问跨越ELRANGE,由于位于ELRANGE外部的部分,将导致 #GP 异常。

这意味着当访问涉及到ELRANGE边界时,处理器会将访问分成两部分,并分别对每个部分进行处理。其中一部分位于ELRANGE内,另一部分位于ELRANGE外。对于代码获取访问,如果其中一部分位于ELRANGE外部,将引发 #GP 异常。

这种行为确保了对跨越ELRANGE的内存访问的正确处理,以维护保护区域的安全性和完整性。

5.3 Implicit vs. Explicit Accesses

从Intel SGX指令叶函数发起的内存访问可以分为显式访问和隐式访问两类。表34-1列出了Intel SGX叶函数进行的隐式和显式内存访问。

5.3.1 Explicit Accesses

对于作为Intel SGX指令叶函数的显式操作数或其关联数据结构提供的内存位置的访问称为显式访问。
显式访问始终使用逻辑地址进行。这些访问受到段、分页、扩展分页和APIC虚拟化检查的限制,并在进行访问时触发与这些检查相关的任何故障/退出。

显式访问是指直接指定的内存访问,通过作为叶函数的操作数或链接的数据结构提供。这些访问使用逻辑地址,并受到段、分页、扩展分页和APIC虚拟化检查的约束。当进行访问时,如果违反了这些检查,将触发相应的故障或退出。

显式内存访问与数据断点的交互是叶函数特定的,并在Inte vol3第39.3.4节中有详细记录。

5.3.2 Implicit Accesses

对于由处理器缓存的物理地址访问的数据结构称为隐式访问。这些地址不作为指令的操作数传递,而是通过指令的使用隐含地确定。

这些访问不会触发任何访问控制故障/退出或数据断点。表34-1列出了Intel SGX指令叶函数通过显式访问或隐式访问访问的内存对象。显式访问对象的地址通过寄存器操作数传递,表34-1的第二到第四列与隐式编码的寄存器RBX、RCX、RDX相匹配。

不同隐式访问中使用的物理地址通过不同的指令进行缓存,并具有不同的持续时间。与每个EPC页面相关联的SECS的物理地址在将页面通过ENCLS[EADD]或ENCLS[EAUG]添加到保护区域时进行缓存,或者在通过ENCLS[ELDB]或ENCLS[ELDU]将页面加载到EPC时进行缓存。当通过ENCLS[EREMOVE]或ENCLS[EWB]从EPC中删除相应页面时,此绑定将被解除。TCS和SSA页面的物理地址在最近的保护区域进入时进行缓存。从保护区域退出(ENCLU[EEXIT]或AEX)会清除此缓存。有关异步保护区域退出的详细信息,请参阅第36章。

用于隐式访问的缓存物理地址是根据逻辑(或线性)地址在进行分段、分页、EPT和APIC虚拟化检查等检查之后派生的。但是,请注意,在缓存物理地址并用于隐式访问之后,可能不会触发此类异常或虚拟机退出。

在这里插入图片描述
在这里插入图片描述

六、Intel SGX Data Structures Overview

保护区域操作通过一组数据结构进行管理。许多顶层数据结构包含子结构。这些顶层数据结构与Intel SGX指令或AEX事件可能在保护区域设置/维护中使用的参数相关。以下是顶层数据结构:

• SGX Enclave Control Structure (SECS)
• Thread Control Structure (TCS)
• State Save Area (SSA)
• Page Information (PAGEINFO)
• Security Information (SECINFO)
• Paging Crypto MetaData (PCMD)
• Enclave Signature Structure (SIGSTRUCT)
• EINIT Token Structure (EINITTOKEN)
• Report Structure (REPORT)
• Report Target Info (TARGETINFO)
• Key Request (KEYREQUEST)
• Version Array (VA)
• Enclave Page Cache Map (EPCM)
• Read Info (RDINFO)

这些顶层数据结构用于管理保护区域操作的各个方面,包括控制保护区域的执行、保存和加载状态、提供加密和安全相关信息等。

七、SGX Enclave Control Structure (SECS)

SECS数据结构需要4K字节对齐。
在这里插入图片描述

7.1 ATTRIBUTES

ATTRIBUTES数据结构由以位为单位的字段组成,用于SECS(SGX保护区域控制结构)、REPORT结构和KEYREQUEST结构中。CPUID.(EAX=12H, ECX=1)列举了ATTRIBUTES中允许设置为1的位的位图。

ATTRIBUTES数据结构是一组以位为单位的字段,用于指定保护区域行为和安全性相关的各种属性和设置。

使用输入参数EAX=12H和ECX=1的CPUID指令可以枚举ATTRIBUTES字段中允许设置为1的位的位图。这意味着CPUID指令提供了关于在ATTRIBUTES字段中可以设置为1的特定位的信息。

通过查询EAX=12H和ECX=1的CPUID指令,软件可以获取ATTRIBUTES字段中允许的位设置的位图。这使得软件能够确定CPU支持哪些属性和设置,并可以在相应的数据结构中使用。

在这里插入图片描述

7.2 SECS.MISCSELECT Field

CPUID.(EAX=12H, ECX=0):EBX[31:0]枚举了处理器在发生AEX时可以保存到SSA的MISC区域的扩展信息。通过SIGSTRUCT,保护区域编写者可以指定如何设置SECS.MISCSELECT字段。MISCSELECT的位向量选择了在生成AEX时要保存在SSA帧的MISC区域中的扩展信息。扩展信息的位向量定义列在表34-4中。

如果CPUID.(EAX=12H, ECX=0):EBX[31:0] = 0,则SECS.MISCSELECT字段必须全部为零。
SECS.MISCSELECT字段确定了SSA帧的MISC区域的大小,请参阅第9.2节。

根据CPUID.(EAX=12H, ECX=0):EBX[31:0]的值,处理器可以将不同的扩展信息保存在SSA的MISC区域中。通过设置SECS.MISCSELECT字段的位向量,保护区域编写者可以选择要保存的扩展信息。根据所选的位向量,MISC区域的大小也会相应确定。

如果CPUID.(EAX=12H, ECX=0):EBX[31:0] = 0,则表示处理器不支持保存任何扩展信息,并且SECS.MISCSELECT字段必须全部为零。

在这里插入图片描述

7.3 SECS.CET_ATTRIBUTES Field

SECS.CET_ATTRIBUTES字段可由保护区域编写者用于在保护区域中启用各种CET(Control-flow Enforcement Technology)属性。当枚举CPUID.(EAX=12, ECX=1):EAX[6]为1时,此字段存在。当CPUID.(EAX=7, ECX=0):ECX.CET_SS为1时,定义了位1:0,当CPUID.(EAX=7, ECX=0):EDX.CET_IBT为1时,定义了位5:2。

CET是一项用于增强控制流程的技术,可以帮助防止恶意软件利用控制流程攻击。SECS.CET_ATTRIBUTES字段允许保护区域编写者通过设置相应的位来启用CET属性。具体而言,当CPU支持CET并且相关的CPUID位已设置时,可以使用SECS.CET_ATTRIBUTES字段来启用特定的CET属性。

当CPU支持CET且CPUID.(EAX=7, ECX=0):ECX.CET_SS位设置为1时,SECS.CET_ATTRIBUTES字段的位1:0定义了特定的CET属性。同样,当CPU支持CET且CPUID.(EAX=7, ECX=0):EDX.CET_IBT位设置为1时,SECS.CET_ATTRIBUTES字段的位5:2定义了其他的CET属性。

保护区域编写者可以根据CPU支持的CET属性和相关的CPUID位设置,通过设置SECS.CET_ATTRIBUTES字段来启用相应的CET属性。

在这里插入图片描述

八、Thread Control Structure (TCS)

保护区中的每个执行线程都与一个线程控制结构相关联。它需要4K字节对齐。
在这里插入图片描述

8.1 TCS.FLAGS

在这里插入图片描述
如果设置了该选项,允许在此 TCS 上执行保护区时启用和激活调试功能(单步执行、断点等)。硬件在执行 EADD 指令时会清除该位。如果保护区的 ATTRIBUTES.DEBUG 被设置,调试器可能会稍后修改该选项。

8.2 State Save Area Offset (OSSA)

OSSA指向一个状态保存区(State Save Area,SSA)帧的堆栈(参见第9节),用于在保护区执行过程中发生中断或异常时保存处理器状态。

8.3 Current State Save Area Frame (CSSA)

CSSA是当前SSA帧的索引,处理器根据它确定在发生中断或异常时保存处理器状态的位置,该中断或异常发生在保护区执行过程中。CSSA是对由OSSA寻址的帧数组的索引。在AEX(Asynchronous Enclave Exit)操作时,CSSA会增加;在ERESUME(Enclave Resume)操作时,CSSA会减少。

8.4 Number of State Save Area Frames (NSSA)

NSSA指定了为该TCS可用的SSA帧的数量。在进入保护区(EENTER)时,至少必须有一个可用的SSA帧,否则EENTER操作将失败。

九、State Save Area (SSA) Frame

当在保护区中运行时发生AEX(异步保护区退出 - asynchronous enclave exit)时,体系结构状态将保存在线程当前的SSA帧中,该帧由TCS.CSSA指向。SSA帧必须按页对齐,并包含以下区域:
(1)XSAVE区域从SSA帧的基地址开始,该区域以XSAVE/FXSAVE兼容的非压缩格式存储扩展特征寄存器状态。
(2)Pad区域:软件可以选择在XSAVE区域和MISC区域之间维护一个填充区域。填充区域的大小由MISC区域和GPRSGX区域的大小决定。
(3)GPRSGX区域。GPRSGX区域是SSA帧的最后一个区域(参见表格34-8)。它用于保存处理器的通用寄存器(RAX … R15)、RIP、外部RSP和RBP、RFLAGS以及AEX信息。
(4)MISC区域(如果CPUID.EAX=12H,ECX=0且EBX[31:0] != 0)。MISC区域与GRPSGX区域相邻,可能包含在发生AEX时需要保存的零个或多个扩展信息组件。如果MISC区域不存在,则在GPRSGX和XSAVE区域之间的区域是软件可用的填充区域。如果MISC区域存在,则在MISC和XSAVE区域之间的区域是软件可用的填充区域。请参考第9.2节中的附加细节。

在这里插入图片描述
在这里插入图片描述

9.1 GPRSGX Region

GPRSGX区域的布局如表34-9所示:
在这里插入图片描述

9.1.1 EXITINFO

EXITINFO包含用于向保护区内部的软件报告退出原因的信息。它是一个4字节的字段,格式如表格34-10所示。VALID位仅在报告在保护区内部发生的异常情况时设置。请参阅表格34-11,了解在保护区内部报告的异常情况。如果异常情况不是在保护区内部报告的异常,则VECTOR和EXIT_TYPE被清除。当在保护区内部执行时,如果同时发生更高优先级的事件(如SMI)和挂起的调试异常,则更高优先级的事件优先。例如,在SMI事件中,SSA退出信息为零。调试异常将在从SMI返回时被传递。在这种情况下,EXITINFO字段将不包含调试异常的信息。
在这里插入图片描述

9.1.2 VECTOR Field Definition

表格34-11包含VECTOR字段。该字段包含在保护区内部发生的某些异常的信息。这些向量值与进入常规异常处理程序时使用的值相同。未显示的所有值在保护区内部不会报告。
在这里插入图片描述

9.2 MISC Region

MISC区域的布局如表格34-12所示。处理器在MISC区域中支持的组件数量与CPUID.(EAX=12H, ECX=0):EBX[31:0]位设置为1的位数对应。CPUID.(EAX=12H, ECX=0):EBX[31:0]中的每个置位位都有一个对应组件的定义大小,如表格34-12所示。保护区编写者需要执行以下操作:
(1)决定保护区将支持哪些MISC区域组件。
(2)分配足够大的SSA帧来容纳上述选择的组件。
(3)指示每个保护区构建软件在SECS.MISCSELECT中设置适当的位。
第一个组件EXINFO紧接着GPRSGX区域开始。MISC区域中的其他组件按照升序逐渐增长,朝向XSAVE区域。
MISC区域的大小计算如下:
(4)如果CPUID.(EAX=12H, ECX=0):EBX[31:0] = 0,则不支持MISC区域。
(5)如果CPUID.(EAX=12H, ECX=0):EBX[31:0] != 0,则MISC区域的大小由SECS.MISCSELECT中最高位设置和对应位的MISC组件大小之和确定。当前定义的MISC组件的偏移和大小信息列在表格34-12中。例如,如果SECS.MISCSELECT中设置的最高位是位0,则MISC区域的偏移是OFFSET(GPRSGX)-16,大小为16字节。
(6)处理器只在SECS.MISCSELECT[i]为1时,才在MISC区域中保存MISC组件i。
在这里插入图片描述

9.2.1 EXINFO Structure

表34-13包含提供附加信息的EXINFO结构的布局。
在这里插入图片描述

9.2.2 Page Fault Error Code

表格34-14包含可能在EXINFO.ERRCD中报告的页面故障错误代码。
在这里插入图片描述
注:
在保护区模式下报告U/S=0的页面故障不会在EXINFO中报告。

十、CET State Save Area Frame

CET(Control-flow Enforcement Technology)状态保存区由一组CET状态保存帧组成。CET状态保存帧的数量等于TCS.NSSA。当前的CET SSA帧由TCS.CSSA指示。CET状态保存区的偏移由TCS.OCETSSA指定。
在这里插入图片描述

十一、Page Information (PAGEINFO)

PAGEINFO是一个体系结构数据结构,用作EPC管理指令的参数。它需要32字节对齐。
在这里插入图片描述

十二、Security Information (SECINFO)

SECINFO数据结构保存了关于保护区页面的元数据信息。
在这里插入图片描述

12.1 SECINFO.FLAGS

SECINFO.FLAGS是一组字段,用于描述保护区页面的属性。
在这里插入图片描述

12.2 PAGE_TYPE Field Definition

SECINFO标志和EPC标志包含指示页面类型的位。
在这里插入图片描述

十三、Paging Crypto MetaData (PCMD)

PCMD结构用于跟踪与分页出的页面相关的加密元数据。结合PAGEINFO,它提供了处理器验证、解密和重新加载分页出的EPC页面所需的足够信息。PCMD结构的大小(128字节)是根据体系结构规定的。EWB计算消息认证码(MAC)值并写入PCMD。ELDB/U读取字段并检查MAC。
PCMD的格式如下:
在这里插入图片描述

十四、Enclave Signature Structure (SIGSTRUCT)

SIGSTRUCT是由保护区开发者创建和签名的结构,包含有关保护区的信息。SIGSTRUCT由EINIT叶函数处理,以验证保护区是否被正确构建。

SIGSTRUCT包括ENCLAVEHASH作为SHA256摘要,其定义在FIPS PUB 180-4中。摘要是长度为32的字节字符串,其中的8个HASH双字以小端序存储。

SIGSTRUCT包括四个3072位整数(MODULUS,SIGNATURE,Q1,Q2)。每个整数都表示为长度为384的字节字符串,最高有效字节位于位置“offset + 383”,最低有效字节位于位置“offset”。

(3072位整数)SIGNATURE应该是一个RSA签名,其中:a)RSA模数(MODULUS)是一个3072位整数;b)公共指数设置为3;c)签名过程使用EMSA-PKCS1-v1.5格式,其中的“DigestInfo”值按照PKCS#1 v2.1/RFC 3447中规定的DER编码方式进行编码。

3072位整数Q1和Q2的定义如下:
q1 = floor(Signature^2 / Modulus);
q2 = floor((Signature^3 - q1 * Signature * Modulus) / Modulus);

SIGSTRUCT必须按页对齐。

在表格34-21的第5列中,'Y’表示该字段应该包含在开发者生成的签名中。
在这里插入图片描述
在这里插入图片描述

十五、EINIT Token Structure (EINITTOKEN)

EINIT令牌(token)由EINIT用于验证保护区是否被允许启动。EINIT令牌由持有EINITTOKEN密钥(启动保护区)的保护区生成。
EINIT令牌必须按512字节对齐。
在这里插入图片描述

十六、Report (REPORT)

REPORT结构是EREPORT指令的输出,必须按512字节对齐。
在这里插入图片描述在这里插入图片描述

16.1 REPORTDATA

REPORTDATA是一个64字节的数据结构,由保护区提供并包含在报告中。它可以用于安全地将信息从一个保护区传递到目标保护区。

十七、Report Target Info (TARGETINFO)

这个结构是EREPORT叶函数的输入参数。TARGETINFO的地址在RBX中作为有效地址指定。它用于标识目标保护区,该保护区可以对EREPORT返回的REPORT结构进行加密验证。TARGETINFO必须按512字节对齐。
在这里插入图片描述

十八、Key Request (KEYREQUEST)

这个结构是EGETKEY叶函数的输入参数。它以RBX中的有效地址的形式传递,并且必须按512字节对齐。它用于选择适当的密钥以及在密钥派生过程中所需的任何附加参数。
在这里插入图片描述

18.1 KEY REQUEST KeyNames

在这里插入图片描述

18.2 Key Request Policy Structure

在这里插入图片描述

十九、Version Array (VA)

为了安全地存储被分页出的EPC页面的版本,Intel SGX定义了一种特殊的EPC页面类型,称为版本数组(Version Array,VA)。每个VA页面包含512个插槽,每个插槽可以存储一个8字节的版本号,用于表示从EPC中分页出的页面的版本。当一个EPC页面被分页出时,软件会选择一个空的VA页面插槽,将被分页出的页面的唯一版本号存储在该插槽中。当EPC页面重新加载时,必须存在一个VA插槽来保存该页面的版本号。如果页面成功重新加载,VA插槽中的版本号将被清除。

VA页面可以像其他EPC页面一样被分页出。在分页出VA页面时,必须使用另一个VA页面中的版本插槽来保存被分页出的VA页面的版本号。版本数组页面必须按4K字节对齐。
在这里插入图片描述

二十、Enclave Page Cache Map (EPCM)

EPCM(Enclave Page Cache Map)是处理器用于跟踪EPC内容的安全结构。EPCM对于当前加载到EPC中的每个页面都恰好保存一个条目。EPCM对软件不可访问,而且EPCM字段的布局是特定于实现的。
在这里插入图片描述

二十一、Read Info (RDINFO)

RDINFO结构包含有关EPC页面的状态信息。它必须按32字节对齐。
在这里插入图片描述

21.1 RDINFO Status Structure

在这里插入图片描述

21.2 RDINFO Flags Structure

在这里插入图片描述

参考资料

Intel vol3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/228279.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

原码,补码,反码(极简版)

原码补码反码 都有符号位,0表示正数,1表示负数 正数 正数的原码,补码,反码都相同 负数 负数的原码,最高位是1,其余的用正常二进制表示 负数的反码,对原码进行符号位不变,其余位…

网站高性能架构设计——web前端与池化

从公众号转载,关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、高性能浏览器访问 1.减少HTTP请求 HTTP协议是无状态的应用层协议,也就是说每次HTTP请求都需要建立通信链路、进行数据传输&#xf…

vue-baidu-map实现在地图上选择范围并解决相关问题

vue-baidu-map实现在地图上选择范围并解决相关问题 实现地图上选择不规则范围实现功能遇到的问题1、覆盖物多边形怎么才能盖住覆盖物点2、遇到其他问题 实现地图上选择不规则范围 这个功能比较简单,只需要使用vue-baidu-map插件的覆盖物多边形功能就行了。直接看文…

重生奇迹mu卓越哪里掉的最多

项链篇 [火之项链] 1.地下城:(地狱猎犬怪,骷髅战士,地狱蜘蛛,死灵巫师,毒牛怪,暗黑骑士) 2.失落之塔:(鬼魂,剧毒鬼魂) 3.亚特兰蒂斯:(小巴哈姆特,死亡美人鱼,蓝翼海怪) [雷之项链] 1.地下城:(毒牛怪,暗黑骑士,魔鬼戈登) 2.失落之塔:(鬼魂,剧毒鬼魂,诅咒巫师,牛魔王,恶魔…

二叉树oj题总结

1.检查两颗树是否相同 https://leetcode.cn/problems/same-tree/ 分成子问题和结束条件 ,这里用前序的思想解题(先判断根,再左右子树),不然会很浪费时间。假如左右相等,最后根不同,白白比较了 …

员工持股平台模式有哪几种?

员工持股平台模式 目前在现有的市场环境下持股平台的模式主要有公司型的持股平台以及有限合伙企业的持股平台。 (一)公司型员工持股平台 设立公司型的员工持股平台的唯一目的是为了让平台公司受让母公司的股权,从而实现员工间接持有母公司股权…

自动定量包装机市场研究: 2023年行业发展潜力分析

中国包装机械业取得了快速发展,但也出现了一些低水平重复建设现象。据有关资料显示,与工业发达国家相比,中国食品和包装机械产品品种缺乏25%-30%,技术水平落后15-25年。我国包装专用设备制造行业规模以上企业有319家,主…

宁盾统一身份中台助力某集团公司实现统一身份认证和管理(如泛微OA、微软AD)

某集团公司是一家以钢铁为主业,涉足互联网金融、文化健康、智慧城市、现代物流等多领域的大型现代化企业集团。创业发展已有三十余年,拥有员工人数超万人,为了提升管理效率,同时实现国产化创新和数字化转型,公司采用了…

[MySQL] MySQL复合查询(多表查询、子查询)

前面我们学习了MySQL简单的单表查询。但是我们发现,在很多情况下单表查询并不能很好的满足我们的查询需求。本篇文章会重点讲解MySQL中的多表查询、子查询和一些复杂查询。希望本篇文章会对你有所帮助。 文章目录 一、基本查询回顾 二、多表查询 2、1 笛卡尔积 2、2…

JVM 命令行监控及诊断工具

面试题 你使用过Java虚拟机性能监控和故障处理工具吗?(美图) 怎么打出线程栈信息。(字节跳动) JVM诊断调优工具用过哪些? (京东) 怎么获取 Java 程序使用的内存?堆使用…

Linux学习教程(第十四章 Linux系统服务管理)一

第十四章 Linux系统服务管理(一) 什么是系统服务?服务是在后台运行的应用程序,并且可以提供一些本地系统或网络的功能。 那么,Linux 中常见的服务有那些,这些服务怎么分类,服务如何启动&#x…

diffusers pipeline拆解:理解pipelines、models和schedulers

diffusers pipeline拆解:理解pipelines、models和schedulers 翻译自:https://huggingface.co/docs/diffusers/using-diffusers/write_own_pipeline v0.24.0 diffusers 设计初衷就是作为一个简单且易用的工具包,来帮助你在自己的使用场景中构建…

四十、Saga模式

目录 一、定义 二、流程 三、优点 四、缺点 五、四种模式的对比 一、定义 Saga模式是一种用于处理复杂异步操作流的模式,通常用于React/Redux的应用程序中。在这种模式中,业务逻辑被分成多个离散步骤,每个步骤都是一个Generator函数&…

AUTOSAR CP Port Driver简介

Port Driver 1 背景2 基于 EB 及 TC39X 配置3 Port API 使用1 背景 Port driver 在 AUTOSAR 中是一个比较冷门的模块,基本上在 MCAL 层级,关注的人也少,他由不像其他模块那样通用型比较强,Port 在每种内核的 MCU 的配置都有区别,甚至有些芯片直接没有 Port 模块,使用其他方…

企业级高级美颜美妆SDK解决方案

人们对于美的追求已经不仅仅局限于现实世界,更延伸到了虚拟世界。为了满足这一需求,美摄科技全新开发了一款高级美颜美妆SDK,为企业提供了一站式的美颜美妆解决方案。 这款全新的美颜美妆SDK,是我们对美颜技术的一次全面升级。它…

Java实现布隆过滤器

一、概述 布隆过滤器本质上是一个很长的二进制数组,主要用来判断一个数据存不存在数组里,如果存在就用1表示,不存在用0表示,它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 …

教你pycharm运行Django第一个项目

文章目录 前言搭建Django:1.新建Django项目:2.为Django项目指定远程中创建的虚拟环境下的python解释器:3.配置ubuntu的端口转发(添加端口号为1234的端口):关于Python技术储备一、Python所有方向的学习路线二、Python基…

Nacos源码解读07——集群数据同步

Distro协议背景 Distro 协议是 Nacos 社区自研的⼀种 AP 分布式协议,是面向临时实例设计的⼀种分布式协议, 其保证了在某些 Nacos 节点宕机后,整个临时实例处理系统依旧可以正常工作。作为⼀种有状态 的中间件应用的内嵌协议,Dis…

【软件推荐】文本转语音,语音转wav,导入ue5

文字转语音 在线免费文字转语音 - TTSMaker官网 | 马克配音https://ttsmaker.cn/ 文件转换器 语音转wav Convertio — 文件转换器https://convertio.co/zh/

[英语学习][10][Word Power Made Easy]的精读与翻译优化

[序言] 下面这段话, 译者翻译没有太大问题, 就是某些单词上, 跟他理解得不一样. 另外还有一个关键的定语从句, 我认为译者理解不到位, 导致翻译不够通顺. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家这次能学到东西, 同时加入我的社区讨…