区块链安全的洋葱模型:每一层都增加了额外的安全性

转载
1619 天前
5565
星球日报

来源:星球日报


根据经验,公有链是安全的。自(不久前)问世以来,它们大多数时间都在完成预期目的,顺利流畅地处理交易。这一点我们有目共睹。但却很难想出一个理论来解释其中缘由。

人们通常会用自己最理解和最看重的点来解释其拿手项目的安全性。至于公有链为何安全,不同人看法不一:要么因为有经济激励措施的保障,要么因为有遍布全球的哈希算力背书,要么因为有全节点的保护,要么因为有一个狂热的社区在维护一套共同的价值观。这种现象也不足为奇:根据工具定律(链接1),人们会对自己已经熟悉的工具过度依赖。如果你手里只有一把锤子,那么所有的东西看上去都像一根钉子。

在我看来,上述任一因素都无法独自解释该现象。即便某一特定领域的保护无懈可击,要想出成功的攻击招数也是轻而易举。例如,在一个所有用户都运行一个全节点的网络中,矿工仍然可以将整个区块链替换为由他控制所有币的备用区块链。因此,要实现开放式数字现金系统所需的安全,必定需要不同部分相互结合与相互作用。

区块链安全的洋葱模型

我提出的模型旨在整合安全性的各个要素,帮助读者形成全面系统的理解。目标是更全面地研究公有链,发现优势和劣势,以及对不同的区块链进行比较。

公有链的安全性类似于洋葱,其每一层都增加了额外的安全性:


要永久性地破坏一条公有链,必须破坏其账本状态(所有权列表)中用户的信念,以及可靠地向前更新该状态的能力。所有更高的层均可防止该情况的发生。

攻击必须穿过漏斗型的各个防御层才能到达核心。下面我们逐一讨论其中各层。

加密保障

最外层的保护由加密保障提供。加密是最可靠的保障形式,因此我们委以重任,从一开始便派它来防止大多数攻击。除其他作用外,加密可以确保:

  • 不能凭空印刷代币:所有区块(以及所有区块奖励)都必须附有足够的工作量证明(proof of work)。
  • 无法使用他人的代币:数字签名方案可确保仅代币的有效所有者有代币的使用权。
  • 无法对旧区块的内容作出追溯性的更改:哈希指针确保攻击者如想更改任何旧区块,就必须更改该区块上构建的所有区块。

上述所有攻击均被第一层保护挡在门外。


虽然加密的功能非常强大,但仍有它无法提供的其他保障。例如,它无法确定两条等长的区块链中哪一条是“正确的”(这需要具备现实世界的知识,例如“其他人会切换到其中的哪条链”和“长远看来,哪一条链具有更高的市场价值”)。它也无法强迫矿工在特定的区块上挖矿,无法即刻发布刚发现的区块,甚至也无法确保将特定交易包括进来。

共识保障

通过第一层的某些攻击将在共识过程中被阻止。在中本聪共识(Nakamoto consensus)中,节点不断观察网络并自动切换到最长(最昂贵)的链上。矿工只有在其区块最终成为该最长链的一部分时才能获得报酬,所以他们需要与其他矿工融合。因此,矿工们存在很强的偏见,都想在区块链的顶端挖矿,因为在这里,他们的区块最有可能被其他所有人认可。

如果流氓矿工想在前一个区块挖矿,他将与其他继续在最长链顶端工作的矿工进入竞争状态。只有当他发现几个比其他所有人相加总和还快的区块时,才能迎头赶上,继而开始领先。但视他的哈希算力份额而定,即便他只进行了非常浅层的重组,他也不太可能成功。


要可靠地发起攻击,攻击者需要首先获得对共识层的控制。这意味着控制工作量证明中50%以上的哈希算力,或基于BFT的权益证明中33%以上的占比,或基于最长链的权益证明中50%以上的占比。

这种控制的操作困难常常被低估。例如,大型政府通常被视为公有链的最大风险。但是,如果他们想在初级市场上购买必要的硬件,很快就会发现硬件的年产量受到中国大陆、台湾和韩国的芯片代工厂的限制。而这些代工厂的生产能力又进一步受到澳大利亚稀土开采、亚洲和非洲晶片生产等因素的限制。即便对于高度积极的买家而言,每年的可用产量也有限。以这种方式来获取必要的硬件可能需要至少2-3年,而且也无法做到神不知鬼不觉。

