如何证明某些数据是在 Enclave(Intel SGX)内部计算(或生成)的?
How to prove that certain data is calculated(or generated) inside Enclave(Intel SGX)?
如何证明某些数据是在Enclave(Intel SGX)内部计算(或生成)的?
我尝试在飞地内生成非对称密钥对(私钥可能对外部不可见),并且
然后用证据公开 public 密钥(我猜引用或远程证明相关的东西)。
我知道远程证明是如何进行的,但是,我无法想出应用远程证明来验证 enclave 生成的数据。
英特尔 SGX 是否可能出现这种情况?
您可以通过将 public 密钥放在报告证明期间生成的报价单的 report_data
字段中来证明其来源。
_quote_t.report_data
可用于证明任意数据:
The 64 byte data buffer is free form data and you can supply any information in that buffer that you would like to have identified as being in the possession and protection envelope of the enclave when the report/quote was generated. You can thus use this buffer to convey whatever information you would like to a verifying party. (Source)
可以通过跟踪以下结构找到report_data
字段:
typedef struct _ra_msg3_t {
sgx_mac_t mac
sgx_ec256_public_t g_a;
sgx_ps_sec_prop_desc_t ps_sec_prop;
uint8_t quote[]; // <- Here!
} sgx_ra_msg3_t;
typedef struct _quote_t
{
uint16_t version;
uint16_t sign_type;
sgx_epid_group_id_t epid_group_id;
sgx_isv_svn_t qe_svn;
sgx_isv_svn_t pce_svn;
uint32_t xeid;
sgx_basename_t basename;
sgx_report_body_t report_body; // <- Here!
uint32_t signature_len;
uint8_t signature[];
} sgx_quote_t;
Quote 是远程认证协议 Msg3(客户端到服务器)的一部分。您可以在 this official Code Sample and in the intel/sgx-ra-sample RA 示例中查看 Msg3 创建的详细信息。
在后者中,您可以了解如何使用 sgx_create_report
:
生成报告
sgx_status_t get_report(sgx_report_t *report, sgx_target_info_t *target_info)
{
#ifdef SGX_HW_SIM
return sgx_create_report(NULL, NULL, report);
#else
return sgx_create_report(target_info, NULL, report);
#endif
}
在这两种情况下,second argument sgx_report_data_t *report_data
都是 NULL
并且可以替换为指向任意输入的指针。这是您要放置 public 密钥或任何其他数据的地方。
如何证明某些数据是在Enclave(Intel SGX)内部计算(或生成)的?
我尝试在飞地内生成非对称密钥对(私钥可能对外部不可见),并且
然后用证据公开 public 密钥(我猜引用或远程证明相关的东西)。
我知道远程证明是如何进行的,但是,我无法想出应用远程证明来验证 enclave 生成的数据。
英特尔 SGX 是否可能出现这种情况?
您可以通过将 public 密钥放在报告证明期间生成的报价单的 report_data
字段中来证明其来源。
_quote_t.report_data
可用于证明任意数据:
The 64 byte data buffer is free form data and you can supply any information in that buffer that you would like to have identified as being in the possession and protection envelope of the enclave when the report/quote was generated. You can thus use this buffer to convey whatever information you would like to a verifying party. (Source)
可以通过跟踪以下结构找到report_data
字段:
typedef struct _ra_msg3_t {
sgx_mac_t mac
sgx_ec256_public_t g_a;
sgx_ps_sec_prop_desc_t ps_sec_prop;
uint8_t quote[]; // <- Here!
} sgx_ra_msg3_t;
typedef struct _quote_t
{
uint16_t version;
uint16_t sign_type;
sgx_epid_group_id_t epid_group_id;
sgx_isv_svn_t qe_svn;
sgx_isv_svn_t pce_svn;
uint32_t xeid;
sgx_basename_t basename;
sgx_report_body_t report_body; // <- Here!
uint32_t signature_len;
uint8_t signature[];
} sgx_quote_t;
Quote 是远程认证协议 Msg3(客户端到服务器)的一部分。您可以在 this official Code Sample and in the intel/sgx-ra-sample RA 示例中查看 Msg3 创建的详细信息。
在后者中,您可以了解如何使用 sgx_create_report
:
sgx_status_t get_report(sgx_report_t *report, sgx_target_info_t *target_info)
{
#ifdef SGX_HW_SIM
return sgx_create_report(NULL, NULL, report);
#else
return sgx_create_report(target_info, NULL, report);
#endif
}
在这两种情况下,second argument sgx_report_data_t *report_data
都是 NULL
并且可以替换为指向任意输入的指针。这是您要放置 public 密钥或任何其他数据的地方。