【问题标题】:SGX - What is the difference between trusted bridge and trusted proxy?SGX - 受信任的网桥和受信任的代理有什么区别?
【发布时间】:2017-01-04 02:07:03
【问题描述】:

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

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

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

---已编辑---

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

我的理解正确吗?

【问题讨论】:

    标签: pointers proxy sgx


    【解决方案1】:

    应用程序和 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]:当一个指向具有 out 属性的可信内存的指针从飞地(OCALL)传递时,可信代理在不可信堆栈上分配一个缓冲区,并将指向该缓冲区的指针传递给不可信函数。不可信函数返回后,可信代理将不可信缓冲区的内容复制到可信内存中。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-07-05
        • 2023-01-03
        • 1970-01-01
        • 2018-10-22
        • 2011-04-05
        • 1970-01-01
        • 1970-01-01
        • 2012-03-09
        • 2012-06-29
        相关资源
        最近更新 更多