3

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

然后,典型的工作流程是:

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

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

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

  1. 如果我是对的,这难道不是新交所的另一个表演障碍吗?在没有证明功能的情况下使用 SGX 似乎毫无用处。
  2. https://www.fortanix.com/等服务如何规避或解决问题?他们的文档没有提示与英特尔进行必要的交互。

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

PS:这个问题是英特尔 SGX 开发人员许可和开源软件的连续问题

4

1 回答 1

1

无需英特尔注册证书即可创建报价,但需要与 IAS(英特尔认证服务)通信以验证报价,这需要英特尔注册证书。因此,每个检查远程证明是否有效的节点都需要以一种幼稚的方法获得这样的证书。

我们当然可以利用新交所来提供一个代理,它的结构有点像这样:

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

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

于 2019-03-24T19:17:22.473 回答