作者:jmcook.eth
編譯:隔夜的粥丨巴比特
譯者註:對於即將到來的以太坊合併,作者jmcook.eth 根據大量研究文獻總結出了相關的共識攻擊方式,並提到了一些解決方案。總體而言,在轉向PoS 共識機制之後,攻擊者控制的質押ETH 比例越多,其攻擊的成功機會就越大,而以太坊內置的“胡蘿蔔加大棒”激勵層可以防止大多數的惡意行為,尤其是對於低質押的攻擊者,然而對於34%、51% 或66% 攻擊,可能需要社區協調才能夠解決,因此防范質押權益集中化對以太坊網絡的安全而言將是至關重要的。
感謝Tim Beiko 和Caspar Schwarz-Schilling 對早期草稿的有益評論!
以太坊是一個出了名的對抗性環境,它甚至被比作一個“黑暗森林”(三體中可怕的博弈論概念)。這種聲譽主要來自應用層(不安全的智能合約)或社交層(用戶被操縱放棄私鑰或無意中籤署交易)的弱點,以及從交易存儲池中提取價值(MEV)的機器人的存在。然而,作為小偷或破壞者的老練黑客,也在不斷尋找機會攻擊以太坊的客戶端軟件。客戶端軟件可以將計算機變成以太坊節點,它是定義連接到其他節點、交換信息以及就以太坊區塊鏈狀態達成一致的所有規則的代碼。而對協議層的攻擊,就是對以太坊本身的攻擊。
很快,以太坊客戶端就會進行一次重大升級(稱為“合併”),這會關閉保護以太坊的工作量證明(PoW)算法,取而代之的是一種權益證明(PoS)共識機制。造成這種情況的原因有很多,這在其他文章當中已經有詳細解釋。這將是一場哲學變革,同時也是一場技術變革。
合併到權益證明(PoS)共識機制帶來了可持續性以及可擴展性方面的好處,但另一方面,客戶端軟件的複雜性將會增加,協議的潛在攻擊面也會增加。目前,保護PoW 以太坊區塊鏈只需要運行單個軟件,而在“合併”之後,需要運行的軟件增加到了3 個(執行客戶端、共識客戶端以及驗證器)。
本文概述了以太坊共識層上已知的攻擊向量,並概述了一些防禦這些攻擊的方法。讀者可能需要掌握一些信標鏈的基礎知識才能從本文中獲得最大價值。此外,對信標鏈的激勵層和分叉選擇算法LMD-GHOST 有一個基本的了解,也會對你有所幫助。
這些都是很大的話題。但我在下面的序言中包含了一些非常易懂的入門知識。
序言
激勵層
信標鍊是一個權益證明(PoS)區塊鏈,它使用以太坊的原生加密貨幣ETH 進行保護,希望參與驗證區塊以及識別區塊鏈頭部(head)的節點運營商將ETH 存入以太坊的智能合約中。然後,他們獲得ETH 的報酬以運行驗證器軟件,檢查通過對等網絡接收到的新區塊的有效性,並應用分叉選擇算法來識別區塊鏈頭部。節點運營商現在是“驗證者”,而驗證者有兩個主要角色:1)檢查新區塊並“證明”它們是否有效,2)從總驗證器池中隨機選擇時提出新區塊。如果驗證者在被詢問時未能完成這兩項任務中的任何一項,他們就會錯過ETH 支付。還有一些非常難以意外執行,並且表示有惡意意圖的操作,例如在同一個slot 提出多個區塊,或在同一個slot 證明多個區塊,這些是“可罰沒”的行為,可導致驗證器在從網絡中移除之前燃燒一定數量的ETH(最多為0.5 ETH),這需要36 天。被罰沒的驗證器的ETH 在退出期內會緩慢流失,但在第18 天,當有更多的驗證器同時被罰沒時,它們會受到更大的“相關性懲罰”。因此,信標鏈的激勵結構是獎勵誠實行為者,並懲罰不良行為者。
分叉選擇
分叉選擇算法由每個驗證器運行,其作用是識別區塊鏈的頭部。在完全誠實的驗證器及零網絡延遲的理想條件下,分叉選擇算法實際上是不必要的,因為此時區塊鏈的頂端只有一個區塊。然而,在現實當中,一些客戶端會比其他客戶端更晚接收區塊,從而創建了區塊鏈頭部的多個版本,並且可能存在一定比例的行為不端的驗證器,這些驗證器可能在同一個slot 提議或投票多個區塊。這意味著必須要有某種算法來從多個選項中挑選出真正的區塊鏈頭部。
稍微提一下,信標鏈也會以固定的間隔使區塊鏈固定不變,這被稱為“最終性”(finality)。該過程通過將每個epoch 中的第一個slot 視為“檢查點”來工作。如果一個檢查點從持有存款合約中至少2/3 總質押ETH 的驗證器那裡收集證明(投票),那麼它被稱為“justified”的。一旦該檢查點在其之上有另一個檢查點,它就成為“最終”檢查點。然後,分叉選擇算法只考慮區塊鏈中不合理部分的區塊。證明並最終確定區塊鏈的算法稱為“Casper FFG”,而分叉選擇算法本身被稱為LMD-GHOST(代表“最新消息驅動的最貪婪、最重的觀測子樹”),這是一種用行話表達的方式,即正確的區塊鍊是累積了最多證明(GHOST)的區塊鏈,並且如果從同一驗證器接收到多條消息,則只有最後一條消息才算(LMD)。每個驗證器使用此規則評估每個區塊,並將最重的區塊添加到其規範鏈中。
每個epoch 時期,驗證器需要簽署一份證明,該證明包含兩條關鍵信息:「LMD 投票」和「FFG 投票」。 LMD 投票是驗證器認為區塊鏈頭部的區塊的根,FFG 投票包含目標檢查點和源檢查點的區塊哈希以及epoch,其中源檢查點是鏈已經知道的最近正當檢查點,而目標檢查點是下一個要證明的檢查點。
因此,信標鏈的共識算法是LMD-GHOST 和Casper FFG 的組合,有時我們也將其稱為Gasper。簡單了解了這個背景知識後,我們可以繼續研究這個系統可能受到的一些攻擊方式。
第0 層攻擊
首先,沒有積極參與以太坊(通過運行客戶端軟件)的個人,可選擇針對社交層(第0 層)來攻擊以太坊網絡。儘管這些攻擊從未真正直接影響任何以太坊軟件的執行,但它們會給以太坊帶來風險。第0 層是構建以太坊的基礎,因此它代表了一個潛在的攻擊面,其後果會波及堆棧的其餘部分。以下是我想到的一些例子:
1、跨多個平台發起並持續數月或數年的重大錯誤信息宣傳活動,可能會削弱社區對以太坊路線圖、開發團隊的信任。這可能會減少願意參與網絡安全的個人數量,降低去中心化和加密經濟安全性。
2、針對開發者社區的定向攻擊或恐嚇,這可能導致開發人員自願退出,並減緩以太坊的發展,同時更廣泛地打擊士氣。
3、過度熱情的監管也可以被視為一種第0 層攻擊,因為它可能會迅速抑制參與和採用。
4、知識淵博但惡意的參與者滲透到開發者社區,其目的是通過減少討論、延遲關鍵決策、創建垃圾帖或轉移注意力提案等來減緩進度。
5、故意煽動以太坊社區的不滿情緒,目的是製造足夠的動盪以造成永久性分裂。
6、向以太坊生態系統中的關鍵參與者行賄以影響決策。
在很多情況下,發動L0 攻擊所需的資金或技術知識很少,這使得對社交層的攻擊尤其危險。真正需要的只是時間和惡意的意圖,而不是稀缺的資源。思考第0 層攻擊如何成為一次加密經濟攻擊的倍增器也很有趣。例如,如果審查或最終性逆轉是由惡意的多數質押者實現的,那麼破壞社交層可能會使帶外(out-of-band)社區協調響應更加困難。
防禦第0 層攻擊可能並不簡單,但可以建立一些基本原則。一是保持以太坊公共信息的整體高信噪比,以太坊由社區的誠實成員通過博客、discord 服務器、帶註釋的規範、書籍、播客以及YouTube 創建和傳播。 Ethereum.org 就是一個很好的例子,特別是他們正在迅速將其廣泛的文檔和解釋文章翻譯成多種語言。用高質量的信息和meme 充斥一個空間,是防止錯誤信息的有效防禦措施(信息缺口是脆弱的)。以太坊社區擅長於此,但長期的第0 層安全需要持續致力於創建和傳播高質量信息。
另一個針對社交層攻擊的重要防禦措施,是明確的使命聲明和治理協議。以太坊將自己定位為智能合約L1 中的去中心化和安全冠軍,同時也高度重視可擴展性和可持續性。無論以太坊社區出現什麼分歧,這些核心原則都會受到最低限度的影響。根據這些核心原則評估敘述,並通過EIP(以太坊改進提案)過程中的連續幾輪審查,可能有助於社區區分出好人和壞人,並限制惡意行為者影響以太坊未來方向的範圍。
最後,以太坊社區保持開放並歡迎所有參與者,這一點至關重要。一個有看門人、精英主義和排他性的社區,尤其容易受到社交攻擊,因為這很容易構建“我們和他們”的敘事。另一方面,一個開放和包容的社區是通過開放的討論更有效地消除錯誤信息的社區。部落主義和有毒的最大主義(maximalism)傷害了社區,這會侵蝕第0 層的安全。以太坊通常有一個非常開放的社區,它歡迎新的參與者,但隨著社區規模的擴大,這可能會變得越來越難以維持。對網絡安全有既得利益的以太坊社區成員,應將其在線行為和在現實世界中的行為視為對以太坊第0 層安全的直接貢獻,因為正如我們將在本文後面討論的,強大的社交層是抵禦協議攻擊的最後一道防線。
攻擊者的獎勵
第0 層攻擊可能旨在破壞公眾對以太坊的信任、使ETH 貶值、降低以太坊的採用率,並使以太坊容易被其他競爭鏈超越,或者是削弱以太坊社區,使帶外協調更加困難。然而,攻擊以太坊網絡本身所能獲得的好處並不明顯。
一個常見的誤解是,成功的攻擊允許攻擊者生成新的ETH,或從任意賬戶中提取ETH。這兩種說法都是不可信的,因為添加到區塊鏈的所有交易都由網絡上的所有執行客戶端執行。它們必須滿足有效性的基本條件(例如,交易由發送方的私鑰簽名,發送方有足夠的餘額等),否則它們會簡單地還原。攻擊者實際上可能會針對幾種結果發起攻擊:重組(reorgs)、雙重最終性(double finality)或最終性延遲(finality delay)。
“重組”是對區塊鏈頭部區塊的重新排列。在攻擊中,這旨在確保包含或排除某些區塊,即使它們不在誠實的網絡中。這可能允許攻擊者進行“雙花”,例如,將他們的ETH 發送到交易所並將其兌現成法定貨幣,然後重組以太坊區塊鏈以刪除這筆交易,這樣他們最終能夠拿回ETH 並獲得法幣。或者,重組可能允許老練的攻擊者通過搶先交易(front-running)或尾隨式交易(back-running)從其他人的交易中提取價值(MEV),或者重組可能會持續阻止某人或某些組織的交易被包含在規範鏈中,從而有效地從以太坊網絡中對其進行審查。
最極端的重組形式是“最終性反轉”(finality reversion),它可刪除或替換先前已經確定的區塊。這種情況只有在至少1/3 質押的ETH 被銷毀時才有可能發生,這種保證被稱為“經濟最終性”,稍後我們會詳細介紹。
雙重最終性(Double finality)攻擊的可能性很低,但這種情況會很嚴重,發生時兩個分叉能夠同時確定區塊,從而造成永久性的區塊鏈分裂。這在理論上是可能的,只要攻擊者能夠掌握34% 及以上總質押的ETH,並願意冒險失去它們。然後社區將被迫進行鏈外協調,並就遵循哪條鏈達成共識。稍後我們將詳細探討這些類型的社會協調防禦。
最終性延遲(finality delay)攻擊會阻止網絡達到Casper-FFG 確定鏈的必要條件。這將對以太坊的應用層造成極大的破壞,因為在以太坊之上運行的許多應用都依賴於快速最終性來運行。如果對區塊鏈的最終確定性沒有高度信心,就很難相信建立在它之上的金融應用。最終性延遲(finality delay)攻擊的目的,可能只是為了破壞以太坊,而不是直接獲利,除非攻擊者部署了一些戰略空頭頭寸。
懶惰和發送相互矛盾的消息(Laziness and Equivocation)
任何人都可以運行以太坊的客戶端軟件,即使沒有運行驗證器。人們這樣做是因為它提供了區塊鏈的本地副本,可用於非常快速地驗證數據,並使交易能夠私下提交給以太坊網絡,而無需通過中心化的第三方(例如Infura 或Quicknode)。然而,不同時運行驗證器的節點運營商,就無法參與區塊生產或驗證。這意味著他們根本不會影響到網絡安全。非驗證節點運營商攻擊信標鏈的可能性可以忽略不計,除非他們也發起不相關的第0 層攻擊。
要向共識客戶端添加一個驗證器,用戶需要在存款合約中質押32 ETH。通過一個活躍的驗證器,用戶開始通過提議和證明新區塊來積極參與以太坊的網絡安全。在承擔這些額外責任的同時,用戶以ETH 的形式獲得回報,但這也給他們帶來了報復行為的新機會。驗證者現在有了發言權,他們可以用於影響區塊鏈的未來內容,他們可以誠實地工作以增加他們的ETH 儲備,或者他們可以冒著風險,嘗試操縱這個過程以實現自己的利益。發起攻擊的一種方法是累積大比例的質押權益,然後用它來擊敗誠實的驗證者。攻擊者控制的質押權益比例越大,他們的投票權也就越大,尤其是在我們稍後將探討的某些經濟里程碑上。然而,大多數攻擊者將無法積累足夠的ETH 來實現這種攻擊方式,因此他們不得不使用微妙的技術來操縱誠實的大多數人以某種方式行事。
從根本上講,所有針對信標鏈的小規模質押攻擊(small-stake attacks)都是兩種類型的驗證器錯誤行為的細微變化:活動不足(未能證明/提議或延遲執行)或過度活動(在一個slot 時間段中提議/證明次數過多)。在最普通的形式中,這些行為很容易由分叉選擇算法和激勵層處理,但有一些聰明的方法可以讓這些算法對攻擊者有利。目前已經發現了幾種這樣的技術,主要是仔細協調其消息的時間和傳播,以控制整個驗證器集的不同子集如何查看區塊鏈的狀態,從而控制它們的行為方式。下一節將描述低質押(low-stake)攻擊者攻擊網絡的一些方式,以及如何抵禦這些攻擊。
小型質押者的攻擊
短程重組(Short range re-orgs)
有幾篇論文解釋了針對信標鏈的攻擊,這些攻擊僅使用了一小部分質押的ETH 來實現重組或最終性延遲攻擊。這些攻擊通常依賴於攻擊者向其他驗證器隱瞞一些信息,然後以某種微妙的方式或在某個適當的時候發布它。這些攻擊通常旨在從規範鏈中替換一些誠實的區塊。當攻擊開始時,這些誠實的區塊尚未被創建,這種攻擊被稱為事前重組(ex ante reorg),而不是事後重組(在這種重組中,攻擊者回顧性地從規範鏈中刪除已經驗證的區塊)。在PoS 以太坊中,如果不控制2/3 質押的ETH(按當前價格計算約為180 億美元),事後重組實際上是不可能的。如果攻擊者控制的質押權益百分比少於66%,則攻擊者完成事後重組的機會非常低(即使攻擊者控制了65% 的質押權益,他們的成功機會也小於0.05%)。
圖:由控制2/3 質押權益的攻擊者執行的事後重組攻擊。他們忽略了在slot N+1 中提出的誠實區塊B,而是投票支持區塊N 作為區塊鏈的頭部。然後他們投票給slot N+2 中的區塊C,同時,因為分叉選擇規則看到來自前一個而不是當前slot 的證明,他們在slot N+2 中投票給區塊B,而不誠實的驗證者投票給區塊C。當slot N+3 到達時,兩個分叉都有66% 的權重,然後由競爭區塊哈希的字典順序決定。如果這對攻擊者有利,他們就成功地從區塊鏈中刪除了區塊B。
另一方面,可以很好地防止事後重組的相同機制,可以被老練的攻擊者在非常特定和不太可能的網絡條件下用來創建事前重組。例如,這篇論文展示了攻擊驗證者如何為特定slot n + 1 創建和證明區塊(B),但避免將其傳播到網絡上的其他節點。相反,他們會扣留該已證明的區塊,直到下一個slot n + 2。誠實的驗證者為slot n + 2 提出一個區塊(C)。幾乎同時,攻擊者可以釋放他們扣留的區塊(B)及其保留的證明,並證明區塊(B)是區塊鏈的頭部,他們對slot n + 2 的投票,有效地否認了誠實區塊(C)的存在。當誠實區塊(D)被釋放時,分叉選擇算法看到區塊(D)建立在區塊(B)之上,要比建立在區塊(C)之上的區塊(D)更重。因此,攻擊者成功地使用1 區塊事前重組將slot n + 2 中的誠實區塊(C)從規範鏈中移除。掌握34% 質押權益的攻擊者有很好的機會在這次攻擊中獲勝,因為他們的投票給了攻擊者首選的分叉68% 的權重,而誠實分叉的權重為66%,如此處所述。這意味著他們不需要依靠操縱誠實的驗證器來與他們一起投票。不過,理論上,這種攻擊可以用更少的質押比例來嘗試。 Neuder 等人 描述了在30% 質押比例下的事前重組攻擊方式,但後來證明,在控制2% 比例的質押權益下,這種事前重組攻擊也是可行的。
上述單區塊重組攻擊的概念圖(改編自https://notes.ethereum.org/plgVdz-ORe-fGjK06 BZ_3 A#Fork-choice-by-block-slot-pair)
一個成功的重組攻擊者無法改變歷史,但他們可以不誠實地改變未來。他們不需要控制大多數質押的ETH 就可以做到這一點,儘管他們成功的機會會隨著控制質押比例的增加而增加。這種重組攻擊可允許他們實現雙花或通過front-running 大額交易來提取MEV。這種攻擊還可以擴展到多個區塊,但成功的可能性會隨著重組長度的增加而降低。
彈跳攻擊和平衡攻擊(Bouncing and Balancing)
更複雜的攻擊可以將誠實的驗證器集,拆分為對區塊鏈頭部有著不同看法的離散小組,這被稱為平衡攻擊(balancing attack)。在這種情況下,攻擊者等待機會提出一個區塊,當它到達時,他們會在同一個slot 中提出兩個區塊。他們將一個區塊發送給誠實驗證器集的一半,將另一個區塊發送給另一半。分叉選擇算法將檢測到這種模棱兩可的情況,並且區塊提議者會被罰沒並從網絡中彈出,但這兩個區塊仍然存在,並且將有大約一半的驗證器集證明每個分叉。在花費單個驗證器罰沒成本的情況下,攻擊者成功地將區塊鏈一分為二。與此同時,其餘的惡意驗證器扣留了他們的證明。然後,通過在執行分叉選擇算法時有選擇地將有利於一個或另一個分叉的證明發布給足夠的驗證器,他們能夠讓網絡看到任何一個具有最多累積證明的分叉。這可以無限期地繼續下去,攻擊驗證者在兩個分叉上保持驗證器的平均分配。由於兩個分叉都無法吸引2/3 的絕對多數,所以信標鏈無法最終確定。攻擊驗證者控制的質押權益比例越大,在任何給定epoch 時間段進行攻擊的可能性就越大,因為他們越有可能選擇驗證器在每個slot 中提議一個區塊。即使只控制1% 的質押權益,發動平衡攻擊的機會平均每100 個epoch 時期就會出現一次,這並不需要等待太久。
一種名為彈跳攻擊(bouncing attack)的類似攻擊方式,也只需要控制一小部分質押權益。在這種情況下,攻擊的驗證器再次拒絕投票。這一次,他們沒有發布投票來保持兩個分叉之間的平均分配,而是在適當的時候使用他們的投票來證明在分叉A 和分叉B 之間交替的檢查點的合理性。兩個分叉之間的這種翻轉,可停止最終確定性。
彈跳攻擊和平衡攻擊的防禦措施
彈跳攻擊和平衡攻擊都依賴於攻擊驗證器將其證明延遲到某個適當的時刻,以便對網絡產生巨大的影響。因此,只有在不太可能的網絡同步條件下,並且攻擊者通過緊密協調的共謀驗證器對消息時間進行非常精細的控制情況下,這種攻擊才是可行的。儘管如此,仍然有必要關閉這個攻擊向量。為了防止遲到的消息影響共識,與及時收到的消息相比,遲收到的消息的權重可以減少。這被稱為提議者權重提升(proposer-weight boosting)方案。
對於彈跳攻擊,修復方法是更新分叉選擇算法,以便最新的合理檢查點只能在每個epoch 的前1/3 slot 期間切換到替代鏈的檢查點。這種情況可以防止攻擊者保存投票,以便以後部署。針對這些延遲投票攻擊的另一種防禦措施是,與每個slot 遲到的投票相比,為及時到達的投票分配更大的權重。
結合起來,這些措施創造了一個場景,在這個場景中,一個誠實的區塊提議者在slot 開始後非常迅速地發出它們的區塊,然後大約1/3 slot(4 秒)的時間段,這個新區塊可能會導致分叉選擇算法切換到另一條鏈。在同一截止時間之後,與較早到達的證明相比,來自較慢驗證器的證明的權重會較低。這非常有利於快速提議者和驗證器確定區塊鏈頭部,並大大降低彈跳攻擊和平衡攻擊的可能性。從本質上講,這些防禦措施可以防止基於大型網絡異步性的攻擊,即使在上述情況下,也不需要對消息發布進行精細控制。因此,在很大程度上,這些類型的攻擊風險,已通過對分叉選擇算法的修改得到了緩解,這些修改有利於快速活動並懲罰延遲。
值得一提的是,提議者權重提升(proposer-weight boosting)方案只能抵禦“廉價重組”攻擊,即攻擊者以少量質押權益進行的重組攻擊。事實上,在另一種事前重組攻擊中,提議者權重提升方案本身可能被更大的質押者玩弄。這篇文章的作者描述了控制7% 質押權益的攻擊者如何戰略性地部署他們的投票,以欺騙誠實的驗證器在他們的分叉上構建,重組掉一個誠實的區塊。投票給對手分叉的誠實驗證器會及時投票,以便攻擊者從提議者權重提升方案中受益。同樣,這種攻擊是在假設理想的延遲條件下設計的,而在實際情況下很難滿足這種條件。總的來說,攻擊者控制的質押權益比例越大,其成功攻擊的機率就越大。而更大的質押權益,也意味著更多的風險資本以及更強的經濟抑制力。
高級平衡攻擊
上面描述的彈跳攻擊和平衡攻擊依賴於惡意驗證器對網絡上其他驗證器何時收到他們的消息進行非常精細的控制,而這類攻擊已通過提議者權重提升(proposer-weight boosting)方案有效地緩解了。
但是,研究者還描述了一種額外的攻擊,它不依賴於對網絡延遲的細粒度控制。在這種情況下,攻擊者需要在兩個後續slot 中使用一個提議的驗證器(在任何兩個slot 中發生這種情況的概率,都會隨著攻擊者控制的驗證器的的增多而增加) 。其中一個對抗性區塊提議者在slot n 中提議一個區塊,然後第二個對抗性區塊提議者在slot n+1 中提議一個衝突區塊,從而創建一個分叉。由於沒有一個區塊提議者模棱兩可(equivocated),因此不會發生罰沒的情況。在這個例子中,我們假設分叉A 會更有利。攻擊者可以知道這一點,攻擊者還可以估計網絡上一半驗證器提交證明所需的時間……來自slot n 的保留投票可以在大約一半驗證器投票的時間點被釋放。這些是來自slot n 的支持分叉B 的證明。因此,一半的驗證器組投票支持分叉A,因為它們不知道分叉B 上的額外證明,而另一半投票支持權重更重的分叉B。在n+1 中扣留的敵對投票可用於彌補分叉B 上因發布扣留證明的時間不准確而造成的任何不足。
這種平衡攻擊是針對分叉選擇算法的理想版本描述的,它比以太坊共識客戶端中實際實現的分叉選擇算法具有更可預測的證明時間,而在真正的信標鏈上執行這種攻擊,則要困難得多。將攻擊者的節點分佈在網絡拓撲中可以幫助攻擊者在一定程度上克服這一問題,因為他們的消息在整個網絡中傳播的速度要快於來自一個拓撲位置的消息。
還有人提出了一種專門針對LMD 規則的平衡攻擊,儘管有了提議者權重提升(proposer-weight boosting)方案,這種攻擊仍被認為是可行的。攻擊者通過模糊他們的區塊提議,並將每個區塊傳播到大約一半的網絡來建立兩條競爭鏈,從而在分叉之間建立近似平衡。然後,相互勾結的驗證器會模棱兩可地投票,以使一半的網絡首先收到它們對分叉A 的投票,而另一半網絡首先收到它們對分叉B 的投票。由於LMD 規則丟棄了第二個證明並且只為每個驗證者保留第一個證明,因此一半的網絡只會看到A 的投票而B 沒有投票,另一半網絡會看到B 的投票而A 沒有投票。文章的作者描述了LMD 規則賦予了攻擊對手“非凡的力量”來發起平衡攻擊。
這種LMD 攻擊向量,已通過更新分叉選擇算法關閉了,以便它完全從分叉選擇考慮中丟棄模棱兩可的驗證器。模棱兩可的驗證器也可以通過分叉選擇算法降低其未來影響。這可以防止上述平衡攻擊,同時還可以保持對雪崩攻擊(avalanche attacks)的彈性。
雪崩攻擊(avalanche attacks)
2022 年3 月的一篇論文描述了另一種稱為雪崩攻擊(avalanche attacks)的攻擊類型。這篇論文的作者認為,提議者權重提升(proposer-weight boosting)方案無法防止雪崩攻擊的某些變體。然而,論文作者也只展示了對以太坊分叉選擇算法的高度理想化版本的攻擊(他們使用了沒有LMD 的GHOST)。
要發動一次雪崩攻擊,攻擊者需要控制多個連續的區塊提議者。在每個區塊提議slot 中,攻擊者扣留他們的區塊,收集它們直到誠實鏈達到與扣留區塊相等的subtree 子樹權重。然後,攻擊者釋放被扣留的區塊,使其最大程度地造成混亂。這意味著,例如,對於6 個扣留區塊,第一個誠實區塊n 與敵對區塊n 競爭創建一個分叉,然後所有5 個剩餘的敵對區塊都在n+1 處與誠實區塊競爭。這意味著建立敵對區塊n 和n+1 的分叉現在吸引了誠實的證明,因為此時誠實鏈的權重等於敵對鏈的權重。現在可以對剩餘的扣留區塊重複此操作,從而允許攻擊者阻止誠實的驗證器跟隨鏈的誠實頭部,直到攻擊者模棱兩可的區塊用完為止。如果攻擊者在攻擊過程中有更多機會提出區塊,他們可以使用這些區塊來擴展攻擊,這樣,越多的驗證器參與共謀攻擊,攻擊持續的時間就越長,並且可以將更多誠實的區塊從規範鏈中移出。
而LMD-GHOST 分叉選擇算法的LMD 部分減輕了雪崩攻擊,LMD 的意思是“最後一條消息驅動”,它指的是每個驗證器保存的一個表格,其中包含從其他驗證器收到的最新消息。只有當新消息來自比特定驗證器表中已存在的slot 更晚的slot 時,該字段才會更新。在實踐中,這意味著在每個slot 中,接收到的第一條消息就是它接受的消息,任何附加消息都可以忽略。換句話說,共識客戶端使用來自每個驗證器最先到達的消息,並且相互矛盾的消息會被簡單地丟棄,以防止雪崩攻擊。
最終性延遲
首次描述低成本單區塊重組攻擊的同一篇論文,還描述了一種最終性延遲(也稱為“活性失效”)攻擊,該攻擊依賴於攻擊者是epoch 邊界區塊的區塊提議者。這是至關重要的,因為這些epoch 邊界區塊成為了Casper FFG 用於最終確定鏈的各個部分的檢查點。攻擊者簡單地扣留他們的區塊,直到有足夠多的誠實驗證器使用其FFG 投票支持前一個epoch 邊界區塊作為當前最終性目標。然後,他們釋放扣留的區塊,並證明自己的區塊,而其餘的誠實驗證器也會這樣做,這樣會創建具有不同目標檢查點的分叉。如果他們的時間恰到好處,他們將阻止最終性,因為不會有2/3 的絕對多數證明任何一個分叉。攻擊者控制的質押權益比例越小,則時間需要越精確,因為攻擊者直接控制的證明越少,攻擊者控制提出給定epoch 邊界區塊的驗證器的機率就越低。
關於長程攻擊(long range attacks)的說明
還有一類特定於權益證明(PoS)區塊鏈的攻擊,其涉及參與創始區塊的驗證器在誠實的區塊鏈旁維護一個單獨的區塊鏈分叉,最終說服誠實的驗證器在很久以後的某個適當時間切換到它。這種類型的攻擊在信標鏈上是不可能的,因為「 finality gadget」(直譯為確定性小工具)可確保所有驗證器定期就誠實鏈的狀態(“檢查點”)達成一致。這種簡單的機制可以消除對長程攻擊者的擔憂,因為以太坊客戶端根本不會重組最終確定的區塊。加入網絡的新節點通過找到一個受信任的最近狀態哈希(稱為弱主觀性檢查點)並將其用作偽創始區塊來構建。這將為進入網絡的新節點創建一個“信任網關”,然後它才能開始為自己驗證信息。然而,從對等方或區塊瀏覽器或其他地方收集檢查點所需的信任,並沒有增加隱含在客戶端開發團隊中的信任,因此主觀性是“弱的”。因為根據定義,檢查點由網絡上的所有節點共享,所以不誠實的檢查點是共識失敗的症狀,那此時,無論如何,帶外社會協調必須接管以拯救誠實的驗證者。
這一切都表明,要以少量的質押權益成功攻擊信標鍊是非常困難的。這裡描述的可行攻擊需要一個理想的分叉選擇算法,以及可能性極低的網絡條件,或者攻擊向量已通過客戶端軟件相對較小的補丁關閉。當然,我們並不能排除零日漏洞在野外存在的可能性,但這確實證明了少數質押權益攻擊者要成功實現攻擊所需的極高的技術能力,對共識機制的了解以及運氣。從攻擊者的角度來看,他們最好的選擇可能是盡可能多地積累質押的ETH。
拒絕服務攻擊(Denial of Service)
以太坊的PoS 機制從所有驗證器集中選擇一個驗證器,以作為每個slot 中的區塊提議者。這可以使用一個公共函數進行計算,並且對手有可能在他們的區塊提議之前稍微提前識別下一個區塊提議者。然後,攻擊者可以向區塊提議者發起垃圾信息,以防止他們與對等方交換信息。對於網絡的其餘部分,區塊提議者似乎處於離線狀態,並且slot 將簡單地變空。這可能是對特定驗證者的一種審查形式,以阻止他們向區塊鏈添加信息。攻擊者的成本取決於驗證者的帶寬,這意味著對家庭質押者發起拒絕服務攻擊,要比使用工業級硬件和互聯網連接的專業人員要便宜得多,這使得業餘愛好者更容易受到審查。這個問題有一些變通方法,但這些方案也有利於專業驗證者,而不是家庭質押者。例如,運行多個節點並將區塊構建與網絡通信分開可以提供額外的保護層,因為節點身份和驗證者身份是解耦的。節點運行者可能會在短時間內切換身份或重新獲取身份,以避免拒絕服務攻擊。從長遠來看,實施單一秘密leader 選舉(SSLE)或非單一秘密leader 選舉方案可以更有效地緩解驗證者審查問題,因為只有區塊提議者才能知道他們已經被選中,並且事先不知道他們的選擇。所有驗證器都將對秘密的承諾提交到一個反复洗牌的池子當中。然後一個隨機承諾會被公開選出,只有被選中的驗證器才能知道,因為連接已經被混淆了。這項工作尚未實施,但它是一個活躍的研發領域。
驗證者控制的質押權益比例大於或等於33%
將質押ETH 的控制權分散給更多人,要比集中在少數人的手中更安全。這是因為一個人控制的質押權益越多,其對以太坊共識的影響就越大。當攻擊者掌握了足夠的質押權益時,本文中提到的所有攻擊都更有可能成功,並且可能選擇更多的驗證器在每個slot 中提議區塊。因此,惡意驗證者的目標可能是控制盡可能多的質押ETH。
33% 的質押ETH 是攻擊者的一個基準,如果其控制的ETH 超過了這個數量,他們就有能力阻止信標鏈最終確定,而無需精細控制其他驗證器的操作。它們可以簡單地一起消失。這是因為要最終確定信標鏈,必須有2/3 的質押ETH 來證明檢查點對(pairs of checkpoints)。如果1/3 或更多的質押ETH 被惡意證明或未能證明,那麼2/3 的絕對多數就不可能存在。對此的防禦措施是信標鏈的消極懲罰(inactivity leak)機制,這是一種緊急安全措施,它會在信標鏈4 個epoch 時期未能最終確定後觸發。消極懲罰(inactivity leak)標識了那些未能證明或證明與大多數人相反的驗證器。這些非證明驗證器擁有的質押ETH 會逐漸流失,直到最終它們佔總數的比例不到1/3,這樣區塊鏈才能再次finalize。
消極懲罰(inactivity leak)機制的目的是讓信標鏈再次實現最終確定,而攻擊者也會失去一部分質押的ETH。假設沒有可罰沒的攻擊,並且攻擊驗證器只是未能證明,它們的不活動分數被更新,這向網絡的其餘部分錶明該驗證器將在每個epoch 時期受到懲罰,直到它們的不活動分數返回為零。當消極懲罰(inactivity leak)機制處於活動狀態時,每個epoch 的不活動驗證器分數會增加4,而活動驗證器分數會減少1。一旦消極懲罰(inactivity leak)機制停用(並且信標鏈再次最終確定),所有活動驗證器的不活動分數都會降低。對於不活躍時間較長的驗證器來說,這需要更長的時間,因為它們有更多的不活躍分數要消耗。而持續的不活動狀態,會更慢消耗不活躍分數。對於一個離線100 個epoch 的驗證器,它的不活動分數將達到400 左右,而懲罰大小的計算公式為:
不活動分數* 驗證器餘額/(不活動分數偏差x 不活動懲罰商)
inactivity_score * validator_balance/(inactivity_score_bias x inactivity_penalty_quotient)
其中不活動分數偏差(inactivity score bias)是在每個epoch 時期增加驗證器分數的數字,不活動懲罰商(inactivity penalty quotient)是將非證明驗證器的餘額減少到其初始值大約60% 所用時間的平方,設置的時間大約為37.5 天。這意味著攻擊者通過未能證明來阻止最終性的時間越長,他們質押權益被燃燒的越多。 Upgrading Ethereum 展示了一個圖表,該圖表估計了始終處於脫機狀態的驗證器在短時間(100 個epoch,大約13.5 小時)消極懲罰期間和之後驗證器餘額的減少情況。在135 個epoch 時期之後,驗證器的餘額從32 ETH 降至31.996 ETH,損失了0.004 ETH。而要讓一個攻擊者控制33% 的ETH 質押權益,他們必須運行大約144,000 個驗證器,每個驗證器至少持有32 ETH。這意味著他們延遲信標鏈最終確定性的攻擊,將至少花費0.004 x 144000 = 576 ETH。按當前市場價計算,這大約相當於109 萬美元。花掉近100 萬美元的成本,將信標鏈的最終確定性推遲半天,這對信標鏈本身的長期影響很小。 (譯者註:此處修改了原文的數字)
當然,更持久的消極懲罰要更加昂貴,事實上,懲罰的幅度會呈二次方的速度增加,直到信標鏈再次開始最終確定。攻擊者進行最終性延遲攻擊的確切成本,取決於他們的初始餘額、他們保持離線的時間以及重新獲得最終性所需的時間。然而,最重要的是,即使驗證器沒有被罰沒, 33% 的驗證器持續不活動也是極其昂貴的。
假設以太坊網絡是異步的(即消息發送和接收之間存在延遲),控制34% 總質押權益的攻擊者可能會引發雙重確定性(double finality)攻擊。這是因為攻擊者在被選為區塊生產者時可以模棱兩可,然後與其掌握的所有驗證器進行雙重投票。這創造了一種區塊鏈分叉的情況,其中每個分叉都有34% 質押的ETH 投票支持。每個分叉只需要50% 的剩餘驗證器投票支持兩個分叉,從而得到絕對多數的支持,在這種情況下,兩條鏈都可以最終確定(因為34% 的攻擊者驗證器+ 剩餘66% 的一半= 每個分叉67%)。每個競爭區塊都必須由大約50% 的誠實驗證器接收,因此只有當攻擊者能夠在一定程度上控制消息在網絡上傳播的時間時,這種攻擊才可行,這樣他們才能將一半誠實驗證器推到每條鏈上。這也是為什麼這種攻擊需要網絡異步的原因——如果所有節點都立即收到消息,它們將立即知道這兩個區塊,並通過拒絕較早接收的區塊來處理模棱兩可的問題。攻擊者必須銷毀其全部質押的權益(今天1400 萬質押ETH 中的34%)以實現這種雙重確定性(double finality)攻擊,因為他們34% 的驗證器將同時進行雙重投票,而這是一種具有最大相關性懲罰的可罰沒攻擊。防禦這種攻擊的代價,只是銷毀34% 總質押ETH 的巨大成本。
而從這種攻擊中恢復過來,需要以太坊社區進行帶外(out-of-band)協調並同意遵循其中一個分叉,而忽略另一個分叉。與這種社會支持相關的複雜性,我們將在後面討論。
攻擊者控制的質押權益比例大約為50%
理論上,在一個惡意驗證者控制的質押ETH 比例達到50% 的情況下,他可以將以太坊區塊鏈分裂成兩個大小相等的分叉。與前面描述的平衡攻擊類似,攻擊者可通過為同一個slot 提出兩個區塊來僅使用他們的一個驗證器。然後,攻擊者不需要通過仔細傳輸消息來操縱一半的網絡,而只需使用其全部50% 的質押權益與誠實的驗證器集進行相反的投票,從而維持兩個分叉並防止最終確定性。在四個epoch 時期之後,兩個分叉上的消極懲罰(inactivity leak)機制將激活,因為每個分叉都會看到其一半的驗證器無法證明。每個分叉都會洩露驗證器集的另一半質押權益,最終導致兩條鏈以代表2/3 絕對多數的不同驗證器完成。在這一點上,唯一的選擇就是依靠社區恢復,稍後我們會提到。然而,考慮到誠實驗證器數量、網絡延遲等變化,一組敵對的驗證者似乎不太可能始終精確地控制總質押權益的50% 比例,但也許有一種方法,攻擊者可以利用略高於50 % 的質押權益,動態調整其在每個slot 中的投票比例,以保持兩個分叉之間的完美平衡。雖然成功攻擊的風險,無疑會隨著攻擊者掌握的質押ETH 比例的大小增加而增加,但與50% 的質押權益相關的攻擊向量,似乎不太可能被成功利用,發動此類攻擊的巨大成本以及較低的成功率,對理性的攻擊者而言似乎是一個很強的抑制因素。
而當攻擊者控制的質押權益占到51% 以上,則其可以控制分叉選擇算法。在這種情況下,攻擊者將能夠以多數投票作證,讓他們有足夠的控制權來進行短期重組,而無需欺騙誠實的客戶端。控制51% 的質押權益不允許攻擊者改變歷史,但他們有能力通過將多數投票應用於對其有利的分叉,或將區塊重組來影響未來。誠實的驗證器會效仿,因為它們的分叉選擇算法也會將攻擊者喜歡的鏈視為最重鏈,因此該攻擊鏈可以最終確定。這使攻擊者能夠審查某些交易,進行短程重組,並通過重新排序對其有利的區塊來提取最大MEV。與工作量證明(PoW)鏈一樣,51% 攻擊也是非常有問題的。針對該問題的防御手段就是多數質押權益的巨大成本(目前略低於190 億美元),攻擊者會面臨巨大的風險,因為社交層可能會介入,並採用誠實的少數派分叉,從而使攻擊者的質押權益大幅貶值。
攻擊者控制的質押權益比例大於或等於66%
控制66% 或更多比例質押ETH 的攻擊者可以確定其首選鏈,而無需強制任何誠實的驗證器。攻擊者可以簡單地投票選擇他們喜歡的分叉,然後最終確定它,僅僅是因為他們可以不誠實的絕對多數進行投票。作為絕對多數的質押者,攻擊者將始終控制最終區塊的內容,其擁有花費、回滾和再次花費的權力,他還能審查某些交易並隨意重組區塊鏈。通過購買額外的ETH 以控制66% 質押比例,而不是51%,攻擊者實際上購買了事後重組和最終性反轉的能力(即改變過去並控制未來)。當前控制66% ETH 質押權益的成本約為250 億美元,這裡唯一的防禦措施是退回到社交層來協調採用替代分叉。在下一節中,我們會更詳細地探討這一點。
第0 層:最後一道防線
當區塊鏈的編碼防禦被破壞,並且攻擊者能夠最終確定不誠實的區塊鏈時會發生什麼?
這種情況可能會以多種方式出現,最明顯的是,當攻擊者控制多數質押權益,並且可以簡單地通過他們自己的投票或51% 以上誠實驗證器的額外證明來完成。憑藉控制34% 質押比例的ETH,以及對網絡上消息傳遞的一些控制權,攻擊者可以最終確定兩個分叉。在某些情況下,重組鏈可能由於消極懲罰(inactivity leak)機製而最終確定。如果攻擊者成功將驗證器集劃分為兩個分叉,則消極懲罰(inactivity leak)機制將在兩個分叉上激活,那麼問題就變成了,誠實或不誠實的驗證者會首先重新獲得最終確定性嗎?如果誠實的驗證者首先確定,那麼誠實鏈就會變成規範鏈,網絡上所有客戶端的分叉選擇算法都會接受該鏈最終確定的部分,然後以太坊又回到了誠實玩家的控制之下。但如果不誠實的驗證者設法確定了區塊鏈,那麼以太坊社區將處於非常困難的境地。規範鏈在其歷史中會包含不誠實的部分,而誠實的驗證者最終會受到懲罰。
第三種不太可能發生的情況是永久性的網絡分裂,其中一個分叉上的驗證器不知何故不知道對方分叉上的對應方。這會創建出兩個獨立確定的分叉鏈,每個分叉都會洩露另一組驗證器的質押權益。然後這兩條鏈永遠不會重新組合在一起,因為它們將有不同的最終檢查點。來自主導客戶端的漏洞(而不是攻擊),也可能導致損壞但最終確定的鏈。在以太坊的執行層方面,go-ethereum (Geth) 客戶端占到了主導地位,超過85% 的節點運行了該客戶端。而在共識層方面,Prysm 客戶端目前占到了主導地位,在持續的社區活動之後,其占比才下降到50% 左右。而主導執行客戶端或共識客戶端中的漏洞,可能會停止最終確定性或導致最終確定的數據不正確。在Kiln 測試網上,Prysm 中的一個漏洞影響了區塊生產,這無關緊要,因為節點在四個不同的客戶端中的份額大致相等,但如果是在主網,那麼有超過66% 的客戶端會遇到相同的錯誤。因此,會有幾條通往不誠實的最終確定鏈的路線,儘管它們的概率非常低。它們都需要在質押ETH 上投入巨資,或者對驗證器集進行非常複雜的操作,截至目前,只有在理想條件下才證明是可行的,並且這些攻擊都通過軟件更新得到了緩解。然而,我們不能排除萬一的情況,那麼,最終的解決方案就是依靠社交層(第0 層)。
以太坊PoS 共識機制的優勢之一是,社區在面對攻擊者時可以採用一系列防禦策略。最小的響應可能是強制將攻擊者的驗證器從網絡中退出,而不會受到任何額外的懲罰。而攻擊者要重新進入網絡,必須加入一個激活隊列,以確保驗證器集逐漸增長。例如,添加足夠的驗證器以使質押的ETH 數量翻倍大約需要200 天,在攻擊者可嘗試另一次51% 攻擊之前,有效地為誠實驗證器帶來了200 天的應對時間。當然,社區也可以決定更嚴厲地懲罰攻擊者,比如取消過去的獎勵,或燃燒掉攻擊者的部分(最高100% 的)質押資本。
無論對攻擊者施加何種懲罰,社區還必須共同決定不誠實的區塊鏈(儘管是編碼到以太坊客戶端中的分叉選擇算法所青睞的區塊鏈)是否實際上無效,並且社區應該建立在誠實的替代鏈上。誠實的驗證器可以集體同意構建在社區認可的以太坊分叉之上,例如,在攻擊開始之前可能已經分叉了規範鏈,或者強行移除了攻擊者的驗證器。誠實的驗證器將被激勵在該分叉鏈上構建,而建立在以太坊上的交易所和應用可能更喜歡在誠實鏈上,並會跟隨誠實的驗證器進入誠實的區塊鏈。然而,這將是一個極其混亂的治理挑戰。一些用戶和驗證者無疑會因為切換回誠實鏈而輸掉資金,攻擊後驗證的區塊交易可能會被回滾,從而擾亂應用層,這完全衝擊了傾向於相信“代碼就是法律”的用戶。此外,一些用戶,甚至可能是機構用戶,他們會通過精明或機緣巧合的方式從不誠實的區塊鏈中獲益,並可能反對分叉以保護他們的收益。有人呼籲社區對超過51% 的質押攻擊進行應對演練,以便能夠快速執行合理的協調緩解措施。 Vitalik 在ethresear.ch 以及Twitter 上都進行了一些有益的討論。
治理已經是一個複雜的話題,而對於以太坊社區來說,對不誠實的最終鏈進行第0 層緊急響應無疑會是一個挑戰,但在以太坊的歷史上,這已經發生了兩次。最終,即使我們擁有如此驚人的技術堆棧,如果最壞的情況發生,社區的參與者也必須協調出一條出路。
總結
本文探討了以太坊合併到權益證明(PoS)共識機制後,攻擊者可能會採用的一些攻擊信標鏈的方式。總體而言,攻擊者控制的質押ETH 比例越多,其攻擊的成功機會就越大,因為他們的質押權益可以轉化為投票權,以此用來影響未來區塊的內容。而隨著攻擊者控制的質押ETH 比例增大,其能夠實現的破壞力就越大:
1、33%:延遲最終性
2、34%:導致雙重最終性
3、51%:審查,控制區塊鏈的未來
4、66%:審查,控制區塊鏈的過去與未來
還有一些更複雜的攻擊方式,它們只需要控制少量的質押ETH,但這些攻擊要求攻擊者對消息時間的精細控制,以使誠實的驗證器集對他們有利。
總的來說,儘管存在這些潛在的攻擊向量,但信標鏈的風險很低,甚至要低於工作量證明的等效鏈。這是因為攻擊者為了用投票權壓倒誠實的驗證器,需要將質押ETH 的巨大成本置於風險之中。內置的“胡蘿蔔加大棒”激勵層可以防止大多數的惡意行為,尤其是對於低質押的攻擊者。更微妙的彈跳攻擊和平衡攻擊也不太可能成功,因為真實的網絡條件使得很難實現對特定驗證器子集的消息傳遞進行精細控制,並且客戶端團隊已經用簡單的補丁快速關閉了已知的彈跳攻擊、平衡攻擊以及雪崩攻擊向量。
而34%、51% 或66% 攻擊可能需要社區協調才能解決。雖然這對社區來說可能是痛苦的,但社區在帶外響應的能力對攻擊者來說是一個強大的抑制因素。以太坊社交層是最終的後盾,一次技術上成功的攻擊仍可能被同意採用誠實分叉的社區所扼殺。最終,攻擊者和以太坊社區之間會有一場競賽,如果進行得足夠快,用於66% 攻擊花費的250 億美元可能會被一次成功的社交協調攻擊所抹殺。
對於攻擊者來說,有利可圖的可能性會很低,這足以起到有效的威懾作用。這就是為什麼維持一個價值觀一致的凝聚力社會層,對於加密投資而言是如此重要的原因。
譯者註:截至目前,以太坊全網質押的以太幣數量大約為1400 萬ETH,而通過Lido 質押的以太幣數量已經達到了428 萬ETH,這大約占到了30.5 % 的ETH質押比例,而這對於以太坊網絡而言無疑是最大的安全隱患,因此以太坊開發者們也建議質押者將ETH 分散到不同的協議當中,而面對Tornado Cash 級別的審查,類似以太坊這樣的PoS 鏈可能都是相對脆弱的,正如vitalik 所言,社交層將作為最後的恢復手段。