重寫歷史:概述Pos的遠端攻擊

買賣虛擬貨幣
隨著越來越多的高調區塊鏈試圖從工作證明協議轉換過來,利益證明協議成為人們關注的焦點。他們中的許多人探索混合系統(POW/POS)的選擇,而其他人則致力於純POS實現。而Proof of Stake協議的最大威脅之一是遠端攻擊。在我對這個主題的研究中,我發現有關遠端攻擊的資訊很少,很多時候都會產生誤導。即使深入學術論文,有時我也無法理解這個攻擊組的本質。下面你會發現我試圖抵禦遠端攻擊。簡而言之,長程攻擊就是攻擊者建立了一條從創世區塊開始的長區塊鏈分支,並試圖替換掉當前的合法主鏈。該分支上可能存有和主鏈不同的交易和區塊,所以這種攻擊又被稱 替換歷史攻擊或歷史覆寫攻擊。對於本文的其餘部分,術語long range、alternative history、alternate history、history revision將交替使用。遠端攻擊之所以存在的主要原因是一個被稱為弱主觀性的概念。
弱主觀性(Weak Subjectivity)該術語用於描述影響區塊鏈網路的新節點的問題以及在大量時間離線後聯機的節點。線上節點不受弱主觀性的影響。當一個新節點新增到網路時,始終會與創世塊有一定聯絡。這是所有節點作為第一個節點接受的唯一塊。與創世塊一起,該節點將被呈現該區塊鏈的所有當前釋出的分支。不幸的是,節點將無法立即告知哪個分支是主鏈。這同樣適用於長時間離線的節點。在某個時間點上,這些節點知道哪個分支是主鏈,但在離線之後,它們不再清楚那個是主鏈。線上節點實時跟蹤和監控區塊鏈。除非一個分支合法地成為主鏈,否則不能欺騙他們接受另一個分支作為主鏈。


示例區塊鏈,綠色區塊為Genesis區塊,紫色表示孤立/分支,黑色區塊為主鏈
如您所見,上面的區塊鏈快照有許多不同的分支。其中一些比其他的長。我們將在本文中討論的第一個規則是最長的鏈規則。根據這條規則,主鏈永遠是塊數最多的分支。在需要物理資源來生成區塊的工作塊鏈的證明中,最長的鏈規則是確定分支中投入了多少工作量的一個很好的方法。POW弱主觀性(POW Weak Subjectivity)在工作證明區塊鏈中,我們基於這樣的假設:除非網路受到51%的攻擊,否則不可能有來自創世塊的競爭分支。對於分支,為了達到主鏈的長度,需要大量的計算能力投入。對於PoW區塊鏈,最長鏈規則足以抵消弱主觀性。
無成本模擬(Costless Simulation)在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% 以上的驗證者都是惡意的,區塊鏈系統就失敗了),那麼主鏈的區塊密度總會比競爭的惡意分支鏈要更高。根據這一原則,很輕易就能識別出主鏈並解決弱主觀性問題。結論
在本文中,我們探討了權益證明中最有意思的一種攻擊方式——長程攻擊,並將其根據特點劃分為三個子類。在討論了簡單攻擊、變節攻擊和權益流損三種攻擊方式之後,我們同樣列舉了對應的保護策略。儘管在工作量證明系統中最長鏈原則已經足夠應對長程攻擊問題,權益證明區塊鏈仍然需要聯合使用不用的策略來解決這一難題。在維護權益證明區塊鏈安全性的過程中,我們需要混合採用移動檢查點、情境感知交易、金鑰演進加密技術和充裕法則來保證區塊鏈的安全。


免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;