今天reddit上疯狂讨论GHASH.IO 算力接近50%,以及51%攻击的风险问题。国内微博也狂转。

首先,这是好事,说明近期又进来一大批小白。因为买比特币之前,最重要讨论的问题就是:这玩意会不会被干掉?51%攻击是必修课。

之前我在《16.2亿可以干掉比特币》里面就此话题写了很多。今天整理一下,重写出来,请大家多多转发:

51%攻击,本身是一个通俗的说法,但是这个说法有很强的误导性,会让小白误以为拥有51%的算力,就可以为所欲为了。

所以,还是名不正言不顺,先正名吧:这个攻击不应该叫51%攻击,应该叫连续确认攻击。

为啥谬论容易被接受?因为谬论可以随便从哪里说起,利用各种逻辑陷阱,得出一个貌似合理的结论。而真理,却往往很复杂。

我尽量用简短的语言说说真理吧。

比特币的原理是4大基础:P2P,每个节点备份全部交易;非对称账户加密;POW防双花。

连续确认攻击(51%攻击)是针对POW的。也就是只能进行双花。其它的坏事都干不了,比如发行新币(归P2P管)干不了;盗用别人的币(归账户加密管)也干不了。

啥是双花呢?不是真的一笔钱可以花2次,那样比特币就越来越多了,等于印假钞,比特币就废了。这应该是小白担心51%攻击的主要原因吧。

比特币的双花,实际上是“虚晃一枪”骗局,即收款方明明账上看到一笔收入了,隔了一会这笔收入又消失了。双花这个说法也是通俗的,引起歧义的,应该叫“虚花”(虚假支付,phantom spending)

所以,51%攻击的最坏后果,是某个收款人被骗,而整个比特币系统却完好无损。

说明一下,利用现有法币银行系统是可以进行类似双花攻击的,网上这种报道很多,即一笔钱到账了,收款方能看到,但是不能动用。隔一阵钱又被付款方调回去了。

请大家注意,连续确认攻击比特币进行双花的成本,可是远高于银行进行双花骗局的成本的。

如何避免被“51%攻击”(上当)呢?有非常明确的官方答案(以后电视知识问答肯定经常问):确认数越多越安全。

介是为什么泥?

以下答案比较晦涩一些了,看不懂请谅解我的语言表达能力吧。

由于POW实际上是bingo式抽奖(没玩过bingo的我就对不住了,那就换个比方:买彩票),所以会经常出现多个人同时中奖的情况。而每次只能发一份奖金(新发行的币),否则比特币总量失控。所以2个中奖者将进行加赛:下一轮开奖是基于哪个人的结果,哪个人就获得奖金。当然也有可能第二次开奖还是两边同时中奖(这个可能性已经非常小了),那么,以此类推。

这里,出现了一个可攻击的漏洞:由于是P2P网络,同时中奖的表现形式是各个节点接受了不同的block,甚者多个block。当节点接收到了从其它节点传来的更长的blockchain(区块链)时,会放弃当前的短链,接受长链。

那么,可以进行这样的攻击:

先发出一个交易给网络,让收款方看到并确认。

同时,开始独自计算另外一个区块链,其中不包括这笔交易。如果运气好自己的区块链长度超过了外面的区块链,那么就广播自己的区块链,让整个网络用自己的区块链替代外面的区块链。那么刚刚那笔交易就“消失“ 了(当然,还有许多其它交易会同时消失)。

很显然,只有当攻击方的算力大于外面的算力之和时,这种攻击才能100%成立,否则要试N次才能成功一次,而且成功时也只是抹掉了少量的几次确认,收款方可能还没有确认这笔交易,那就不划算了。所以这个即便按照通俗说法,也应该叫50+%攻击,或者100%+攻击。

只要算力大于外面的算力,时间越长,领先的区块数量就越多,这是很显然的。那么等多少的区块确认都不重要了,因为总归会被逆转掉。

再回来说说矿池 51%攻击的可能。

很显然,当进行51%攻击时,矿池是拿不到奖励的(因为在埋头干坏事),同时全网算力会迅速减少一半,表现为确认时间加长一倍。一旦这种情况出现2个小时以上(6次确认左右),就可以确认此矿池在进行51%攻击,那么矿工就应该大量逃离此矿池。一旦算力逃离,矿池的自建区块链速度就会慢于外面,51%攻击就无法开展了。

还有51%攻击的成本:一个新区块的奖励是25个比特币,一次成功的51%攻击至少需要自建6个区块,即150个币。如果”虚花“的金额小于150个币,这个买卖就不划算了。如果黑客能够入侵矿池,他可以直接设置coinbase,将奖励的币全部自己收走,那多方便啊,何必搞51%攻击呢?

结论是:

1 确认数越多越安全。金额越大,需要等的确认数越多。6个确认已经很安全了。如果是特别大的金额,请等1天以上。

2 矿工应当自编一个全网算力监测程序,当全网算力突降时,应当立即切换到刚刚挖出新区块的矿池。