只有中国大陆可能通过没收现有硬件或迫使池所有者发动一次攻击的方式来获得50%的算力。在个人矿工开始察觉并将其哈希算力转移至别处之前,这或许暂时行得通。虽然短期内不太可能对比特币发起这样的攻击,但较小的网络相应地控制着较小的哈希算力或权益份额。在这种情况下,潜在攻击者也可能对小型(流氓)政府和整个私营部门发起攻击。

经济保障

我之前曾提到,由于有经济保障的缘故,倘若单个实体控制了共识层,区块链并不会立即中断(链接2)。通过设定适当的激励措施,区块链可以将实际成本与不良行为关联起来。而这一能力的实现来自于原生代币,其引入了数字稀缺性(进而衍生出价值)的概念,该概念可以(用区块奖励和费用)奖励良好行为并(通过削减保证金或预扣未来奖励)惩罚不良行为。

这些激励措施的规模与参与者对共识层的控制程度成正比。控制许多(甚至是大多数)哈希算力的参与者若破坏系统,会按比例遭受更多损失。因此,可通过对攻击者设定经济惩罚来阻止其发动攻击。

如果流氓矿工想在前一个区块挖矿,他将与其他继续在最长链顶端工作的矿工进入竞争状态。只有当他发现几个比其他所有人相加总和还快的区块时,才能迎头赶上,继而开始领先。但视他的哈希算力份额而定,即便他只进行了非常浅层的重组,他也不太可能成功。


并非所有的经济激励措施都是平等的。区块奖励比网络价值更大的网络更加安全,因为它迫使矿工在游戏中投入更多筹码。(这就是区块补贴下降对比特币安全构成风险的原因(链接3))。

当哈希算法需要无法在网络消失时重新利用的专用硬件【所谓的专用集成电路(ASIC)】时,矿工在这场游戏中投入的筹码也会更多。迄今为止,所有挖矿攻击都发生在规模较小的网络上,这些网络都受制于一种叫做ASIC抗性的谬论,即很少甚至无需参与游戏,便可获得控制权(例如:通过租用哈希算力(链接4)),这绝非偶然。

社会保障

上文曾提到,要永久性地破坏一条公有链,必须破坏其账本状态(所有权清单)中用户的信念,以及可靠地向前更新该状态的能力。

这是必要的,因为区块链并非目的本身。没有必要因为其中某些部分暂时无法使用就收拾行李打道回府。区块链仅仅是在参与者之间自动建立社会共识的一种手段,是维护和更新共享数据库的一种工具。该数据库的状态对参与者有价值,并且强烈激励他们在系统崩溃时恢复系统。

例如,如果加密哈希函数中断,则社交层可以(在技术专家的指导下)达成手动共识来替换中断的部分:


同样地,如果共识攻击超出了经济保障的阶段,社会层仍然可以手动拒绝它。如果具有多数哈希算力的攻击者开始通过挖掘空块来对网络发动DOS攻击,并且完全接受对他自己造成的经济损失,那么用户可以决定更改PoW函数,从而手动解除该矿工的控制权。


如我们所见,永久性破坏区块链的唯一方法是要么使用户对账本状态本身失去兴趣,要么将系统破坏至无法修复的程度。


当攻击可以穿透所有层并最终耗尽系统的社会核心,直到系统无法再覆盖对更高层的破坏和自我修复时,攻击就变得危险了。

要使自我修复和手动干预都起作用,每个项目的社区都需要围绕各自项目的主要属性建立强大的社会规约。就比特币而言,这些核心价值是交易的不可逆性、抗审查能力、没有向后不兼容的变化和2100万枚的比特币供给上限。它们是何时需要社会干预的行动蓝图,并围绕需要解决和不需要解决的问题创建谢林点(Schelling point)。

项目的这些核心价值需要不断地重新协商,且并非所有用户都同意所有属性。但是,围绕特定价值达成的协议越强,该价值在困难时期就更有可能得到维护。

如果将社交层视为任何区块链的归零点,便可发现社会工程攻击是一大威胁。如果流氓开发者能在没有监督的情况下潜入系统进行有害的代码更改,尤其是在频繁实施硬分叉政策的项目中(该主题的推荐阅读文章(链接5)),那么更高的层将变得更加脆弱。

结论与展望

我发现洋葱模型有助于了解区块链的各层如何创建一个安全的整体。在某种程度上,本文是对关于“比特币的社会契约”(链接6)的上篇文章的延伸:任何公有链都始于一套共同的核心价值观,始于系统希望实现的蓝图。

这套价值观必须转化为人际行为规则(协议!)。然后,我们自动执行这些规则,创造不同类型的保障:经济保障、共识保障和加密保障。系统通过约束参与者的行为来获得社会扩展性(链接7),从而在低信任环境中实现合作,进而创造财富。