在客户端-服务器架构中使用英特尔 SGX 远程认证

Using Intel SGX Remote Attestation in a Client-Server Architecture

假设以下场景:我们想要实现一个开源密码管理器,它使用一个中央服务,使不同的客户端(在不同的设备上)能够同步他们的本地数据库。这个服务是运行公司的还是用户的服务器上的都没有关系(对比owncloud的使用场景)。为了使我们的应用程序更多 "secure",我们希望使用英特尔 SGX 飞地作为中央服务(请忽略当前对 SGX 飞地的攻击研究)。

那么,典型的工作流程是:

  1. 本地客户证明中央飞地
  2. 用户注册/登录
  3. (本地和远程数据库同步)
  4. 用户存储/检索密码

现在我的问题是:我们密码管理器的每个用户都需要注册英特尔认证服务 (IAS) 吗?如果是,这是否意味着,由于私钥共享真的很糟糕,所以每个设备都需要注册?

根据我的调查,答案是,至少在开发和测试阶段,是的。我找不到有关生产场景的任何 public 信息。我所知道的是,商业注册会改变 enclave 的行为(在生产模式下可以是 运行),这在这里无关紧要。我对此有两个想法:

  1. 如果我是对的,这不是 SGX 的又一个障碍吗?使用没有证明功能的 SGX 似乎没有用。
  2. https://www.fortanix.com/等服务如何规避或解决问题?他们的文档没有提示需要与英特尔进行交互。

上述场景只是一个例子;它可以改进,我们不打算实施它。但是描述一个场景要容易得多,它很容易想象并且似乎是 SGX 的一个现实用例,而不是描述我们当前的项目计划。

P.S.: 这个问题有点像 Intel SGX developer licensing and open-source software

创建报价不需要英特尔注册证书,但需要与 IAS(英特尔认证服务)通信以验证报价,这需要英特尔注册证书。因此,每个检查远程证明是否有效的节点都需要以天真的方法提供这样的证书。

当然可以利用 SGX 提供代理,其结构有点像这样:

  1. 生成两个证书及其对应的私钥,我将其中一个命名为 IAS-conn-cert,另一个命名为 Proxy-cert。
  2. 将他们的IAS-conn-cert注册到IAS。

当然,您需要相信这些证书确实是在飞地中生成的。为此,您可以远程证明您信任的另一个服务提供商。 现在将代理证书固定(例如通过硬编码)在您的客户端应用程序中。当它需要验证报价时,它使用固定的代理证书连接到 enclave,从而知道它连接到 enclave。飞地然后将连接到 IAS 并将它从客户端接收到的所有内容中继到 IAS,反之亦然。客户端现在无需拥有 IAS 注册证书即可与 IAS 通信,但仍然可以确保代理中没有篡改,因为它相信代理证书确实是在非恶意飞地中生成的。