1

我有一个情况:

我有一个场景,我必须连接到 Web 服务器并且我需要保证响应数据的安全:我连接到将返回信用卡数据的 REST API。我在受信任的代码中签署了密钥,并使用签名通过和 OCALL 在不受信任的部分发送了 HTTP 请求。应用程序在不可信部分接收 HTTP 响应,并通过 ECALL 立即将可信部分发送到 enclave。但是,从我的角度来看,我在应用程序中存在安全漏洞:用户信用数据应该在不受信任的部分接收。

根据我的研究,也因为这里的一些帖子,我认为没有办法从 enclave 进行 HTTP 调用。@JesusG_Intel 在https://community.intel.com/t5/Intel-Software-Guard-Extensions/Rest-API-or-HTTP-API-call-from-inside ...写道:

“不可能从飞地内部直接调用外部世界。您必须从飞地创建对应用程序的调用,然后应用程序才能代表飞地发出 REST API 或 HTTP 请求。”

我是 sgx 技术的新手,我知道这是否是真正的安全漏洞。我认为英特尔不会允许这种安全风险。我错过了什么?您能指导我如何使用 sgx 技术发出安全的 HTTP 请求吗?

谢谢

4

2 回答 2

1

拥有可信执行环境(即在您的情况下为 SGX)的全部意义在于保持数据在 enclave 外加密,并且仅在 enclave 内解密。

我不知道您到底想要实现什么,如果我正确理解了您的要求,REST API 会以明文形式将信用卡 (CC) 信息发送到您的应用程序。如果是这样,那么 REST API 应该首先加密 CC 信息,将其发送到您的应用程序(不可信部分),不可信部分将加密数据编组到您的可信部分(飞地),然后飞地解密飞地内的 CC 信息。

于 2021-02-17T03:18:58.643 回答
0

我可能有点晚了,但我认为这个问题值得更多细节。

使用 Imte 时;SGX 创建一个 TEE,你的应用分为两部分:

  • 不受信任的部分,也就是应用程序本身
  • 受信任的部分,即飞地。

后者是最安全的。由于其资源有限(128/256Mb 的 RAM),它应该保留给需要大量安全性的进程:加密、匿名等。

更清楚一点:飞地不是进行 HTTP 调用的地方。

例如,假设您的应用调用 API、检索加密数据并对其进行解密。该过程将如下(T = 受信任 = 飞地,U = 不受信任 = 应用程序)

  • U:进行API调用,检索数据
  • U:启动飞地
  • U:将加密后的数据传递给 enclave
  • T:接收加密数据,进行处理

换句话说,飞地必须为进程的敏感部分保留,其余部分留给应用程序的不可信部分。

于 2021-05-24T19:29:09.380 回答