原文來源:Paradigm
原文作者:Georgios Konstantopoulos,Vitalik Buterin
原文編譯:ETH 中文站
最近有人在討論礦工是否可能採用一個還不存在的、修改過的以太坊客戶端,主要為了使礦工可以接受賄賂,對區塊鏈進行短程的重組(創造這種賄賂的主要用例是攻擊DeFi 協議)。
在這篇文章裡,我們將解釋這個攻擊向量為什麼在以太坊2.0 合併後更難執行。
分叉選擇規則是一個函數,由客戶端來求值,函數把區塊集和見過的其他訊息當作輸入,然後把「權威鏈」的內容輸出給客戶端。之所以需要分叉選擇規則,是因為可能有多條有效鏈可選 (即如果同一個父區塊有兩個競爭子區塊同時發布)。
重組(reorg) 是這樣一種事件-本來屬於權威鏈的區區塊變成不再是權威鏈的一部分了,因為有一個競爭區塊把它擊敗了。最終確定性是這樣一種情況——分叉選擇規則強有力地支持某個區塊,以至於該區塊在數學上不可能被重組 (或至少是經濟行不通)。
在有些分叉選擇規則裡(例如Tendermint),重組是不可能發生的;分叉選擇規則只透過添加任何已經透過BFT (拜占庭容錯共識協議) 共識、最終敲定的區塊來擴展現有的鏈。在其他分叉選擇規則裡,重組是很常見的。

在以太坊這樣的PoW 區塊鏈裡,我們通常看到的是「最長鏈規則」(或更準確地說,是「最高總挖礦難度規則」)。這意味著,當客戶端看到兩條區塊鏈時,它會選擇總難度 (即該鏈裡所有區塊的難度總和) 最高的那條。
p>
為了方便舉例,假設區塊難度可以是100 或110,想像以下這樣的場景:

1、我們從難度為100 的區塊1 開始同步。
2、區塊2a 和3a 都以難度100 到達,我們把它們嵌入到我們的區塊鏈裡,構成總難度為300 的分叉。
3、區塊3b 以難度110 到達,並聲稱2a 是它的父區塊,構成總難度310 的分叉。分叉選擇規則會發現目前「最重」的鍊是第二個分叉,然後轉為選它。這種情況屬於 1 個區塊的重組,因為只有區塊 3a 被改變了。請注意,區塊不是直接被丟棄的,因為新到達的區塊可能會導致分叉選擇轉為選擇第一個分叉。
4、區塊2b 和3c 都以難度110 到達,構成總難度為320 的新分叉。這意味著分叉選擇規則現在將使用 2b 而不是 2a,3c 而不是 3b,區塊 2a 和 3b 都曾在上一條權威鏈裡。這種屬於 2 個區塊的重組。
讀者應該可以看到邏輯是怎麼發展下去的。如果一個新區塊 4a 到達並聲稱 3a 是它的父區塊,分叉選擇規則會轉為選第一個分叉,如此類推。
由於延遲,短程的重組經常發生。礦工 A 和礦工 B 可能同時找到一個有效區塊,但由於區塊是在 p2p 網路裡廣播的,部分網路可能先看到礦工 A 的區塊,而另一部分先看到礦工 B 的區塊。如果兩個區塊的難度相同,就會出現平局,客戶端端要麼隨機選擇,要麼選先看到的區塊。通常,當第三個礦工 C 在礦工 A 或 B 構建的區塊上建立了一個區塊時,另一個區塊就會被遺忘。偶爾運氣不好還會導致 2-5 個區塊重組。比那更長的重組幾乎總是由於極端的網路故障、客戶端漏洞、或惡意攻擊。
短程重組並不致命,但對網路的確會帶來一些嚴重的有害後果:
· 節點開銷:當一起重組發生時,因為需要轉用新的分叉,可能需要重新執行交易或狀態編輯,節點會有一些記憶體和磁碟開銷。
· 使用者體驗下降:可能重組意味著使用者需要等待更長的時間,才能安全處理需要「被確認」的交易。這方面的一個重要子用例是交易平台等企業在接受存款前需要等待更長的時間。
· 交易背景的不確定性:當一個使用者傳送一筆交易時,他們會更不確定該筆交易會在什麼背景下執行(例如,最新的N 個區塊會被回滾嗎)。顯然,這會使 DeFi 交易更容易出現意外的失敗、比預期更糟的交易結果、或有害的 MEV 提取。
· 更容易受到51% 攻擊:在以最長鏈作為分叉選擇規則的系統裡,如果區塊鏈從選擇B1 轉為B2 進行重組,那麼B1 的難度不再為鏈提供安全性。攻擊者不再需要擊敗所有誠實礦工,他們只需擊敗沒被重組的那部分誠實礦工。如果重組進行得頻繁,這會讓攻擊變得容易很多。
在最壞的情況裡,頻繁的重組會使區塊鏈的結算保證完全失效,並阻止它繼續進行。正常來說,對於出塊者來說,「激勵相容」的策略應該是延長最長的鏈。但如果某個區塊執行後的狀態異常有利可圖呢 (例如,交易費很高,或只有直接在該區塊後構建新區塊才能提取 MEV) 呢。這個問題在過去討論「沒有區塊獎勵的比特幣」和自私挖礦問題上探討過,而在今天「以太坊生態裡 DeFi 相關的 MEV" 問題上也探討過。
這些情況都存在著強烈的動機試圖透過與其他區塊競爭」竊取「費用,而不是延長權威鏈。在下面的例子裡,區塊1 的執行後狀態非常有利可圖,且區塊2a 已經被挖了。然而,不是一個,而是三個出塊者已經選了在區塊1 上繼續挖,而不是區塊2a (以獲得區塊1 後顯露出的MEV),這可以擴展到任意數量的出塊者。

