隨著越來越多的高調區塊鏈試圖從工作證明協議轉換過來,利益證明協議成為人們關注的焦點。他們中的許多人探索混合系統(POW/POS)的選擇,而其他人則致力于純POS實現。
而Proof of Stake協議的最大威脅之一是遠程攻擊。
在我對這個主題的研究中,我發現有關遠程攻擊的信息很少,很多時候都會產生誤導。即使深入學術論文,有時我也無法理解這個攻擊組的本質。下面你會發現我試圖抵御遠程攻擊。
簡而言之,長程攻擊就是攻擊者創建了一條從創世區塊開始的長區塊鏈分支,并試圖替換掉當前的合法主鏈。該分支上可能存有和主鏈不同的交易和區塊,所以這種攻擊又被稱 替換歷史攻擊或歷史覆寫攻擊。
對于本文的其余部分,術語long range、alternative history、alternate history、history revision將交替使用。
遠程攻擊之所以存在的主要原因是一個被稱為弱主觀性的概念。
弱主觀性(Weak Subjectivity)
該術語用于描述影響區塊鏈網絡的新節點的問題以及在大量時間離線后聯機的節點。在線節點不受弱主觀性的影響。
當一個新節點添加到網絡時,始終會與創世塊有一定聯系。這是所有節點作為第一個節點接受的唯一塊。與創世塊一起,該節點將被呈現該區塊鏈的所有當前發布的分支。不幸的是,節點將無法立即告知哪個分支是主鏈。
這同樣適用于長時間離線的節點。在某個時間點上,這些節點知道哪個分支是主鏈,但在離線之后,它們不再清楚那個是主鏈。
在線節點實時跟蹤和監控區塊鏈。除非一個分支合法地成為主鏈,否則不能欺騙他們接受另一個分支作為主鏈。
示例區塊鏈,綠色區塊為Genesis區塊,紫色表示孤立/分支,黑色區塊為主鏈
如您所見,上面的區塊鏈快照有許多不同的分支。其中一些比其他的長。
我們將在本文中討論的第一個規則是最長的鏈規則。根據這條規則,主鏈永遠是塊數最多的分支。在需要物理資源來生成區塊的工作塊鏈的證明中,最長的鏈規則是確定分支中投入了多少工作量的一個很好的方法。
POW弱主觀性(POW Weak Subjectivity)
在工作證明區塊鏈中,我們基于這樣的假設:除非網絡受到51%的攻擊,否則不可能有來自創世塊的競爭分支。對于分支,為了達到主鏈的長度,需要大量的計算能力投入。對于PoW區塊鏈,最長鏈規則足以抵消弱主觀性。
在Proof of Stake協議中,最長的鏈規則不足以確定主鏈。這是因為我們稱之為無成本模擬的概念。
權益證明協議采用驗證人和一種被稱為“權益”的虛擬資產來保障網絡的安全。權益證明區塊鏈網絡中沒有礦工,也不再需要任何人消耗算力來計算無用的哈希難題。整個網絡構建在對驗證人的信任之上,相信他們由于對特定某條鏈的投資而一直會為這條鏈記賬。
驗證者僅僅是從交易池中取交易,打包到區塊中,然后廣播出去,僅此而已。所以說,無代價模擬就是幾乎不消耗算力資源來創建一條從創世區塊開始的長分支鏈的能力。
多個分支具有相同長度的POS區塊鏈示例
任何到網絡的新節點都將顯示區塊鏈的多個分支,并且許多分支可以具有相同的長度。 通過無成本模擬和弱主觀性,最長鏈規則受到挑戰。 僅僅確定區塊鏈的主鏈是不夠的。 遠程攻擊利用這兩個概念。
長程攻擊
到目前為止,有三種不同類型的遠程攻擊。大多數出版物通常將前兩種情況混為一談,即簡單腐敗(simple Corruption)和變節攻擊(Posterior Corruption),或者只接受變節攻擊(Posterior Corruption)作為這些攻擊的唯一案例。不幸的是,我沒能為第一個案例找到更具描述性的名稱。
總而言之,我們有以下案例:
Simple(簡單攻擊)
Posterior Corruption(變節攻擊)
Stake Bleeding(權益流損)
攻擊者通過回溯至創世區塊并分叉整條區塊鏈的行為來進行長程攻擊。這條新的分支將覆寫和主鏈完全不同的區塊歷史(或是部分)。一旦這條人造的惡意分支長度超過主鏈,它就會取代主鏈,成功上位。
從最簡單的遠程攻擊案例開始,我們將構建更復雜的場景。在我們的示例中,我們有一個帶有3個驗證人的驗證器池,Bob,Alice和Malory,他們都擁有相同股份33.3%。
關鍵細節:關于驗證人及其股份關系的信息都存儲在Genesis區塊。
SIMPLE
第一種情況是指對Pos協議的簡單實施。 在這種情況下,節點不檢查塊時間戳。
在POS協議的正常循環中,每個驗證人都有機會驗證區塊。
示例區塊鏈的快照,每個驗證器都有相同的選舉機會
Malory決定執行遠程攻擊并創建區塊鏈的另一個分支。Malory回到創世區塊,并開始創建分叉區塊鏈。
由于驗證人的信息都位于Genesis區塊內,Malory將無法以比主鏈更快的速度生成區塊。Maloy只能以相同的速率生成塊。在所有這些條件下,Maloy想要超越主鏈的唯一途徑就是提前生產區塊。
在Maloy的分支鏈中,當選的機會與其他分支鏈相同。“括號”塊是空區塊。 Malory分支的當前長度是2個區塊。
三點表示多個空區塊。 Malory為了與主鏈競爭,她必須提前計算區塊。 上面的區塊鏈快照中,兩個分支都有5個區塊。
Malory將不得不偽造時間戳,并且由于她是該分支中唯一的活躍利益相關者,因此可以這樣做。在節點不考慮時間戳的實現中,兩個分支都是有效的,節點將無法發現Malory的把戲。
Posterior Corruption(變節攻擊)
假設更改時間戳的伎倆已經失效了, Malory 明白為了實現長程攻擊她必須另辟蹊徑。她要在相同的時間幀數內生成比主鏈更多的區塊。由于她產生區塊的概率是寫死的,她得好好想想了。
如果她也可以使用Bob的生成區塊呢?這會增加她與主鏈競爭的機會,但為什么Bob會同意這一點呢?這是介紹驗證人輪換概念的好時機。
驗證者應當可以選擇退出,并且區塊鏈系統在某些情況下能輪換更替驗證者或是把驗證者移除出系統。
為了便于我們的討論,假設 Bob 決定在第10000塊之后退出區塊鏈系統。Bob 提走了他質押的權益,兌現之后度假去了。在當驗證人的時候,Bob 使用了保管私鑰的最優方法。而當他在系統中不再持有任何權益時,就沒有必要再那么小心翼翼地保管私鑰了。
關鍵細節:即使Bob不再能夠簽署新的區塊(他不再是驗證人),他也能夠再次簽署前10000個區塊。如果他在另一個分支中的前10000個區塊上簽名,這非常有用。
由于Bob沒有任何利害關系,因此他對攻擊系統沒有任何阻礙作用。
這種攻擊有兩種可能的情況:
Malorys盜取Bob的私鑰;
Malorys賄賂Bob,Bob加入了這次攻擊;
既然Bob的私人密鑰可供Malory使用,Malory可以作為Bob簽署有效的塊,從而增加了她成功超越主鏈的機會。這種攻擊被稱為變節攻擊。
Bob加入Malory的長程攻擊。 現在分分支更具競爭力,超越主鏈的機會更大
如上圖所示,Bob的區塊不再是空的,而Malory的分支與主鏈的競爭更加激烈。這種長程攻擊可以通過使用關鍵的進化密碼技術和移動的檢查點來對抗。有關緩解技術的更多詳細信息將在本文檔的后面部分介紹。
Stake Bleeding(權益流損)
邪惡的 Malory 又決定對區塊鏈發動攻擊了,這一次她打算使用權益流損攻擊。和上文中提及的初始場景條件一致,Malory一方面是主鏈上的驗證者,一方面密謀著從創世區塊開始構建自己的分支鏈。問題又來了,當產生分支鏈時,Malory 能被選作為區塊驗證者的概率和在主鏈上是一致的。要記得所有驗證者的初始信息在創世區塊中早已經固定寫死了。在自己的分支鏈沒有超過主鏈長度之前,Malory是不會把分支鏈廣播發布出去的。
Malory 在本地制造分支鏈(虛線表示)并且不廣播此鏈
這一次Malory為了增加攻擊的成功率,開始拖延主鏈的正常運行。如果Malory持有的權益占比足夠多,這種行為可能會演變為一次活性凍結攻擊(Liveness Denial Attack)。每當 Malory 被選舉為主鏈上的區塊驗證者時,她都會跳過該塊,放棄自己的區塊驗證的身份。這并不意味著別的驗證者會替代她的工作,相反,在該區塊位置處,不會有新的區塊加入到主鏈中。這是 Malory 精心設計用于拖延主鏈出塊的策略。
Malory 在主鏈上放棄了驗證區塊來讓自己的分支鏈更有競爭力
這樣會導致 Malory 不能從系統中獲得區塊驗證的獎勵,以至于她的權益占比將不斷減少,所有正常進行區塊驗證的節點都將從系統中獲得區塊獎勵和交易費。在這次攻擊中,我們假設驗證的獎勵由他們所占的權益比例來進行分配。
另一方面在自己的分支上,Malory是唯一的驗證者,每當有機會被選作區塊驗證者時,她都會生成區塊。在這種場景下,Malory會想盡辦法增加他的權益占比。此外,她會從主鏈上復制交易并在自己的分支鏈上廣播出去。這樣做能增加她所獲得的交易費用,并且增加她的權益占比。
通過采用這樣的策略,一方面拖延主鏈的出塊速度,一方面在分支鏈上盡可能廣播更多的區塊,Malory最終可以在自己的分支鏈上獲得絕大部分的權益,并且比主鏈更快地產生區塊。一旦她的分支鏈長度超過了主鏈,她就將發布最后一筆交易,將自己的權益交易給其他的驗證者,并且緊接著廣播發布自己的分支鏈。
Malory 一方面在分支鏈上增加著權益占比,一方面在主鏈上由于廢棄區塊不斷地損失權益
你可以看到這樣的攻擊遠遠比前文中提到了兩種攻擊更加復雜。它引入了我兩種新的概念,一是用于拖延主鏈正常出塊的活性凍結,另一個則是從主鏈中復制交易信息出來。
值得留意的是,這樣的攻擊只能針對非常長區塊時間的區塊鏈來實施。根據研究,持有 30% 權益的攻擊者在長約 6 年的區塊鏈上才能發動這種攻擊(由于無代價模擬,構建一條這樣長度的分支鏈其實是十分迅速且不費力的)。
權益流損攻擊可以通過采用移動檢查點的策略來應對。充裕法則(Plenitude Rule)同樣可以用來判斷那一條分支是惡意的。
應對方法
在過去的幾年里,人們研究了各種緩解技術。盡管它們都提供了某種保護來抵御遠程攻擊,但它們都不是一種有效的緩解技術。因此,需要結合使用這些方法來應對此類攻擊。
最長鏈原則
這是解決弱主觀性的最簡單的方案。在Pos協議中,這種策略常常需要與其他手段混合使用以應對弱主觀性,而POW協議僅使用這種技術就可以對抗弱主觀性。
主鏈時擁有區塊數目最多的分支,在上圖中黑色區塊組成的分支即為主鏈
根據此規則,主鏈是具有最大塊數的分支。 主鏈可以不時變化,可以重組塊。 當鏈的另一個分支變得比主鏈長時,將發生鏈的重組。
移動檢查點
檢查點或者說移動檢查點策略可以說是所有Pos協議區塊鏈中都用到的保護策略。它的簡單性和易實現性使其成為在POS驅動的區塊鏈中實施的第一種緩解技術之一,當然是在最長的鏈規則之后。
移動檢查點背后的想法是,只能重新組織鏈中最新的x個塊。可重組塊的數量取決于協議的實現,其范圍從一個月的塊(如peercoin)到幾天或幾小時的塊(如nxt)。
在本例中只有末端最后兩個區塊可能被重組。使用移動檢查點之后,灰色的區塊將不可篡改。紅色的區塊分支由于試圖重組不可篡改的區塊(灰色塊)而變得無效了。在上圖中唯一可以被重組的只有紫色的區塊。
等等!如果攻擊者可以重組后 X 個區塊,那不還是長程攻擊碼?
前半段沒錯,你的確可以試圖重組最后幾個區塊并且對系統造成一定的擾亂,可是這樣的攻擊已經屬于其他的攻擊范疇了。長程攻擊指的是從創世區塊開始發動的攻擊。
對十分有限數量區塊發動的攻擊被稱為短距離攻擊或者行賄攻擊(對數日到數月不等跨度的區塊進行重組)。短程攻擊具有不同的激勵、執行方法、影響和緩解技術。盡管短程攻擊很有意思,但本文不討論這些攻擊。
通過移動檢查點,主鏈真正變得直到最后 X 區塊之前都不可篡改。我知道這聽起來很奇怪,你習慣將區塊鏈稱為“不變的分類賬”,但你有沒有想過它是否真的是這樣??事實是,事實并非如此。
您可能無法從一個塊中更改事務,但是您可以分支鏈、構建自己的塊、繞過主鏈、重新組織塊和TAA DAA,您只是修改了不可變鏈。準確地說,我們沒有修改任何塊,只是創建了另一個歷史記錄。前一個主鏈即使仍然不變,也不再有效。它不再擁有任何來自系統的信任。
密鑰演進加密技術
接下來我們要討論一些更復雜的應對策略,密鑰演進加密技術是用來應對變節攻擊的。在變節攻擊的場景中,退休驗證者手中的密鑰雖然不能驗證新區快了,但是他們能對舊有的區塊進行簽名。
使用密鑰演進加密技術,更確切來說密鑰演進簽名技術(KES),當前區塊驗證者能在區塊簽名后馬上銷毀掉使用過的密鑰。
利用不斷演進的密鑰以及舊有密鑰不可回溯的特點,如果 Bob 想要為另一條分支進行簽名,他并不能重新從創世區塊開始使用他的密鑰(因為他已經在主鏈上使用過該密鑰了)。
這種策略還在試驗階段,仍需要很多相關研究來保證以上密鑰演進加密技術的假設能順利實行。
情境感知交易(Context-Aware Transactions)
區塊鏈的每一個區塊在區塊頭中都包含了上一個區塊的哈希值,這是用以識別區塊所屬分支的標識。利用情境感知交易,我們能進一步延伸這個概念,在每一個交易中也記錄上一個區塊的哈希值。
這樣一來,每一個交易都和特定的區塊以及特定的分支聯系起來。由于交易中已經保存了當前分支鏈的索引,它就不能被有效地復制到其他的分支中(除非這個索引也存在于其他鏈中)。
Jeff Coleman 曾經在通用哈希時間中深入地討論了情境感知交易的工作方式, 通用哈希時間也是情境感知交易的其中一種。
Malory 把紫色分支中的交易拷貝出來使自己的分支鏈長得更快,然而該交易是和 Bob 的區塊聯系著的。Malory 的分支(紅色)會因為不連續而被誠實的節點拒絕同步。
這種策略能用來阻止長程攻擊。應用情境感知交易,攻擊者無法從主鏈向分支鏈拷貝交易。雖然它不能完全防止長程攻擊,但的確給長程攻擊帶來了巨大的阻礙。
攻擊者被迫只能完全地創造不一樣的歷史交易數據。即使他們完成了攻擊,也不會太輕巧。
充裕法則(Plenitude Rule)
充裕法則是又一種應對長程攻擊的成熟策略。這種策略基于探查存在競爭關系的不同分支中區塊的稀疏程度。
創世區塊中寫死的驗證者權益大小
攻擊者無法操控他們的初始權益占比。假定所有分支都從同一個創世區塊開始,如果攻擊者在創世區塊中寫死的權益為 20% ,那在所有的分支上均以 20% 開始。
在長程攻擊中,攻擊者在開始時被選作驗證區塊的概率十分之小,而隨著不斷驗證區塊并獲得區塊獎勵,他的權益占比也越來越大。驗證者的權益越多,他被選中出快的概率也越高。現在我們要做的是找到這個加速階段。
直到 X 點之前區塊鏈的狀態圖。在任意給定的分支鏈上驗證者都有著同樣的出塊概率。
在惡意節點積攢足夠多權益來加速分支鏈出塊之前,剩余誠實的驗證者負責了 80% 的出塊任務(在本例中)。根據這一信息,我們就能看到,哪一條分支鏈出的塊只是其它鏈的一部分(一條分支在給定位置有 80% 到 100% 的概率出塊,而另一個分支在給定區塊位置只有最多 20% 的概率出塊)。(校對注:即在權益流損攻擊中,由于 M 在主鏈上拖延出塊,所以主鏈上出塊幾率為 80-100%,但在分支鏈上,由于只有 TA 自己出塊,所以出塊幾率最高為 20%)
惡意分支在第一部分的區塊十分稀疏的示意圖
在上圖中我們能看到權益是如何累積的。位于上面的時惡意分支,在頭兩部分的區塊要遠遠比最后一部分更為稀疏。而在另一條分支中,我們能看到在所有的部分中,區塊始終平滑的產生。
出現空塊并不意味著驗證者是在刻意阻延區塊鏈(像上圖中的 Alice)。有時由于該時間段內沒有交易,區塊就會是空的。
在第三部分,上面那條分支鏈積攢了足夠多的權益,使得區塊的密度大大提高。
在 X 時間之后 Malory 分支鏈上的權益持有情況
在該時間點后,攻擊者的權益在自己的分支鏈上會繼續增多,而誠實驗證者的權益占比會不斷降低。在分支鏈上區塊會更頻繁地出塊,并最終超過主鏈。
充裕原則旨在檢測分支的區塊密度自產生起到一段時間后區塊密度顯著改變的異常表現。假設惡意驗證者總是少數的(當 34% 以上的驗證者都是惡意的,區塊鏈系統就失敗了),那么主鏈的區塊密度總會比競爭的惡意分支鏈要更高。
根據這一原則,很輕易就能識別出主鏈并解決弱主觀性問題。
結論
在本文中,我們探討了權益證明中最有意思的一種攻擊方式——長程攻擊,并將其根據特點劃分為三個子類。在討論了簡單攻擊、變節攻擊和權益流損三種攻擊方式之后,我們同樣列舉了對應的保護策略。
盡管在工作量證明系統中最長鏈原則已經足夠應對長程攻擊問題,權益證明區塊鏈仍然需要聯合使用不用的策略來解決這一難題。在維護權益證明區塊鏈安全性的過程中,我們需要混合采用移動檢查點、情境感知交易、密鑰演進加密技術和充裕法則來保證區塊鏈的安全。
評論
查看更多