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