處於弱勢的 PoW 幣種遭受 51% 攻擊,受害者有能力在原始鏈上租用算力並進行挖礦,趕超攻擊者鏈。

原文標題:《反 51% 攻擊:哈佛 MIT 學者提出抗擊雙花新理論》(Reorgs on Bitcoin Gold: Counterattacks in the wild)
撰文:James Lovejoy、Dan Moroz、Neha Narula
編譯:灑脫喜

歷史上區塊鏈世界曾多次發生 51% 攻擊,而它們都發生在小幣種的身上,而據哈佛大學和 MIT 的研究者表示,他們在觀察到的 40 次重組攻擊中,還看到了可能的反攻擊案例,在 2020 年 2 月份,Bitcoin Gold 區塊鏈上疑似出現了攻擊者與防禦者的多輪對攻情況,對此,研究者提出了防禦 51% 攻擊的反擊理論。

對 51% 攻擊發起反擊?瞭解哈佛與 MIT 學者提出的雙花攻擊反擊理論圖片來自 tuchong.com

以下是譯文:


比特幣和其它工作量證明(PoW)加密貨幣的經濟安全性,取決於重寫區塊鏈的成本。如果 51% 攻擊在經濟上是可行的,則攻擊者可以向受害者發送一筆交易,發起攻擊,然後雙花同一筆幣。中本聰(Satoshi Nakamoto)認爲這種情況是不會發生的,因爲大多數礦工會發現,誠實地遵守協議要比攻擊區塊鏈更有利可圖。

而最近的研究表明,攻擊加密貨幣的成本差異是非常大的,這取決於諸如算力的流動性,對幣價的影響以及重寫區塊鏈所需時間等因素。在某些情況下,攻擊甚至可能是免費的。截至 2020 年 3 月,對於像比特幣這樣的區塊鏈,礦工們已經在挖礦設備上進行了大量的先期投資,並且他們不願意把大比例算力拿出去出租,因此今天要對比特幣發起攻擊,其成本可能是非常高的。然而,其它一些幣種的情況則大爲不同,市場上有足夠可租用的算力,可供發起經濟而高效的 51% 攻擊,並且在現實當中,我們已經觀察到攻擊者對這些幣種發起的雙花攻擊。使用 NiceHash 這樣的算力市場,買賣雙方可以輕鬆地進行對接。

現在,人們通常認爲,低算力的幣種(所屬 PoW 算法類別中算力較低的幣種),會因爲算力租賃市場的存在而容易遭受廉價的 51% 攻擊,並且它們是不安全的。

在最近發表的題爲《針對雙花攻擊的反擊》這一論文中,我們討論了一種策略,以防止處於弱勢的 PoW 幣種遭受 51% 攻擊:受害者可以發起反擊。我們證明了受害者有能力在原始鏈上租用算力並進行挖礦,在發生攻擊時趕超攻擊者鏈,在平衡狀態下這可以阻止攻擊的發生。研究結果在以下假設下成立:(1)受害者遭受了中等程度的聲譽損失,而攻擊者則沒有(例如,如果受到攻擊,交易所可能會遭受負面聲譽影響,而匿名攻擊者則沒有),以及(2)攻擊的淨成本隨着時間的推移而增加(例如算力的上升等)。雖然在我們撰寫這篇論文時,並沒有證據能夠確定現實世界中存在針對雙花攻擊的反攻情況,但我們最近確實觀察到了這種可能。

對 51% 攻擊發起反擊?瞭解哈佛與 MIT 學者提出的雙花攻擊反擊理論上圖顯示了反攻遊戲的三個階段,綠色表示當前最重的公共鏈(即規範鏈),白色表示較小的分支鏈。最上面的階段顯示了一次 51% 攻擊的開始,其中攻擊者 A 向防禦者 D 發送了一筆交易,但這筆交易是在一條替代鏈上,它的目的是使原始交易無效。第二個階段顯示了雙花交易的揭示,其中攻擊者鏈成爲了最重鏈(規範鏈)。第三個階段顯示了防禦者 D 反擊的結果,在此過程中,D 是在原鏈上進行的挖礦,並超過攻擊者 A 的區塊鏈

2019 年 6 月份,我們實現並運行了一個重組跟蹤程序,該跟蹤程序監控了 23 個目前最受歡迎的工作量證明(PoW)區塊鏈。對於每一個幣種,跟蹤器都會檢測並保存所有鏈頂端(chaintip)上的數據。截至目前,它已在 Vertcoin、Litecoin Cash、Bitcoin Gold、Verge 以及 Hanacoin 這些幣種上觀察到了 40 次至少六個區塊深度的重組攻擊。

關於 Bitcoin Gold 的重組攻擊和反擊

Bitcoin Gold (BTG)是於 2017 年 10 月 24 日從比特幣分叉出來的,截至 2020 年 3 月 10 日,它的市值爲 1.68 億美元。Bitcoin Gold 並沒有使用比特幣的 SHA256 算法,而是採用了 ZHash 抗 ASIC 算法,這意味着礦工可以使用 GPU 進行挖礦。與 BTC 不同,BTG 每個區塊都會進行難度調整。

