权益证明(PoS)最近一直很火。以太坊的Casper协议,Cardano的Ouroboros协议等等都是在讨论权益证明。对权益证明算法兴趣的提升,也许主要是因为区块链对无限扩容性的需求,以及错误地认为工作量证明(PoW)算法太过于浪费。
关于权益证明协议,有一个问题没有完全地强调,就是遇到突发事件时缺乏快速回复能力。例如:异常事件可以使得网络的一部分,甚至整个网络掉线。或是密钥被偷取/收买的风险。
有人也许会认为这类情况很少甚至不可能发生,但是a)这些事情可能不会像你认为的这么罕见,b)甚至有些事情有0.1%的可能性会发生,但是这也意味着长期看来会发生 — 。这就是纳西姆·塔勒布所说的黑天鹅事件。
简单地说,这些事情大概率是不会发生的,但是一旦发生,就会造成毁灭性的结果。我们人类经常会低估高影响的长尾事件。例如,你认为明天是安全的,是因为这种安全已经持续了10年或者100年。
对长尾事件的仔细思考对于设计协议尤其重要,因为这类协议可能以后就是全球经济的基石,百万的人类和商业都要依赖它。
我们必须要用对待核能反应软件的态度来看待比特币软件。在工程文献中,软件的等级是非常关键的系统。其中包含三类系统:安全,任务和商业系统。比特币适合所有三种系统(失去金钱会导致失去生命)。绝对没有任何犯错的余地。
经验丰富的工程师面对现在比特币系统的安全性晚上都不能睡好,而且这离完美还差得很远。程序员们知道,我们离灾难可能就差一步,不论现在报告上的数据有多好看,事情发展的多顺利。
以前就有很多备受瞩目的工程失误,很清楚地证明了这类隐藏的风险。一些案例:
1) 协和飞机坠落(2003)
协和(1976-2003)是曾经仅有的两架超音速客机之一。协和式飞机坠毁是由于轮胎在起飞时撞上油箱引起的,造成了连锁反应。协和曾被认为是世界上最安全的飞机之一。
2)挑战者号灾难
NASA最初估计出事故的概率是10万分之一。Richard Feynman主导了这次调查,并发现造成这场事情的主要原因是O行环在32度的空气中碰撞破损了。实际的事故概率接近百分之一。这是一个一千倍的错误!
3) 福岛危机(2011)
日本是世界上在地震技术和安全性方面最好的国家之一。福岛危机的发生是因为:是日本有史以来最强大的9级地震,其次是15米(大约50英尺)高,千年一遇的海啸。在打造非常重要的系统时,考虑到最差的情况是绝对必要的,如果这些系统是有全球性的布局,那就更重要了。让我们来看看工作量证明和权益证明是如何应对网络分区和突然断电的。只是想让大家明白,这种情况并不像人们想象的那么牵强: 在阿拉伯春季运动期间,土耳其政府成功地进行了BGP劫持,以阻止来自土耳其公民的推特流量。你也可以想象类似战争的情景 — 国家都想要去切断敌军的通讯设施,这肯定是首要目标,因为得通讯者得天下。
那么工作量证明和权益证明在这些情况下的恢复能力如何呢?让我们来举几个例子。
情况1:整个网络被断开一段时间。然后重新启动。
由于所有的地区不会同时地重启和相互交互,有可能几个地区会开始他们自己独立的链,从网络断开前的最后共同块开始分开,事实上导致了链分叉。
当跨区域的通讯又建立起来的时候,这些独立链上的节点就会互相通讯。
在工作量证明中,节点会自动调节并最终变成一个链:这条链会有最多的累计工作量证明,同时也是最安全的链。这个过程会有损失,因为有些链会被抛弃。 但是它会继续运转,且行为是确定的。
在权益证明中,节点会不知道哪个链更加正确。和工作量证明不同,权益证明没有客观的衡量标准去比较两天链之间的真实性。这类行为是不确定的,并且在不引入提高攻击面的武断规则时,是不可能自动离开的。这类分叉可能会变成永久的,因为一些权益证明协议不可能回到过去修改。
权益证明协议的设计者往往不遗余力去“惩罚”错误行为的成员。但是他们没有考虑到的是所有节点都诚实的可能性,虽然如此,但是仍然有链分叉了!
情况2:网络上的某些部分从主网获得分区
最后证明在这种情况下,会导致和情况1中类似的结果。如果事情都在运行,分区也会持续运作- 除非在每个隔离分区的活跃节点数量变少了。当分区和主网络再次联系时,就会出现疑惑。节点不知道到底哪条链才是真正的主链。
情况1和情况2 最主要的差别就是情况2发生的可能性更大。导流比关闭整个流量要简单得多- 这也是我们之前看到过的情况。分区可以和一个小镇的网络一样小。我们可以想象每几年或者更加频繁发生的事情。
情况3:权益证明(PoS) 在其他最坏的情况下,比如被盗的私钥,情况会更糟。
财富分布符合能量法则,对于加密货币也没有例外。1%的加密货币被掌握在很少人手上,也许可以掌握整体代币流通很大的比例或者说绝大多数代币。
最富有的权益证明的权益持有者的私钥也许会由于各类复杂的社交工程攻击被盗窃。通过盗窃而不是在市场上回购代币,在攻击中攻击者避免了货币价格升高。奇怪地是,当考虑到这种攻击行为时,权益证明(PoS)协议的设计者经常假设在公开市场购买代币是获得主要控制的唯一方法,并且因此做出不正确的结论:权益证明(PoS)货币的攻击仅仅是由它的市场价值决定的。窃取私钥回避了“防御”,并且极大地降低了攻击成本。(这种攻击的一个变化方式是从对加密货币不再感兴趣的大股东手中购买他们的密钥)。
在工作量证明中,这就相当于获得了大多数的哈希力。
在工作量证明中,如果有人拥有大多数算力会发生什么呢?他可以尝试进行双花或者改写历史。但是如果要进行双花,就必须要花费很多钱。获得主要控制只是第一步。哪怕在这种情况下,最差也就是工作量证明协议和原来一样工作,只是其中一个链认为是有效的。(尽管SPV节点也许会觉得困惑,因此这也是为什么我们鼓励全节点运作)。如果要改写历史,那就要花费更多的钱了,所以丢失账户余额的风险还是很小的。用户可以选择 等待暴风雨的来临或者想办法改变工作量证明算法。
不论如何,这真的是非常糟糕的情况。但是我们可以看出在工作量证明中获得大多数的哈希力并不意味着给予攻击者无限的力量。你需要获得控制并且花费巨额成本去实施攻击。我们可以认为这是两层防御。当发生攻击时,行为是确定的并且对于哪条链是有效的没有任何疑惑。这种在受到攻击情况下的复原能力受到低估。
相反地是,在权益证明系统中获得大多数的权益会导致无限的能力。不像工作量证明,你可以不用花费任何多余的钱来实施双花。你也可以a)如果这个协议没有检查,就可以改写历史。或者b)如果协议中有检查,就会引起不可调和的分裂(例如Casper)。改变权益证明的算法不会有帮助,因为PoS是虚拟挖矿,不存在任何硬件投资。
总结来看,工作量证明在安全保障方面,有2个好处:
1 工作量证明保护了未来:当出现链分叉的时候,给了我们一个目标机制,可以自动解决争端,而不用人类或者第三方可信机构的介入。
2 工作量证明保护了过去:控制大多数算力仍然消耗了攻击者大量的时候和金钱来改写历史,所以余额是相对安全的。
权益证明却无法提供这些。PoS支持者或许会说检查点可以缓解问题2,但是事实上检查点只是将问题从一方面转移到另一方面。检查站是中心化的解决方案,打开了另一个尚未解决的复杂问题。
总结来看,当考虑到比特币和区块链协议发展,有正确的观念是非常重要的。他们都是值得需要高规格工程计算的重要系统。权益证明协议建立在比较单纯的假设上,在最差的情况下,可能会很快地瓦解。权益证明可能是朝着错误的方向:是降低而不是增加了质量。