比特黃金 --算力集中與 51% 攻擊簡介

評論
Photo Credit:Reuters
Photo Credit:Reuters
評論

本篇原文刊登於 Medium,原標題《Bitcoin Gold 51% 攻擊簡介》INSIDE 獲授權轉載。關於作者 Yuren Ju 為 Taipei Ethereum Meetup 社群成員,除了咖啡與旅遊外,也喜歡動手寫程式解決自己或別人在生活中遇到的疑難雜症,最新的興趣是探索區塊鏈的可能性。

最近準備教材的時候又研究了一下在 2018 年五月針對 Bitcoin Gold(BTG)的攻擊,用圖片輔助解釋當時發生了什麼事情。針對這次的攻擊, Bitcoin gold 官方有整理了一篇講解攻擊如何進行的文章 Anatomy of a Double-Spend/51% attack 寫得非常清楚,你也可以直接看此文就可以了解發生什麼事。

因為字面上 BTC 跟 BTG 長得很像,以下我都用 比特幣 跟 比特黃金 來代稱。

前置條件

首先由於比特黃金的總體算力偏低,攻擊者已經先掌握了比特黃金 51% 的算力了(不管是自建機器或是利用算力租賃服務 NiceHash),因此才能發動此次攻擊,雖然要花很多錢準備這些算力,但是獲得的回報更高,所以才會有這樣的攻擊。

另外一個關鍵就是在區塊鏈協定當中,在同時都有數條都是合法的區塊鏈時,礦工們會優先採納長度較長的那條,因為他花費的工作量較高。

手法

假設我們目前在 block 編號 200,000 ,攻擊者在自己的錢包 A 擁有 1000 比特黃金 ,而被作為目標的交易所在確認 10 個區塊後將會把交易設為合法交易。

因為攻擊者擁有了 51% 算力,所以我們這邊可以看成有兩群礦工,一群是好礦工,另外一群是攻擊者擁有的壞礦工,而這兩組礦工將產生兩條不同的區塊鏈。

攻擊者在 block 200,001 把錢包 A 的 1000 比特黃金轉帳入交易所的錢包,並且廣播給好礦工。同時他廣播了另外一個交易:從錢包 A 將 1000 比特黃金轉帳給他自己另外一個錢包 B,此筆交易只存在於壞礦工所產生的區塊上。

此時在 block #200,001 上面收錄了兩個截然不同的交易,並且不存在於另外一邊的區塊鏈上,而且這兩筆交易都是合法的:

  • 好礦工:轉帳給交易所
  • 壞礦工:轉帳給攻擊者的錢包 B

接下來等待交易所在好礦工那邊過了 10 個區塊確認此筆交易時,同時攻擊者利用自己的 51% 算力讓壞礦工造出了比好礦工更多的區塊,而且這條區塊鏈的紀錄中從來沒有把這 1000 比特黃金轉給交易所,而是轉到了攻擊者自己的錢包 B 。

等到 10 個區塊確認,交易所確認匯款已經完成後,攻擊者馬上利用這 1000 比特黃金去換成比特幣,接著馬上提領到他自己的比特幣錢包。

此時攻擊時機已經成熟,假設這時好礦工算出了 #200,011 到 #200,012 的區塊,但是由於壞礦工的算力更強,已經算出了 #200,014 的區塊,攻擊者將自己擁有的壞礦工手上的區塊廣播到所有礦工的手上。

此時好礦工發現壞礦工的區塊鏈長度比自己手上的更長,而且是合法的區塊鏈。根據協議中礦工會採納工作量更高、區塊長度更長的區塊鏈的這個規則,此時他們就會相信壞礦工所釋出區塊鏈才是正確的區塊鏈,並且把自己手上只有到 #200,012 的區塊鏈替換成壞礦工釋出的區塊。

而這條壞礦工所提供的區塊鏈上則從來沒有將比特黃金轉帳給交易所,但是由 1000 比特黃金交易而來的比特幣此時已經轉帳到攻擊者的比特幣錢包了,因為 比特幣跟比特黃金是不同的區塊鏈,所以就算比特黃金的區塊鏈已經重組了,仍然不會影響到比特幣的區塊鏈。最後比特黃金的網路將會認為原本壞礦工的那條區塊鏈才是正確的鏈,等於攻擊者在沒有將錢轉帳的交易所的狀況下買了 比特幣。

比特幣或以太幣有沒有可能受到類似的攻擊?

不太可能,比特黃金會發生這起攻擊事件的原因在於比特黃金的總體算力太低,加上現在在 NiceHash 上面就可以租用算力,這兩個條件加在一起就導致了這起事件。

根據 crypto51 上面的數據, NiceHash 上面僅擁有比特幣 1% 的算力可供租用,所以無法透過租賃算力的方式達成。如果不是租賃算力而要自建礦機攻擊的話,根據 gobitcoin 上面的成本估算需要約花費 80 億美金建制硬體(此金額會浮動),並且每日電費 500 萬美金才可以發動此類型的攻擊。

評論