然而,BTG 遭受了多次雙花攻擊,其中最大規模的一次 51% 攻擊發生在 2018 年 5 月份,當時有 388,000 BTG (當時約爲 1800 萬美元)被偷。而在 2020 年 1 月和 2 月份,BTG 再次受到了雙花攻擊。通過重組跟蹤器,我們可以在 2020 年 1 月 23 日-2020 年 2 月 5 日之間觀察到 8 次 BTG 重組。其中有 4 次是有雙花的,涉及到 12,858 BTG (約合 15 萬美元)。

在 2 月份,我們注意到,BTG 鏈上似乎上演了一場了反擊遊戲。一開始,這只是一次典型的重組攻擊,其中一筆交易在一次雙花中被逆轉,但隨後又出現了雙花被逆轉的情況,這使得原始交易再次有效。2 月 8 日,攻擊者和反擊者在 2.5 小時內來回進行了 4 次大戰。最終,原來的區塊鏈被修復,所以這筆雙花並沒有成功。2 月 9 日和 2 月 11 日,我們觀察到了稱之爲「one-shot」的反擊:攻擊者製造了一次重組,而防禦者只進行了一次反擊,就恢復了原來的區塊鏈。

在 2 月 8 日發生的反擊遊戲中,雙方爭奪的是兩筆交易 757 和 d5f (譯者注:tx 的縮寫),攻擊者將它們替換爲交易 50d 和 f38。AbC 和 AYP (注:地址的縮寫)這兩個地址總共被偷了 4390 BTG (約合 44000 美元),這些幣被髮送到了 GVe 和 GYz。最終的重組深度爲 23,這將爲礦工帶來大約 290 BTG (3000 美元)的區塊獎勵,約雙花總收入的 7%(關於更多詳細,請參閱此處)。注意,在每一對交易中,第二筆交易花費了第一筆交易的輸出,即如果第一筆交易由於雙花而無效,則第二筆交易也將無效。因此,我們可以把它們視爲一個單元。兩個單元有相同的輸入,但有不同的輸出,我們將其解釋爲被盜的地址。

接下來,我們將說明 2 月 8 日發生的反擊遊戲的挖礦動態。你可以在這裏看到來自兩條鏈的帶時間戳的區塊列表。我們稱這些地址爲「防禦者」,當原始鏈不是工作量最大的區塊鏈時,「防禦者」將在原始鏈上獲得挖礦獎勵。而那些一直跟隨工作量最多鏈(即從未在少數分支鏈上挖礦)的礦工,則被認爲是「旁觀者」。

我們的節點在在 UTC 時間 06:56 開始觀察到了 4 次重組。第一次重組將原區塊鏈的最後 9 個區塊替換爲 9 個新區塊。在新的區塊鏈中,每個區塊中都有兩個攻擊者地址:GKGUq2p 和 Gh46Jw1,並且在分叉區塊(block 619935)之後的第一個新區塊中有雙花交易。然後,在 UTC 時間 07:35,我們的節點觀察到了另一次重組,其在原始鏈上又挖了另外 4 個區塊(難度更大)。而防禦者則是 GbWi6y7 和 GSsjeTZ,雙方反覆進行了交戰,之後,攻擊者以放棄告終,並在 UTC 時間 08:58 挖了最後一個區塊。根據區塊中的時間戳以及節點觀察到的重組世界,我們對時間軸的最佳猜測如下:

  1. 4:04 ,攻擊者開始從 619934 高度的區塊挖礦,並在高度 619935 挖取了一個區塊,並進行了雙花;
  2. 6:55,攻擊者挖了 9 個區塊,其所在鏈超過了現有鏈;
  3. 6:56,我們的節點觀察到並重新定位到攻擊者的區塊鏈。「旁觀者」礦工切換至攻擊者的區塊鏈,並將其延長了 2 個區塊;
  4. 7:20 防禦者開始挖礦,並延長原始鏈上未被攻擊的區塊(區塊高度 619943);
  5. 7:33 防禦者在挖到 4 個新區塊後超過攻擊者的區塊鏈;
  6. 7:35 我們的節點觀察到並重新定位到防禦鏈。「旁觀者」礦工切換到防守鏈;
  7. 7:53 攻擊者再次開始挖礦,擴展自己的攻擊鏈,該鏈有兩個附加的「旁觀者」區塊;
  8. 8:22 防禦者在 12 個區塊之後停止挖礦;
  9. 8:58 攻擊者在超過防禦者 11 個區塊之後,也停止了挖礦;
  10. 9:00 我們的節點觀察到並切換至攻擊者更深的重組鏈;
  11. 9:14 防禦者再次開始挖礦;
  12. 9:27 防禦者在原始鏈超過攻擊者鏈後,繼續挖礦;
  13. 9:28 我們的節點重新定位到防禦者的重鏈上;
  14. 10:20 防禦者減少投入算力;
  15. 12:15 防禦者停止挖礦。

算力從何而來?

我們沒有確鑿的證據能夠證明觀察到的任何 BTG 重組,其算力是否來自於 Nicehash。這種不確定性,是由於在沒有主動攻擊的情況下,BTG 上的出現的價格和可用算力的大幅波動造成的。

