英特尔SGX有什么好处?

2020-05-08 19:43:49

软件保护扩展(SGX)代表了英特尔在可信计算领域的最新进军。最初的目的是作为一种保护云计算的手段,后来它被用于生产系统中的DRM和安全密钥存储。SGX与TrustZone等竞争对手的不同之处在于,它专注于减少其“安全世界”中的可信代码量。用SGX的话说,这些安全世界被称为Enclaves,并通过内存加密引擎和一组新的CPU指令的组合来保护不受信任的代码,以强制分离。

从第六代英特尔酷睿(Skylake)开始,几乎所有英特尔处理器上都可以使用SGX。从那以后,它经历了一段有点坎坷的旅程。在其发布后,有人对SGX被用作传播恶意软件的媒介表示担忧。还出版了一份概念证明,证明了这一做法的有效性。然后,人们对发布生产中的飞地代码所需的强制性协议感到担忧。要使用英特尔的认证服务,这是构建在SGX上的任何远程应用程序的关键支持因素,开发人员必须获得英特尔的商业许可证。这种锁定引起了相当多的恐慌,到目前为止,英特尔还没有完全解决这一问题。然后就出现了漏洞。SGX被发现容易受到缓存计时攻击、投机性执行漏洞和加载值注入攻击。这进一步侵蚀了该平台的公信力。

这就是说,已经有相当多的项目利用SGX来强化现有的解决方案或提出迄今未见过的应用程序。在这篇文章中,我们将看三个这样的提案,看看他们是如何利用SGX的,尽管它的属性令人担忧。在适用的情况下,我们还将讨论已发现的漏洞如何影响其生存能力。

1.英特尔公司经过时间的证明,2016年(正在积极开发中)英特尔的锯齿是Hyperledger基金会的首批项目之一,Hyperledger基金会是Linux基金会的子公司,致力于开源许可的区块链项目。与未经许可的区块链(如比特币)相比,有许可的区块链的主要吸引力之一是它们承诺更高的能源效率。由于许可网络由一组封闭的已知合作者组成,因此可以使用比工作证明更有效的协商一致机制。最初允许的项目求助于使用标准的共识算法,如PBFT和RAFT,然而,由于可伸缩性的限制,这些算法最终不适合更大的网络。

为了克服这些限制,英特尔设计了流逝时间证明(POET),并将其作为锯齿图的默认共识算法发布。PEET是一个基于领导者的共识算法,它依赖于SGX的安全保证。该算法相当简单,在每个块时间,每个节点执行以下步骤:

1.每个节点使用可信功能从其SGX飞地请求超时。2.节点休眠,直到超时返回。3.返回时,可信函数随后验证超时实际上已经到期。4.节点向网络广播其验证的超时值。具有最低超时的节点被选择为引导者。

PEET的目标是创建一种类似于工作证明的领导人选举算法,但与计算工作不同的是,这里一个实体的“投票权”与该实体控制的SGX芯片的数量成正比。原则上,这会带来巨大的运行时效率提升,因为在领导人选举过程中不会执行密集的工作。不幸的是,这项提议受到一个关键的安全经济问题的影响:这里的节点维护人员有强烈的动机闯入他们自己的SGX芯片。如果对手设法妥协他们的SGX,他们可以通过将超时设置为0在每一轮的领导人选举中获胜。网络越有价值,危害您自己平台的动机就越强。

这不仅仅是一个理论上的问题,因为在过去的几年里,SGX已经证明了一系列的漏洞。为了在一定程度上缓解这一问题,锯齿图现在包括z-test,以检查特定节点是否过于频繁地赢得选举。当然,这并不能完全否定对手的优势,而且已经表明,尽管存在z-test,但即使只有几个被攻破的节点,对手也可以危害网络。正因为如此,我认为PEET只有在没有有动机的对手的崩溃容错设置中才有用;从锯齿图上的论坛帖子来看,这似乎也是开发人员的普遍共识。

