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 参数指向的缓冲区的大小。 如果 ReportNULLBufferSize 必须为零。 如果 Report 不是 NULL,并且报表的大小大于此值,则返回错误。

[out] OutputSize

指向接收报表大小的变量的指针。

返回值

如果此函数成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

EnclaveGetAttestationReport 必须从 enclave 内部调用。

ENCLAVE_TYPE_SGX类型的 enclave 当前不支持 EnclaveGetAttestationReport 对于 VBS enclave,EnclaveGetAttestationReport 获取的报告使用特定于 VBS 的密钥进行签名。

enclave 证明报告包含加载到 enclave 中的所有代码的标识,以及控制 enclave 运行方式的策略,例如 enclave 是否在调试器访问处于活动状态的情况下运行。 报告还包含 enclave 生成的少量信息,用于密钥交换协议。

EnclaveGetAttestationReport 生成的报表包含以下项:

enclave 证明报告提供特定代码正在运行的 enclave 证明。 如果验证实体也获得证明主机系统正在运行且 VBS 处于打开状态,该实体可以将该证明与 enclave 证明报告结合使用,以验证是否已加载使用特定代码填充的特定 enclave。

要求

   
最低受支持的客户端 Windows 10版本 1709 [仅限桌面应用]
最低受支持的服务器 Windows Server 2016 [仅限桌面应用]
目标平台 Windows
标头 winenclaveapi.h
Library Vertdll.lib
DLL Vertdll.dll

另请参阅

Enclave 函数

EnclaveVerifyAttestationReport

VBS_ENCLAVE_REPORT

VBS_ENCLAVE_REPORT_PKG_HEADER

VBS_ENCLAVE_REPORT_VARDATA_HEADER

VBS enclave 中可用的 Vertdll API