SGX 能否证明两个 enclave 在不同的计算机上?

Can SGX prove two enclaves are on different computers?

想象一个云提供商向客户租用两个 VM。假设客户想要检查两个虚拟机是否 运行 在不同的物理计算机上,尽管云提供商可能试图欺骗客户。

两台机器都提供 SGX 并启用了 TPM。

我的第一个想法是使用远程认证并比较所使用的密钥,因为每台物理机器在出厂时都会安装一个唯一的认可密钥。但是,SGX 文档明确指出远程证明使用组密钥来保护隐私,因此客户将无法分辨两个远程证明是否由不同的硬件签名。

假设我已经在每台机器上建立了一个安全区域。

是否可以从 enclave 中读取 EK public 密钥(或其散列),将其放入报价的数据部分,然后发送远程证明?然后远程证明将证明目标机器 运行 给定的代码,并且由于代码读取 returns EK 我们也有 EK。

related question 表明仅使用 TPM 是行不通的(实际上行不通),但让我想知道我们是否可以使用 SGX 来完成这项工作。

所以我的问题是:

1) 以上真的有用吗?

2) 如果是,你能帮我找到令人信服的文件来确认这是可能的吗?

3) 如果没有,我还能做些什么吗?

首先,我们不要混淆这里的术语。 SGX 远程证明与基于 TPM 的证明(使用 Quote 命令)不是一回事;所以我不确定您认为 TPM 的 EK 是如何进入其中的。但我对 SGX 了解不多,所以坚持使用 TPM:

如果您可以获得用两个证明密钥签名的两个引号,并且您持有由 TPM 制造商签名的证书,这本身就证明您正在与两台不同的机器通信。也就是说,您可以在软件中伪造 TPM,但不能伪造证书。如果你没有AK证书,你可以从EK证书中取出public密钥,让TPM证明它可以访问相应的私钥,例如MakeCredential后跟[=​​12 =]. TPM 制造商确实提供 EK 证书,至少我看过的是这样。

您还可以使用 SGX 的密钥派生机制来检查您是否在同一主机上执行,只要您对使用的 enclave 有一定的控制权。

SGX 的密钥派生确定性地向绑定到飞地 ID 或签名者 ID 的飞地提供加密密钥。 这意味着使用相同签名者密钥签名的两个飞地可以获得相同的密钥,前提是它们在同一平台(主机)上执行。

注意:这当然只有在密钥派生不受虚拟化影响的情况下才有效,据我所知,情况确实如此,尽管我没有测试它。