及時性檢測器可以降低 51% 攻擊對區塊鏈系統的危害,同時也增加了成功攻擊的成本。

原文標題:《V 神原文詳解:通過及時性檢測器(TD)解決區塊鏈的 51% 攻擊問題》(Timeliness detectors and 51% attack recovery in blockchains)
撰文:Vitalik Buterin
編譯:灑脫喜
來源:巴比特

我提出了一種基於 Lamport 99% 容錯共識的構造,並稱之爲及時性檢測器(timeliness detectors)。及時性檢測器(TD)允許在線客戶端(即連接到其它延遲≤δ客戶端的客戶端,又稱用戶)在保證正確性和一致性的情況下,檢測區塊是否是「準時」發佈的。

在發生 51% 攻擊的情況下,這允許至少一部分在線客戶端就(i)是否發生了「足夠糟糕」的 51% 攻擊達成一致,以及確定(ii)什麼是「正確」的鏈,甚至有可能(iii)確定哪些驗證者要對攻擊負責。這降低了 51% 攻擊造成混亂的能力,加快了從攻擊中恢復的時間,同時也潛在地增加了成功攻擊的成本。

及時性檢測器(TD)

及時性檢測器最基本的結構如下。對於客戶端收到的每個數據塊,客戶端都會維護一個「是否是及時」的依據,它會說明客戶端是否認爲區塊是「準時」收到的。其目的是在 51% 攻擊中嘗試區分攻擊鏈和「正確」鏈:

Vitalik Buterin:及時性檢測器可應對區塊鏈 51% 攻擊問題

我們的模型很簡單:每個區塊 B 都有一個自我聲明的時間戳 t (在實際的協議中,時間戳通常是隱性的,例如以 slot 數顯示)。然後有一個共同商定的同步約束δ。最簡單的時間檢測器是:如果你在時間 t+δ之前接收到區塊 B,那麼你認爲該區塊就是及時的,如果你在時間 t+δ之後收到它,那你就不會認爲它是及時的。但這並不能達成一致:

Vitalik Buterin:及時性檢測器可應對區塊鏈 51% 攻擊問題

我們通過下面的方式解決這個問題。對於每個區塊,我們隨機選擇 N 個「證明者」樣本(v1...vn)。每個證明者都遵循以下規則:如果他們看到一個帶有時間戳 t 的區塊 B 在時間 t+(2k+1)δ之前有來自 k 個證明者的簽名,他們就用自己的簽名進行重新廣播。而客戶端遵循的規則則是:如果它們在時間 t+2kδ之前看到一個帶有時間戳 t 的區塊 B,以及來自 k 個證明者的簽名,那麼它們會及時接受它。如果它們看到區塊 B,但它永遠不滿足這個條件,則客戶端就認爲區塊 B 是不及時的。

讓我們看看,當只有一個客戶端認爲某個區塊 B 是及時的,但其它客戶端最初可能因爲延遲差異,而不認爲它是及時時,會發生什麼。我們首先假設有一個誠實的證明者。

Vitalik Buterin:及時性檢測器可應對區塊鏈 51% 攻擊問題

這張圖展示了所發生事情背後的基本原理。如果客戶端在截止時間 T 之前看到一個區塊,那麼該區塊將在證明者截止時間 T+δ之前落入證明者的手中,並且證明者將添加他們的簽名,並且他們將在時間 T+δ之前重新廣播它,保證其他節點在 T+2δ前看到有簽名的區塊。關鍵的機制是一個附加簽名以延遲截止時間的能力。

現在,讓我們考慮 n−1 個非誠實證明者以及 1 個誠實證明者的情況。如果客戶端看到一個帶有 k 個簽名的及時區塊,則有兩種可能:

  1. 這 k 個簽名當中,有一個是誠實的;
  2. 這 k 個簽名當中,沒有一個是誠實的;

在情況(1)中,我們知道該證明者是誠實的,因此證明者在時間 T+(2j−1)δ之前廣播了帶有 j ≤k 個簽名的區塊 B,這意味着(通過同步假設)每個客戶端在時間 T+2jδ之前都看到了該 bundle,所以每個客戶端都接受區塊 B 作爲當前區塊。

而在情況(2)中,我們知道誠實的證明者將在時間 T+(2k+1)δ之前看到該 bundle,因此它們將用自己的簽名重新廣播該它,並且所有其它客戶端將在 k+1 簽名截止時間 T+(2k+2)δ之前看到該擴展 bundle。

因此,現在我們有了一個「及時性檢測器」,客戶端可以使用它來跟蹤哪些區塊是「準時」的,哪些區塊是「不準時」的,以及在什麼時候,所有延遲小於δ的客戶端都會同意哪些區塊是準時的。

最簡單的區塊鏈架構

爲了決定誰可以提出提議,誰可以在任何 slot 證明區塊的目標。我們可以這樣定義一個「99% 容錯區塊鏈」:要確定當前狀態,只需按照它們自己聲明的時間戳順序處理所有及時的區塊。

這實際上是可行的(並且提供了對最終性逆轉和審查 51% 攻擊的抵抗),並且在它自己的假設下給出了一個相當簡單的區塊鏈架構!唯一的問題是:一切都建立在假設所有客戶端都將在線,並且網絡永遠不會被中斷的基礎上。因此,要使其安全地工作,可能需要一週或更長的區塊時間,而這實際上是一個「輔助鏈」的合理架構,它可以跟蹤驗證者的存款、提款以及罰沒情況,例如,(通過審查新加入的驗證者等)來防止長期的 51% 攻擊。但我們不希望把這種架構應用到主鏈。

