原文:《Solutions to Delay Attacks on Rollups》by Ed Felten,Offchain Labs 聯合創始人
Rollup 協議設計者面臨的一個微妙問題是如何應對延遲攻擊。在這篇文章中,我將討論它們是什麼,以及Arbitrum 如何防範它們,從而帶來一些令人興奮的新發展。
Rollup 協議設計者面臨的一個微妙問題是如何應對延遲攻擊(delay attacks)。在這篇文章中,我將討論它們是什麼,以及Arbitrum 如何防範它們,從而帶來一些令人興奮的新發展。
延遲攻擊是試圖阻止Rollup 協議取得進展的惡意行為,它們不會攻擊協議的安全性,也就是說,它們不會試圖強制確認不正確的結果。相反,延遲攻擊通過試圖阻止或延遲任何結果的確認來攻擊協議的活性(liveness)。
這些問題可能很微妙,老實說,協議設計者們通常不喜歡談論延遲攻擊,但每一個Layer 2 系統,無論是Optimistic Rollup、ZK Rollup 還是其他,都需要應對有關延遲和協議進展的問題。
本文深入探討了延遲攻擊問題,並討論了各種版本的Arbitrum rollup 協議如何處理該問題。
延遲攻擊是什麼?
在一次延遲攻擊中,一個惡意方(或一組惡意方)在Rollup 協議內採取行動,遵循旨在阻礙或延遲確認結果返回L1 鏈的策略。
這不同於拒絕服務(DoS)攻擊,在拒絕服務攻擊中,攻擊者試圖阻止在協議中採取任何行動。相比之下,在延遲攻擊中,行動會繼續發生,但攻擊者的行為方式,會阻礙或延遲結果的確認(即延遲向L1 提取資產),並迫使誠實的驗證者燃燒gas 。
任何看似合理的Rollup 協議都需要參與者進行質押,因此延遲攻擊者必然會失去一份或多份質押權益。我們在這裡假設攻擊者願意在一定限度內犧牲質押權益,以追求他們的攻擊。
我們還將保守地假設,攻擊者在將交易上鍊方面具有優勢,因此每當攻擊者與誠實的一方競爭獲得鏈上交易的優先權時,攻擊者總是會贏。
最後,我們假設攻擊者可以審查對底層L1 區塊鏈的訪問,以排除Rollup 交易,但僅限於一段有限的時間內進行,我們稱之為“挑戰期”。特別是,攻擊者可以啟用和禁用一種概念上的“審查模式”。當啟用審查模式時,攻擊者可以完全控制哪些交易可以到達L1。但是,攻擊者只能在一個挑戰期內啟用審查模式。 (我們假設任何一組審查模式期加起來超過一個挑戰期,將觸發L1 社區的社會反應,以阻止審查嘗試。)
評估針對延遲攻擊的協議
在評估協議時,我們可以問六個問題:
-
該協議是否有欺詐證明機制? (否則,延遲攻擊就沒有實際意義,因為參與者不能延遲確認任何結果——即使是欺詐性結果也不行。)
-
是否有中心化運營商或證明者,可以通過簡單地停止或扣留數據來阻止進展?如果是這樣,那一方可能會造成無限延遲。
-
該協議是否為最終進展提供了無需信任的保證?換句話說,無論攻擊者做什麼,一個誠實的參與者是否可以強制最終取得進展?
-
如果協議保證無需信任的進程,那麼攻擊者可以造成的延遲上限是多少?
-
攻擊者的成本如何與造成的延遲時間成比例?
-
誠實方回應的總成本如何衡量?
確定這些標准後,讓我們評估Arbitrum rollup 協議的兩個歷史版本。
協議1 :學術論文協議
2018 年的Arbitrum 學術論文大致使用了以下協議(忽略與此無關的一致模式)。任何質押者都可以堅稱提議的結果,我們稱之為斷言(assertion)。在一個時間窗口內,其他質押者的任何子集都可以挑戰斷言,斷言者必須對每個挑戰者捍衛自己的斷言,一次一個挑戰者。在每次挑戰結束時,輸的一方將失去他們的質押權益。
(請注意,有必要允許多個質押者反對斷言,並給每個挑戰者機會來推翻斷言。這是必要的,因為惡意方可能會故意輸掉他們“應該”贏得的挑戰。給每個挑戰者一個單獨的挑戰,可以確保一個誠實的挑戰者可以擊敗不正確的斷言,無論有多少惡意方故意輸掉挑戰。)
如果沒有挑戰,或者斷言者贏得了所有挑戰,那麼斷言將得到確認,協議將繼續前進。但是如果斷言者輸掉了任何挑戰,它的斷言將被拒絕,並且協議狀態將回滾到做出斷言之前的狀態。
評估
該協議具有有效的欺詐證明,但不保證進展,因為惡意參與者可以無休止地做出不正確的斷言,每次都會犧牲質押權益,但會導致做出和拒絕相同斷言的無休止循環,導致持續回滾和缺乏進展。
協議2:分叉和裁剪
當前的Arbitrum 協議(自2020 年以來已部署在每個版本的Arbitrum 上),通過引入分支改進了之前的協議。其思想是允許多個質押者做出相互競爭的斷言,並將相互競爭的斷言視為分叉鏈。然後,一系列的挑戰讓分支相互對抗,最終裁剪掉所有分支,只留下一個分支,讓剩下的一個分支得到確認。
具體的方式如下。區塊鏈中的每個Rollup 區塊都會跟踪其第一個子區塊(即後繼區塊)由質押者創建時的時間戳。其他質押者可以創建額外的子區塊。每個子斷言都隱含地聲稱它的所有年長的區塊都是不正確的。
創建斷言的質押者需要對其進行質押,其他質押者也可以選擇對其進行質押。
如果兩個質押者對姊妹(siblings)斷言下注,並且兩個質押者都沒有在挑戰當中,那麼兩個質押者之間可以發起挑戰,其中兩個姊妹斷言中較早的質押者正在捍衛該年長姊妹斷言的正確性,而另一個質押者正在挑戰該正確性。輸掉挑戰的質押者,將喪失其質押權益,並被移除質押者集。
該協議包括行動的最後期限。首先,創建父斷言的子斷言的截止日期,是創建第一個子斷言之後的一個挑戰期。其次,對斷言進行質押的截止日期是該斷言創建後的一個挑戰期。
如果對斷言進行質押的截止日期已過,並且沒有質押者對該斷言進行質押,則該斷言將被刪除。被修剪斷言的任何子代、孫代或其他後代也同時被修剪掉。
如果一個斷言早於一個挑戰期,並且沒有未修剪的姊妹斷言,則可以確認該斷言,從而代表協議取得進展。
評估
該協議具有有效的欺詐證明,沒有中心化運營商或證明者可以阻止進程,因此任何參與者都可以推動進程。為了推動進程,一個誠實的質押者可以發布一個正確的子斷言(如果還不存在的話)。在此之後,在截止日期之前將經過有限的時間,以確保不會創建更多的姊妹斷言,也不會有更多的質押者可以在現有的姊妹斷言上下注。從那時起,誠實的質押者將參與一系列挑戰,一次擊敗和移除錯誤質押的一方(如果有多個誠實的參與者參與質押,他們可以同時擊敗對手)。一旦所有這些參與方都被移除,就可以確認正確的子斷言。
針對此協議最有效的延遲攻擊,是讓一個惡意質押者對一個不正確的姊妹斷言進行質押,並讓N-1 個惡意質押者對正確的姊妹斷言進行質押。無論有多少誠實的質押者押注在正確的姊妹斷言上,攻擊者都能夠安排不正確的質押者在誠實方發起挑戰之前,先對其同盟發起挑戰(悲觀地說,這假設攻擊者總是能在誠實的一方之前進入交易)。同盟者也會故意放棄挑戰,盡可能拖延時間(由於延遲規則,每個同盟者可能需要一到兩個挑戰期)。只有在所有N-1 同盟者都犧牲了自己之後,被錯誤下注的質押者才會被要求與誠實的一方進行挑戰,誠實的一方會獲勝,最終淘汰錯誤下注的質押者。
這種攻擊實現了大約N 個挑戰期的延遲,而攻擊者付出了N 份質押權益的代價。
誠實方針對這種攻擊的代價,與誠實方的數量成線性關係,因為每個誠實方都需要在質押截止日期之前質押。
小結:
-
保證進程
-
攻擊成本與造成的延遲成線性關係
-
誠實方的成本與誠實方的數量呈線性關係
許可式驗證
目前部署在Arbitrum 上的協議2 所面臨的延遲攻擊問題,是我們選擇暫時將驗證者角色限制在一組受許可的各方,而不是使驗證完全無需許可的原因。實現無需許可驗證的最後一步,需要最大限度地抵抗延遲攻擊的協議版本。你可能已經猜到有這樣一個協議版本,而我們目前正在努力實現它。
即將推出的協議 3
這篇文章已經很長了,所以我不會提供有關新協議的具體描述,那將是之後的文章將會介紹的東西。
簡單說一下要點:Arbitrum 協議的下一個版本對斷言和挑戰的工作方式做了一些小的,但(我認為)優雅的改變,這樣最壞情況下的延遲攻擊只能造成一個挑戰期的延遲(無論攻擊者願意失去多少質押權益)。
這是基於Arbitrum 研究團隊的一項技術突破,該技術突破使「all-against-all」 挑戰變得可行且高效。這允許一個誠實的質押者有效地擊敗一大群發布惡意分支斷言的攻擊者。
新協議的規範已經完全確定,目前正在實施當中。當然,在徹底測試和審核代碼之前,我們不會在主網上推出它。