很明顯,這樣的模式為惡意 51% 攻擊打開了一扇大門。我們把礦工參與這種重組挖礦策略的情況稱為”短視理性“,因為決定這樣做在短期內可能是理性的。但是,他們都或顯式地(質押者) 、或隱式地(礦工) 看漲ETH (因為交易費和區塊獎勵都是以ETH 計價的),這意味著這種減少用戶對以太坊信任的攻擊是與他們的最佳利益有衝突的,因此在長期來說是不理性的。演算法裡,區塊在分叉選擇裡是被」連續「敲定的。首先,當一個區塊被挖,此時一個競爭區塊有可能可以對其進行重組。如果一個區塊成功被打包進權威鏈,(平均) 13 秒後會有其他礦工在該區塊上構建第二個區塊。塊,對鏈進行重組的難度會持續上升,但速度很慢。信標鏈實現的是一個名為Gasper 的權益證明協議,其分叉選擇規則稱為LMD-GHOST。>
· 提議者:負責提議區塊的一名驗證者
p>
· 證明者:由一組驗證者構成,他們對應該成為權威鏈鏈頭的區塊進行投票。的“權重”。控制了證明者意味著控制了分叉選擇規則。
每 12 秒就有一個 slot,代表提議一個區塊的機會。在每個slot 裡會有一個混洗演算法偽隨機地選出一個委員會,這個委員會由所有驗證者數的大約1/32 組成,其中每個委員會裡的一名驗證者會作為提議者,其餘的驗證者作為證明者。證明者同時對他們認為應該被打包到權威鏈的區塊進行投票。因為委員會是透過偽隨機採樣組成的,攻擊者是沒有辦法把他們的驗證者都集中到一個單一 slot 裡的。
當前,信標鏈有大約19.6 萬名驗證者,意味著每個slot 裡的委員會人數大約是6125。因此,即使是一個區塊的重組也是極其困難的,因為一個只控制了一些驗證者的攻擊者是無法擊敗數千名誠實的多數驗證者的。
為了更好理解為什麼是這樣,讓讓我們看看以下這個例子:有2 個slot 和24 位驗證者,其中9 位是惡意的。驗證者被分成 2 個委員會,經過隨機混洗,對手不太可能可以控制他們被分配到的委員會人數的 50%,更不能實現重組。

更正式地說,擁有p% 質押量的惡意行為者控制N 位驗證者大小委員會的50% 以上的機率遵循二項式分佈(其中k = N/2 ):

算出多個質押值的機率後,我們得到下表:

