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

Pointers SGX-可信网桥和可信代理之间的区别是什么?,pointers,proxy,sgx,Pointers,Proxy,Sgx,在《英特尔SGX开发人员指南》中,它提到: 复制缓冲区时,受信任网桥必须避免覆盖ECALL中的enclave内存,受信任代理必须避免在OCALL中泄漏机密 这里的可信桥和可信代理是什么 ---编辑--- 从和中,我注意到,可信桥用于将缓冲区从外部enclave分配和复制到内部enclave,而可信代理用于将缓冲区从内部enclave分配和复制到外部enclave。因此,我个人的结论是,他们都是负责从两个不同方向分配和复制内存缓冲区的代理。它们的名称“桥”和“代理”用于区分它们的工作流 我的理解正

在《英特尔SGX开发人员指南》中,它提到:

复制缓冲区时,受信任网桥必须避免覆盖ECALL中的enclave内存,受信任代理必须避免在OCALL中泄漏机密

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

---编辑---

从和中,我注意到,可信桥用于将缓冲区从外部enclave分配和复制到内部enclave,而可信代理用于将缓冲区从内部enclave分配和复制到外部enclave。因此,我个人的结论是,他们都是负责从两个不同方向分配复制内存缓冲区的代理。它们的名称“桥”和“代理”用于区分它们的工作流


我的理解正确吗?

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

可信网桥:

对于eCall,可信网桥任务是确保编组结构不会与enclave内存重叠

[in]:当指向属性为in的不受信任内存的指针传递到enclave时,受信任网桥会在enclave内部分配内存,并将指针指向的内存从外部复制到enclave内存

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

可信代理

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

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

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

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

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

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

受信任代理是enclave代码在OCALL中调用的,它期望这样的调用将在不受信任的一端以类似的方式传递给实际的被调用方

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

文档部分解释说,为了避免生成的代理和网桥代码进行内存重写,约定是不受信任空间中的应用程序代码必须使用不受信任的内存指针,enclave受信任代码必须使用受信任的内存指针参数。粘合层负责在不受信任和受信任的空间之间来回复制数据,分别替换指针,使它们指向相同(复制的)数据,即使指针本身(作为数字)发生更改