什么是双花攻击

比特币矿工争夺到新区块记帐权后,会第一时间广播给相邻节点,但是网络传输是有一点点延迟的,如果有2个矿工同时挖到矿了,会发生什么神奇的事呢?

答案是:比特币会进行暂时的分叉!

如下图,就有红色和绿色的2个矿工几乎同时挖矿成功,并分别向周边节点广播区块。所有的矿工都会先后接收到2个区块高度一样的新区块,它们都是合理的。

但是他们会以先收到的那个区块作为主链,后收到的作为候选链(或者叫分叉链)。

这个时候比特币实际上是分成了红色和绿色这二个阵营的。如下图: 95416-g1qz8gyf7dl.png

接下来会发生什么?

假设这个时候,A自己选择在绿色阵营上进行挖矿……

接着102号块又被某矿工挖到了,而且这个102的区块是指向了红色的链。

A验证通过后接受现实(现实好残酷啊,又被人领先了),根据最长链优先原则(绿色最长101,红包最长102),A就会切换到红色的链。其它矿工做的都是同样的选择,在102号区块就重新统一了。

有人问,如果红包阵营和绿色阵营又又同时挖到矿了呢? 那么分叉继续,将在103号再决高下。

93287-f8ppfi5weld.png

其实,像这样的主链临时分叉也是时有发生,但比特币比较少,因为出块时间长,平均10分钟才找到一个块,同时两个人找到的概率微乎其微。在出块时间更快的以太坊,EOS就越容易发生这样的临时性分叉,但是根据最长链优先原则很快就会自动纠正。

双花攻击

作为区块链的数字货币,最最重要的事情,便是要解决双花的攻击。

双花攻击正如其字面意思一样,就是一笔钱可以花出去二次。如果这都可以,那整个区块链就无信任可言了。

双花攻击要想确保一定成功,至少需要51%的算力,因此也叫51%算力攻击。

它的原理就是利用了前面提到的比特币分叉。

31065-08zkif9z7x3g.png

某作恶人在第101号区块的时候,将10个比特币充值到某交易所。一般交易所在第6个确认的时间就会认为已充值成功。这时作恶的人会赶紧卖出提现。

但随后,作恶节点人还偷偷的构造了另一笔交易(只需要修改101号区块里面的交易信息)将充值的那10个比特币,收款人地址修改成给他的小号。他把这个恶意的块发给了其它的矿工(举例为红色那条链)

这个时候,只要作恶节点在红色链上投入大量的算力,且算力大于51%,那他挖矿的速度肯定比小于49%的诚实节点要快,最终红色的那条链一定会超过黑色的链,其它诚实结节根据最长链优先原则又纷纷到红色链上继续挖矿,而黑色链之前发生的所有交易(其实只有其中那一笔交易是伪造的)就回滚了。

这样,作恶节点人是不是把这10个比特币花费了二次呢?他即在交易所充值成功,又把比特币拿回去了,可恶啊!!! 交易所就白白损失了10个BTC。

这基本上就是双花攻击的原理。

当然,比特币史上还没有发生过51%攻击,目前想要攻击更加难上加难,因为全网算力太大了,想要控制51%算力除非大矿池之间合作,否则需要投入巨大的财力,但这不可能悄无声息的发生。这也体现了比特币的强安全性

59893-tck1gzxprae.png

历史上有趣的事

像主链分叉的事情经常发生,有的人修改源代码,在某个区块高度进行分叉之后,便开始另一条链的开发了,这就是分叉币的由来。

另外,也是解决重大漏洞的办法之一。

历史上,比特币曾被黑客抓住漏洞制造出数十亿枚比特币,后来中本聪通过硬分叉废弃了那条主链。

以太坊历史上也发生过攻击事件,当时最大的The DAO智能合约被黑客攻击盗走了大量的ETH,最后以太坊组织为了避免如此重大的悲剧采用了硬分叉回滚的方式,创建了另一条链。但同时有一部分人认为这显示违背了区块链的去中心化,坚持不硬分叉仍然在原来的链上开发,这便是ETC(以太经典)的由来,其实ETC才是原来的以太坊,只不过开发团队不是以太坊的团队。

币安在今年曾被黑客盗走了7000枚比特币,曾有人建议赵长鹏联合大矿池,拥有绝对算力的情况下,可以采用软分叉的方式废弃原来的区块,但是后来币安还是没有这样做。

在比特币早期,曾有过单个矿池算力接近50%的情况,但是矿工们主动从矿池撤离并转移到其它矿池,已达到平衡算力的目的。