intel - 如何将 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?
解决方案
毫无疑问,英特尔建议您对 RA 服务器的公钥进行硬编码,但这并不是强制性的。
我正在研究一个实施飞地的研究项目,该飞地在启动时会联系密钥分发/轮换服务器。该服务器拥有所需的所有私钥/公钥/对称密钥,并以安全的方式分发它们。
如果您不想在 enclave 中硬编码 RA 服务器的公钥,请使用应用程序的不受信任部分联系将为您提供密钥的服务器。确保交易安全的一种方法是使用 MRSIGNER 作为 enclave 的身份。
总而言之,工作流程可能如下:
- APP,不可信:联系密钥服务器,获取 RA 服务器的公钥
- 应用程序,不受信任:创建飞地,使用 pubkey 对其进行配置
- APP,受信任:完成证明过程
- 等等。
但要明确一点:请注意,证明的目标是双重的。第一个是证明飞地,第二个(您可能会感兴趣)是使用在 RA 的 DHKE 期间生成的会话密钥建立一个安全的通信通道。这是您在 RA 服务器和 enclave 之间交换信息的安全方式。
推荐阅读
- r - R中n个变量的m个函数
- reactjs - 如何将 TS4.3 中的 noImplicitOverride 标志与 React 类组件一起使用
- python - 在 Django 模板标签中传递和使用字典
- c# - 从运行时类型 C# 创建填充列表<>
- javascript - 使用@ApplicationPath时如何在不使用Node.js的情况下正确地在jsp中从Websphere上的jax rs服务重定向中提供静态文件
- ios - 如何在 Visual Studio Code 中为 Flutter 添加 iOS 模拟器?
- javascript - 如何根据颜色对数据进行分组并在反应中求和相同的大小
- perl - 获取 LWP::Simple 头部请求失败的原因
- kotlin - 如何在辅助构造函数中初始化变量并在kotlin中调用super?
- python - 具有多种产品的 django paypal 返回贝宝测试商店