根据经验来看公链是安全的,在其大部分历史上,它们已成功的达到其设计目的,即以没有任何差错的情形下处理交易。这确实是我们观察到的事实,但要想出一个理论来解释为什么会这样就比较困难了。
个人一般会用他们最了解和最看重的事物来解释他们的钟意项目的安全性。人们认为一个公链是通过经济激励、全球分布式的Hash算力、全球性的节点或者狂热的社区(维护一套共识)来保证其安全性。这种看法可以理解,根据工具定律(The law of the instrument),我们过度依赖那些我们已经熟悉的工具。也就是说如果你唯一的工具是一把锤子,那么你就倾向于把一切都当作钉子来对待。
我不认为以上任何一个因素可以能单独解释这个现象(即不犯任何差错地处理交易)。尽管在某一特定领域有完美的防护措施,但对其实施攻击也不是一件难事。例如,在一个所有用户都运行一个完整的节点的网络中,矿工仍然可以用一个备用的区块链代替整个区块链(在这个区块链上他控制了所有的币)。因此必须是不同组合的相互作用才能维护一个免许可数字货币系统在相对安全的程度。
我提出的模型希望将安全性的各个元素形成一个连贯的组合。其目标是能够更全面地看待公链以发现其优势和缺陷,并允许对不同区块链进行比较。
公链的安全性类似于洋葱,每一层都增加了额外的安全性:
要永久地破坏一个公链,就必须破坏用户对其账本状态(所有权清单)的信任,以及破坏未来可靠地更新该状态的能力。所有更上层的服务都是为了防止这种情况的发生。
攻击要经过这些防御层的“漏斗”才能触及核心。现在我们来逐一讨论这几层。
最外层的防御是由密码学来保障的。密码学给出了最可靠的保障形式,所以我们希望它能承担起重任,从一开始就能防止大多数攻击。除此之外,还需要保障以下几点:
1.不凭空创造数字货币。所有的区块(以及因此所有的区块奖励)都必须有足够的工作证量依附在上面。
2.不得花费他人的数字货币。数字签名必须确保数字货币的有效拥有者才能花费。
3.不能追溯性地改变旧区块的内容。哈希指针确保攻击者必须改变建立在任何他想改变的旧区块之后的所有区块。
所有针对以上几点的攻击都会被“漏斗”的第一层所阻挡。
虽然密码学非常强大,但它也有其他一些无法提供的保障。例如,它不能决定两个同样长的区块链中的哪一个是“正确的”区块链(这就需要对现实世界有一定的了解,比如“其他人会转到哪个区块链上”,“哪个区块链的长期市场价值更高”)。它也不能强迫矿工们在特定区块上挖矿,也不能让他们一旦发现区块就发布区块,甚至不能确保它们包含特定的交易。
一些通过第一层的攻击会在共识保障中被阻止。在中本聪设置的共识中,节点会不断观察网络,并自动切换到最长(最贵)的链上。矿工只有当他们的区块最终成为那条最长的链的一部分时才会获得报酬,所以他们需要与其他矿工汇合。因此,对矿工来说,他们会更倾向于在区块链的顶端挖矿,因为他们的区块在那里最有可能被其他矿工认可。
如果一个恶意矿工想在之前的区块上挖矿,他就会和其他继续在区块链顶端挖矿的矿工进入竞争状态。只有当他找到几个区块的速度比其他人的总和快,他才能追得上整条链且把他挖出的区块及之后的链拉到最长。但根据他所占的Hash算力份额,就算是很短的分叉,他也很难成功。
为了使攻击可靠地发挥作用,攻击者需要首先获得对共识层的控制权。这意味着要控制PoW中大于50%的哈希率,或者控制了基于BFT的股权证明中大于33%的股权,或者控制了基于最长链的PoS中大于50%的股权。
这其中的操作难度往往被低估。例如,大型组织通常被认为是公链的最大威胁。然而,如果他们想在一级市场上购买必要的硬件,他们很快就会发现,中国大陆、中国台湾和韩国的芯片代工厂的年产量是有上限的。而且他们的产能还被澳大利亚的稀土开采、亚洲和非洲的晶圆生产等进一步限制,即每年的产能是有限的。即使是对积极性很高的买家来说也是如此。以这种方式获得必要的硬件至少需要2-3年的时间,而且在这期间不可能不会引起相关的关注。
我认为由于有了经济保障,即便单一实体控制了共识层,区块链也不会立即崩溃。通过设置正确的激励机制,区块链可以将现实世界的成本与错误行为联系起来。主要原因来自于原生代币,它引入了数字稀缺性(即价值)的概念,且可以奖励好的行为(用区块奖励和费用)并惩罚坏的行为(通过削减安全存款或扣押未来的奖励)。
这些激励措施的大小会随着行为者对共识层的控制程度的高低而变化。一个控制了大量 Hash算力的矿工(即使是大多数),其破坏系统的损失也会成比例地增加。因此,攻击者会因为受到经济上的惩罚而使他望而却步。
不是所有的经济激励都是平等的。相对于网络价值而言,区块奖励更大的作用是使网络更安全,因为它迫使矿工们在挖矿中的防御性更强。这就是为什么区块奖励的下降会给BTC的安全带来风险)。
当Hash运算需要专门的硬件(即ASIC)且这些硬件并不能在其他领域利用时,矿工们在游戏中的防御性也会更强。迄今为止,所有的挖矿攻击都发生在较小的网络上,这不是巧合,因为这些网络接受了一种叫做抵制ASIC的错误观点,在这种情况下攻击者是很容易占据上风的(例如通过租用Hash算力)。
之前我们说过,要永久摧毁一个公链就必须摧毁用户对账本状态(所有权清单)的信任,以及未来可靠地更新该状态的能力。
这一点是非常必要的,因为区块链并不是目的本身,也就是说没有理由因为链的某些部分暂时失败,就否定这条链。区块链仅仅是一个在其参与者之间建立社会共识的自动化过程的手段,是一个维护和更新共享数据库的工具。该数据库的状态对参与者来说是有价值的,当系统出现故障时,他们有强烈的动力去恢复系统。
例如,如果加密的Hash函数出现问题,社会层可以达成人为共识(在技术专家的指导下)来替换出现问题的部分。
同样,如果一个共识攻击绕过了经济保障,社会保障仍然可以将其阻挡。如果一个拥有多数Hash算力的攻击者在完全接受了自己的经济损失的情况下,开始通过挖空区块对网络进行DOS攻击,那么矿工们可以投票决定改变PoW算法,从而移除该挖矿者的控制权。
我们可以看到,要想永远摧毁一个区块链,唯一的办法就是要么让用户对账本状态本身失去兴趣,要么就是对系统的破坏达到不可能修复的程度。
当攻击能够击穿所有的层数,并最终消磨掉系统的社会核心,直到无法造成更深层次且无法治愈的伤害,那这种攻击就相当危险了。
为了让自我修复和人工干预都能发挥作用,每个项目的社区都需要围绕着项目的主要属性形成强大的社区共识。就BTC而言,这些核心属性是交易的不可逆性、抗审查能力、不向后兼容的变化、21M代币上限等。当社会干预变得有必要时,它们可以作为社会干预的行动蓝图,这些核心属性围绕着什么需要修复,什么不需要修复创造了谢林点(Schelling points)。
一个项目的这些核心属性是永远都会被反复不断协商改进的,并不是所有用户会对所有属性都达成一致。但是,围绕着某个特定属性的共识越强,就越能在困难时期坚持下去。
将社会层视为任何区块链的底层,我们可以认识到对于社会层攻击是一个很大的威胁。如果恶意开发者可以在没有监督的情况下偷偷地进行有害的代码修改(特别是在频繁硬分叉的项目中),更高的层就会变得更加脆弱。
我认为洋葱模型很有用,它可以帮我们看到区块链的各层如何组合创造一个安全的整体。在某些方面,它建立在我之前关于比特币的社交合约的文章基础上:任何公链都是从核心的一组共识开始的,这是一个系统希望实现的蓝图。
这套共识必须被转化为人际行为规则,然后我们自动执行这些规则,创造出不同类型的保障:经济保障、共识保障和加密保障。通过对参与者的行为的约束,系统变得具有社会可扩展性,从而在低信任环境中实现合作,共同创造财富。
DeribitMarket Research 作者
子铭 翻译
Edward 编辑