有没有办法直接将现有应用程序加载到Intel SGX
安全区?
答案 0 :(得分:2)
答案 1 :(得分:1)
Intel SGX
旨在保护数据而不是加载整个应用程序。您可以通过从用户空间程序(SGX
)向您的app.cpp
安全区(SGX
)发送临时缓冲区,在数据的Enclave.cpp
区域内执行安全计算。但为什么呢?
open
这样的系统调用来打开文件。 / LI>
醇>
因此,如果您的应用程序很大或者包含一些系统调用甚至是SGX
实现的一些禁用标准C库函数,则无法将其完全导入到安全区内。但是,如果您的应用程序正在执行一些原始操作而无需任何特殊的系统调用或函数调用,则可以在安全区内自由移植它。但是,您无法直接将其加载到安全区内,您必须更改实施,以使其成为Enclave.cpp
内的可信区域调用。
作为一个例子,我实现了一组加密操作,例如在飞地内的SHA-2,HMAC SHA-2,AES等。我向/从安全区发送/接收pliantext /密文数据的临时缓冲区,在安全区内执行加密/解密操作,并将计算结果存储为哈希摘要,或者在用户空间中存储密文。通过这种方式,我确保没有人可以篡改操作结果,因为它们在由CPU指令保护的安全区内运行。
答案 2 :(得分:0)
如先前的回答所指出,英特尔SGX默认设计通常不允许运行umified应用程序,因为后者包含(很可能)英特尔SGX提供的受信任的libc不支持(所有系统调用)的例程。 SDK。诸如Scone,Graphene SGX,Haven或SGX-LKL之类的工具允许在Intel SGX飞地中运行未修改的应用程序。
上面提到的大多数工具都在安全区内运行微型OS,以处理(通过仿真)不受支持的系统调用。这导致了较大的隔离区大小,这对于需要大量内存资源的应用程序非常不利;安全区内存限制为128MB(或在新的SGX版本中为256MB)。
您选择使用的解决方案将在很大程度上取决于您尝试运行的应用程序。如果后者不是那么大,则可以尝试将其移植到英特尔SGX。移植涉及将您的应用程序分为受信任和不受信任的部分。只有受信任的部分将在安全区域中运行,并且可以在安全区域运行时之外与不受信任的部分(帮助程序)安全地通信。在移植期间,您可能仍然拥有受信任的代码,这取决于不受支持的例程(例如syscalls)。您可以通过在安全区中实现/扩展自己的受信任的libc(正是您需要的系统调用)来解决此问题,该库将系统调用重新定义为ocall的包装器,然后将这些例程(安全地)从安全区中调用;好榜样here。但是,这种方法不适用于新手。这样,您将最大限度地增加安全区内存,并防止膨胀的库操作系统成熟。
另一方面,如果您要处理的是一个非常复杂的应用程序,而该应用程序无法进行移植,那么我建议您选择开源且有据可查的Graphene-SGX等解决方案。