SGX - 可信网桥和可信代理之间有什么区别?

时间:2017-01-04 02:07:03

标签: pointers proxy sgx

在英特尔的SGX开发者指南Pointer Handling中,它提到:

  

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

信任桥梁可信代理在这里有什么作用?

---编辑---

Pointer Handling in ECALLPointer Handling in OCALL,我注意到可信网桥用于分配复制缓冲区外部飞地到内部飞地,其中可信代理用于从内部飞地分配复制缓冲区到外部飞地。所以我个人的结论是,他们都是某种代表,负责从两个不同的方向分配复制内存缓冲区。他们的名字"桥"和"代理"用于区分他们的工作流程。

我的理解是否正确?

2 个答案:

答案 0 :(得分:2)

应用程序和安全区之间的可信网桥和可信代理接口。此代码接口在/飞出包围区。 Edger Tool(包含在构建环境中),用于解析EDL文件并生成可信桥和可信代理文件(.c和.h文件)。

信任桥:

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

[in]:当带有属性in的不可信内存的指针传递给安全区时,可信网桥在安全区内分配内存,并将指针指向的内存从外部复制到安全区内存。

[out]:当指向带有out属性的不可信内存的指针传递给安全区时,可信网桥在可信内存中分配缓冲区,将缓冲区内容清零以清除任何先前的机密并将指针传递给该缓冲区值得信赖的功能。在受信任的函数返回后,受信任的桥将可信缓冲区的内容复制到不受信任的内存。

受信任的代理

对于OCALL,可信代理在外部堆栈上分配内存以传递编组结构,并检查指针参数及其全范围是否在安全区内。

[in]:当从包围区(OCALL)传递指向具有属性in的可信存储器的指针时,可信代理在包围区外部分配存储器,并将指针所指向的存储器从包围区复制到不可信存储器。

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

答案 1 :(得分:0)

  

这里有哪些可信网桥和可信代理?

桥接和代理概念来自调用者和被调用者代码,而不是直接相互通信:它们之间存在粘合代码。调用者代码调用一个代理,它假装与被调用者“相似”,其目的是接受调用并将参数传递给另一个(信任与不信任)。 Bridge就是调用另一侧的实际被调用者并模仿调用者。

COM编组中有一个类似的概念:COM proxies和存根。

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

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

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