前言:区块链的共识机制是保证网络安全的核心,主流的有PoW和PoS、DPoS等共识算法,本文作者Hugo Nguyen 认为PoS算法存在着安全的隐患,他从网络断网、网络隔离以及持币大户私钥被盗窃这三个小概率事件场景下,PoS可能面临安全困境。本文来自于mediu.com,由蓝狐笔记社群“李熙和”翻译。
权益证明(PoS)最近十分火热,Ethereum Casper,Cardano Ouroboros等都采用了它。对PoS协议不断提升的兴趣大概是出于对区块链扩展性的渴望,以及认为PoW “浪费能源” 的错误观念。
一个关于PoS协议的话题没有得到足够的强调,那就是其缺乏应对最糟糕情况的韧性。比如:发生不寻常的事件,会导致一部分,甚至整个网络下线,或是能够将一部分网络分割隔离,或者私钥遭到盗窃或者被他人购买的情况。
人们可能认为这些情况十分罕见,但是:1)他们并不一定如你认为的那般罕见,2)即使某些事只有0.1%的几率发生,这也意味着以较长的时间尺度来看他们一定会发生,这些就是黑天鹅事件(blackswan events)。
简单来说,这些事件很难发生,但当它们确实发生时,结果往往是灾难性的。我们人类倾向于周期性的低估这些影响力深远的长尾事件(long tail events),比如,仅仅由于过去的十年或者一百年都是安全的,我们就会有明天也会安全的错觉。
对于设计一个有潜力成为全球经济主心骨的协议来说,仔细考虑长尾事件尤其重要,因为数亿人和无数商业机构将会依赖它。
在对待比特币的软件时,我们必须秉持与对待核反应堆软件相同的认真。在工程学文献中,这一类软件被称为关键系统(critical systems),一共存在三种关键性系统:安全关键型,任务关键性,和商业关键型。比特币符合上述全部三种的定义(财富流失可能闹出人命)。所以对错误绝对是零容忍的。
甚至就拿当下比特币的安全程度来说,它足以让有经验的工程师晚上睡不好觉,也就是说它还远称不上完美。工程师们知道我们离灾难只有一步之遥,不管这东西从理论上有多么成熟,不管它迄今为止运转多么流畅。
过去有许多十分醒目的工程学失败都能够清楚的说明这种潜在的危险,比如:
1) 协和飞机坠毁(2003)
协和(1976-2003)是世界上仅有的两架超音速客机。它的坠毁是由于一个破损的轮胎在起飞过程中击中了燃料箱,并引发一系列链式反应。这架飞机曾被认为是“世界上最安全的飞机之一”
2) 挑战者号的灾难(1986)
NASA最初估计挑战者号失败的几率是十万分之一。理查德费曼领导了这次的调查,并发现灾难的原因是O型环(机械结构部件,用于密封)在温度32度的天气下没能展开,而真正的几率是接近百分之一。一个一千倍的错误!
3) 福岛核电站事故(2011)
日本是世界上应对地震能力最强的国家之一。
福岛核电站事故由于9级地震发生,一次日本有记录以来最强烈的地震,同时还伴随着15米级,千年一遇的海啸。
考虑到最糟糕的情况绝对是有必要的,特别是在应对关键系统的时候。而当这些系统又是全球规模的时候,重要性更加不言而喻。
现在,让我们来检测一下PoW和PoS是如何应对网络隔离和意外停运的。
事先提及一下,这类情况并没有一些人想象的那么遥远:在阿拉伯之春运动期间,土耳其政府成功的使用了BGP屏蔽土耳其人使用twitter。
你也能想象在战争期间,一些国家可能试图使他们敌对势力的通讯基础设施失效,通常这是首要目标,因为通讯上有优势的一方在战争中处于有利位置。
那么PoW与PoS在这些情况下到底有多么强的韧性呢?让我们来看一些例子。
场景1:整个网络被迫下线一段时间。然后重启。
由于可能并不是整个地区同时重启并彼此之间重建联系,我们遇到的情况可能是,几个地区从网络停止之前的最后一个区块开始开启他们自己彼此独立的区块链,从而建立多个分裂链。
当跨地区通讯设备得到重建,这些独立区域的区块链上的节点会建立彼此之间的联系。
在PoW中,节点会自动的自行组织,并向同一条链靠拢:最长的那条链(也是最安全的)。这一过程会是痛苦的,因为有一些链在这个过程中会被抹去。但这么做是有效的,这一行为可以确定的。
在PoS中,节点们将不知道哪一条链更正确。不像PoW,PoS没有客观的标准来将两条链进行比较并决定哪一条更“真实”。这意味着在形成新的统一的区块链的过程中,若不引入一些其他的规则(这会让系统更容易受到攻击),节点的行为往往不具确定性,且不能自动化。这种分裂可能是永久的(无法再形成一条统一的链),由于一些PoS协议使回溯到过去的区块成为不可能。
PoS协议的设计者们通常强调对于犯错者们的惩罚。而他们并没有考虑到一种可能性:即使所有的节点都是诚实的,但依然有可能存在多条链!
场景2:一部分网络从主网被分割开。
在这种情况下我们也会得出与案例1相似的结果。被分割的区域会继续运行,就像什么也没发生一样——除了活跃的节点数量减少了。当被分割区域与主网再次连接上的时候,问题便接踵而至。结点不知道哪条链才是正确的。
案例1与案例2有一个至关重要的不同点——案例2发生的可能性更高。重导数据流相对于关停整个网络来说要更容易一些——我们已经见到过这种情况发生。由于隔离分区可以小到一个小镇的级别,我们能够想象这种事每隔几年就会发生,甚至更加频繁。
场景3:PoS的表现在其它的最糟糕情况下也更差,比如私钥遭到盗窃。
财富分布通常遵循权力法则,这一点在加密货币中也不例外。前1%的加密货币拥有者,可能只是一小批人,却很有可能持有大部分的代币。
这些最富有的PoS权益拥有者的私钥有可能遭到盗窃,原因可能是复杂的社会攻击(绑架,折磨,勒索等等)。通过盗窃私钥而不是租赁或者在市场上购买代币,攻击者避免了抬高代币价格。
奇怪的是,在考虑这种情况的时候,PoS设计者们通常只是假设从市场上购买货币是唯一的获得主要控制权的方式,从而错误的认为攻击一个PoS加密货币的代价仅由市场价值决定。盗窃私钥这一可能性让他们的假设有问题,并显著下降了进攻的代价。
(这种进攻还有一个衍生变种:从一个曾经拥有大额权益但已对该代币失去兴趣的人那里购买私钥)
在PoW中,这相当于取得主要哈希算力的控制权。
在PoW中,一个拥有主要哈希算力控制权的人能做什么?TA可以尝试双重支付,或重写交易历史,但获得主要控制权只是第一步。虽然听起来很糟糕,即使在这种情况下,协议依然能按预期运行,只有一条区块链能被认为是有效的(虽然SPV(Simplified Payment Verification)节点可能会感到困惑,这也是为什么运行全节点应该得到鼓励)。
要重写历史的需要花费更多的金钱,所以用户失去存款的风险很低。用户可以选择等待风暴平息,或者采取行动来改变PoW的算法。
总的来说,情况依然会十分糟糕。但是我们可以发现获得PoW中主要的哈希算力并不等于获得了无限制的权力。你必须获得主要控制权然后另外花钱去发起一次攻击。可以把这种机制看作是两层防御机制。
当存在一次进攻时,这个行为是确定性的,并且关于哪一条链是合法方面并没有疑问。在充满敌意的环境下依然能够保持的韧性这一点没有得到足够的重视。
相比之下,在PoS中获得主要控制权就相当于获得了无限的权力,你能够不花任何额外的钱来达到双重支付,这在PoW中是做不到的。你同样能够:1)重写交易历史,如果协议没有检查点;或者2)在协议有检查点的情况下引起不可协调的区块链分叉。改变PoS算法并不能帮上什么忙,因为在PoS中不存在任何更换开销,而不像PoW中有大量的矿机投资。
总的来说,在安全方面PoW给了你两个好处:
1. PoW保护了未来:当存在区块链分叉,它给了我们一个客观的,可以自动化的机制来解决冲突并决定哪条链才是合法的,并且这种机制不需要人为干预或第三方介入。
2. PoW保护了过去:得到主要哈希算力的控制权仍然需要花费进攻者大量的时间和金钱去改写历史,所以用户的余额某种程度上是安全的。
PoS无法提供这两项中的任何一项。PoS支持者可能会宣称检查点的设立能够缓解这些问题,但是事实上检查点只是把问题从一个领域转移到了另一个领域。因为检查点是一个中心化的解决方式,这种方式又会暴露其他一系列问题。
总之,在比特币与区块链协议的开发中有正确的思维模式是非常重要的。这一类软件属于关键系统,值得人们以最高级别的工程学加以应对。
PoS协议建立在缺陷而又天真的假设之上,这些假设可能很快就会在最糟糕的情况下土崩瓦解。PoS正驶向错误的方向:是在降低而不是提升质量标准。