本文中,我的關注點是交互式 rollup 協議會用到的類似模式—— 由某一方提出「斷言(assertion)」,其他人如果覺得斷言有問題,可以在「挑戰窗口期」內提挑戰;如果挑戰期內沒有人提出任何挑戰,則這個斷言就會被視為有效的。
這種設計模式在實踐中會遇到的問題是審查攻擊(censorship attack)—— 攻擊者阻撓其他人在時間窗口內提出挑戰。在交互式 rollup 協議中,攻擊者可能會提出虛假的“斷言”,同時阻止其他人在窗口期發起挑戰,最終導致虛假的斷言反倒成為合法的。
我們也假設,攻擊者必須先投入一筆資金,一旦攻擊失敗,它會失去這筆錢;這樣一來,我們不需要讓系統被成功攻擊概率為零,而只要確保攻擊成功概率足夠小,就不會有人願意去嘗試攻擊整個系統。
審查攻擊的類型
審查攻擊主要有四種:
審查攻擊主要有四種:
我們一個一個分別討論。
分叉攻擊
分叉攻擊是指在工作量證明(PoW)區塊鏈上,攻擊者獲得大多數挖礦算力,並根據需求使用這些算力來孤立包含挑戰的區塊。
因為這類攻擊要求攻擊者控制絕大部分算力,所以很難發起——如果攻擊者能夠輕易獲得大部分算力,表示這條區塊鏈本身就有很大的問題。
或者換個角度想,一個能夠控制絕大部分挖礦算力的卡特爾,一方面會導致大家不信任他們所在的區塊鏈,另一方面,可能也會有比審查攻擊能更快從系統中榨出油水來的辦法。
你可能會說,慢著!算力壟斷者可能並不會高調地聲張,只是偷偷摸摸地搞審查;如果攻擊者有能力這麼做,他們可能會在避免整個區塊鏈信譽受損的前提下,通過分叉進行審查攻擊。
這裡引出第一個問題:審查攻擊對於旁觀者來說,是否易於察覺?
為了證明分叉攻擊是顯而易見的,我模擬了分叉。假設攻擊者控制了60% 的算力,在前三十個區塊中,出現三條分叉鏈,長度分別是1、6、5;這和一般的區塊鏈完全不同。
我又做了一次模擬,這次攻擊者控制55% 的算力,這時候一個較早期的分叉可長達48 個塊。根據簡單的數學模型預測,當壟斷了60% 的算力,則每2.5 塊會發生一次分叉,分叉導致的孤鏈平均長度為5 ;當壟斷了55% 的算力,則每2.2 塊會發生一次分叉,分叉導致的孤鏈平均長度為10。
可以看到,隨著壟斷的算力下降,分叉發生的頻率及孤鏈長度反而增加了;但無論分叉長短,它們的共同之處是(首塊共性):在孤立分支上的首個區塊一定包含有效挑戰,而最終成為主鏈的分支則絕對不會包含這個挑戰——提出該挑戰的人一定會發現這點!\n(攻擊者可能會試圖在更遠處進行分叉來避免首塊共性,但這會導致分支過長,而最終孤立的分支仍包含該挑戰。)所以審查攻擊一旦發生,就一定會被人發現。
我不知道你會怎麼想,但如果我發現區塊鏈中存在算力壟斷現象,而且壟斷者會時不時使用算力干擾應用層協議,我會感到非常擔憂。如果其他人也有這種疑慮,整個區塊鏈將不再被用戶所信任——任何51% 算力攻擊皆會導致這個結果。
換言之,這種攻擊的問題並不是有人會審查你的應用層的交易,而是你所處的區塊鏈存在算力壟斷者,它可以為了利益不受約束地破壞規則。對於任何區塊鏈應用來說,不論TA 是否採用窗口期設計模式,只要出現了這種算力壟斷,就是毀滅性的打擊。
如果你所在的區塊鏈可能出現分叉攻擊,你應考慮轉移到其他區塊鏈。
閃躲攻擊
如果算力壟斷者不採用容易被發現的分叉攻擊,還有別的詭計嗎?
有的,就是閃躲攻擊。惡意礦工只要在出塊時,拒絕打包包含挑戰的交易就行了;只要確保挑戰窗口期內所產的區塊,都由惡意礦工產出,攻擊就能成功。
閃躲攻擊成功的可能性有多大?可以這麼解釋:當壟斷者控制的算力比例為 f ,挑戰窗口期為 n 個區塊,則攻擊成功率為 f n。
舉例來說,壟斷者控制了90%的算力,挑戰窗口期為50個區塊,則攻擊成功率為0.5 %(如果控制了95%的算力,攻擊成功率還要維持在0.5 %,則窗口期要增加為100個區塊)。
如果攻擊者要為攻擊失敗支付大量罰金——就像rollup 協議所設計的那樣——他們就不會肆無忌憚地攻擊;而且如果罰沒的錢能返給受害者,大家還會喜聞樂見這些未遂的攻擊。
所以應對閃躲攻擊的辦法是確保挑戰窗口期足夠長,使得攻擊成功概率低至用戶能接受的範圍;假設你能接受的攻擊成功率為 r ,攻擊者至多能控制 f 的算力,則安全的挑戰窗口期為 log(r)/log(f) 個區塊。
這個建議在現實中也是合理的;假設攻擊者能夠壟斷99% 的算力,要保證攻擊成功率低至0.1%,則挑戰窗口期至少要等於log(0.001)/log(0.99) = 687 個區塊,對於以太坊來說只需要不到三小時。
干擾攻擊
在干擾攻擊情況下,攻擊者通過「傳統的拒絕服務攻擊」,來阻止其他人發出挑戰;也就是「以DoS 進行審查攻擊」。
對於攻擊者來說還有個壞消息是,其他利益相關方可能會暗中僱用監視者—— 一個暗中觀察協議運行的中間方,在參與者來不及或難以發出挑戰時介入,對無效的斷言發起挑戰。攻擊者沒辦法辨別這些潛伏的監視者,也就沒辦法對他們發起DoS。
綜上,對於攻擊者來說,干擾攻擊似乎不是個好選擇。
速攻
速攻指的是,攻擊者發布大量的斷言,使得其他人來不及在挑戰窗口期內檢查所有斷言。
任何的 rollup 協議都需要有防禦速攻的機制,其中一種方法是對提出斷言的頻率進行限制,保證協議在設定的挑戰窗口期內的任何時間點,全網都有足夠的能力去檢查待處理的斷言或挑戰。
這類機制會在一條rollup 區塊鏈上,針對智能合約的處理能力實施一種“速限手段” ——即使存在某個能快速提出大量斷言的人,他最終也不得不慢下來,確保其他正常參與者能跟上。
所以要衡量一個rollup 系統的可擴展性,其中一個很重要的指標就是它在保證安全的前提下的最大速度限制;速限指的是一個系統能安全處理事務的速率,而不是某個參與者能夠產出斷言的極限速率。
總結
綜上所述,有三種審查攻擊能夠通過合理的設計或實踐來避免。
關於分叉類型的審查攻擊則很難分析;因為某種程度上來說,成功的分叉攻擊會留下明顯的證據,證明該鏈上存在算力壟斷者,而這些算力壟斷者會更願意採取其他更快獲得收益的攻擊 —— 比如雙花。任何存在算力壟斷的區塊鏈都已經病入膏肓,那又何必為這種情況下的審查攻擊而操心呢?
轉貼自: 動區
若喜歡本文,請關注我們的臉書 Please Like our Facebook Page: Big Data In Finance
留下你的回應
以訪客張貼回應