現在我們了解到,攻擊者如果想直接進行重組的話需要控制總驗證者數的50%。
如果控制證明者的25-49% (參閱此論文、或這裡的摘要),控制者還是可能發動一些較小的攻擊的。但是,對這些攻擊已經有修復方法了,它們可以被悄悄執行,從而達到接近 50% 的無條件安全性。
最後,長程重組是不可能了,因為所有比過去兩個epoch 更深的區塊都會被認為「最終確定了」,也就是說,對它們進行回滾是不可能的了。如果一個攻擊者造成兩個衝突區塊被最終確定了 (例如,控制了 67% 的質押量),系統需要倒回去,透過社會性幹預來恢復。
現在我們了解了在不同的分叉選擇規則下重組是如何發生的,不妨透過一個簡單的博弈論例子來了解,對於礦工或驗證者來說,什麼時候運行軟體來執行重組以獲利是有意義的。
p>
我們可以用收益矩陣非正式地描述每個場景,其中「叛變」意味著「下載並使用執行重組的軟體」。收益是「短視的」,沒有考慮長期後果。
在最長鏈PoW 裡,即使是驗證者集裡的一小部分人,也有可能實現短程重組。執行後狀態是異常有利可圖的區塊總是會偶爾出現,即使是 1-10% 的成功幾率也值得嘗試,與該區塊現有的子區塊進行競爭。
礦工可以形成一個中型礦池,等待找到未來連續2-3 個區塊的機會,或把部分他們的收入發送到一個任何人都可以認領的合約,以賄賂其他礦工也運行相同的軟體,以構建他們的區塊鏈,幫助它擊敗現有的權威鏈。
因此,有些礦工可能會嘗試執行重組客戶端。

在Gasper 裡,重組1-64 個slot 是可能的,但需要攻擊者控制整個驗證者集的大部分(由於他們不能把他們的押金集中在某個特定的slot,所以他們的質押量需要足夠大才能在他們想要攻擊的slot 裡被隨機選中)。採用重組挖礦軟體用處不大,除非有非常大量其他驗證者也同時採用。
因此,如果51% 的驗證者都稍微有點利他精神或懶惰,那麼沒有人會運行重組挖礦軟體這件事基本上可以確定。

在 Tendermint 裡,事情會更加簡單:重組是完全不可能的,任何違反單一 slot 最終敲定規則的實作都需要超過三分之一的驗證者被罰沒。與 Gasper 的情況相似,這也意味著沒有人會運行重組挖礦軟體這件事基本上可以確定。

從上面我們可以看出,儘管在三種情況裡採用"reorg geth" 都是可能的,基於並行證明這個理念的分叉選擇規則比Nakamoto 分叉選擇規則帶來更穩定的誠實平衡。
在以太坊的脈絡裡,最有效的預防措施是進一步加速合併的工作,特別是趕快發展出能實現可接受的「緊急合併」的能力,以將以太坊轉化為PoS 機制。倉促合併會帶來很高風險,還會毀壞基礎設施,但如果很多礦工開始對鏈進行重組攻擊的話,還是需要一個可信的承諾來抵禦這樣的行為。
接近合併的時候就是風險最大的時候,因為礦工仍然主導著這個系統,但他們的時間不多了。然而,有兩個因素會緩解這個風險:
· 以太坊礦工經常同時是( i) 其他區塊鏈的礦工,和/ 或(ii) 以太坊社群具有其他能力的成員,因此作出良好行為的動機會持續存在。
· 隨著合併臨近,實現緊急合併的成本和風險都在降低。在預計合併日期的前幾個月進行緊急合併是非常破壞性的。在預計合併日期的前兩週進行緊急合併則能為驗證者操作員已經下載好的用戶端提供參數設定。
合併後,重組驗證將成為一個更小的問題,因為單一驗證者或小群體證明者無法獨自重組一個區塊。成功的重組攻擊需要解決讓大部分驗證者同時參與的協作難題。但是,還是存在一些小風險的。如果想要進一步提高安全性,那麼以太坊可以要么進一步調整分叉選擇規則,將重組攻擊的要求提到到 50% 的理論最大值;要么轉為直接單個 slot 實現最終敲定的共識。
致謝:感謝 Dan Robinson、Anish Agnihotri、Kevin Pang、Dave White 和 MEVIntern 對本文草稿的評論。
原文連結
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia