SGX结构体

总的EPC内部布局长这样。后续结构体描述的资料来源于在SGX手册。

目录

 

SECS

1. ATTRIBUTES

2. MISCSELECT

TCS

SSA

PAGEINFO

SIGSTRUCT

EINITTOKEN

REPORT

TARGETINFO

KEYREQUEST

EPCM


SECS

/*SECS data structure*/
typedef struct _secs_t
{
    uint64_t                    size;           /* (  0) Size of the enclave in bytes */
    PADDED_POINTER(void,        base);          /* (  8) Base address of enclave */
    uint32_t                    ssa_frame_size; /* ( 16) size of 1 SSA frame in pages */
    sgx_misc_select_t           misc_select;    /* ( 20) Which fields defined in SSA.MISC */
#define SECS_RESERVED1_LENGTH 24
    uint8_t                     reserved1[SECS_RESERVED1_LENGTH];  /* ( 24) reserved */
    sgx_attributes_t            attributes;     /* ( 48) ATTRIBUTES Flags Field */
    sgx_measurement_t           mr_enclave;     /* ( 64) Integrity Reg 0 - Enclave measurement */
#define SECS_RESERVED2_LENGTH 32
    uint8_t                     reserved2[SECS_RESERVED2_LENGTH];  /* ( 96) reserved */
    sgx_measurement_t           mr_signer;      /* (128) Integrity Reg 1 - Enclave signing key */
#define SECS_RESERVED3_LENGTH 32
    uint8_t                     reserved3[SECS_RESERVED3_LENGTH];  /* (160) reserved */
    sgx_config_id_t             config_id;      /* (192) CONFIGID */
    sgx_prod_id_t               isv_prod_id;    /* (256) product ID of enclave */
    sgx_isv_svn_t               isv_svn;        /* (258) Security Version of the Enclave */
    sgx_config_svn_t            config_svn;     /* (260) CONFIGSVN */
#define SECS_RESERVED4_LENGTH 3834
    uint8_t                     reserved4[SECS_RESERVED4_LENGTH];/* (262) reserved */
} secs_t;

SGX Enclave Control Structure,每个Enclave进程都具有一个该结构体,用于保存关于该进程的信息,如Enclave的线性基址(对于整个程序而言)和大小。保存在EPC中该Enclave的内存空间,只能由CPU访问。部分成员变量如下:

1. ATTRIBUTES

通过每个bit设置属性,在SECS、CPUID枚举、REPORT和KEYREQUEST 结构体中可能会用到。

XFRM:设置处理器的扩展状态。在AEX时会被保存

2. MISCSELECT

设当AEX发生时,设置在SSA的MISC域中保存哪些扩展信息,目前可用的扩展信息是:在Enclave内部能够报告page fault和general protection异常。

TCS

typedef struct _tcs_t
{
    uint64_t            reserved0;       /* (0) */
    uint64_t            flags;           /* (8)bit 0: DBGOPTION */
    uint64_t            ossa;            /* (16)State Save Area */
    uint32_t            cssa;            /* (24)Current SSA slot */
    uint32_t            nssa;            /* (28)Number of SSA slots */
    uint64_t            oentry;          /* (32)Offset in enclave to which control is transferred on EENTER if enclave INACTIVE state */
    uint64_t            reserved1;       /* (40) */
    uint64_t            ofs_base;        /* (48)When added to the base address of the enclave, produces the base address FS segment inside the enclave */
    uint64_t            ogs_base;        /* (56)When added to the base address of the enclave, produces the base address GS segment inside the enclave */
    uint32_t            ofs_limit;       /* (64)Size to become the new FS limit in 32-bit mode */
    uint32_t            ogs_limit;       /* (68)Size to become the new GS limit in 32-bit mode */
#define TCS_RESERVED_LENGTH 4024
    uint8_t             reserved[TCS_RESERVED_LENGTH];  /* (72) */
}tcs_t;

