V神担忧比特大陆所持有的算力总量已经超过总矿池的51%(上)

【本文由赞我(zaneds.com)独家冠名】

以太坊联合创始人V神(Vitalik Buterin)在最近和一个名为“Mars Finance Global Family”的微信群的讨论中围绕目前阻碍区块链技术在大规模应用中的最大障碍,提出了区块链现如今存在的一些问题。这其中包括哈希算力中心化、大规模的DApp没有落地应用、DApp的可扩展性和延迟问题、共识机制、链上处理效率低和黑客攻击频繁等问题。本文选取Vitalik Buterin提出哈希算力中心化的问题进行探讨与解惑。

V神说:“比特大陆(Bitmain)及其附属矿池现在拥有约53%的比特币哈希算力。这问题还不够大吗?

V神担忧比特大陆作为全球最大的ASIC矿商所持有的算力总量已经超过总矿池的51%,一旦某个个体或公司群体掌握了51%以上的算力并且发动攻击,也叫51%攻击,将可能导致攻击者完全控制加密货币。V神的这种担忧是有一定道理的,但掌握了51%以上的算力的公司或个体真的会发动攻击么?这种攻击真的有价值么?为了彻底解释清楚这个问题,我先从比特币区块的数据结构说起,再过渡到51%攻击。

V神担忧比特大陆所持有的算力总量已经超过总矿池的51%(上)_第1张图片
区块链的数据结构

我们知道区块由区块头和区块体两部分组成,其中区块的大小被限制在一兆以内,区块头的大小被固定为80个字节。区块头中记录了版本号,上一个区块的哈希地址,默克尔根,区块创建时间戳,区块的工作量,难度,目标以及用于计算目标的随机数。而区块链的组成单位是区块,每一个区块的区块头记录了上一个区块的哈希地址,就是说从当前区块可以对等地找到上一个区块,所以所有区块连接起来就形成了链状的区块链。当一个新的区块产生并已经记录到区块链后,这个区块的数据就永久地保存在我们的存储介质上。注意这的存储介质是指区块链“所有”的节点。假如这时有人想改变某个区块中的某一笔交易数据,我们来看看会发生什么事情。我们存储了一个数据叫做默克尔根。默克尔根的生成过程是由各笔交易两两进行哈希运算,并再次把得到的哈希值两两进行哈希运算,反复此步骤,得出最后的一个唯一的哈希值。如果其中一笔交易数据受到攻击发生改变,默克尔根会发生什么?

V神担忧比特大陆所持有的算力总量已经超过总矿池的51%(上)_第2张图片

默克尔根有非常大的作用,由于它是一个最终值,任何人如果修改了我们的任何一个交易数据,那么在经过两两计算之后得出的唯一且最终的默克尔根就会跟之前的完全不一致。你设想你的三口家庭记账,你的账本上默克尔根是A,孩子的账本上默克尔根也是A,而你老公的账本上默克尔根是B。你是不是很轻易就发现你老公的账本被篡改了,所以默克尔根最大的作用就是能够判断交易的数据是不是被改变过。上图通过对比默克尔根,其它节点就很容易发现节点A的交易数据被篡改过,谁的默克尔根和其他的节点不一致,就是谁的数据被篡改过。这时攻击者如果为了让其他节点也认可对节点A的交易数据所做的改变,就需要同时改变全区块链网络里51%以上的节点数据。于是其他节点就会认为攻击者篡改的这个节点才是对的。这里必须是同时,必须是51%以上的节点。那么为什么必须要同时呢?如果你昨天早上改变了10%的节点,昨天下午又改变了10%的节点,五天后你总共改变了51%的节点,可是这时账本数据都不知道更新了多少次了,之前被你改变的那些节点又被别的矿工按照正常的账本数据恢复到了原来的状态,你的攻击就是无效的!所以你现在知道为什么区块链里51%的攻击必须同时改变51%的节点数据了,这就是著名的51%攻击。

下面说一说51%攻击的原理和代价

以比特币网络为例,51%攻击是指掌握了比特币全网的51%的算力后用这些算力来重新计算已经确认过的区块,使区块产生有效分叉并获得利益的行为

(注释:算力指矿工在挖矿时拥有的矿机所计算随机数的能力。而分叉指在同一个时间同时产生了多个节点,他们都计算出了正确的随机数,从而都取得了区块链网络的记账权,导致同一时间有不同的区块追加在了当前的区块链上,形成了分叉。)

如何发动51%攻击?假定发动51%攻击的人是为了获取利益,那么他在发动攻击之前需要具备两个条件: ①攻击者必须掌握比特币全网51%的算力;②攻击者手里要持有大量的比特币。为何要持有大量的比特币?因为攻击的主要目的是使用算力优势撤销自己已经发生的付款交易,发动51%攻击要求51%的全网算利,如果这次攻击涉及到的金额非常小,发动攻击也没有什么意义。所以需要用户首先持有大量的比特币,然后再进行比特币的交易。

51%攻击是如何发动的?首先把比特币转到交易所和某个机构,或者个人卖出所有的比特币,并且把收到的钱提现到银行账号,这个时间越短越好,能大大节省攻击的时间。接下来用51%算力从还没向交易所转币的区块开始重新生成新的区块。比如向交易所转币的区块为第30万个区块,攻击者虽然已经在这个时候完成了交易,提取了现金,但是它攻击的目的就是让已经发生的交易还原到没有发生的状态,所以它需要在第299999个区块开始重新生成新的区块。因为攻击者他有51%算力,而且假设他能在攻击过程中一直保证拥有51%算力,所以它的攻击一定会成功,也就是说它生成的攻击块链一定能追上原链。

在区块链里如果你拥有51%的算力,你取得记账权的概率就高于别人。因为别人拥有的算力无法与你相比,所以决定了你获胜的概率远远高于别人!当攻击块链的长度超过原块链两个区块,基本上所有的客户端都会丢弃原块。接受攻击块链。因为在去中心化的区块链网络里,彼此都不认识,前面只有两条链,这两条链一条比另外的一条短了两个区块,这时矿工们会因为害怕挖矿所得的激励前功尽弃而选择长的这一条,因为长一点的链条很有可能挖矿所得的激励会继续存在,所以当矿工们都选了长的那一条,趋势更明显了以后就会出现马太效应,结果51%攻击成功。因为区块链的原理规定当出现分叉的时候,如果一条链的长度超过另外一条链的长度时,最长的这条链将会作为主链,而另外一条短的链将会被丢弃!

(注释:马太效应(Matthew Effect),指强者愈强、弱者愈弱的现象。)



未完待续,请看《V神担忧比特大陆所持有的算力总量已经超过总矿池的51%(下)》


我是安晴,一个正在进击中的区块链内容创作者。如果你也对区块链感兴趣,欢迎和我一起交流,共同成长!

你可能感兴趣的:(V神担忧比特大陆所持有的算力总量已经超过总矿池的51%(上))