从实证来看,公链是安全的。纵观其历史(尽管还很短),公链确实做到了其设计用途:流畅地处理交易。这是我们有目共睹的。至于为什么会这样,很难想出一种理论来解释。
面对自己看好的项目,人们通常会从他们最能理解和最看重的地方来解释其安全性。“某某公链的安全性由什么保障?”无论你问谁这个问题,得到的答案不外乎经济激励、算力去中心化、全节点、持相同价值观的狂热社区。这没什么好惊讶的:正如工具定律(又称马斯洛的锤子)所言,人们太过依赖自己熟悉的工具。如果你手里只有一把锤子,你就会把所有事物都当作钉子来对待。
我并不认为上述因素中的任何一个足以保障公链的安全性。即使一条公链在某一方面做到了无懈可击,要攻击它也绝非难事。例如,在一个所有用户都运行全节点的网络中,矿工依然能够伪造另一条链来控制所有链上资产。因此,必定是各个因素相辅相成、相互影响,才能为免许可型数字现金系统提供足够强的安全性。
我提出了一种区块链安全模型,希望将构成安全性的每个元素都清晰地展示出来。该模型旨在帮助我们更全面地看待公链,找出其优缺点,并对不同公链进行对比。公链的安全性就像是一颗洋葱,每一层都增加了额外的安全性。
要想永远摧毁一条公链,必须摧毁用户对其账本状态(所有权清单)的信任,还要让这条公链无法可靠地更新账本状态。外面几个安全层都是为了防止这种情况发生。
攻击必须通过这个漏斗状的防御层才能触及核心。现在,让我们逐一分析这些安全层。
最外层保护由密码学保证提供。密码学是最可靠的保证形式,因此我们希望它作为第一道防线来挡住尽可能多的攻击。密码学主要能够保证以下几点:
无法凭空增发代币:所有区块(以及所有区块奖励)必须附带有效的工作量证明。
无法盗用他人的代币:数字签名方案可以确保代币只能由其合法所有者使用。
无法篡改之前区块的数据:得益于哈希指针,如果有攻击者想要篡改之前某个区块的数据,必须重构从那个区块开始至当前区块的这段链。
上述攻击都被拦在了第一道防线之外:
然而,强大如密码学也有它提供不了的保障。例如,如果出现两个同样长的链,它无法决定哪条是对的(这需要来自现实世界的信息,例如 “多数人会选择哪条链” 和 “从长远来看哪条链的市值会更高” )。它也无法强迫矿工在特定区块上挖矿,挖到区块后立即广播,甚至无法确保他们打包特定交易。
一些通过第一个安全层的攻击会在共识层被阻断。在中本聪共识下,节点时刻关注网络并自动切换至最长(成本最高的)链。只有在最长链上挖到区块的矿工才能获得报酬。因此,他们需要与其他矿工达成共识。这就导致矿工极度偏向于在链的顶端挖矿,只有这样他们的区块才最有可能被其他矿工认可。
如果有恶意矿工想要在之前的区块上挖矿,就要与其他在链顶端挖矿的矿工展开竞争。他必须比其他所有矿工更快挖出区块,才能赶上并超越他们。但是出块速度取决于算力占比,他成功的可能性极低,哪怕只是浅尝辄止的重组。
要想发起有效的攻击,攻击者首先要获得共识层的控制权。这就意味着,如果是工作量证明共识机制,需要控制 50% 以上的算力;如果是基于拜占庭容错的权益证明共识机制,需要控制 33% 以上的押金;如果是基于最长链原则的权益证明共识机制,需要控制 50% 以上的押金。
这类攻击的难度通常被低估了。例如,政府通常被视为公链的最大威胁。然而,如果它们想要在一级市场上购买必要的硬件,很快就会发现硬件的年产量受限于、中国和韩国的芯片代工厂。而这些芯片代工厂的产量又受到澳大利亚稀土开采、亚洲和非洲的晶片生产等因素的限制。因此,芯片的年产量非常有限,即使买家再积极也无济于事。光是买够必要的硬件就需要至少 2 到 3 年,而且还没法做到神不知鬼不觉。
除非政府没收现有硬件来获得 50% 的算力或强迫矿池运营者联合起来发动攻击。这样一开始或许行得通,但是等到矿工察觉并转走算力就不行了。虽然这类攻击短期内不可能发生在比特币身上,但是那些掌握较少算力或押金的小型网络就难说了。
我之前就已经论述过,得益于经济保证,如果某个实体控制了共识层,区块链不会立即崩溃。通过采取适当的激励措施,区块链可以让作恶具有真实的代价。之所以能够做到这点,是因为区块链通过原生代币引入了数字稀缺性(以及价值)的概念,可以(通过区块奖励和手续费)奖励善行并(通过罚没押金或扣发未来奖励)惩罚恶行。
奖惩的规模与参与者对共识层的控制权成正比。如果控制较多(乃至绝大部分)算力的参与者破坏网络,损失也会更惨重。因此,潜在的经济损失会让攻击者望而却步。
并非所有经济激励的效果都一样。区块奖励的价值相对网络价值越高(译者注:意思似乎是区块奖励与手续费奖励在矿工收入中所占的比例),网络的安全性就越高,因为这样对矿工的利害影响越大。(这就是为什么区块奖励降低会对比特币的安全性构成威胁)。
矿工同样也是利益相关者,因为哈希计算需要专门的硬件(即 ASIC 矿机),一旦整个网络消失,这些硬件就会成为一堆废铁。因此,迄今为止,所有挖矿攻击都发生在那些迷信抗 ASIC 的小型网络中,这并非巧合。攻击者只需要付出很少的代价,甚至不用付出任何代价就可以控制这些网络(例如,通过算力租用)。
我们在上文提到过,要想永远摧毁一条公链,必须摧毁用户对其账本状态(所有权列表)的信任,还要让这条公链无法可靠地更新账本状态。
这是,因为区块链本身不是我们的目的地。我们没有理由因为某条链临时出现局部故障就收拾行囊打道回府。区块链只是一种将社会共识建立流程自动化的手段,一种维护并更新共享数据库的工具。数据库的状态对参与者有价值,因此参与者有很强的动力在系统崩溃时修复它。
例如,如果密码学哈希函数被破解,社会层可以(在技术专家的指导下)人为达成共识来替换被破坏的部分:
同样地,如果共识攻击击败了经济保证,社会层也会人为阻挡它。如果掌握大多数算力的攻击者开始通过挖空块对网络发起 DOS攻击,全然不顾自己会遭受的经济损失,用户可以决定更改 PoW 函数,人为解除矿工对网络的控制权。
正如我们所见,若想永久性杀死一条区块链,要么就让用户彻底失去对其账本状态的兴趣,要么就将系统破坏到无法修复的程度。
当攻击可以穿透所有安全层,最终击溃系统的社会核心,致使其再也无法修复外围安全层时,系统将面临极大的危险。
为使自我修复和人为干预都发挥作用,每个项目的社区都需要围绕该项目的主要特性建立强有力的社会规约。以比特币为例,其核心价值观包括交易不可逆、抗审查性、不推行无法向后兼容的更新和 2100 万代币发行上限。这些价值观不仅为社会干预的提供了行为蓝图,还形成了关于修复选择的谢林点。
一个项目的核心价值观需要不断地重新协商,并非所有用户都认同这些特性。然而,社区就某个价值观达成的共识越强,这个价值观在危机时刻就越有可能被坚守。
如果我们将社会层视为一切区块链的 “原爆点(注:原子弹爆炸中心点)”,社会工程攻击确是一大威胁。如果恶意开发者可以在没有监督的情况下潜入系统篡改代码,尤其是在频繁硬分叉的系统中,就会削弱外围安全层的防御力(点击此处,阅读相关文章)。
我发现洋葱模型可以很好地剖析每一层是如何为一条区块链的安全保驾护航的。在某种程度上来说,该模型是我之前的文章《剖析比特币的社会合约》(中文译本)的延伸:任何公链都源自一套共同的核心价值观,描绘系统愿景的蓝图。
这套价值观必须被转化为人际行为的规则(即,协议!)。然后,我们自动执行这些规则,实现不同类型的保证:经济、共识和密码学。系统通过约束参与者的行为来增强社会可扩展性,在低信任环境中相互合作、共创财富。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。