Bitcoin Gold 51% 攻擊簡介
最近準備教材的時候又研究了一下在 2018 年五月針對 Bitcoin Gold (BTG) 的攻擊,用圖片輔助解釋當時發生了什麼事情。這次的攻擊 Bitcoin gold 官方有整理了一篇講解攻擊如何進行的文章 Anatomy of a Double-Spend / 51% attack 寫得非常清楚,你也可以直接看此文就可以了解發生什麼事。
因為 Medium 上面 BTC 跟 BTG 長得很像,以下我都用 比特幣
跟 比特黃金
來代稱。
前置條件
首先由於 Bitcoin Gold 的總體算力偏低,攻擊者已經先掌握了 Bitcoin Gold 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 萬美金才可以發動此類型的攻擊。