本文探讨了如何使用硬件根信任,尤其是Intel SGX,来增强PoS协议(特别是Casper)的深度防御能力。文章提出了SGX在解决长程分叉、加固高效委托、网络时间同步和连接可信对等服务器等方面的应用。
Loi Luu
新加坡国立大学
(这项工作是在以太坊基金会实习期间完成的)
摘要。 我们讨论了硬件可信根的几个使用案例,特别是 Intel SGX,以增强权益证明协议,特别是 Casper,以实现深度防御。具体来说,我们展示了 SGX 如何:帮助解决长距离分叉,加强高效委托,加强网络时间同步,并加强与可信等节点的连接。我们并不提议一个基于 SGX 的权益证明协议,而是提出解决方案以全方位增强现有 PoS 协议的安全性。虽然我们使用了 Casper,但我们的提议对底层 PoS 协议是不可知的。
关于 SGX 有许多好的参考资料(例如,这篇 MIT 论文和 这篇 来自 Intel 的文档)。我引用了 这篇 对于 SGX 的描述。
SGX 是一组于 2015 年秋季发布的 CPU 指令集扩展,并可用于较新的 CPU。SGX 提供的关键能力是机密、私有执行的概念,并保证完整性。实质上,芯片有一个特殊的构造,称为隔离区(enclave)。隔离区就像一个普通程序,不同之处在于隔离区的内存内容在离芯片时是加密的,并且只能在芯片上访问,并且仅在特殊的隔离区代码正在运行时可访问。此外,解密密钥仅供具有特定哈希的代码使用:如果你或黑客入侵了隔离区代码并改变了其哈希,黑客代码将无法再访问加密密钥,从而抵御攻击。因此,这项独特的技术不允许任何人,甚至是可以随意修改代码的机器所有者,窥探隔离区的内容或修改隔离区内的执行。此外,SGX 硬件还启用了远程证明,即能够向远程计算机证明某个给定的隔离区正在运行特定的软件发行版。实质上,芯片能够发出一条声明:“我向任何远程方保证,我正在运行这一代码,具有该特定哈希,”这是一个关键的启动机制。
SGX 的好处在于,安全保证内置于 CPU 中。 SGX 隔离区可以抵御攻击者在系统总线上放置探针、在 USB 端口上拥有特殊攻击硬件、修改磁盘内容并能够以任何方式伪造网络数据包。破坏这些保证的唯一方法是剥离 CPU 封装并在硅晶圆上放置探针,这是一个昂贵的工作,需要恒洁室和相当大的逆向工程工作。并且用户目前已信任 Intel(或 AMD)能够正确执行他们的交易签名代码。
基本上,SGX 允许:
值得注意的是,许多近期的作品利用 SGX 构建新的共识协议(例如 SawTooth Lake 利用经过的时间证明)或可信支付通道(例如 Teechan 协议)。
大多数流行的加密货币都使用工作量证明作为一种机制,以概率性地选举出提议新交易块的领导者。工作量证明成功地保护了数十亿美元的加密货币。然而,工作量证明要求矿工消耗巨大的能源。例如,比特币平台的电力消耗可能与 整个爱尔兰国家 相当,这促使研究人员提出使用权益证明的协议。这个想法的高层次目标是要求用户控制硬币或在系统中进行抵押,以生成新的块。协议随机选择用户作为领导者,他们将提议并签署新块以扩展区块链。因此,权益证明中的采矿通常被称为虚拟采矿,其采矿成本远低于工作量证明。
最近提出了几项可证明安全的权益证明协议的提案(例如 SnowWhite、Ouroboros)。在我们的讨论中,我们考虑了由以太坊基金会研究人员构建并提出的 Casper 协议。尽管 Casper 协议仍未最终确定,但可以在这些博客文章中找到许多细节(参见 Vlad 的 Casper 历史 系列,Vitalik 的 博客 文章)。一般来说,Casper 做出以下假设:
本文展示了如何利用 SGX 实际实现这些假设,从而增强现有协议的安全性。
如果新用户恰好在错误链上加入系统,他们将易受长距离分叉攻击。长距离分叉难以防御,因为理性的用户在发送硬币后,被激励从某个先前的块分叉链以重新控制硬币。仅靠 Casper 中的价值损失(即,如果某个区块链不是正确的,或“最长”的链,所会放弃的硬币数量)方法无效,因为可能会出现 100% 的权益发生了变化,因此新链可能有 100% 的权益作为支持。因此,新用户只是加入了假的链,因为他们看到那里投入了更多权益。
在 SGX 隔离区中运行的以太坊全节点可以向网络中的用户提供最新的验证者集合
在 Casper 中,我们假设用户将能够获取最新的验证者集合,并追踪到最新确认的块。用户从哪里获取此类信息?推测可能来自第三方,如 EtherScan、钱包提供商等。不管用户从哪里获取最新的验证者集合,这一步都是非常重要的,因为获取错误的集合会导致用户从错误链中读取。因此,不信任任何第三方是理想的,因为去中心化的主要目的是无需信任单一方。
我们的改进。 我们提出一个解决方案,以安全地向新用户提供最新的验证者集合。在我们的解决方案中,我们在 SGX 隔离区中运行一个全节点,并允许用户从我们的节点中获取最新的验证者集合。因此,用户只需信任:
我们的建议是用户在 SGX 内部运行完整的以太坊节点(存在 框架 使你轻松端口软件在隔离区中运行)。此外,用户可以在交互之前远程证明隔离区内运行的软件是否是最新的。用户与 SGX 之间的连接是加密的,因此即使恶意的操作系统也无法篡改网络数据包。这些是现有第三方,如 EtherScan,无法提供的一些属性。
接下来我们解决激励更多用户参与的问题。在当前设计中,并非所有持币者都能够存入他们的硬币并成为 Casper 验证者,因为最低存入金额可能是数千个以太 — - 这是一个高障碍。委托协议基本上允许用户授权某个代理代表他们投票(见图 X)。因此,数千个每个仅持有几枚以太的用户仍然可以参与协议,间接参与,并且不需要保持在线。然而,显然如果代理签署无效块,委托的硬币可能会被没收。
在 Casper 中的原始委托协议,允许持有低于 Casper 最低抵押的用户(例如,此示例中的 1000 ETH)以间接方式参与 Casper 协议。
我们的解决方案。 我们提出一个解决方案来克服拜占庭委托者问题。我们的想法是将代理运行在 SGX 隔离区内部,从而保证代理将严格遵循协议(见下图)。每个代理将拥有一个合约,让用户将其硬币存入。用户还需要指定他们希望在合约中保持他们的硬币的时间,即允许代理代表他们。在一段时间后,用户可以从合约中提取他们的硬币,并获得参与协议的奖励。
在 SGX 中运行的代理节点代码保护用户免受恶意代理的影响
这里有一些潜在威胁,因为承载代理隔离区的操作系统可能被攻陷,并拒绝该隔离区参与协议。然而,这样的威胁不会允许任何攻击者盗取用户的存款。用户在存款期限结束后仍然可以取回他们的硬币,但不再能获得预期的奖励(因为代理无法参与此协议)。通过进一步分析,我们预计将证明攻击者仅能暂时锁定用户的硬币。
解决硬币锁定问题的一种方法是在 Casper 中设计合适的验证代码,这样用户可以在检测到代理是恶意的情况下直接请求从代理处提取他们的硬币。稍后将对此进行进一步详细讨论(感谢 Vitalik 的建议)。
我们还可以使用 SGX 建立全球共享的时间戳以改善网络同步性。在当前的以太坊客户端实现中,新节点通过 ntp 服务器获取全局时间戳。这种一次性信任在某种程度上也是比特币所要求的,通常在公共逻辑中被忽略。被攻陷的 ntp 服务器也能够通过返回不正确的时间戳将节点从网络上断开。使用 SGX,可以在不同 SGX 隔离区中运行 ntp 服务器,为以太坊节点实现全球时间戳服务。然而,这并不是完全的安全性,因为操作系统可以延迟来自隔离区的消息,从而使隔离区返回的时间戳对客户端而言变得过时。也就是说,SGX 仅稍微改善了时间戳服务器的安全性,但无法提供最高的安全保证。
我们还可以使用 SGX 建立可信的对等服务器。当加入时,以太坊客户端与某些对等服务器进行通信,这些服务器提供一些种子节点(或同伴),供节点连接并获取区块链的最新状态。可以很容易看出,恶意对等服务器可以轻松通过提供一份恶意节点的列表来对节点进行遮蔽攻击。利用 SGX,我们使得对等服务器返回恶意节点的子集变得更加困难。然而,保护并不完全。例如,攻击者可以攻陷操作系统并控制从隔离区进出的网络。因此,位于隔离区内的对等服务器可能只会接收来自恶意对等方的信息(操作系统阻止所有来自良好对等方的连接)。因此,隔离区最终只会获得恶意对等方的信息。
致谢: 特别感谢 Virgil Griffith、Yaoqi Jia、Shweta Shinde 和 Vitalik Buterin 对本博客文章早期版本的反馈。
- 原文链接: medium.com/@loiluu/caspe...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!