更合理的選擇

然而,在這篇文章中,我們將重點關注滿足一組較弱安全性假設的系統架構。即如果以下兩個假設中的任何一個是真的,那麼它們就是好的:(i)網絡延遲很低,包括驗證者和客戶端之間的網絡延遲,以及(ii)大多數驗證者是誠實的。首先,讓我們回到一個模型,在這個模型中,我們有帶有一些分叉選擇規則的區塊鏈,而不僅僅是離散的區塊。我們將通過我們最喜歡的兩個終局性分叉選擇規則例子,(i) FFG 和 (ii) LMD GHOST。

對於 FFG,我們將該分叉選擇規則擴展如下。從創始區塊開始,每當你看到兩個子鏈都已完成的區塊時,請選擇 lower-epoch 及時完成區塊的鏈。然後從那開始繼續按以前的方式前進。一般來說,在兩種情況下,只會有兩個衝突的最終鏈:(i) 33% 的攻擊,以及(ii)許多節點離線(或審查)導致長期運行的 inactivity leak。

情況(i):

Vitalik Buterin:及時性檢測器可應對區塊鏈 51% 攻擊問題

情況(ii),option 1 (少數離線):

Vitalik Buterin:及時性檢測器可應對區塊鏈 51% 攻擊問題

情況(ii),option 2 (離線多數,稍後以最終確定的鏈重新出現):

Vitalik Buterin:及時性檢測器可應對區塊鏈 51% 攻擊問題

因此,在所有情況下,至少過了某個時間點(T+2kδ,在該時間點之後,如果客戶端沒有及時接受一個區塊,那麼我們知道它永遠不會及時接受它)後,我們都可以防止 51% 攻擊破壞最終性。還要注意,上面的圖有點誤導性。我們關心的不是完成區塊的時間線,而是區塊的及時性,其中包括證明該區塊已最終確定的證據。

對於有時會離線的客戶端而言,只要沒有 51% 攻擊,這不會改變任何事情:如果鏈沒有受到攻擊,那麼規範鏈中的區塊將是及時的,因此最終確定的區塊將始終是及時的。

而可能導致風險增加的主要情況是,客戶端具有高延遲,卻沒有意識到它們具有高延遲。它們可能會把及時區塊視爲非及時區塊,或者把非及時區塊視爲及時區塊。該機制的目標是,如果非及時性依賴分叉選擇和及時性依賴分叉選擇是不一致的,就應該通知用戶,以便他們能夠驗證正在發生的事情。不應指示他們盲目接受依賴及時性分叉選擇作爲規範。

在處理審查問題時,我們還可以使用及時性檢測器來自動檢測和阻止審查。這很簡單:如果具有自聲明時間 t 的區塊 B 是及時的,那麼在時間 t+(2k+2)δ之前不包含該區塊的任何鏈(無論是作爲祖先區塊還是作爲叔塊)都會自動被判定爲非規範鏈。這確保審查區塊超過(2k+2)δ的鏈將被客戶端自動拒絕。

Vitalik Buterin:及時性檢測器可應對區塊鏈 51% 攻擊問題

在這裏使用及時性檢測器(TD)的主要好處是,它可以在審查「過多」的情況下形成共識,避免「邊緣攻擊」的風險,這些「邊緣攻擊」被故意設計成對某些用戶(而非其他用戶)而言是足夠糟糕的,從而導致社區浪費時間和精力來爭論是否分叉審查鏈(相反,大多數用戶在任何情況下都會同意正確的行動方案)。

注意,這需要一個叔塊包含機制,而當前以太坊 2.0 是沒有的。此外,它還需要一種機制來執行叔塊內部的交易,這樣審查阻力就能擴展到交易,而不僅僅是區塊的原始體。這需要和無狀態客戶端很好地協作。

另一個問題是,需要小心處理許多區塊被髮布並獲得及時性狀態的可能性。這可能是由於發佈延遲,或者是由於一個提議者惡意地在同一 slot 中發佈多個區塊造成的。前者可以通過修改的規則處理,其中區塊必須包括所有時間早於(2k+2)δ的及時區塊或最大允許數(例如 4)叔塊。

而後者可以通過這樣一個規則處理:如果包括來自特定 slot 的一個區塊,則可以有效地忽略來自該 slot 的所有其他區塊。

請注意,在 Casper-CBC 框架中,對包含非及時性或審查性區塊的鏈進行審查預防和取消優先級操作,足以提供與上述 FFG 框架相同的終局性保證。

面臨的挑戰及任務

  1. 想出最好的方式,用非技術的語言向用戶解釋,在及時性意識和非及時性意識分叉選擇規則不一致的情況下發生了什麼,以及他們應該如何應對這種情況;
  2. 分析系統在延遲有時高於δ,或延遲總是潛在高於δ情況下,且我們有假設(例如,某些固定部分的證明者是誠實的,或其他混合假設)下的行爲。查看是否有方法修改規則以提高這些場景中的性能;
  3. 分析實現這些屬性,同時不需要包括新證明的方法,相反,只需要重用現有證明(例如,驗證者證明 FFG 中的每個 epoch 的證明);
  4. 確定是否對基於「簡單」最長鏈分叉選擇規則進行了一些小的修改,使它們能夠從及時性檢測器中獲益,從而獲得某種終局性。

來源鏈接:ethresear.ch