干貨覆寫歷史:簡要概述長距離攻擊,Part-1:攻擊區塊鏈
長距離攻擊是因什么而起,有哪些具體形式?
隨著越來越多高知名度的區塊鏈項目嘗試從工作量證明協議轉變為權益證明協議,當下權益證明協議備受矚目。許多項目正探索采用混合協議(PoW/PoS)的共識,而其余的則準備完全轉移到權益證明協議上來。
長距離攻擊(Long Range Attack)則是權益證明協議中最大的威脅之一。由于權益證明協議有弱主觀性并且能進行無代價模擬,這種攻擊比在工作量證明協議中更為危險。
在研究長距離攻擊的過程中我發現,有關參考資料一方面十分稀缺,一方面常常帶著很多誤導性的見解。即使查閱專業的學術論文,許多文章也不能正確地解讀這種攻擊。在下文中我將帶著大家好好捋一捋什么是長距離攻擊。
簡而言之,長距離攻擊就是攻擊者創建了一條從創世區塊開始的長區塊鏈分支,并試圖替換掉當前的合法主鏈。該分支上可能存有和主鏈不同的交易和區塊,所以這種攻擊又被稱 替換歷史攻擊或歷史覆寫攻擊。
下文中長距離攻擊、替換歷史攻擊和覆寫歷史攻擊含義一致。
長距離攻擊之所以存在,是由于弱主觀性。
弱主觀性
弱主觀性指的是區塊鏈網絡中的新節點或是長期離線的節點加入到網絡中時會遭遇到的問題,保持在線狀態的節點并不會受弱主觀性的影響。
當一個新節點加入到網絡中時,總需要人為地為它提供一個創世區塊。這個區塊是獨一無二被大家共識為首區塊的區塊。設置好創世區塊后,節點接著就會收到當前區塊鏈上所有公開的分支。那么問題來了,節點并不能分辨出哪些分支是從屬于主鏈的。
長期離線(例如數月)的節點也會遭遇相同的問題。雖然之前節點已經同步了相當長的主鏈,但是在長時間的離線之后,它們也無法分辨究竟哪一個新的分支從屬于主鏈。
而保持在線狀態的節點則總能及時地監控并同步主鏈。除非其它分支鏈篡位成功成為了合法主鏈,否則保持在線狀態的節點不可能接受其他分支作為主鏈。
如圖所示,整個區塊鏈上的確有許多不同的分支,并且長度不一,主鏈可能是他們中任意的一支。
本文首先要討論的原則是最長鏈原則 。根據這一原則,主鏈總是擁有區塊數目最多的鏈。由于在工作量證明區塊鏈中需要現實的算力資源來生產區塊,因此鏈長度可以有效地反映出分支上凝聚的工作量,最長鏈原則也就是說凝聚了最多工作量的分支便是主鏈。
工作量證明的弱主觀性
在工作量證明區塊鏈中我們基于這樣一個假設,除非遭遇了 51% 攻擊,不可能有其它從創世區塊開始并與當前主鏈存在潛在競爭關系的分支鏈。而對于一個企圖篡位的分支鏈,要達到當前主鏈那樣的長度,必然耗費巨量的算力。所以對采取工作量證明協議的區塊鏈,最長鏈原則已經足夠解決弱主觀性問題了。
無代價模擬
權益證明協議中,由于無代價模擬 ,最長鏈原則并不能成為判斷主鏈的依據。
權益證明協議采用驗證人和一種被稱為“權益”的虛擬資產來保障網絡的安全。權益證明區塊鏈網絡中沒有礦工,也不再需要任何人消耗算力來計算無用的哈希難題。整個網絡構建在對驗證人的信任之上,相信他們由于對特定某條鏈的投資而一直會為這條鏈記賬。
這就使得在權益證明區塊鏈中,再也不需要浪費算力來挖礦了。在實際區塊鏈中,雖然還是需要微乎其微的一定算力來出塊,但已經可以被稱為無代價過程了。驗證者僅僅是從交易池中取交易,打包到區塊中,然后廣播出去,僅此而已。所以說,無代價模擬就是幾乎不消耗算力資源來創建一條從創世區塊開始的長分支鏈的能力。
任何加入到權益證明區塊鏈的新節點都會接收到多條分支鏈,其中很大一部分長度也相同。由于無代價模擬和弱主觀性 ,僅僅依憑最長鏈原則不足以判斷哪一條是主鏈。長距離攻擊恰恰利用了權益證明協議區塊鏈的這兩個特點。
長距離攻擊
目前總共有三種不同類型的長距離攻擊。許多研究常常把簡單攻擊和變節攻擊這兩種混淆,或者誤認為長距離攻擊僅有變節攻擊這一種。權益流損則是最近(2018 年)才開始得到研究的一種長距離攻擊類型。
很抱歉我不能給第一種攻擊類型一個更準確的描述稱謂,所以本文將沿用在權益流損的研究論文中對這一攻擊的命名——簡單攻擊。
總的來說,攻擊分為以下三類:
簡單攻擊(Simple Attack)
變節攻擊(Posterior Corruption)
權益流損(Stake Bleeding)
正如引言所述,攻擊者通過回溯至創世區塊并分叉整條區塊鏈的行為來進行長距離攻擊。這條新的分支將覆寫和主鏈完全不同的區塊歷史(或是部分)。一旦這條人造的惡意分支長度超過主鏈,它就會取代主鏈,成功上位。
讓我們先從長距離攻擊中最簡單的例子開始談起,由淺入深構建更復雜的攻擊場景。在本例中,整個驗證池中有三個驗證者,即 Bob,Alice 和 Malory。簡單起見,設定他們的初始持權數額均為 33.3% 。
關鍵細節:創世區塊中記錄了驗證者和它們各自的持權信息
簡單攻擊
第一個例子是權益證明協議區塊鏈的簡版,在這種場景下,節點不會去檢查區塊時間戳。
在權益證明協議正常的一輪周期內,每一個驗證者都有機會驗證區塊(即出塊)。
Malory 決定實施一次長距離攻擊,并且創建了一條分支鏈。她回溯到創世區塊,開始生成她的分支鏈。
既然驗證者的信息已經保存在了創世區塊中,Malory 就不能比主鏈更快地生成新區快,支鏈上的出塊速度和主鏈一致。在這種情況下,Malory 如果要升級她分支鏈并篡位主鏈的唯一途徑就是提前產生區塊。
Malory 將必須偽造時間戳,并且由于她是這條分支鏈的唯一活躍持權驗證人,這樣做并沒有什么風險。在不驗證時間戳的權益證明協議區塊鏈中,所有的分支鏈都是有效的,而且沒有節點能識破 Malory 的伎倆。
變節攻擊
假設更改時間戳的伎倆已經失效了, Malory 明白為了實現長距離攻擊她必須另辟蹊徑。她要在相同的時間幀數內生成比主鏈更多的區塊。由于她產生區塊的概率是寫死的,她得好好想想了。
如果她也能利用 Bob 產生的區塊呢?如果可以的話,這能增加 Malory 覆寫主鏈的成功率,但 Bob 怎么會同意的?這時候就該引入一個名為驗證者輪換的概念。
如果所有驗證者都是固定不變的,那是不公平的。一個權益證明系統雖然一定要從某個寫死的初始狀態啟動,但為了系統的公平性,驗證者必須是輪換更替的。
驗證者應當可以選擇退出,并且區塊鏈系統在某些情況下能輪換更替驗證者或是把驗證者移除出系統。
為了便于我們的討論,假設 Bob 決定在第10000塊之后退出區塊鏈系統。Bob 提走了他質押的權益,兌現之后度假去了。在當驗證人的時候,Bob 使用了保管私鑰的最優方法。而當他在系統中不再持有任何權益時,就沒有必要再那么小心翼翼地保管私鑰了。
關鍵細節:雖然 Bob 不再能對新區快簽名驗證了(他已經不是一個驗證人了),他依然能夠對前 10000 個區塊進行再次簽名。如果他想要在別的分支上簽名驗證前 10000 塊區塊,這是十分有用的。
既然 Bob 在系統中沒有任何質押的權益,他就沒有任何負向激勵不對區塊鏈發動攻擊。
Malory 于是有如下兩種場景實施攻擊:
Malory 黑了 Bob ,盜取了他的私鑰
Malroy 賄賂了 Bob,后者也加入到攻擊中來
現在 Malory 已經取得了 Bob 的私鑰,她能像 Bob 一樣驗證簽名一些區塊,這增加了分支鏈區塊數超過主鏈的可能。我們稱這樣的攻擊為 變節攻擊 。
既然 Bob 已經加入了攻擊,那么每當他在 Malory 的分支鏈上被選作記賬人時,他也會產生一個區塊。正如上圖所示,Bob 的區塊就不再缺失了,Malory 的支鏈也因此更有機會篡位成功。
這種類型的長距離攻擊可以使用密鑰演進加密技術(Key-Evolving Cryptography)和移動檢查點技術(Moving Checkpoint)來應對。關于應對措施的進一步闡述會在本文后面的章節中呈現。
權益流損
長距離攻擊的第三種類型被稱為權益流損。
邪惡的 Malory 又決定對區塊鏈發動攻擊了,這一次她打算使用權益流損攻擊。和上文中提及的初始場景條件一致,Malory一方面是主鏈上的驗證者,一方面密謀著從創世區塊開始構建自己的分支鏈。問題又來了,當產生分支鏈時,Malory 能被選作為區塊驗證者的概率和在主鏈上是一致的。要記得所有驗證者的初始信息在創世區塊中早已經固定寫死了。在自己的分支鏈沒有超過主鏈長度之前,Malory是不會把分支鏈廣播發布出去的。
這一次Malory為了增加攻擊的成功率,開始拖延主鏈的正常運行。如果Malory持有的權益占比足夠多,這種行為可能會演變為一次活性凍結攻擊(Liveness Denial Attack)。每當 Malory 被選舉為主鏈上的區塊驗證者時,她都會跳過該塊,放棄自己的區塊驗證的身份。這并不意味著別的驗證者會替代她的工作,相反,在該區塊位置處,不會有新的區塊加入到主鏈中。這是 Malory 精心設計用于拖延主鏈出塊的策略。
這樣會導致 Malory 不能從系統中獲得區塊驗證的獎勵,以至于她的權益占比將不斷減少,所有正常進行區塊驗證的節點都將從系統中獲得區塊獎勵和交易費。在這次攻擊中,我們假設驗證的獎勵由他們所占的權益比例來進行分配。
另一方面在自己的分支上,Malory是唯一的驗證者,每當有機會被選作區塊驗證者時,她都會生成區塊。在這種場景下,Malory會想盡辦法增加他的權益占比。此外,她會從主鏈上復制交易并在自己的分支鏈上廣播出去。這樣做能增加她所獲得的交易費用,并且增加她的權益占比。
通過采用這樣的策略,一方面拖延主鏈的出塊速度,一方面在分支鏈上盡可能廣播更多的區塊,Malory最終可以在自己的分支鏈上獲得絕大部分的權益,并且比主鏈更快地產生區塊。一旦她的分支鏈長度超過了主鏈,她就將發布最后一筆交易,將自己的權益交易給其他的驗證者,并且緊接著廣播發布自己的分支鏈。
你可以看到這樣的攻擊遠遠比前文中提到了兩種攻擊更加復雜。它引入了我兩種新的概念,一是用于拖延主鏈正常出塊的活性凍結,另一個則是從主鏈中復制交易信息出來。
值得留意的是,這樣的攻擊只能針對非常長區塊時間的區塊鏈來實施。根據研究,持有 30% 權益的攻擊者在長約 6 年的區塊鏈上才能發動這種攻擊(由于無代價模擬,構建一條這樣長度的分支鏈其實是十分迅速且不費力的)。
權益流損攻擊可以通過采用移動檢查點的策略來應對。充裕法則(Plenitude Rule)同樣可以用來判斷那一條分支是惡意的。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。