Consensus

拜占庭容錯共識 - 為什麼是 33% 的門檻值

  • July 5, 2019

有人能告訴我為什麼在 dbft 中惡意節點的門檻值是 1/3 嗎?我的意思是這似乎很隨意。如果它是隨意的,我沒有問題,但它是嗎?

注意:我不是指比特幣。我選擇了這個 Forrm,因為沒有博弈論或 Antshares/Neo-forum。

我們有一個數學證明,要容忍n惡意節點,你需要2n + 1好的節點。完整的證明見 G. Bracha 和 T. Rabin,最優非同步拜占庭協議,TR#92-15,希伯來大學電腦科學系。在業內也是眾所周知的。非同步系統不可能同時提供安全性(保證所有非惡意節點最終將就所取得的進展達成一致)和活躍性(繼續取得進展的能力)超過此數量的惡意故障.

您可以通過根本不向前推進來輕鬆確保安全。你可以通過讓每個節點做任何他們想做的事來不安全地取得進展。這些操作模式都沒有用。

讓我們退後一步,讓這個答案更有幫助:

為什麼你需要一個分佈式協議算法?好吧,如果系統可以通過多種方式有效地取得進展,並且您需要係統中的所有參與者就其中一種方式達成一致,您就需要一個。

考慮一個簡單的例子:我在銀行里有 10 美元,我開了兩張 10 美元的支票,一張給 Alice,一張給 Bob。任何一個都是有效的,但我們不能讓他們兩個都通過。

如果我們有一個中央權威,他們可以清除他們首先看到的任何一個。但是,如果我們不想要中央權威或不想要單點故障怎麼辦?如果我們有潛在的惡意參與者怎麼辦?

好吧,您可以在將它們表示為二進制數據後對它們進行排序。但這就是非同步組件咬我們的地方。我們什麼時候對它們進行排序?假設我看到兩張支票並對其進行排序。我怎麼知道一秒鐘後我不會看到第三張先排序的支票?也許其他人已經看到了那個。哎喲!

所以,我們有以下要求:

1)我們的系統是非同步的。

  1. 一些參與者可能是惡意的。

  2. 我們想要安全,也就是說,我們不希望一位誠實的參與者兌現一張支票,而一位誠實的參與者兌現另一張支票。

4)我們想要活力,也就是說,說我們從不清除任何支票是不公平的。當然,這很安全,但沒用。我們希望確保我們最終同意清除哪些支票。

所以,現在問題出現了——我們可以在我們的非同步系統中容忍多少不誠實的參與者,並且仍然保證安全和活躍?

作為獲得證明要點的一種簡單方法,儘管它並不嚴格:

假設我們有誠實和不誠實n的節點。顯然,。現在,系統需要就清除兩項檢查中的哪一項達成共識。h``d``n = h + d

想想所有誠實節點在系統可以向前推進的兩個方向上平均分配的情況。惡意節點可以告訴所有誠實節點他們同意它們。這將使h/2 + d節點就係統可以向前發展的兩種相互衝突的方式中的每一種達成一致。

在這種情況下,誠實節點不能向前推進,否則它們會走向不同的方向,失去安全性。因此,在我們向前推進之前需要達成一致的節點數量必須大於誠實節點數量加上惡意節點數量的一半,否則我們就會失去安全感。

如果我們呼叫t取得進展所需的門檻值,這給了我們:t > (h/2) + d. 這是對安全的要求。

但惡意節點也可能根本無法達成一致。因此,在我們向前推進之前需要達成一致的節點數量必須不超過誠實節點的數量,否則我們將失去活力。

這給了我們t <= h. 或h >= t。這是生命的條件。

結合這兩個結果,我們得到:

h >= t > (h/2) + d
h > (h/2) + d
(h/2) > d
d < (h/2)

因此,我們可以容忍的故障節點數量少於誠實節點數量的一半。因此,我們不能容忍 1/3 或更多的節點不誠實,否則我們會失去安全性或活力。

引用自:https://bitcoin.stackexchange.com/questions/58907