英特尔SGX:从飞地二进制

时间:2016-10-19 04:06:21

标签: sgx trusted-computing

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

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

基本上问题归结为如何以加密方式链接二进制和测量?似乎有一个矛盾:假设我有飞地二进制,我可以得到它的测量的唯一方法是加载它。但是,加载过程可信(由OS完成)!我怎样才能确保我得到的测量确实适用于那个特定的二进制文件?我一定是误解了一些东西,因为这似乎对新交所的整体有效性至关重要。请纠正我。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

飞地的测量由处理器完成。它通过每个飞地创建步骤/指令来置换测量值。 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;

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