Conflux 研究院

摘要: Conflux 研究院 | 如何推測區塊的生成時間——曾經的嘗試 Conflux 研究院

書接前文(點擊閱讀詳情),GHAST 設計中的一個關鍵點就是判斷樹圖中每個區塊的“年齡”是否已經足夠老。這次我們先來聊一聊為什麼這個問題不是那麼簡單。

Conflux 研究院

要判斷一個區塊是否足夠老,最簡單的判別依據自然是收到這個區塊的時間。所有基於工作量證明的共識系統都必須假設每個區塊廣播到全網(絕大部分誠實節點)所需的時間都是有上限的。因此,誠實節點生成的區塊到達(絕大多數)全節點的時間誤差不會超過一次廣播的延遲 d。

那些被雪藏了很久的區塊也很容易被辨別出來。因為一個區塊不可能引用生成時間比它更晚的區塊,所以我們可以根據“沒有引用的區塊”來推測一個區塊是否被雪藏了很久。如果一個區塊漏掉了很多足夠老的區塊沒有引用,那麼這個區塊本身肯定也不會年輕到哪裡。

上面這個簡單直接的判斷方法最重要的問題在於不同的節點很難保持完全一致。對同一個區塊,每個節點收到它的時間雖然很接近但是仍有少許差別(在 d 以內),而這微小的差別卻會為一致性帶來極大的麻煩。

Conflux 研究院

當一個區塊的“歲數”接近我們對於足夠老的定義時,可能會進入“老與不老的中間狀態”:部分節點認為它是足夠老的,而另外一部分節點認為還要再等等。攻擊者可能會利用這種短暫的不一致狀態,把“某一個區塊是否足夠老”的分歧,放大到“區塊權重”的分歧,再進一步放大到關於主鏈和全局共識的分歧。

上述問題最根本的原因在於各個節點收到區塊的時間是不一樣的。如果區塊的年齡完全由樹圖結構決定,那麼只要大家對樹圖結構達成共識,則對於區塊年齡的判斷結果就必然是一致的。而這裡面,發揮關鍵作用的是圖的拓撲結構。

在一個有向無環圖裡,兩個區塊 A 和 B 的關係有三種:1) 從 A 出發可以抵達 B;2) 從 B 出發可以抵達 A;3) 其他——A 和 B之間沒有有向道路連接。於是,對於一個樹圖結構中的給定區塊 B,我們可以按照上述三種關係把樹圖中其他區塊分為三類:歷史區塊,未來區塊,光錐外區塊。

Conflux 研究院

對於每一個區塊 B,當它被所有全節點都收到後,每一個遵守協議的節點新生成的區塊,都應當是 B 的“未來區塊”。因此,根據“未來區塊”的個數就可以判斷一個誠實的區塊是否足夠老

但是,對於那些被壞人藏了很久的區塊,上述方法就無效了。在下圖的例子中,區塊 B 雖然生成得很早,但是它的“未來區塊”卻很少——本該是它的“未來區塊”被變成了 “光錐外區塊”。所以,“光錐外區塊+未來區塊”的總數,或許可以用來推測一個區塊的“歲數”。

Conflux 研究院

然而,用“光錐外區塊+未來區塊”數量推測區塊的年齡也是有隱患的。壞人可以預先製造並儲備大量的“光錐外區塊”,從而讓一個新生成的好人區塊顯得足夠老。這顯然也不是我們想要的結果。

Conflux 研究院

正如之前的讀者評論的,設計公鏈的共識協議,一個好的想法是遠遠不夠的。必須站在攻擊者的角度換位思考,反覆在新的設計和新的攻擊方式間進行迭代,才能最終得到一個可以抵抗已知的攻擊手段的協議。接下來還要通過數學證明來論證這個協議對於

未知的攻擊手段也是安全的,一個端到端的安全性有保障的共識協議才算是大功告成了。

(1、 內容來自鏈得得內容開放平臺“得得號”,稿件內容僅代表作者觀點,不代表鏈得得官方立場。2、 凡“得得號”文章,原創性和內容的真實性由投稿人保證,如果稿件因抄襲、作假等行為導致的法律後果,由投稿人本人負責。3、 得得號平臺發佈文章,如有侵權、違規及其他不當言論內容,請廣大讀者監督,一經證實,平臺會立即下線。如遇文章內容問題,請發送至郵箱:[email protected]


分享到:


相關文章: