比特黄金(BTG) 51%攻击简介

最近准备教材的时候又研究了一下在2018年五月针对比特黄金 (BTG)的攻击,用图片辅助解释当时发生了什么事情。这次的攻击比特黄金官方有整理了一篇讲解攻击如何进行的文章Anatomy of a Double-Spend / 51% attack写得非常清楚,你也可以直接看此文就可以了解发生什么事。

因为Medium上面BTC跟BTG长得很像,以下我都用比特币跟比特黃金来代称。

前置条件

首先由于比特黄金的总体算力偏低,攻击者已经先掌握了比特黄金 51% 的算力了(不管是自建机器或是利用算力租赁服务NiceHash),因此才能发动此次攻击,虽然要花很多钱准备这些算力,但是获得的回报更高,所以才会有这样的攻击。

另外一个关键就是在区块链协定当中,在同时都有数条都是合法的区块链时,矿工们会优先采纳长度较长的那条,因为他花费的工作量较高。

手法

假设我们目前在block编号200,000,攻击者在自己的钱包A拥有1,000 比特黃金,而被作为目标的交易所在确认10个区块后将会把交易设为合法交易。

因为攻击者拥有了51% 算力,所以我们这边可以看成有两群矿工,一群是好矿工,另外一群是攻击者拥有的坏矿工,而这两组矿工将产生两条不同的区块链。

攻击者在block 200,001把钱包A的1,000 比特黃金转帐入交易所的钱包,并且广播给好矿工。同时他广播了另外一个交易:从钱包A将1,000 比特黃金转帐给另外他自己另外一个钱包B,此笔交易只存在于坏矿工所产生的区块上。

此时在block #200,001 上面收录了两个截然不同的交易,并且不存在于另外一边的区块链上,而且这两笔交易都是合法的:

  • 好矿工:转帐给交易所
  • 坏矿工:转帐给攻击者的钱包 B

接下来等待交易所在好矿工那边过了10个区块确认此笔交易时,同时攻击者利用自己的51%算力让坏矿工造出了比好矿工更多的区块,而且这条区块链的纪录中从来没有把这1,000 比特黃金转给交易所,而是转到了攻击者的钱包B。

等到10个区块确认,交易所确认汇款已经完成后,攻击者马上利用这1,000 比特黃金去换成比特币,接着马上提领到他自己的比特币钱包

此时攻击时机已经成熟,假设这时好矿工算出了#200,011 到#200,012 的区块,但是由于坏矿工的算力更强,已经算出了#200,014 的区块,攻击者将自己拥有的坏矿工手上的区块广播到所有矿工的手上。

此时好矿工发现坏矿工的区块链长度比自己手上的更长,而且是合法的区块链。根据协议中矿工会采纳工作量更高、区块长度更长的区块链的这个规则,此时他们就会相信坏矿工所释出区块链才是正确的区块链,并且把自己手上只有到#200,012 的区块链替换成坏矿工释出的区块。

而这条坏矿工所提供的区块链上则从来没有将比特黃金转帐给交易所,但是由1,000 比特黃金交易而来的比特币此时已经转帐号攻击者的比特币钱包了,因为比特币跟比特黃金是不同的区块链,所以就算比特黃金的区块链已经重组了,仍然不会影响到比特币的区块链。最后比特黃金的网络将会认为原本坏矿工的那条区块链才是正确的链,等于攻击者在没有将钱转帐的交易所的状况下买了比特币。

比特币或以太币有没有可能受到类似的攻击?

不太可能,比特黄金会发生这起攻击事件的原因在于比特黄金的总体算力太低,加上现在在NiceHash 上面就可以租用算力,这两个条件加在一起就导致了这起事件。

根据crypto51上面的数据,NiceHash上面仅拥有比特币1%的算力可供租用,所以无法透过租赁算力的方式达成。如果不是租赁算力而要自建矿机攻击的话,根据gobitcoin上面的成本估算需要约花费80亿美金建制硬件(此金额会浮动),并且每日电费500万美金才可以发动此类型的攻击。

本文链接地址:https://www.wwsww.cn/qtszb/6288.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。