我们可以在 sgx enclave 中编写代码来执行 Linux 命令,如下所示:
cryptsetup
ln
我想在 sgx enclave 中添加一些加密代码。如何在 enclave 内进行文件 IO。
是的,但可能涉及大量迁移工作。
不允许在 enclave 内执行的代码执行某些指令。最重要的是,不允许使用 syscall 指令,这意味着您无法直接使用操作系统的服务。如果您使用英特尔的 SGX SDK将代码移动cryptsetup
或移入飞地,则程序将在请求操作系统服务(如打开文件)时立即ln
终止并指示非法指令(假设此处可以编译)。SIGILL
要使代码与 Intel 的 SDK 一起工作,您可以使用所谓的OCALL退出 enclave 并在外部请求 OS 服务。
英特尔 SGX 网站上列出的一些研究工作 ( Graphene
, SCONE
, )通过通用系统调用转发机制减轻了迁移负担。它们在飞地内部捕获系统调用,将它们转移到外部并执行它们。Haven
不允许在 enclave 内运行任何 Linux 命令。即使我们在 enclave 中实现了自己的 cryptsetup,也有一些来自 cryptsetup 源的操作系统调用,因此在这种特殊情况下使用 sgx 是没有用的。
请在英特尔 SGX 论坛上找到上述问题的完整答案