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