什么是比特币51%攻击
我之前写的一篇文章
hashcash在比特币中的应用
有过这样的描述:
A伪造了一笔交易,把钱有退回给自己。如果要被整个网络认可这笔交易,A必须自己生成一个比原来的链长的区块链并把这笔交易加入链中。但事实上,这几乎是无法做到的。一台计算机甚至要花几年的时间去”猜”一个区块,而整个网络中的计算机的力量只要几分钟就可以解出来。个人要想伪造一笔交易达到双重支付s要跟整个比特币网络竞争。你的计算速度再快,也不可能快过整个网络。
这里的整个网络主要是指那些大型的挖矿节点。说白了就是伪造者的算力是非常渺小的,几乎不可能一直伪造交易。
那么从理论上(基本上也只在理论上存在)想象这么一种情况,某个大boss网罗了比特币网络中的几个大型的挖矿节点,统治了比特币网络51%的算力。大boss意图攻击比特币系统。
基于上面的假设,我们从几个方面分析所谓的51%攻击:
能否攻击成功
这个几乎是肯定的。了解比特币系统的人都知道,系统基于去中心化能达成交易的共识,一个前提就是,
绝大多数的矿工,都会通过诚实挖矿来维持整个比特币系统
这些矿工占据了大部分的算力,如果他们要伪造交易简直太容易了,那就意味着整个比特币网络的主区块链都是伪造的。
就好像央行或者美联储要伪造交易,那太容易了。
如何攻击
举个例子:
Alice 和 Bob之间使用比特币完成了一杯咖啡的交易,因为是小额交易,Bob在收到Alice的转账通知(不是交易确认的通知,只是表面发起了交易)就给Alice提供了咖啡。
正常情况下,这笔交易会马上被放入交易池等待挖矿节点把自己加入一个新的区块并开始努力"挖矿"。
假设Alice就是那个大boss,拥有网络51%的算力,他真的不愿意为这笔咖啡付钱(有钱人也可能很小气),于是他开始攻击了。
网络上很多节点都收到了这笔交易并加入区块准备运算了,Alice也同样开始贡献算力,但是在开始之前他把区块里的这笔交易改了,本来这是一笔Alice付款给Bob的交易,被改成Alice转给自己的一笔交易了(更改很容易,只要把接收地址和签名改掉即可)。
Alice开始尝试用这个伪区块进行计算(计算正确后这个快会被加入主块中),因为拥有51%的算力,Alice比别的节点更容易优先计算成功,导致一个伪造的区块加入了主链。现在网络中有两个区块链:
其中一个是原来的主链,另一个是比主链高出一个区块的伪造链。
按照区块链的原则,更高的这个链就代替了原有的链成为后面的主链。这笔伪造的交易就被所有节点认可成为了"真实的交易"。
这是Bob就会一直收不到钱,但是咖啡已经给出去了。
如何防范攻击
防范51%攻击可以从两方面看,
一方面是本身这种情况只存在理论中。
绝大多数的矿工,都会通过诚实挖矿来维持整个比特币系统
这个并不是靠着矿工的人品去保证的,而是从他们的角度考虑的利益最大化。首先矿工挖矿有比特币奖励,早期运算一个区块可以获得50个比特币的奖励,后面这种奖励会越来越少,但是交易手续费又是一个新的奖励方式。
如果他们集体伪造交易,用户对比特币失去了信心,没人在去使用比特币。那么矿工伪造了交易盗取比特币就失去了意义。
从另一方面看,如果真有这样的51%攻击,建议是收款方等到全网的 6 个确认之后再交付商品。按照10分钟一个区块的速度,也只需一个小时就可以保证你的钱是否基本肯定收到。
注意这里用的是基本肯定,不过等的时间越长这笔交易越安全是肯定的。
原理其实也很简单。对于Alice来说,假设他要伪造的区块就是最后一个,他只需要计算一次成功就可以了,但是如果他要篡改交易的那个区块后面的区块有六个,他就要重新计算六个区块,难度大很多。