本文將介紹以太坊合併後可能發生的共識級攻擊。
原有標題:比較:以太坊 PoS 和 PoW 安全性
ETH PoS 安全性
本節主要討論以太坊採用 PoS 共識機制後可能出現的共識級攻擊。
來自 Mirror 上的 jmcook.eth 的參考: https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs
小型質押者的攻擊
短程重組
這是一種針對信標鏈的攻擊,通常由攻擊者對其他驗證者隱藏部分信息,然後在特定時刻釋放這些信息,以便實現雙花或通過預先運行的大型交易提取 MEV。這種攻擊也可以擴展到多個區塊,但成功的可能性會隨著重組長度的增加而降低。
這種攻擊本質上是一種區塊重組,它分為兩種類型:事前重組和事後重組。事前重組意味著攻擊者從主鏈中替換一個尚未創建的區塊,而事後重組則意味著攻擊者從主鏈中刪除一個經過驗證的區塊。就 PoS 以太坊的情況,攻擊者必須擁有超過 2/3 的區塊才能執行事後重組。與此同時,一些研究表明,即使攻擊者擁有 65% 的份額,成功攻擊的機率也不到 0.05%。
短程重組攻擊是通過事前重組來實現的,攻擊者不需要控制大部分已質押的 ETH 就可以實現,並且成功的機率會隨著所控制的質押比例的增加而增加。
彈跳和平衡
平衡攻擊指攻擊者採取的特定手段,他們將誠實的驗證者集拆分為對區塊有不同看法的離散組。具體來說,攻擊者等待提出一個區塊的機會,當機會到來時,他們在同一個 slot 中提出兩個區塊。它們將一個區塊發送給誠實驗證者集合的一半,將另一個區塊發送給另一半。分叉選擇算法將檢測到這種衝突,區塊支持者將被執行沒收並從網絡中驅逐出去。然而,上面提到的兩個區塊仍然存在,並且將有大約一半的驗證者集來證明每一個分叉。攻擊者以喪失一個驗證者為代價,成功地將區塊鏈一分為二。同時,其餘的惡意驗證者保留他們的證明。然後,在分叉選擇算法的執行過程中,有選擇地將有利於一個或另一個分叉的證明釋放給足夠多的驗證者,這允許它們生成具有最多累積證明的任何分叉。這種情況可以無限期地持續下去,攻擊者可以在兩個分叉上保持驗證者的均勻分佈。由於兩個分叉都不能吸引 2/3 的絕對多數,信標鏈不會最終確定。
在這種類型的攻擊中,由攻擊驗證者控制的總質押百分比越大,在任何給定時刻攻擊的可能性就越大,因為它們更可能選擇驗證者在每個 slot 中提出一個區塊。即使只有 1%,發起平衡攻擊的機會平均每 100 個 epoch 就會出現一次,這不需要長時間的等待。
一種類似的攻擊,就是彈跳攻擊,它只佔一小部分。在這種情況下,攻擊驗證者再次拒絕投票。這一次,他們沒有發布投票來保持兩個分叉之間的平均分配,而是在適當的時候使用他們的選票來證明在分叉 A 和分叉 B 之間交替的檢查點是合理的。這兩個分叉之間的證明的翻轉阻止了可以在任意一條鏈上完成的合理的源和目標檢查點對,從而終止了最終確定性。
雪崩攻擊
另一類攻擊被稱為雪崩攻擊,在 2022 年 3 月的一篇論文中對其進行了描述。作者認為,提議者增強,並不能防禦一些變種的雪崩攻擊。然而,作者也只演示了對以太坊分叉選擇算法的高度理想化版本的攻擊 (他們使用了沒有 LMD 的 GHOST)。其中,GHOST 分叉選擇算法將第一個分叉區塊及其所有對應的後代區塊所獲得的選票進行累積,並選擇票數最高的分叉作為主鏈。
為了發動雪崩攻擊,攻擊者需要控制幾個連續的區塊提議者。在每個區塊提議 slot 中,攻擊者保留他們的區塊,並收集它們,直到誠實鏈與保留的區塊達到相等的子樹權重。然後,釋放被保留的區塊,使它們最大限度地模糊。這意味著,例如,對於 6 個保留區塊,第一個誠實區塊 n 與對手區塊 n 競爭創建一個分叉,然後所有剩下的 5 個對手區塊都在 n+1 處與誠實區塊競爭。這意味著建立在對手區塊 n 和 n+1 上的分叉現在吸引了誠實的驗證,因為區塊在真正誠實的鏈的重量等於對抗鏈的重量的時刻被釋放。現在可以對尚未構建在其之上的保留區塊重複這一操作,允許攻擊者阻止誠實的驗證者跟隨誠實的鏈頭,直到它們的模糊區塊被用完。如果攻擊者在攻擊進行時有更多的機會提出區塊,他們可以使用它們來擴展攻擊,這樣,越多的驗證者參與攻擊,它可以持續的時間越長,並且可以將更多誠實的區塊從規範鏈中移出。
LMD- ghost 分叉選擇算法的 LMD 部分可以緩解雪崩攻擊。LMD 的意思是 “最後消息驅動”,它指的是每個驗證者保存的一個表,其中包含從其他驗證者接收到的最新消息。只有當新消息來自某個特定驗證者表中已存在的 slot 之後的 slot 時,該字段才會更新。在實踐中,這意味著在每個 slot 中,接收到的第一個消息是它所接受的消息,任何其他消息都是要忽略的模棱兩可的消息。換句話說,共識客戶端不計算模棱兩可——它們使用來自每個驗證者的第一個到達的消息,模棱兩可會被丟棄,從而防止雪崩攻擊。
遠程攻擊
遠程攻擊也是權益證明 (PoS) 共識機制下的一種特定類型的攻擊,包括兩個主要場景:在第一個場景中,攻擊者作為參與原始區塊的驗證者,維護一個單獨的原始區塊鏈旁邊的區塊鏈分叉,並最終說服誠實的驗證者集合在很久以後的某個適當時間切換到它。然而,這種攻擊在信標鏈上是不可能發生的,因為 “finality gadget” 確保所有驗證者定期就誠實鏈 (“檢查點”) 的狀態達成一致,檢查點後的區塊不能重新組織。
在第二種情況下,當一個新節點加入網絡時,它將從最近的節點 (稱為弱主觀性檢查點) 獲取信息來構建一個區塊鏈作為偽創始區塊。這為新節點創建了一個 “信任網關”,然後它才能開始自己驗證區塊。然而,從客戶端 (如區塊瀏覽器) 收集構建檢查點所需的可信區塊信息並不能增加客戶端本身的可信度,因此主觀性是 “弱” 的。因為檢查點的定義是由網絡上的所有節點共享的,所以不誠實的檢查點是共識失敗狀態。
驗證者控制了大部分的情況
33%
33% 的質押份額是攻擊者的基準,因為如果超過這個數量,他們就有能力阻止信標鏈完成,也無需精細控制其他驗證者的行為。它們可以簡單地一起消失。這是因為要完成信標鏈,檢查點就必須由 2/3 的質押以太驗證。如果 1/3 或更多的質押以太惡意驗證或不驗證,那麼 2/3 的絕對多數就不可能存在。防禦這種情況的方法是信標鏈的不活動洩漏。這是一種緊急安全措施,在信標鏈未能完成四個 epoch 後觸發。不活動洩漏標識那些沒有驗證或驗證結果與大多數相反的驗證者。由這些非驗證的驗證者所擁有的質押以太幣會逐漸流失,直到最終它們共同佔總數的 1/3 以下,因此鏈可以再次被完成。
50% 和 51%
理論上,如果惡意驗證者控制了 50% 的質押 ETH,他就可以將以太坊區塊鏈分成兩個大小相等的分叉。與前面說過的平衡攻擊類似,攻擊者可以通過為同一 slot 提出兩個區塊然後簡單地使用其所控制的 50% 來投票反對誠實的驗證者集來維護兩個分叉並防止最終確定性。四個 epoch 之後,兩個分叉上的不活動洩漏機制將被激活,因為每個分叉都會看到其一半的驗證者無法驗證。每個分叉都會抽取另一半驗證者集合的質押,最終導致兩條鏈由不同的驗證者代表 2/3 的絕對多數。在這一點上,唯一的選擇就是依靠社區恢復。
相比之下,當攻擊者控制了 51% 以上時,他們就可以控制分叉選擇算法。在這種情況下,攻擊者將能夠通過多數票進行驗證,從而使他們有足夠的控制權來進行簡短的重組,而不需要欺騙誠實的客戶。51% 的份額不允許攻擊者改變歷史,但他們有能力通過應用他們的多數票有利的分叉和/或重組不方便的不合理的區塊,以此來影響未來。誠實的驗證者會效仿,因為他們的分叉選擇算法也會將攻擊者青睞的鏈視為最重的鏈,因此鏈可以最終確定。這使得攻擊者能夠審查某些交易,進行短程重組,並通過對區塊進行有利的重新排序來提取最大 MEV。針對這種情況的防禦措施是,攻擊者將多數質押置於風險之中,因為社交層很可能介入並採用誠實的少數質押,從而使攻擊者的質押大幅貶值。
66%
擁有 66% 或更多的質押以太的攻擊者可以完成他們的首選鏈,並且他們不必強迫任何誠實的驗證者。攻擊者可以簡單地為他們喜歡的分叉投票,然後完成它,他們可以以不誠實的絕對多數進行投票。作為絕對多數質押,攻擊者將始終控制最終區塊的內容,擁有消費、回滾和再次消費、審查某些交易和隨意重組鏈的權力。攻擊者實際上是在購買進行事後重組和最終性還原 (即改變過去和控制未來) 的能力。這裡唯一真正的防禦是退回到社交層以協調採用替代分叉。
總的來說,儘管存在這些潛在的攻擊向量,信標鏈的風險還是很低的,甚至比它們的工作量證明等價物更低。這是因為攻擊者需要冒著質押 ETH 的巨大成本風險,來壓倒擁有投票權的誠實驗證者。內置的激勵層可以防止大多數惡意行為,特別是對低風險的攻擊者。更微妙的彈跳和平衡攻擊也不太可能成功,因為真實的網絡條件很難對特定驗證者子集的消息傳遞實現細粒度控制,而客戶端團隊已經用簡單的補丁快速修復了已知的彈跳、平衡和雪崩攻擊問題。
然而,33%、51% 或 66% 的攻擊可能需要社區投票來解決,因此有效的社區治理對攻擊者來說是一個強大的抑制因素。對於攻擊者來說,技術上成功的攻擊仍然有被社區阻止的風險,這降低了攻擊者獲得足夠利潤以充當有效威懾的可能性。這就是為什麼保持一個具有一致價值觀的有效社區對投資那麼重要。
ETHPoW 安全性
礦工自以太坊成立以來一直扮演著重要的角色,但以太坊的合併將打破這一局面。Bitpro 估計,GPU 礦工需要關閉約 95% 的 GPU,才能在合併後的加密生態系統中保持盈利。但由於合併後不太可能立即關閉這麼多 GPU,礦工會在合併後嘗試 PoW 分叉。如果一些交易所也支持分叉,那麼分叉的壽命將比預期的要長。到目前為止,一些機構已經支持了 ETHPoW 硬分叉,包括 Gate、OKX、f2pool、Matcha、BitMEX 和 Justin Sun。
2022 年 8 月 15 日,Ethereum Pow 在推特上發布消息稱,ETHW Core 的初始版本已經在 GitHub 上發布,主要功能如下:1. 禁用難度炸彈;2. EIP-1559 變更,基本費用改為由礦工和社區共同管理的多簽名錢包;3. 調整 ETHW 的初始挖礦難度。
2022 年 8 月 26 日,Ethereum PoW 在推特上發布了 ETHW 的第一個測試網 “iceberg”。隨之而來的是區塊鏈瀏覽器和 RPC 服務器。他們歡迎社區中所有潛在的合作夥伴 (交易所、池、錢包提供商、橋、建設者等) 加入到構建一個真正的 POW 驅動的以太坊生態系統中來。
那麼,以太坊合併後硬分叉 ETHPoW 可能會面臨哪些安全問題呢?我們將在下面詳細分析。
算法攻擊
當系統中的惡意單個實體或組織能夠控制大部分(即超過 51%)的全網算法時,51% 算法攻擊是對區塊鍊網絡的潛在攻擊。由於 PoW 算法中的共識是由算法決定的,這使得攻擊者可以利用算法篡改賬本,從而導致對系統的惡意攻擊。以太坊合併後,無法再通過挖礦獲得收入的礦工將關閉他們的礦機,這導致基於 POW 的 ETH 分叉可能失去一些算力,例如,目前最大的礦池 Ethermine 已經發佈公告,將停止支持 ETH PoW 挖礦。
一旦支持 ETHPoW 的算力下降,就會降低攻擊者發起算法攻擊的代價。然後攻擊者可以租用礦池的大量算力,使其算力達到 51% 以上,此時,它可以利用算力優勢更快地生成區塊,當生成的區塊成為系統中最長的鏈時,它可以回滾區塊交易,實現數據篡改,這會造成很大的危害,如:雙花,任意地址控制交易等。
雙花
雙花攻擊是指攻擊者試圖重複消費其賬戶擁有的相同數字代幣。一個例子:
假設 A 在區塊高度 1000 處有 51% 的算力。A 向 B 轉 1 個 ETH,轉移交易由礦工打包。
交易確認後,A 依靠 51% 的算力優勢,在區塊高度 999 後重新生成一條 “更長的鏈”,並在區塊高度 1000 時將 ETH 重新轉移給 C,並打包交易記錄,即鏈中包含 A 向 C 轉移 ETH 的記錄。
根據 “最長鏈共識”,包含轉移到 C 的記錄的鏈成為主鏈,從 A 轉移到 B 的一個 ETH 為 “無效支付”。
控制任何地址的交易
利用 51% 的算力,攻擊者可以在任意地址打包或解包交易,阻止區塊確認任意交易,甚至阻止部分礦工獲得有效的記賬權,從而達到控制任意地址交易的目的。
但是擁有 51% 的算力並不是萬能的,例如它不能修改別人的交易記錄,也不能阻止交易的發出,也無法憑空產生 ETH。
重放攻擊
在傳統術語中,重放攻擊指的是攻擊者發送一個已經被目標主機接收到的數據包,以達到欺騙系統的目的。在區塊鏈領域中,重放攻擊通常發生在區塊鏈硬分叉的情況下,這意味著 “一條鏈上的交易在另一條鏈上通常是合法的”。
2016 年 7 月 20 日,以太坊在第 192 萬個區塊高度發生硬分叉,產生了兩條鏈,分別稱為 ETH 鍊和 ETH Classic 鏈,對應的代幣分別為 ETH 和 ETC。
由於這兩個鏈上的地址和私鑰是相同的,而且交易格式完全相同,因此其中一個鏈上的交易在另一個鏈上也是完全合法的。在一條鏈上發起的交易,如果在另一條鏈上重放,可能也會被確認。由於事先沒有適當的計劃,許多人利用這一漏洞,不斷地在交易所存取款,以獲得額外的 ETC。因此,“重放攻擊” 在區塊鏈世界中被重新定義。
目前以太坊合併中可能出現的硬分叉 ETHPoW,理論上也可能存在上述問題。
應該做什麼來防止重放攻擊? 事實上,很容易達到以升級為目的的分叉,因為硬分叉升級會使用不同的客戶端版本,並且交易的前綴通常包含發起交易的客戶端的版本信息。分叉之後,礦工通常會拒絕某個版本之前的交易,以避免打包來自老客戶端的 “非法交易”(不是惡意交易,只是不被其他節點識別的低版本號),這使得惡意攻擊者很難在硬分叉升級期間通過重放攻擊竊取資金。
2022 年 8 月 23 日,EthereumPoW 正式發布第二次代碼更新以強制執行 EIP-155。在此更新之後,所有交易都必須使用鏈 ID 進行簽名。這將保護 ETHW 用戶免受來自 ETHPoS 和其他分叉代幣的重放攻擊。
下面是對 EIP-155 的簡要介紹:
該提案被稱為 “簡單重放攻擊保護”。如果 block.number >= FORK_BLKNUM 和 CHAIN_ID 可用,那麼在計算簽名交易的哈希值時,不要只對前六個 rlp 編碼元素(nonce、gasprice、startgas、to、value、data)進行哈希處理,而應該哈希九個 rlp 編碼的元素(nonce、gasprice、startgas、to、value、data、chainid、0、0)。此時,簽名中 v 的值不再是 recid,而是 recid+ chainID*2+ 35。
因此,簡而言之,簽署交易時需要 Signer 和 PrivateKey。需要 Singer,是因為在 EIP-155 修復重放攻擊漏洞後,需要保持原有的區塊鏈簽名方法不變,但需要提供新版本的簽名方式。因此,新舊簽名方式通過一個接口實現,根據區塊高度創建不同的 Signer。在 EIP-155 中實現的新哈希算法的主要目的是獲取交易用於簽名的哈希值 TxSignHash。與舊的方法相比,哈希計算混合了鏈 ID 和兩個空值。注意,這個哈希值 TxSignHash 並不等同於 EIP-155 中的交易哈希值。
這樣,一個簽名交易可能只屬於唯一標識的區塊鏈。
另外,為保證項目安全,建議項目在合約中進行離線簽名驗證時,簽名數據應包含 Chain ID,避免跨鏈簽名重用造成資產損失。
應用層項目
實際上,傳統的分叉是需要用算力做選擇的,而選擇的主角是礦工,而這一次,如果真的同時有兩個以太坊鏈,需要做出選擇的是整個以太坊生態系統。這裡的項目方是用戶和投資者。
今天的以太坊和 2016 年的硬分叉相比已經不可同日而語了,DeFi 項目已經佔據了以太坊生態圈的大部分,但 DeFi 的基礎是鏈上資產,所以項目主要是沿著資產端。資產端是 USDT、USDC 等穩定資產,而 DeFi 的質押或者藉貸項目基本都是以資產端為主。
對於這些穩定資產 (這裡主要指穩定幣) 的發行者來說,如果以太坊分叉發生,他們將突然面臨一個問題——兩個版本的穩定幣。作為穩定幣的發行人,每發行一枚穩定幣,就會突然有兩份債務義務。
雖然大多數人認為穩定幣發行者會將新的 PoS 鏈視為 “真正的” 以太坊網絡,但如果他們想要支持 PoW 鏈呢? 畢竟,他們有足夠的經濟動機這麼做。
例如,他們可以做空 PoS 以太坊代幣,在 PoW 網絡上宣布贖回,並賺取數十億美元。這可能會破壞新的以太坊網絡,協議、交易所和相關的 DeFi 項目被關閉。這將造成巨大的混亂,並可能大規模摧毀加密貨幣市場。
同樣,以太坊分叉項目 EthereumPow 在 8 月 17 日發布推文稱,ETHW Core 將引入流動性池凍結技術來保護用戶資產。因在以太坊 PoW 硬分叉之後,特別是前幾個區塊,用戶存放在流動性池中的 ETHW 代幣,如 Uniswap、Susiswap、Aave、Compound 等,將被黑客利用,以廢棄或無價值的方式交換或借 USDT、USDC、WBTC,這將對整個網絡和社區造成巨大的破壞。因此,ETHW Core 暫時凍結了一些 LP 合約,以保護用戶的 ETHW 代幣,直到協議的控制者或社區找到更好的方法來返還用戶的資產。凍結不適用於僅涉及單一資產的權益合約 (如 ETH2.0 存款合約和打包以太幣)。ETHW Core 建議每個人都在硬分叉之前從 LP(如 DEX 和貸款協議) 中撤出 ETH。
免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。本文內容僅用於信息分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。