英特尔 SGX:从 enclave 二进制文件复制 enclave 测量值

Posted

技术标签:

【中文标题】英特尔 SGX:从 enclave 二进制文件复制 enclave 测量值【英文标题】:Intel SGX: Reproduce enclave measurement from enclave binary 【发布时间】:2017-02-28 12:51:42 【问题描述】:

我对英特尔 SGX 中的飞地测量有疑问。从 SignTool source code(以及手册中的高级描述)判断,测量似乎涉及加载 enclave 文件(ELF 或 PE)。但是加载的结果在不同的平台上是不同的,对吧?我想知道我是否可以从 enclave 二进制文件中重现一致的 enclave 测量值。

特别是,我正在考虑以下场景:假设我想向我的用户分发enclave.signed.so,并且我只想为来自该特定飞地的请求提供服务。我想我不能简单地将我平台上的本地测量与用户(可以包含在他们的证明中)进行比较。我应该怎么做?

本质上,问题归结为如何以加密方式链接二进制文件和测量值?似乎有一个悖论:假设我有 enclave 二进制文件,我可以获得它的测量值的唯一方法是加载它。但是,加载过程是受信任的(由操作系统完成)!我如何确保我得到的测量值确实是针对那个特定的二进制文件?我一定误解了什么,因为这似乎对新交所的整个有效性至关重要。请纠正我。

谢谢!

【问题讨论】:

【参考方案1】:

您是对的,要建立“真正的”飞地测量,您需要一个可信赖的系统。

飞地的测量由处理器完成。它用每个飞地创建步骤/指令置换测量值。 specification 非常详细地解释了这种排列。例如,ECREATE 的伪代码包含关于测量字段的以下语句:

(* Initialize hash updates etc*)
Initialize enclave’s MRENCLAVE update counter;
(* Add “ECREATE” string and SECS fields to MRENCLAVE *)
TMPUPDATEFIELD[63:0] = 0045544145524345H; // “ECREATE”
TMPUPDATEFIELD[95:64] = DS:TMP_SECS.SSAFRAMESIZE;
TMPUPDATEFIELD[159:96] = DS:TMP_SECS.SIZE;
TMPUPDATEFIELD[511:160] = 0;
SHA256UPDATE(DS:TMP_SECS.MRENCLAVE, TMPUPDATEFIELD)
INC enclave’s MRENCLAVE update counter;

假设这些描述是详尽无遗的,并且知道驱动程序执行创建步骤的顺序,那么应该能够在不加载安全区的情况下计算 enclave 的测量值。因此,您可以计算飞地中的值。但是如何计算这个飞地的测量值呢?

【讨论】:

以上是关于英特尔 SGX:从 enclave 二进制文件复制 enclave 测量值的主要内容,如果未能解决你的问题,请参考以下文章

如何在英特尔 SGX 中注册自定义异常?

详细介绍Intel SGX开发环境搭建和Hello Enclave程序运行

SGX演示应用程序无法编译

可信安全TEE分析4 Intel SGX 设计和编程

英特尔 SGX 远程证明示例代码

英特尔® Software Guard Extensions 教程系列:第一部分,英特尔® SGX 基础