首页 > 解决方案 > 如何将 Intel SGX Remote Attestation 应用于 encalve 在服务器中运行的模型?

问题描述

Intel 官方远程认证示例代码,例如https://www.intel.com/content/www/us/en/developer/articles/code-sample/software-guard-extensions-remote-attestation-end-to-end -example.html,描述一个 encalve 在客户端运行的模型,服务器提供秘密数据,如下图所示。

英特尔远程证明模型

但我想实现一个计算用户在 enclave 中的秘密数据的服务。所以有很多客户端提供秘密数据和运行 encalve 的服务器。障碍是 intel sgx sdk 不适合这个模型。例如,在 sgx_tkey_exchange.h 中声明的函数 sgx_init_ra 接受一个公钥以供以后验证,intel 的文档建议将公钥硬编码到 enclave 代码中。

服务提供者的公钥应该被硬编码到 enclave 中。这与 enclave 签名相结合,确保最终用户无法更改密钥,因此 enclave 只能与预期的远程服务进行通信。

这适合英特尔的远程证明模型,但不适合我的。因为在我的模型中,有很多客户端(秘密数据提供者),并且很难安全地获取客户端的公钥。

那么,有没有办法在这个模型中使用intel sgx sdk?

标签: intelsgxenclave

解决方案


毫无疑问,英特尔建议您对 RA 服务器的公钥进行硬编码,但这并不是强制性的。

我正在研究一个实施飞地的研究项目,该飞地在启动时会联系密钥分发/轮换服务器。该服务器拥有所需的所有私钥/公钥/对称密钥,并以安全的方式分发它们。

如果您不想在 enclave 中硬编码 RA 服务器的公钥,请使用应用程序的不受信任部分联系将为您提供密钥的服务器。确保交易安全的一种方法是使用 MRSIGNER 作为 enclave 的身份。

总而言之,工作流程可能如下:

  • APP,不可信:联系密钥服务器,获取 RA 服务器的公钥
  • 应用程序,不受信任:创建飞地,使用 pubkey 对其进行配置
  • APP,受信任:完成证明过程
  • 等等。

但要明确一点:请注意,证明的目标是双重的。第一个是证明飞地,第二个(您可能会感兴趣)是使用在 RA 的 DHKE 期间生成的会话密钥建立一个安全的通信通道。这是您在 RA 服务器和 enclave 之间交换信息的安全方式。


推荐阅读