支撑POW安全性的不是算力,而是信仰
支撑POW安全性的不是算力,而是信仰;
人们严重高估了POW的安全性;
POS的存在只需要一个理由:它能解决POW 51%攻击的隐患;
Staking Economy 对POS是有害的,它会降低POS系统的安全性;
POS真正无解的问题是无利益攻击
……
这篇文章系统性地分析了POW与POS的安全性优劣之处,得出了很多不同的结论。文本信息密度很大,读下来需要不少耐心,推荐各位收藏后阅读。大多数人用经验理解POW和POS,而经验往往是错的。
本文作者:Maxdeath,任之劼博士,唯链区块链高级研究员,主要研究方向包括区块链共识算法、扩容、应用,曾在国际学术会议上发表多篇区块链论文。
最近正好是一些明星POW和POS项目准备主网上线的高峰期,于是,关于POW和POS优劣的比较又甚嚣尘上。我之前看过了很多的这方面的文章,不知道为什么,总是有种如鲠在喉,有些东西不吐不快的感觉——大部分人比较的POW和POS并不是一个层面上的东西。
POW是一个在现实中采用更多的算法,而POS,尤其是现在意义中的POS(而非之前peercoin那类早期半成品)是一个目前仅存在于理论中的东西;同时,POW是一类算法,POS也是一类算法。因此,我们不能在考虑简洁、考虑实用、考虑安全的时候,就拿比特币的POW出来比,然后在考虑效率、考虑去中心化的时候,又拿出另一个不同的POW出来。
所以,在这里,我想要从更根本性的角度来比较这两者。换句话说,我们想要比较的不是比特币的POW与以太坊的casper,也不是目前阶段的POW和POS,而是POW和POS这两种思路的未来和前景,哪个更加适用于区块链的治理和运行。
因此,我们必须抛开现有的POW和现有的POS的一切限制,从本质上,或者说,从一个理想的状态下探讨,两者根本的区别和局限在哪里。
1
POW与POS的本质
那么首先,我们需要定义一下POW和POS。
首先,两者都试图达到一种“随机选节点出块,选中概率正比于节点的某种可验证的资源,然后,由于我们采用最长链共识,于是想要推翻已经得到确认的块需要掌握50%以上的资源”的状态,只不过两者的资源一个是工作量,一个是拥有的币。
从这个角度,我们来看看两者究竟有什么是不可或缺的:
POW:能够提供进行了某些工作量的证据的节点获得出块权。
POS:在某个时间之前提供自己拥有某些币的证明的人获得出块权。
仅此而已。
在这篇文章中,我们进行的一切比较都仅仅基于以上这个定义,以及两者的这一个不同点,然后通过逻辑推理来进行。
当然,我也无意于纯从理论的角度来进行比较,因为其实两者都有所谓的理论“安全性”、但实际上都建立在某些不那么现实的假设之上。因此,我们也需要考虑两者在现实,也就是我们所在的这个社会中,在目前以及不太远的将来,应用于区块链的优劣。
也就是说,我们假设,从功能上,我们可以在近几年找到这样两个理想的算法。如果我们希望用于一条公链,那么,二者孰优孰劣?
2
POW与POS的安全性
POS最经常被人诟病的一点,是POS还没有经过实践的检验,而POW则已经在实践中被证明是安全的了。
然而,正相反。
事实是——POS还没有在实践中被证明是不安全的,而POW则已经在实践中暴露了极大的安全隐患——51%攻击。
这不是天方夜谭,也不是杞人忧天,51%攻击对于几乎所有采用POW算法的数字货币的威胁都是实实在在的。这也是为什么我们在谈论POS的最大原因——不是因为POW浪费电力,不是因为POS的经济模型更加公平,不是因为POS听起来更加炫酷,而是因为——
POW已经暴露出极大的安全隐患和问题,而POS可以解决这个问题。尽管在其他方面POS也许都并不一定优于POW,但是这一点就足以成为我们需要POS的理由。
51%攻击的核心问题描述起来是这样的:
在一个理想的区块链中,从安全的角度考量,共识的参与者的利益应当与区块链本身的利益一致。于是,51%攻击才是不可行的,因为能够在共识中占有主导地位的参与者不会愿意去攻击这个区块链,否则他们会损失自己的利益。
然而,这点对于POS成立,对于POW不成立。因为矿工在系统中所占的利益实际上远小于整个系统的价值。换句话说,当两者有冲突的时候,POW矿工完全有可能因为自己的利益而进行恶意行为,这里,“自己的利益”也许是对于区块链的主导权控制,也许是对于区块链发展未来的理念,也许,是双重支付攻击的获益。
如果你认同这一点,你可以不用看以下的长篇大论。如果你不同意,下面我将对POW的这种安全性风险做一些详细的分析。
2.1
POW的安全性
实际上,POW的安全性远小于大众认知中的POW安全性。
在大众认知之中,只要大多数算力是诚实的,比特币就是安全的,而控制大部分算力是不可能的。
实际上,这个假设也被广泛应用于几乎所有共识算法中——无论是POW,POS,BFT,还是其他的各种POx,我们都在采用类似这种假设——即,如果大部分节点或者资源,也许是1/2,也许是2/3,也许是算力,也许是权益,或者是别的什么东西,是诚实的,那么,系统就是安全的。
然而,这个假设本身并不天然成立——所以,在比特币白皮书之中,中本聪并不是直接就说“我们假设50%以上的算力诚实”,而是说:
“如果有人能够控制51%的算力,那么他完全没有必要进行51%攻击,因为它能够通过挖矿来获得更好的收益,而51%攻击会让他之前所挖出的币和他的矿机变得一文不值。”
也就是说,并不是POW不会被51%攻击,而是对POW进行51%攻击不划算。
那么,对POW进行51%攻击真的不划算吗?
有人可能会说当然——“比特币从没受过攻击,这是因为攻击比特币的代价高昂到你无法想象。”
然而,实际上稍微关注一些区块链安全的都清楚,关于POW的51%攻击已经不胜枚举——比较近的有Verge,BTG,ETC……这些都遭受过51%攻击,并且他们都采用POW算法,而且,是采用的跟比特币和以太坊一样的算法。
从这个角度讲,安全的究竟的是比特币,还是POW?
有人会说我偷换概念:这些山寨币能和比特币(以太坊)一样吗?这些山寨币价格本身就没够得上51%攻击的门槛——我随便自己做一个xx币采用比特币POW进行挖矿,然后被51%攻击了,这也能说明POW不安全?
但这个解释并不足够——因为在之前的逻辑中,我们并不是说POW不会被51%攻击,而是说51%攻击不划算。如果我自己造了一个xx币然后被51%攻击了,攻击者没法从中获益。但是之前的那些例子中,攻击者可是实实在在地在攻击中获益了。
那么这条逻辑哪里出了问题?
难道Verge,BTG,ETC的矿工们,不知道自己可以通过挖矿赚更多的钱吗?他们不知道如果攻击了这些币,会导致币价降低,于是自己之前挖的矿会一钱不值吗?
究竟比特币和这些币种之间的差别在哪?难道只有价格吗?
2.2
POW的51%攻击分析
“POW的安全支撑不是算力,而是信仰”
让我们来分析一下这几次攻击真实的情况:
通过挖矿赚更多的钱是不存在的,51%攻击会导致他们手中的币值贬值也是不存在的,因为他们本身在攻击之前就不需要和这个区块链有任何瓜葛——他们的算力是从比特币的矿池切过来的,而他们本身也并不持币,只是需要从交易所购买一些币,卖掉,然后在交易所还没有察觉的时候进行双重支付攻击再卖一次而已。
所以,归根结底,POW的逻辑问题在于,理想中拥有超过50%算力的矿工应该是和系统利益保持一致的。例如,对于数字货币而言,系统的利益就是安全性,而矿工的利益是挖矿收入,那么挖矿的预期回报应该十分丰厚,使得矿工愿意维护系统的安全性,所以不愿意进行双重支付攻击。
然而,挖矿的回报要丰厚到什么程度才能够完全抵御双重支付攻击呢?
我们来仔细分析一下挖矿的投入和收益,以及双重支付的投入和收益。这里,我们假设第一个条件已经成立,即矿机除了挖这种币之外没有其他用途。
挖矿投入:矿机费用+电费*时间。
挖矿收益:算力单位算力挖矿获得的币数币价+收益带来的利息(现实货币或者虚拟货币)
双重支付投入:矿机费用(购买或者租用)+交易手续费+获得算力和双重支付期间造成的币价波动
双重支付收益:双重支付获利+利息-风险
首先,我们先把所有一次性的成本放在一旁——矿机费用,获得算力和双重支付攻击期间币价波动,以及双重支付攻击的风险。
两者相比我们发现,考虑长期收入的话,当有矿工已经拥有超过50%算力的时候,币价或者投资币的收益并不是阻碍他进行51%攻击的理由——因为他完全可以把进行51%攻击的得利来进行别的投资。
于是,“币价高”是不足以抵御双重支付攻击的,“币价持续走高”也不足以抵御双重支付攻击,因为单位算力的奖励币数还会随着总算力的提高而减少,甚至,“单位算力获益持续提高”都不足够,因为必须得是“单位算力的币价走高的程度要超过其他投资品,即:攻击者找不到比投资算力更合算的投资了”才能完全抵御双重支付攻击。否则的话,从理论上讲,总有某个程度的获益足以诱使51%的算力铤而走险进行双重支付攻击。
然而,如果预期挖矿收益能够跑赢其他投资品,如果这个系统足够去中心化,那么应该会有更多的人来挖矿,导致单位算力的收益降低。除非正在挖矿的人对于挖矿收益的预期和没有加入挖矿的人不一样——也就是“信仰”。
由于有信仰加持,再加上没有加入的人获得了“没有信仰”的减持,因此矿工认为投资算力是划算的,而没加入的人认为投资算力是不划算的,在这样的场景中,拥有了50%以上算力的矿工才不去进行双重支付攻击。
而相反,如果加密货币变得足够主流而算力变成了正常投资品中的一种,那么,正如大家在看到币价高涨的时候把自己从银行、股市、基金、理财中的钱拿出来投资虚拟货币一样,当挖矿的回报不佳的时候,还有什么可以驱使拥有51%的矿工不把自己的钱从算力市场抽出来投入别的行业呢?如果这个时候,他发现可以进行一次51%攻击,而攻击的获利会超过自己把算力卖掉能够抽出的钱,那么,他有什么理由不这么做?
这个结论本身就已经足够令人警醒了,但是它揭露出来的意义其实更加深远:当矿工拥有51%算力的时候,我们一厢情愿地认为他们的利益已经绑在这个区块链上了。然而事实是,支持着他们继续挖矿的理由和支持他们进行任何一个投资的理由的唯一区别,大概就只有信仰。
而这个“信仰”,其实也无非只是“挖矿能赚钱”,无论加密货币以后变得主流,还是最终变得式微,这个信仰都会慢慢褪掉。到了那个时候,只要当他们发现挖矿不划算的时候,捞一笔下车才是他们的最佳选择,唯一的问题只是这一笔他们能捞多少。
“矿机成本不是攻击成本的一部分”
那么,问题来了——我们能通过一笔双重支付捞多少呢?这个值不能太大,因为:1)你需要能够从市场上收购到这么多币;2)卖掉这么多币不足以引起市场立刻的警觉。
于是,之前很多我们忽略掉的东西变得不可忽略了,例如——矿机费用,交易费,币价波动,以及其他的风险……
而这里,矿机费用实际上是直观上最容易看到的门槛,也是很多人对于POW信心的根源——获得50%的算力哪有那么容易?你去看看现在这些POW链的算力然后去根据相应矿机的市场价格算一算就知道了。
但我们其实并不需要购买矿机,我们只要收购算力就够了。换句话说,我们只要买通控制算力的人。而对于拥有算力的人来说,别忘了我们之前的分析——从利益的角度讲,他们可并不是被绑在链上的,只要有足够的回报,他们随时可以下车。
这里又有两种情况:
1、他们的矿机除了挖这条链还有其他用途。
2、他们的矿机除了挖这条链没有其他用途。
通常,我们认为后者是更安全的。用实际中的例子来说就是,如果我们要发个POW的新币,那么采用和主流货币一样的算法是不安全的,而采用特殊的POW算法要更安全。
然而,实际上两者同样不安全——
首先,“有没有其他用途”的判断是完全主观的,因为本身“攻击者是否采用攻击”的判断就是主观的。如果我们判断这个矿机在攻击之后还有其他用途,那么矿机的成本不需要计入攻击成本之中。如果他们判断矿机在攻击之后没有其他用途,那么,既然攻击的前提条件是他们判断矿机的投资从长期看不划算了准备下车,那这个时候,矿机已经是沉没成本,并不需要计入攻击成本之中。
有人可能会说我在偷换概念——即便是继续挖矿不赚钱,也不代表矿工会把算力卖给攻击者啊!
但事实是,本来矿工就在把他们的算力卖给矿池,那么,谁能知道那些给你的奖励比别的矿池多的矿池不是攻击者呢?这点,我们会在后文中展开说。
“POW中,51%攻击的成本仅相当于其市值的1/100,000”
现在,我们回到之前的结论——我们严重高估了POW的安全性。
1、首先,人们认为51%攻击需要购买能够提供这些算力的矿机,实际上并不用,只需要从算力所有者手中收购相应的算力即可,而收购算力的成本和矿机本身的成本无关,只和算力所有者的预期回报有关。这个收购可能会相当容易,因为只需要制造一个回报比别的矿池略高的矿池就好了。
2、其次,人们认为采取51%攻击不划算因为挖矿也可以获得更丰厚的回报,实际上也不是,因为攻击之后你可以一次性获得现金,而那这些现金你可以去进行其他投资,同样可以获得丰厚的回报。于是,不要说币价下跌或者不涨这种事了,只要投资挖矿跑不赢其他投资,它的安全性就会下降。同时,无论是熊市导致矿工群体的信仰值下降,还是牛市导致民众对于挖矿投资的信仰值上升,它的安全性都会下降——只有当挖矿的人觉得特别赚钱而不挖矿的人不愿意进来的时候,挖矿获益是最大的,而安全性也是最高的。
3、再次,POW剩下的唯一安全性,就在于币价的波动,手续费和安全风险了——换言之,就是在将这些货币兑换出去的风险,然而,这些风险实际上都被交易所承担了。因为交易所为了互相竞争,会尽可能提供更低的手续费,更好的流动性,以及更快捷的转账,也就是,削减双重支付攻击的成本,也削减了POW的安全性。
于是,再减去这些,我们得出了一个结论:其实POW的安全性,基本上约等于获得50%算力的成本,而这个成本只和收益相关,而和算力本身的成本无关。
如果算力有一个相对公开透明和自由的市场,那么,只要你去crypto51.app上去看一下,租赁一小时算力的成本,几乎就是攻击每个货币的成本。如果算力无法通过公开的市场得到而需要从算力控制者手中收购的话,那么考虑到需要支付给所有者的溢价,这个值可能会高于crypto51上的估计。但无论如何,它和这个货币的总市值相比非常微不足道,大概在1/100,000这个级别。而这么小的交易额造成的波动几乎可以忽略不计。
根据这些分析,我们不难理解为什么Verge,BTG和ETC会受到攻击,我们甚至可以总结出什么样的币种更加容易受到攻击:
1、算力易于获得并且获得成本低:这三种货币都采用和主流货币一样的POW,从算力租赁的网站上就能简单获得足够攻击的算力。
2、币值涨势不佳。
3、被许多交易所接收。
2.3
POS的安全性
那么,为什么POS能够抵御51%攻击呢?
其实说起来非常容易——我们根本不用进行类似于POW这么详尽的分析,POS也天然免疫类似于POW这种形态的51%攻击,因为51%攻击无论如何绕不开的成本是50%以上的持币,而任何对于这个币的攻击导致的币价下降,损失最大的都只会是50%以上的持币者本人。
但这里我们没有考虑的一点是Staking Economy,也就是未来POS也会形成和POW一样的“权益矿池”,即不愿意花精力参与共识的持币者把出块权委托给某些更大的持币者或者比较有声望的机构,然后只收取挖矿奖励(当然委托人会获得一部分奖励)。于是,对于POS进行51%攻击就不再需要收购这些币,而只需要暂时控制超过50%概率出块的矿池就行了。
不过,即便是这样,POS攻击的成本也会远高于POW。
因为首先,与POW需要持续投入电费,以至于小矿工必须加入矿池来获得持续的收入不同,POS中持续投入的服务器维护费用要远小于POW,所以算力集中于大矿池的可能性会小于POW。也就是说,即便Staking Economy真的在POS链中出现,也未必一定会出现几大矿池垄断的情况。
并且,最重要的是,拥有一定数量的币的节点也完全可以并且有意愿自己维护一个节点,而不用依赖矿池。尤其是一些大的持币者——你很难想象他们不愿意维护全节点,也就是说他们并不关心这个链上出的块。另一个最重要的原因是,与POW不同POS出块是需要持币人签名的,因此POS矿池在作恶的时候可能会付出更大的社会代价,而对于POS矿池而言,由于他们实际上挖矿所需要的设备投入远小于POW,所以他们在现实之中社会地位和信誉的成本反而是最高的。
当然,其实这几点都改变不了一个结论,就是Staking Economy这种委托进行共识的做法的确会削弱POS的安全性。
因此,我个人对于Staking Economy这种东西的观感并不正面,同时,很多POS项目也同样对于Staking Economy所带来的安全隐患有所意识,所以会对相关机构进行规范,比如要求一定的持币量。但无论如何,就如同POW矿池一样,POS的Staking Economy也是无法避免的,但两者相比的话,如果被委托的机构是大持币人的话,那么最终也只是把攻击成本从50%变成了一个更小的比例,比如10%,但绝不会像是POW一样,是1/100,000这样的级别。
以上,我们说明了在POS中进行50%攻击的成本很高——那么从另一个角度讲,如果花了这么高的成本,攻击者有可能获利吗?答案是几乎没有任何可能,因为你总得找到有个冤大头愿意和你进行这么大笔的交易——交易所几乎不可能对这么大笔交易买单。所以说,唯一的可能是你找到两个并不懂虚拟货币的冤大头,然后进行一个真正意义上的场外的“双重支付”……
不过如果真的存在这样的人的话,似乎我们有简单得多的方法可以忽悠他们。
然而,这还并不足以说明POS对于POW的安全优越性,因为我们只是说了在POW中适用的51%攻击无法复制到POS,但POS本身会受到另外的两种不存在于POW中的攻击的威胁:长距离攻击(Long range attack)和无利益攻击(Nothing-at-stake attack)。
我们分别来分析一下这两种攻击。
2.4
POS的长距离攻击分析
长距离攻击的概念是,拥有不超过50%权益的节点可以通过某种方法生成一条更长的链,取代目前的最长链——这里所谓的“某种方法”通常都需要一段比较长的时间。它涉及到POW和POS的一个重要区别——POW实际上不仅仅能够生成随机数,而且能够实现在异步系统中每隔一段时间生成一个随机数,这个性质是POS不具备的,所以POS必须引入某些时间的概念。然而,这就给了恶意节点可乘之机,因为诚实节点获得的出块权是有时间限制的,而恶意节点没有。
这一点本身,其实本不应该属于我们这次的讨论范畴,因为我们想要比较POW和POS的本质,而这一个问题其实并不是POS的本质缺陷,换句话说,POS可以通过一些方式,例如VDF,来解决这个问题。然而,有鉴于采用VDF解决这个问题的算法还不成熟,以及我个人认为其实目前的解决方案也是完全够用的,所以,这里我还是详细地讲一讲这个问题。
目前已知的长距离攻击方法有三种:
1、向前腐化攻击(Posterior Corruption Attack):当曾经的权益持有者卖掉权益之后,他们就不再受到持有的币贬值的约束了,然而,如果超过50%的早期持币者卖掉了手中的币的话,攻击者可以买通他们再重新生成一条他们没有卖掉权益的历史,然后有可能可以创造出一条更长的链。
2、权益流血攻击(Stake Bleeding Attack):不到50%权益的节点可以通过“藏一条链自己的链”这一非常简单的方式进行长链攻击,因为在自己的链上,因为出块的只有自己的节点,所以他们会一直获得挖矿奖励。虽然一开始他们生成的链一定短于外面的链,但是只要他们藏的时间足够长,他们的权益终将超过50%,并且慢慢地获得更快的出块频率超过外面的链。
3、权益粉碎攻击(Stake Grinding Attack):这种攻击方式在不同的POS中有不同的形式,但总体来说,拥有不到50%权益的节点可以利用自己算力上的优势,或者自己可以随意改变区块时间戳的优势,获得比诚实节点更多的出块机会,然后利用这个优势通过一段较长的时间生成比诚实节点更长的链。
人民网火币网牌照通常应对这三种攻击的应对是检查点(Checkpoint),即一段时间需要生成一个由一些节点认证过的区块来保证这个区块之前的链不会再更改。
“如果能接受下载客户端,那么为什么不能下载检查点?”
对于很多更理想主义的区块链支持者而言,检查点机制是个不那么“优雅”的权宜之策,因为它犯了几个区块链支持者不能接受的罪过:
1、理想状态的区块链中,任何人都不需要相信除了算法和创世区块之外的任何东西就可以独立验证任意交易的合法性。然而,检查点相当于引入了一个另外的需要信任的东西。即便这个检查点是所有持币者签名认证的,从理论上来讲这也是不可接受的,因为对于新加入系统的节点而言,他们需要信任曾经的持币者;
2、检查点需要引入签名,而签名会破坏匿名性。
关于匿名性的问题,我们同样放到后文中深入讨论,这里我们先说第一个问题。
这里我想要阐述一下我对于检查点这个机制的观点——从现实的角度看,这个事真的不能接受么?
实话实说,如果你是个刚刚进入网络的节点——下载创世区块和算法,以及下载下载创世区块,算法和历史,有什么本质上的区别?后者无非就是多了一种可能性,即恶意节点可以通过长链攻击伪造一份历史,于是尽管你获知了正确的算法和创世区块,你其实并没有获得真正的链。
但问题在于,对于普通用户而言,你怎么知道你下载的客户端用的是正确实现的算法呢?虽然从理论上来说我们需要信任的只是算法而已。但实际上,无论是现实,还是未来,我都有理由相信,没有人会从头开始做算法的实现——实际上,每个人还是需要信任某些可信节点来提供的安全的客户端,也就是软件,而且,没有人会去扒开代码看看这个软件是否和论文相符。
那么这样,我们假设需要依赖可信节点来获取区块的历史,这也不是什么十恶不赦的事情。
“链外共识是客观存在的”
然后,就有了第二个问题——的确,长距离攻击是可能的,正如51%攻击也是可能的一样,我们不光要考虑这种攻击理论上的可能性,也要讨论它在实际之中的条件。
我们在前面论证了51%攻击对于POW的危险性的时候,先是分析了它理论上的可能性,然后,再分析了它在现实中攻击的条件,发现其实无论是在理论上还是实际上,条件都要比大众认知中的低得多,于是,我才得出了POW有安全隐患的结论。
那么,我们同样分析一下以上几种长距离攻击在现实中生效的条件。
首先,无论是权益流血攻击,还是权益粉碎攻击,成功的概率都依赖于你拥有的权益比例。换句话说,虽然攻击者没有超过50%的权益所以没法正常的生成一条更长的链,但是如果他们拥有,例如说40%的权益,那么,他们可以通过以上两种手段,以及一个比较长的时间来进行长距离攻击。
于是,大家已经看出这种攻击不实际的地方了——当恶意节点的权益比较小的情况下,他们发动一次长距离攻击会长得不现实。如果他们占有的权益比较多的时候,他们一没有理由来攻击这个系统,二所需要攻击这个系统的成本并不比50%的权益低多少——这点本身就是POS的优势。
唯一一种比较麻烦的长距离攻击是“向前腐化攻击”,而且,特指这些曾经的持币者本身就是攻击者的情况。因为如果这些攻击者本身没有想过要攻击,只是再卖了币之后被人买通这种情况是可以被一种叫做Key-Evolving Signature的东西解决的。所以,他们必须要从持币的时候就已经开始做好了攻击的准备,即偷偷开始私藏一条链才行。
这其实相当于一个长时间的51%攻击的情况,即以前的大权益所有者(超过50%)一边私藏一条链,一边缓慢地把权益卖掉,在权益全部卖光之后,掏出私藏的链告诉大家说:“我胡汉三又回来了,你们吃了我的给我吐出来!”
然而,我对于区块链的核心作用的一贯看法是——区块链的意义在于用“机器的共识”代替“人的共识”,但是,在目前这个阶段,有些“人的共识”是我们目前解释不了的,也没法去取代的。而这个时候,盲目的去假装这种“链外共识”不存在而粗暴地想要用某个算法在摒弃一切链外共识的情况下实现绝对的安全,是不实际的也是没有意义的。
所以,我同意康奈尔大学Elaine Shi教授对于这个问题的看法——实际上,如果这种情况真的出现,其实某一种叫做“社会共识(social common knowledge)”的东西会自然而然地去纠正它。更简单一点说,对于任何一个POS链,假设它的早期权益所有者突然某一天拿着一条更长的链回来,对于现在的权益所有者说:把你们的钱都给我,现在的权益所有者,甚至说,不要说现在的权益所有者了,大概所有这条链的利益相关方,都会同仇敌忾创造出一个新的规则不承认这条链的合法性,即便从算法上这条链确实更加“合法”。
那么,一条不会被大部分这条链使用者所接受的链,和一条新创造出来的分叉链又有多大的区别呢?又或者说,在以太坊经过了几次升级后的现在,一条根据原规则合法的链,例如ETC,是不是也可以算作一个长距离攻击呢?
所以,归根结底,所谓“社会共识”,无论是在现在,还是我们可见的未来,都是客观存在的,因此,无论是这种长距离攻击,还是其他的几种长距离攻击,即便上有理论上的可能,实际上,只要它仍旧需要一个很长的时间来进行,例如数月或数年,那么它的威胁其实非常有限。
然后,无论是引入检查点,或者引入一个“委员会名单”,或者是引入“社会共识”,实际上都是引入一个“有某些可信的链外信息存在”的假设。而在我看来,在现实之中,无论是现在还是可见的未来,这对于POS的安全性都不是个问题。
2.5
POS的无利益攻击分析
真正无解的问题是无利益攻击。
POS对于无利益攻击是无解的,这其实在任何POS里都一样,因为根据POS的原理,它对于在这个系统中毫无利益或者利益很小的节点的约束就是很低的。
在一个极端状况中,例如整个系统中有一亿个节点所有人的利益都很小,那么任何POS算法都不安全,因为恶意节点行为造成的利益损失太少了,所以我们没有理由认为50%以上的节点是诚实的,反而,如果他们能够从恶意行为中获益的话,根据公地悲剧(Tragedy of the Commons),他们是一定会作恶的。
惩罚机制并不能解决这个问题,因为惩罚必须要和获益相当,而在这样的一个所有节点利益微小的系统中,要不然惩罚也只能忽略不计,要不然惩罚太高导致没有人愿意进入这个系统。
因此,几乎所有POS,都额外需要引入一个准入机制——要么是通过抵押,要么是有持币数门槛,所有参与共识的节点必须保证他们拥有足够让他们在意从而约束他们行为的权益。
而这点在POW里是不一样的,因为POW中无论你的算力多少,你损失的电费是逃不掉的。并且,因为你获益的唯一方式是双重支付——所以,当你的算力在不超过50%的时候,你作恶是严格不划算的。
换句话说,实际上,对于POW而言,小矿工(挖到块几率较小的矿工)的作恶行为会受到很重的惩罚,因为在浪费算力的同时几乎不可能有回报;而对于大矿工(挖到块几率较大的矿工),他们的作恶行为则有可能获益,因为他们联合起来进行50%攻击的收益可以远超成本。
然而,对于POS,小矿工的作恶行为受到的惩罚很轻微,于是,只要作恶能够获益,他们就有动力去作恶;然而POS对于大矿工作恶的惩罚则极其严重,因为越大的矿工代表他们的权益越多,于是恶意行为造成的损失就越大。
这两点,才是POW和POS的根本性区别。
如果比较两者优劣的话,我们可以很明显地看到:
在一个算力(权益)更分散,更平均的系统中,POW更合适。
在一个算力(权益)更集中,更不平等的系统中,POS更合适。
我们已经比较了POW和POS的安全性问题,也得出了一些结论——但很遗憾的是,在一个非许可的公有链的环境中,实际上POW和POS最终都会趋向于一个算力(权益)更集中、更中心化和更不平等的系统。