我是英特尔 SGX 的初学者。我想知道 SGX 是否支持在不同的 Enclave 中并行运行两个函数?例如,功能A在Enclaves En_A中,而功能B在Enclaves En_B中。应用程序是否可以并行调用函数 A 和 B?
提前致谢!
我是英特尔 SGX 的初学者。我想知道 SGX 是否支持在不同的 Enclave 中并行运行两个函数?例如,功能A在Enclaves En_A中,而功能B在Enclaves En_B中。应用程序是否可以并行调用函数 A 和 B?
提前致谢!
是的,这是可能的。
SGX 设计支持在一个系统上同时拥有多个飞地,这在多进程环境中是必需的。这是通过将 EPC 拆分为 4 KB 页面来实现的,这些页面可以分配给不同的 enclave。EPC 使用与架构的地址转换功能相同的页面大小。
查看英特尔 SGX SDK 文档(第 92 页),您可以看到该sgx_create_enclave
函数通过采用 unique 来区分 enclave 实例enclave_id
:
sgx_status_t sgx_create_enclave (
const char *file_name,
const int debug,
sgx_launch_token_t *launch_token,
int *launch_token_updated,
sgx_enclave_id_t *enclave_id, // here
sgx_misc_attribute_t *misc_attr
);
应用程序使用这些 enclave id 使用不受信任的代理函数进行 ECALL 调用:
// demo.edl
enclave {
trusted {
public void get_secret([out] secret_t* secret);
};
}
// generated function signature
sgx_status_t get_secret(sgx_enclave_id_t eid, secret_t* secret);
您可以在第 27 页找到完整的说明