Thread Control Structure,每个Enclave可以拥有很多个Worker Thread,每个线程都对应一个TCS,用于描述这个线程的信息,如线程执行flag、SSA的位置、当前使用的SSA(若干个SSA组成一个栈)。存储在EPC中,只能由处理器访问。部分成员结构体如下

FLAGS:描述线程执行的Flag,目前只有DBGOPTIN一项,描述是否开启调试特征。

OSSA:SSA栈相对Enclave内存空间的基址。

CSSA:目前使用的SSA

NSSA:可用的SSA数量

SSA

 

 

STATE SAVE AREA。AEX(异步Enclave退出,由于中断退出Enclave)时,Enclave线程所需要保存的环境状态,如处理器通用寄存器,杂项属性域。保存在Enclave内存空间。

GPRSGX:General Purpose Register。从RAX到R15、URSP、URBP、EXITINFO等等。其中EXITINFO:描述导致AEX的异常原因。如果是因为Enclave内部报告的异常,包括异常类型号(如除零错误、断点,其中#GP、#PF需要开启SECS.MISCSELECT.EXINFO = 1)、异常是源自硬件的还是软件的等。

MISC:根据CPUID.(EAX=12H, ECX=0):EBX[31:0]查看硬件支持的杂项属性和SECS.MISCSELECT所开启的杂项属性确定MISC内容,目前可以包含一个EXITINFO结构体。EXITINFO结构体具体存储EXITINFO结构体,包括Page Fault地址、错误代码ERRCD。ERRCD

PAGEINFO

PAGE INFORMATION。作为EPC管理指令的参数来引用某个页,内容包括Enclave线性地址、页地址、指向SECINFO/PCMD的指针、指向SECS的指针。

SECINFO:SECURITY INFORMATION。存储Enclave Page的属性,包括FLAGS和保留空间。FLAGS包括访问权限(读/写/执行)和类型(SECS,TCS,普通Page或VA)等。

PCMD:PAGING CRYPTO METADATA。Page换出时(由于EPC大小有限,处理器可以将页加密存放到不安全内存中)EWB指令计算MAC值存放在PCMD的成员结构体MAC中。有了PCMD加上PAGEINFO,处理器有足够信息来验证、解密、加载之前换出的页(ELDB/U加载该页时候会检查MAC)。该结构体此外还包括SECINFO、ENCLAVEID。

SIGSTRUCT

ENCLAVE SIGNATURE STRUCTURE。每个Enclave具有一个SIGSTRUCT,包括MODULUS、SIGNATURE、Q1、Q2,其中签名包含厂家编号、Build日期、版本号、产品标识符等属性。

MRENCLAVE:每个enclave都由其属性以及页面的位置、内容和保护的哈希值(MRENCLAVE)表示,具有相同哈希的两个enclave是相同的。用于检查enclave的完整性,MRENCLAVE使用SHA-256哈希函数生成。

MRSIGNER:每个Enclave由其管理者进行签名并保存在MRSIGNER,MRSIGNER此外包含管理者公钥的哈希值,MRSIGNER使用SHA-256哈希函数生成。MRSIGNER可以用于后续的签名检查,确保Enclave未被修改。

EINITTOKEN

EINIT TOKEN STRUCTURE。EINIT指令使用EINITTOKEN结构来检查是否允许执行enclave。它包含enclave的属性、MRENCLAVE、MRSIGNER等,它使用启动密钥执行的HMAC进行身份验证。

REPORT

EREPORT指令的输出,包含CPUSVN、MISCSELECT、MRENCLAVE、MRSIGNER、ISVPRODID、ISVSVN、REPORTDATA等

TARGETINFO

EREPORT指令的输入参数

KEYREQUEST

KEY REQUEST。EGETKEY指令的输入参数

EPCM

ENCLAVE PAGE CACHE MAP,由处理器使用的用于跟踪EPC内容,每一个Entry对应一个EPC Page。软件不可访问。每个Entry会说明EPC Page的RWX权限、Page类型、Page所属的Enclave的SECS、Page的线性地址、锁定状态、挂起状态、修改状态。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值