我一直在将一些代码移植到Linux中的SGX,最后我想在远程服务器上运行。
我观察到,如果我构建程序,然后使用同一可执行文件在另一台计算机上的SGX中运行该程序,该计算机与使用SGX SDK构建该程序的计算机不同,则该代码仍然可以正常运行。
现在,如果在构建过程中查看MRENCLAVE值,则会发现如果在不同的机器上构建相同的代码,则该值会有所不同。如果我在机器A上向机器B交付了一个可执行的构建,而又不在机器B上再次构建它,那么MRENCLAVE值就是我在机器A上构建它得到的值。问题是,如果我进行构建,则该值是不同的机器B上的代码。如果我想在机器B上执行代码的证明,但又不想在机器B上重建项目,而是使用从机器A进行的构建,这不会引起任何问题吗?
答案 0 :(得分:0)
据我所知,MRENCLAVE度量值取决于所使用的工具链(参见https://pdfs.semanticscholar.org/bc12/7b2228219f2b36b66bebe71a844e510e8efe.pdf,第5.6.3和5.6.4节),因为它间接地是对汇编指令的哈希,由显式创建飞地创建过程中的汇编说明(EEXTEND)。因此,我希望您至少在上述计算机上使用不同的编译器版本?