2.不要挖掘排队等待:公平高效的区块链共识与鲁棒轮询,Mansoor Ahmed-Rengers和Kari Kostiainen,2019年著。本文直接源于前面的讨论,旨在创建一个基于SGX的共识算法,该算法不会受到同样的安全经济问题的困扰。由于很快就会明显的原因,我们将此算法称为鲁棒轮询算法(RRR)。我们首先断言,将可信计算设备掌握在对手手中意味着我们不能依赖于飞地不会受到危害。因此,我们不依赖Enclaves来提供运行时安全保证,而只是将它们用作用于一致性(即Sybil攻击预防)的身份的门控机制。

我们唯一依赖的SGX原语是使用英特尔证明服务(IAS)执行的远程证明。此服务使用依赖硬件密钥的报价机制来向IAS证明它是SGX平台。现在,如果对手使用非SGX系统进行尝试,尝试将会失败,因为他们将无法访问必要的密钥。另一方面,如果对手确实拥有SGX系统,则他们不会通过损害其系统而获得任何好处,因为授予的密钥和身份之间存在1对1的关系。

一旦为节点分配了身份,它就会将其身份广播给网络上所有注册的节点。当接收到该身份时,该身份加入事件被添加到区块链中,然后该节点被认为已注册。所有节点都维护按其“挖掘年龄”排序的注册身份列表。挖掘年龄是自身份上次挖掘某个块以来经过的块数。挖掘年龄最高的10个左右的节点被认为是候选矿工。然后,所有候选挖掘器向随机抽样的对数组投票节点发送候选消息。选民选择年龄最大的候选人作为矿工,然后他将广播下一个街区。因此,在没有离线节点的情况下,我们遵循确定性的轮询领袖选择,以确保奖励的公平性。

该协议不会遭受与POTE相同的漏洞,但它容易受到集中式IAS的危害。如果英特尔是恶意的,或者如果IAS服务器受到威胁,则不能信任门控机制。因此,本文还提出了另一种形式的门控机制,它依赖于通过工作证明的初始自举阶段。然而,这一替代版本面临着与股权证明系统相同的一些问题(最终形成垄断,新参与者不容易进入)。

3.EnclaveDB:A Secure Database Using SGX,Christian Piebe,Kapil Vaswani和Manuel Costa在本文中,作者介绍了SGX的另一个用例:保护数据库。他们提出了EnclaveDB,这是一个使用SGX Enclaves来阻止恶意数据库管理员的数据库引擎。他们设想EnclaveDB在云计算环境中很有用,因为在云计算环境中,用户可能不信任主机来处理敏感数据。

作者考虑了一个威胁模型,其中对手控制服务器上运行的除Enclave之外的所有代码。这包括磁盘和网络I/O。它们不允许物理攻击,并假定SGX的内存保护保证有效。他们的目标是提供一个内存中的数据库,保证机密性、完整性和新鲜性,同时对性能影响很小。他们通过将数据库系统拆分成客户端和服务器端组件来实现这一目标。客户端负责存储数据库加密密钥以及建立到服务器端飞地的可信连接的密钥管理服务。

在服务器端,EnclaveDB有两个组件:不受信任的SQL服务器和受信任的Enclave。SQL服务器可以对公共的、非敏感的数据执行查询。它还负责代表Enclave接收请求并调用Enclave内的存储过程。Enclave包含一个Hekaton内存数据库以及一组编译的查询。这些查询在客户端编译,然后加载到Enclave上,从而通过不需要将通用查询处理器加载到Enclave来减少攻击面。不幸的是,这还需要数据库模式中的任何更改都需要重新部署Enclave代码。实际的事务处理遵循Hekaton和主机之间相当简单的两阶段提交协议。

系统设计的问题之一是在事务处理协议中使用SGX的单调计数器来防止回滚攻击。已经证明,在永久烧毁之前,这些设备仅支持有限数量的写入。这使他们的解决方案的有效性受到质疑,因为数据库维护人员可能希望从他们的服务器获得长时间的运行时间。作者建议采取部分缓解措施。