拜占庭問題與演算法

2021-09-02 14:07:21 字數 1799 閱讀 1605

拜占庭問題(byzantine problem)又叫拜占庭將軍(byzantine generals problem)問題,討論的是允許存在少數節點作惡(訊息可能被偽造)場景下的如何達成共識問題。拜占庭容錯(byzantine fault tolerant,bft)討論的是容忍拜占庭錯誤的共識演算法。

拜占庭問題之前,學術界就已經存在兩將軍問題的討論(《some constraints and tradeofis in the design of network communications》,1975 年):兩個將軍要通過信使來達成進攻還是撤退的約定,但信使可能迷路或被敵軍阻攔(訊息丟失或偽造),如何達成一致?根據 flp 不可能原理,這個問題無通用解。

拜占庭問題最早由 leslie lamport 等學者於 1982 年在**《the byzantine generals problem》中正式提出,是用來解釋非同步系統中共識問題的乙個虛構模型。拜占庭是古代東羅馬帝國的首都,由於地域寬廣,守衛邊境的多個將軍(系統中的多個節點)需要通過信使來傳遞訊息,達成某些一致決定。但由於將軍中可能存在叛徒(系統中節點出錯),這些叛徒將向不同的將軍傳送不同的訊息,試圖干擾共識的達成。這種情況十分類似於分布式系統中多個節點達成共識的問題。

拜占庭問題即討論在此情況下,如何讓忠誠的將軍們能達成行動的一致。

**中指出,對於拜占庭問題來說,假如節點總數為 n,故障節點數為 f,則當 n >= 3f + 1 時,問題才能有解,由 bft 演算法進行保證。

例如,n = 3,f = 1 時。

若提案人不是叛變者,提案人傳送乙個提案出來,收到的叛變者可以宣稱收到的是相反的命令。則對於第三個人(忠誠者)會收到兩個相反的訊息,無法判斷誰是叛變者,則系統無法達到一致。

若提案人是叛變者,傳送兩個相反的提案分別給另外兩人,另外兩人都收到兩個相反的訊息,無法判斷究竟誰是叛變者,則系統無法達到一致。

更一般的,當提案人不是叛變者,提案人提出提案資訊 1,則對於合作者來看,系統中會有 n - f 份確定的資訊 1,和 f 份不確定的資訊(可能為 0 或 1,假設叛變者會盡量干擾一致的達成),n − f > f,即 n > 2f 情況下才能達成一致。

當提案人是叛變者,會盡量傳送相反的提案給 n - f 個合作者,從收到 1 的合作者看來,系統中會存在 (n - f)/2 個資訊 1,以及 (n - f)/2 個資訊 0;從收到 0 的合作者看來,系統中會存在 (n - f)/2 個資訊 0,以及 (n - f)/2 個資訊 1;

另外存在 f − 1 個不確定的資訊。合作者要想達成一致,必須進一步的對所獲得的訊息進行判定,詢問其他人某個被懷疑物件的訊息值,並通過取多數來作為被懷疑者的資訊值。這個過程可以進一步遞迴下去。

leslie lamport 等人在**《reaching agreement in the presence of faults》中證明,當叛變者不超過 1/3 時,存在有效的拜占庭容錯演算法(最壞需要 f+1 輪互動)。反之,如果叛變者過多,超過 1/3,則無法保證一定能達到一致結果。

那麼,當存在多於 1/3 的叛變者時,有沒有可能存在解決方案呢?

設想 f 個叛變者和 l 個忠誠者,叛變者故意使壞,可以給出錯誤的結果,也可以不響應。某個時候 f 個叛變者都不響應,則 l 個忠誠者取多數既能得到正確結果。當 f 個叛變者都給出乙個惡意的提案,並且 l 個忠誠者中有 f 個離線時,剩下的 l - f 個忠誠者此時無法分別是否混入了叛變者,仍然要確保取多數能得到正確結果,因此,l - f > f,即 l > 2f 或 n - f > 2f,所以系統整體規模 n 要大於 3f。

能確保達成共識的拜占庭系統節點數至少為 4,此時最多允許出現 1 個壞的節點。

區塊鏈技術指南(對區塊鏈的誕生、核心技術、應用場景等都有介紹,而且寫的很詳細):

拜占庭問題

一 拜占庭問題的背景這裡就不再介紹直接說演算法 下面的這個截圖是從lamport發表的 中擷取的 對於這個演算法需要說明的是 1 在第一輪 將軍會把訊息傳送給所有的副官,第i個副官收到的記為 vi。如 1 這裡代表的是attack 2 在第二輪裡面,li 即第i個副官 會懷疑將軍發來的訊息vi是對還...

Paxos 與拜占庭將軍問題

拜占庭將軍問題是由 paxos 演算法作者萊斯利 蘭伯特提出的點對點通訊中的基本問題。該問題要說明的含義是,在不可靠通道上試圖通過訊息傳遞的方式達到一致性是不可能的。所以,paxos 演算法的前提是不存在拜占庭將軍問題,即通道是安全的 可靠的,集群節點間傳遞的訊息是不會被篡改的。一般情況下,分布式系...

Paxos 與拜占庭將軍問題

拜占庭將軍問題是由 paxos 演算法作者萊斯利 蘭伯特提出的點對點通訊中的基本問題。該問題要說明的含義是,在不可靠通道上試圖通過訊息傳遞的方式達到一致性是不可能的。所以,paxos 演算法的前提是不存在拜占庭將軍問題,即通道是安全的 可靠的,集群節點間傳遞的訊息是不會被篡改的。一般情況下,分布式系...