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

时间:2019-01-28 14:20:17

标签: security open-source sgx trusted-computing

假设以下情形:我们要实现一个开放源代码的密码管理器,该管理器使用一个中央服务,该服务使不同客户端(在不同设备上)能够同步其本地数据库。这项服务是由公司运行还是在用户的服务器上运行都没关系(与owncloud使用情况进行比较)。为了使我们的应用程序更加“安全”,我们希望使用Intel SGX安全区作为中央服务(请忽略当前对SGX安全区的攻击研究)。

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

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

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

根据我的调查,答案至少是在开发和测试阶段是。我找不到生产方案的任何公共信息。我所知道的是,企业注册会更改飞地的行为(可以在生产模式下运行),这与此处无关。我对此有两个想法:

  1. 如果我是正确的话,这不是SGX的另一个秀场停止者吗?使用没有证明功能的SGX似乎没有用。
  2. 诸如https://www.fortanix.com/之类的服务如何规避或解决问题?他们的文档没有提示与英特尔进行必要的互动。

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

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

1 个答案:

答案 0 :(得分:0)

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

当然可以利用SGX来提供代理,其结构应如下所示:

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

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