這與我們最近在 Vertcoin (VTC)雙花攻擊中觀察到的 Lyra2REv3 (從 Nicehash 市場租用了算力)形成了對比,在這次攻擊中,我們清楚地看到算力的價格在攻擊期間出現了飆升,而攻擊後又回到了基線。

算力可用性和價格的峯值頻率,使得我們很難將看到的峯值歸因於攻擊。然而,市場上有足夠的 ZHash 算力可被用於執行 BTG 攻擊,並且存在與檢測到的重組事件一致的算力峯值。

對 51% 攻擊發起反擊?瞭解哈佛與 MIT 學者提出的雙花攻擊反擊理論檢測到的重組期間 Nicehash ZHash 市場總結,紅線表示重組事件的時間

攻擊理論

實際上,攻擊可通過在 Bitcoin Core 節點上調用一個命令來完成,因此攻擊者可能不需要編寫任何新代碼。

例如,攻擊者可能執行了以下操作:

  1. 使用 Bitcoin Core 節點進行一筆支付,並等到它被區塊納入;
  2. 在包含支付交易的原始鏈中區塊調用 invalidateblock (在高度 619935);
  3. 斷開與對等式網絡的連接,然後清除 mempool 以刪除現有的支付交易;
  4. 在其錢包上進行 rescan (重新掃描)工作,使原始支付交易中使用的輸出可再次使用,並生成一筆新的交易,將相同的輸出花費到新的目的地輸出,這將和原始交易發生衝突;
  5. 正常挖礦,直到其所在鏈比原始鏈有更多的工作量,然後重新連接到對等網絡,以通知其他節點,讓它們參與這個替代鏈;

而防禦者只需在包含雙花交易的攻擊者區塊上調用 invalidateblock,這將導致其節點繼續在原始鏈上挖礦,而不是重新定位到攻擊者鏈。

有可能在最後兩個案例中,攻擊者在看到受害者正在反擊時立即停止了攻擊。也許攻擊者知道,如果受害者能夠進行反擊,就不值得去和他們對戰。在幾乎所有的區塊對戰中,防禦者的地址都是 GSsjeTZ。在 2 月 1 日之前,這個地址從未使用過,而在反擊戰發生後,其也沒有被用於挖礦。

然而,這可能不是一個故意的復仇遊戲。在這裏我們討論下其他的可能性。

可能性 1 :測試

一種解釋是,所謂的反擊實際並不是反擊,而是由一個試圖測試反擊軟件的實體模擬的。大家可以想象,一家交易所、商家或者有核心開發者已經編寫了一個基礎設施,以便在發生深度重組時自動反擊,他們希望測試自己的軟件是否能夠正常工作。這可以解釋爲什麼在 2 月 6 日發生的反擊沒有任何雙花。

可能性 2 :礦工之戰

礦工們可能一直在互相進行反擊,這不是因爲其中一人或兩人有興趣追回雙花的資金,而是爲了偷竊,然後追回區塊獎勵。再一次,2 月 6 日的反擊沒有雙花的事實,也支持了這一理論。

可能性 3 :網絡分裂

這可能是 Bitcoin Gold 中存在的一個短暫、重複發生的網絡分裂。有可能在同一時間,某個客戶端錢包廣播了一筆交易,該交易將花費的輸出加倍到分裂鏈的另一端。我們不知道是否有 Bitcoin Gold 錢包軟件能做到這一點。區塊時間戳與此是不一致的,這表明礦工是積極在挖礦的,然後停止了幾次。而時間戳也存在可能是僞造的。攻擊者和防禦者的地址,在攻擊前後,都沒有再被使用過。

可能性 4: 軟件漏洞

有可能是因爲參與挖礦的軟件存在某種漏洞,導致他們無法在最長鏈上挖礦,或者他們意外地調用了 invalidateblock。

可能性 5: 偶然的機會

另一種可能,則是兩個大型礦工恰好在同一時間發現了區塊,這種分裂的概率是很低的。這似乎不太可信,因爲時間戳沒有反映這一點,並且最長的重組是 23 個區塊;

結論

算力市場的日益發展,可能會破壞工作量證明(PoW)加密貨幣的安全性。然而,儘管流動算力市場的存在表明一條弱鏈是容易受到攻擊的,但受害者反擊的可能,在平衡狀態下有可能阻止攻擊。如果這種力量的平衡,足以保護區塊鏈,那麼這就提出了一個問題,即需要多少工作量才能防止攻擊?

在這項研究工作中,我們只考慮了一個理性的攻擊者,而如果存在非理性的攻擊者,其可能不在乎在 51% 攻擊中損失的金錢,這使得他們要比潛在的反擊者更具有優勢。對於這樣的破壞者來說,51% 攻擊的成本可能仍然是重要的威懾力量,正如今天比特幣所擁有的那樣。

致謝:我們要感謝《針對雙花攻擊的反擊》論文的共同作者 Dan Aronoff 和 David Parkes。也感謝 Tadge Dryja、Madars Virza 和 Gert Jaap Glasbergen 對這項工作的有益反饋。

來源鏈接:medium.com