4

在英特尔的 SGX 开发人员指南指针处理中,它提到:

当复制缓冲区时,可信桥必须避免覆盖 ECALL 中的飞地内存,并且可信代理必须避免泄露 OCALL 中的秘密。

这里的可信桥可信代理是什么?

--- 编辑---

ECALL 中的指针处理和 OCALL 中的指针处理,我注意到受信任的桥用于将缓冲区从外部飞地分配复制到内部飞地,其中受信任的代理用于将缓冲区从内部飞地分配复制到外部飞地。所以我个人的结论是,他们都是某种代表,负责从两个不同的方向分配复制内存缓冲区。他们的名字“桥”和“代理”用于区分他们的工作流程。

我的理解正确吗?

4

2 回答 2

4

应用程序和 enclave 之间的可信桥和可信代理接口。此代码接口进/出 enclave。解析 EDL 文件并生成可信桥和可信代理文件(.c 和 .h 文件)的 Edger 工具(包含在构建环境中)。

可信桥:

对于 ECALL,可信桥接任务是确保编组结构不与 enclave 内存重叠。

[in]:当一个指向属性为in的不可信内存的指针传递给enclave时,可信桥在enclave内部分配内存,并将指针指向的内存从外部复制到enclave内存中。

[out]:当指向具有 out 属性的不受信任内存的指针传递给 enclave 时,受信任的桥在受信任的内存中分配一个缓冲区,将缓冲区内容归零以清除任何先前的秘密,并将指向该缓冲区的指针传递给受信任的函数. 可信函数返回后,可信桥将可信缓冲区的内容复制到不可信内存中。

可信代理

对于 OCALL,受信任的代理在外部堆栈上分配内存以传递编组结构并检查指针参数及其完整范围是否在 enclave 内。

[in]:当从 enclave(OCALL)传递指向具有 in 属性的可信内存的指针时,可信代理在 enclave 外部分配内存,并将指针指向的内存从 enclave 内部复制到不受信任的内存。

[out]:当一个指向具有 out 属性的可信内存的指针从飞地(OCALL)传递时,可信代理在不可信堆栈上分配一个缓冲区,并将指向该缓冲区的指针传递给不可信函数。不可信函数返回后,可信代理将不可信缓冲区的内容复制到可信内存中。

于 2017-01-24T08:48:34.943 回答
0

这里的可信桥和可信代理是什么?

桥接和代理的概念来自调用者和被调用者代码,而不是直接相互通信:它们之间存在胶水代码。调用者代码调用代理,它假装“像”被调用者,其目的是接受调用并将参数传递给另一方(可信与不可信)。Bridge 是调用另一端的实际被调用者并模仿调用者的东西。

COM 封送处理中有一个类似的概念:COM代理和存根。

可信代理是 OCALL 中的 enclave 代码调用,期望此类调用将在不受信任的一侧以类似方式传递给实际的被调用者。

受信任的桥接处理由不受信任的代理接收的调用,为 enclave 函数准备堆栈参数,执行实际的被调用者调用,并以相反的方向获取输出参数。

文档部分解释说,为了避免生成的代理和桥代码覆盖内存,约定是不受信任空间中的应用程序代码必须使用不受信任的内存指针操作,并且飞地受信任的代码必须使用受信任的内存指针参数。粘合层负责在不可信空间和可信空间之间来回复制数据的魔法,分别替换指针,以便它们指向相同(复制的)数据,即使指针本身(作为数字)发生变化。

于 2018-04-12T12:27:26.753 回答