0

我一直在将一些代码移植到 Linux 中的 SGX,最后我想在远程服务器上运行。
我观察到,如果我构建程序,然后使用相同的可执行文件在不同的机器上运行 SGX 内的程序,与使用 SGX SDK 构建程序的机器不同,代码仍然可以正常运行,没有任何问题。

现在,如果我在构建过程中查看 MRENCLAVE 值,我发现如果我在不同的机器上构建相同的代码,该值是不同的。如果我将机器 A 上的可执行构建发送到机器 B 并且不在机器 B 上再次构建它,那么 MRENCLAVE 值就是我在机器 A 上构建它得到的值。问题是如果我构建这个值是不同的机器 B 本身的代码。如果我想在机器 B 上验证代码但不想在机器 B 上重建项目而是使用机器 A 的构建,这不会导致任何问题吗?

4

1 回答 1

1

据我所知,MRENCLAVE 测量依赖于所使用的工具链(参见https://pdfs.semanticscholar.org/bc12/7b2228219f2b36b66bebe71a844e510e8efe.pdf,第 5.6.3 和 5.6.4 节),因为它是间接的散列汇编指令,并在飞地创建期间由显式汇编指令创建 (EEXTEND)。因此,我希望您至少在上述机器上使用不同的编译器版本?

于 2019-01-29T14:13:35.833 回答