什么是51%攻击?

本文内容翻译自Authorito Capital CEO的博文《WTF is The Blockchain?》和《Who Owns Blcockchain》,略有删减。
原文链接:
https://medium.com/@mohitmamo...
https://hackernoon.com/wtf-is...

我们把区块链假设为一个账本,每个区块就是每页账本页,当一页账本页记满帐的时候,就需要把它用“密码”(哈希值)封印起来,并把这页内容存到一个文件夹中。

现在想象一下,在这个文件夹中已经存有5页内容了,所有的页面都被一个“封印密码”封印起来。如果我回到第二页,修改了其中一些交易数据,来使我获得利益,会怎样?封印密码会让所有人发现交易的不一致性,对不对?如果我为已修改的内容重新算一个封印密码,并将其标记在页面上,又会怎样呢?

这有个小把戏保护封印密码不被修改

还记得我之前告诉大家的吗?有两个盒子,一个盒子里包含数字20893,另一个盒子是空的,等待玩家计算一个数值,使得两个盒子里的内容相加,得出我们要求的结果。

实际上,计算区块链的封印密码更为复杂,它需要三个盒子而不是两个盒子。这三个盒子中的两个已提前包含内容,其中一个盒子包含本页中的所有交易列表,另一个盒子包含前一页经过“魔法机器”(哈希加密)加工后输出的结果,第三个盒子要装的是玩家自己计算得出的封印密码。当三个盒子中都装满东西,并输入进机器中时,从机器右边输出的结果必须满足我们预设的条件。

clipboard.png

区块链中这个巧妙的“小把戏”,能够确保每一页的密封都需要依靠它的前一页。因此,如果有人想修改已经被封印起来的某页内容,他就必须修改这页之前的所有页面内容和封印密码,以保证链条的一致性和连续性。

在上篇文章的最开始,我们假设有10个玩家,如果这些玩家中的某个人试图欺骗大家,修改某页账本中的内容,他就不得不修改很多页的内容并重新计算这些页面上的封印密码。我们都知道计算封印密码有多难!从他修改的那页开始,他就得在网络中重新建立另外一条链。但是这条链永远追不上另外9个人维护的那条诚实的链的,因为一个人的工作能力和速度是赶不上9个人合在一起的工作能力和速度的。因此,保证了最长的那条链是“诚实的”链。因此,在这局游戏中,1个不诚实的家伙是打不过9个诚实的玩家的,他是不可能修改成功的。

clipboard.png

如果不是一个人,而是六个人变得不诚实呢?

这种情况,用专业术语来说就是“51%攻击”。

如果网络中的大部分人变得不诚实并欺骗网络中的其他人时,那这个区块链协议就会面临失败。虽然这几乎不可能发生,但我们也要知道区块链系统的脆弱之处,它是建立在“群体中的大多数总是诚实的”假设之上的。

因此,在区块链中,如果一个人能掌握系统51%的算力,他就能重写区块链中的数据,从而让自己获利。

“系统中51%的算力”是什么意思?

系统中的玩家为记账和计算“封印密码”所花费的CPU耗能和电力,就是我们所说的算力。

如何解决这个问题

现在已经有人提出一些解决办法,比如不依靠电脑算力的“权益证明(proof of stake)”方法。权益证明是指系统中的玩家不用解决数学难题来算出“封印密码”,而是将他们手中持有的币作为赌注压在他们提出的解决方案上。如果大部分人都同意这个方案,那这个玩家就能得到奖励。如果大部分人不同意,那这个玩家之前押注的币就会被从他的钱包扣除。这个方法引入了惩罚方案。

但这个方法也存在问题。虽然不诚实的家伙会受到惩罚,但也会导致系统中的玩家“富者更富,穷者更穷”。如果我这次赢得了赌注并得到奖励,下次会押上更多的币,再次赢得赌注和奖金,再押入更多的资产。循环往复,最后,区块链中的大部分资产就会聚集到很少的人手中。如果掌握了多数财富的这几个人想要改写区块链,那他们就能办到。

无论何种情况,只要少数几个人掌握了区块链,那么区块链中的大多数人就处于风险之中。

在Twitter上有一段Vitalik和其他人的对话:
Bug Spencer:银行指定规则和核心开发者指定规则有什么不同吗?这两者都要依靠他人。
Vitalik Buterin:如果你发现JP Morgan滥用权力欺骗了你,你和其他对JP Morgan不满意的客户会分离出一个“JP Morgan经典”吗?

Vitalik的观点是:如果一个区块链中有对其规则不满意的用户,那这些用户可以分离出来重新创建一个分叉的链,就像以太经典区块链和以太坊区块链一样。

这个方法虽然不完全适用,但也是一个方法。

还有更好的方案吗?肯定会有,毕竟有那么多的区块链爱好者在为之付出。

本文首发自万向区块链,未经授权不允许转载。

展开阅读全文

没有更多推荐了,返回首页