英特尔 SGX 详细信息?

信息安全 加密 验证 密码学 隐私 攻击
2021-09-03 21:15:44

有没有人有关于英特尔 SGX 的任何信息:

据我了解,所有信息(代码和数据)都在 RAM 中加密,对吗?是否使用强密钥(即 128 或 256 位 AES)或其他方式加密?

另外,远程证明是如何执行的?enclave 发送什么信息来证明里面执行的程序没有被篡改?

还有一件事——使用 SGX 是否需要您的计算机连接到英特尔服务器?我在某处读到可能是这种情况,这将是一个非常重要的隐私问题。不过,我不确定我阅读的文章中提到的连接是指制造芯片时的一次性连接,还是每次创建或证明飞地时都必须建立的连接。

1个回答

这些是关于英特尔 SGX 的令人惊讶的深刻问题,因此我试图给出一个很好的概述,在一定程度上涵盖加密和协议级别的细节。如果有任何不清楚的地方,请提出后续问题!我在最后包含了参考资料和其他资源的列表。

内存加密

所有飞地数据在内存中都是透明加密的。这是由 SGX 内存加密引擎 (MEE) 执行的。MEE 使用 Merkle 树、AES 计数器模式的调整版本和 Carter-Wegman MAC 结构的复杂组合。这使用了一个 128 位机密性密钥、一个 56 位计数器、一个 128 位完整性密钥(产生 56 位 MAC 标签)和一个 512 位通用散列密钥(用于 MAC 构造)。它们在引导时生成,放置在特殊的 MEE 寄存器中,并在系统复位时销毁。MEE 在 512 位高速缓存行上运行,因此每次加密需要四个 AES 操作。(有关详细信息,请参阅 [1, 2, 3]。)

认证

每个 enclave 都有一个 enclave 证书,其中包含其假定的度量、供应商 ID、产品 ID、版本号和一些 enclave 属性。

设置飞地时(使用 EADD/EEXTEND 指令),它通过获取其内存页面的 SHA-256 散列来测量其内容。这在 enclave 的初始化点完成(使用 EINIT 指令,在将所有初始内存内容复制到其 enclave 页之后)。该哈希值用作 enclave 的测量值这类似于其他远程证明技术。

一个 enclave使用本地证明过程从一个称为Quoting Enclave的特殊 Intel enclave 为自己获取一个签名证明。首先,飞地使用 EREPORT 指令请求本地证明报告。CPU 在 enclave 的测量和证书上计算 AES128-CMAC 标签以创建报告。Quoting Enclave 检查报告上的 MAC 并使用 CPU 的证明密钥将其替换为签名(报价飞地有特殊的访问权限)。此签名使用英特尔增强隐私 ID (EPID) 方案 [6,7,8],这是一种组签名方案。这意味着有效的签名证明它是该组的一部分,但不会透露它是为哪个成员服务的。英特尔维护组密钥,使其能够验证签名。签名的证明报价返回到 enclave,它可以使用它向远程方证明。

这个签名的证明报价被发送到远程方。它证明 enclave 的证书(其中包含 enclave 的测量值、产品 ID 号、版本号、供应商 ID 和一些 enclave 属性)。远程方连接到英特尔认证服务以验证来自 enclave 的签名认证报价。

远程证明使用英特尔在制造时刻录到 CPU 中的秘密(Provisioning Secret)和另一个在引导时刻录到 CPU 中的秘密(密封秘密)。Provisioning Secret 与 Intel 共享(并存储在 Intel 数据库中用于证明服务)。在 CPU 之外无法访问 Sealing Secret。

Attestation Key 提供给 Provisioning Enclave,后者使用 Provisioning Key(派生自 Provisioning Secret)向 Intel 服务证明它是合法的。认证密钥是使用配置封口密钥(其密封在存储从密封秘密导出)。存储的认证密钥可以重复使用,无需联系英特尔服务器。

与英特尔的互动

启用 SGX 的处理器将执行一次性初始化,其中涉及与英特尔认证服务器的通信。见 [1, 6, 7]。此初始化也可以在所有权变更中继续存在。

启用 SGX 的处理器将通过 Provisioning Enclave 联系英特尔服务器,以接收证明密钥。Attestation Key 是密封保存的,可以重复使用来创建证明。请注意,英特尔配置服务可以检测已弃用的 SGX 版本并拒绝发布新的证明密钥。

远程方每次想要验证来自 enclave 的签名证明报价时都必须连接到英特尔证明服务。

参考

对于 SGX 的非常深入的处理,我推荐“Intel SGX Explained”[1]。它提供了大量关于计算机架构、密码学、低级攻击和其他可信计算硬件的背景知识(如果您只是想了解 SGX 或已经熟悉这些主题,您可以跳过这些内容)。这个答案很大程度上是对他们更深入的解释的总结。

有关 MEE 的更多信息,我推荐 [2] 和 [3]。

Jethro Beekman 关于该主题的论文 [4] 是另一个很好的文档,特别是如果您对使用 SGX 实现安全服务的最新技术感兴趣的话。它还从软件实施者的角度提供了有关 SGX 的良好背景。

英特尔资源库 [5] 提供了大量有关 SGX 功能和实施的文档,详细程度各不相同。