EnclaveGetAttestationReport 函数 (winenclaveapi.h)
获取一个 enclave 证明报告,该报表描述当前 enclave,并由负责 enclave 类型的机构签名。
语法
HRESULT EnclaveGetAttestationReport(
[in, optional] const UINT8 [ENCLAVE_REPORT_DATA_LENGTH] EnclaveData,
[out] PVOID Report,
[in] UINT32 BufferSize,
[out] UINT32 *OutputSize
);
参数
[in, optional] EnclaveData
指向 enclave 要插入其签名报表的数据的 64 字节缓冲区的指针。 例如,此缓冲区可以包含信赖方提供的 256 位 nonce,后跟 enclave 想要传达的其他数据的 SHA-256 哈希,例如与 enclave 拥有的私钥对应的公钥。 如果此参数为 NULL
,则报表的相应字段用零填充。
[out] Report
指向应在其中放置报表的缓冲区的指针。 此报告可以存储在 enclave 的地址范围或主机进程的地址空间中。 指定 NULL
以指示仅应计算输出所需的缓冲区大小,而不应计算报表本身。
[in] BufferSize
Report 参数指向的缓冲区的大小。 如果 Report 为 NULL
, BufferSize 必须为零。 如果 Report 不是 NULL
,并且报表的大小大于此值,则返回错误。
[out] OutputSize
指向接收报表大小的变量的指针。
返回值
如果此函数成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。
注解
EnclaveGetAttestationReport 必须从 enclave 内部调用。
ENCLAVE_TYPE_SGX类型的 enclave 当前不支持 EnclaveGetAttestationReport。 对于 VBS enclave,EnclaveGetAttestationReport 获取的报告使用特定于 VBS 的密钥进行签名。
enclave 证明报告包含加载到 enclave 中的所有代码的标识,以及控制 enclave 运行方式的策略,例如 enclave 是否在调试器访问处于活动状态的情况下运行。 报告还包含 enclave 生成的少量信息,用于密钥交换协议。
EnclaveGetAttestationReport 生成的报表包含以下项:
- VBS_ENCLAVE_REPORT_PKG_HEADER结构
- 由以下项组成的已签名语句:
- VBS_ENCLAVE_REPORT结构
- 零个或多个包含以下项的变量数据块:
- 签名
enclave 证明报告提供特定代码正在运行的 enclave 证明。 如果验证实体也获得证明主机系统正在运行且 VBS 处于打开状态,该实体可以将该证明与 enclave 证明报告结合使用,以验证是否已加载使用特定代码填充的特定 enclave。
要求
最低受支持的客户端 | Windows 10版本 1709 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2016 [仅限桌面应用] |
目标平台 | Windows |
标头 | winenclaveapi.h |
Library | Vertdll.lib |
DLL | Vertdll.dll |
另请参阅
EnclaveVerifyAttestationReport