一文讀懂拜占庭將軍問題

2021-10-03 00:27:32 字數 3477 閱讀 9057

拜占庭將軍問題(the byzantine generals problem)提供了對分布式共識問題的一種情景化描述,由leslie lamport等人在2023年首次發表。**《the byzantine generals problem 》同時提供了兩種解決拜占庭將軍問題的演算法:

口信訊息型解決方案(a solution with oral message);

簽名訊息型解決方案(a solution with signed message).

**:本文之後將詳細講述這兩種演算法。事實上,拜占庭將軍問題是分布式系統領域最複雜的容錯模型, 它描述了如何在存在惡意行為(如訊息篡改或偽造)的情況下使分布式系統達成一致。是我們理解分布式一致性協議和演算法的重要基礎。

拜占庭將軍問題描述

拜占庭將軍問題描述了這樣乙個場景:

圖1. 拜占庭將軍問題

拜占庭帝國(byzantine empire)軍隊的幾個師駐紮在敵城外,每個師都由各自的將軍指揮。將軍們只能通過信使相互溝通。在觀察敵情之後,他們必須制定乙個共同的行動計畫,如進攻(attack)或者撤退(retreat),且只有當半數以上的將軍共同發起進攻時才能取得勝利。然而, 其中一些將軍可能是叛徒,試圖阻止忠誠的將軍達成一致的行動計畫。 更糟糕的是,負責訊息傳遞的信使也可能是叛徒,他們可能篡改或偽造訊息,也可能使得訊息丟失。

為了更加深入的理解拜占庭將軍問題,我們以三將軍問題為例進行說明。當三個將軍都忠誠時,可以通過投票確定一致的行動方案,圖2展示了一種場景, 即general a,b通過觀察敵軍軍情並結合自身情況判斷可以發起攻擊,而general c通過觀察敵軍軍情並結合自身情況判斷應當撤退。 最終三個將軍經過投票表決得到結果為進攻:撤退=2:1, 所以將一同發起進攻取得勝利。對於三個將軍,每個將軍都能執行兩種決策(進攻或撤退)的情況下, 共存在6中不同的場景,圖2是其中一種,對於其他5中場景可簡單地推得,通過投票三個將軍都將達成一致的行動計畫。

圖2. 三個將軍均為忠誠的場景

當三個將軍中存在乙個叛徒時,將可能擾亂正常的作戰計畫。圖3展示了general c為叛徒的一種場景,他給general a和general b傳送了不同的訊息,在這種場景下general a通過投票得到進攻:撤退=1:2,最終將作出撤退的行動計畫;general b通過投票得到進攻:撤退=2:1,最終將作出進攻的行動計畫。結果只有general b發起了進攻並戰敗。

圖3. 二忠一叛的場景

事實上,對於三個將軍中存在乙個叛徒的場景,想要總能達到一致的行動方案是不可能的。詳細的證明可參看leslie lamport的**。此外,**中給出了乙個更加普適的結論:如果存在m個叛將,那麼至少需要3m+1個將軍,才能最終達到一致的行動方案。

解決方案

leslie lamport在**中給出了兩種拜占庭將軍問題的解決方案,即口信訊息型解決方案(a solution with oral message)和簽名訊息型解決方案(a solution with signed message)。

1、口信訊息型解決方案

首先, 對於口信訊息(oral message)的定義如下:

a1. 任何已經傳送的訊息都將被正確傳達;

a2. 訊息的接收者知道是誰傳送了訊息;

a3. 訊息的缺席可以被檢測。

基於口信訊息的定義,我們可以知, 口信訊息不能被篡改但是可以被偽造。基於對圖3場景的推導,我們知道存在乙個叛將時,必須再增加3个忠將才能達到最終的行動一致。為加深理解,我們將利用3个忠將1個叛將的場景對口信訊息型解決方案進行推導。在口信訊息型解決方案中,首先傳送訊息的將軍稱為指揮官,其餘將軍稱為副官。對於3忠1叛的場景需要進行兩輪作戰資訊協商,如果沒有收到作戰資訊那麼預設撤退。圖4是指揮官為忠將的場景,在第一輪作戰資訊協商中,指揮官向3位副官傳送了進攻的訊息;在第二輪中,三位副官再次進行作戰資訊協商,由於general a、b為忠將,因此他們根據指揮官的訊息向另外兩位副官傳送了進攻的訊息,而general c為叛將,為了擾亂作戰計畫,他向另外兩位副官傳送了撤退的訊息。最終commanding general, general a和b達成了一致的進攻計畫,可以取得勝利。

圖4. 指揮官為忠將的場景

圖5是指揮官為叛將的場景,在第一輪作戰資訊協商中,指揮官向general a、b傳送了撤退的訊息,但是為了擾亂general c的決定向其傳送了進攻的訊息。在第二輪中,由於所有副官均為忠將,因此都將來自指揮官的訊息正確地傳送給其餘兩位副官。最終所有忠將都能達成一致撤退的計畫。

圖5. 指揮官為叛將的場景

如上所述,對於口信訊息型拜占庭將軍問題,如果叛將人數為m,將軍人數不少於3m+1,那麼最終能達成一致的行動計畫。值的注意的是,在這個演算法中,叛將人數m是已知的,且叛將人數m決定了遞迴的次數,即叛將數m決定了進行作戰資訊協商的輪數,如果存在m個叛將,則需要進行m+1輪作戰資訊協商。這也是上述存在1個叛將時需要進行兩輪作戰資訊協商的原因。

2、簽名訊息型解決方案

同樣,對簽名訊息的定義是在口信訊息定義的基礎上增加了如下兩條:

a4. 忠誠將軍的簽名無法偽造,而且對他簽名訊息的內容進行任何更改都會被發現;

a5. 任何人都能驗證將軍簽名的真偽。

基於簽名訊息的定義,我們可以知道,簽名訊息無法被偽造或者篡改。為了深入理解簽名訊息型解決方案,我們同樣以3三將軍問題為例進行推導。 圖6是忠將率先發起作戰協商的場景,general a率先向general b、c傳送了進攻訊息,一旦叛將general c篡改了來自general a的訊息,那麼general b將將發現作戰資訊被general c篡改,general b將執行general a傳送的訊息。

圖6. 忠將率先發起作戰協商

圖7是叛將率先發起作戰協商的場景,叛將general c率先傳送了誤導的作戰資訊,那麼general a、b將發現general c傳送的作戰資訊不一致,因此判定其為叛將。可對其進行處理後再進行作戰資訊協商。

圖7. 叛將率先發起作戰協商

簽名訊息型解決方案可以處理任何數量叛將的場景。

總 結在分布式系統領域, 拜占庭將軍問題中的角色與計算機世界的對應關係如下:

將軍, 對應計算機節點;

忠誠的將軍, 對應執行良好的計算機節點;

叛變的將軍, 被非法控制的計算機節點;

信使被殺, 通訊故障使得訊息丟失;

信使被間諜替換, 通訊被攻擊, 攻擊者篡改或偽造資訊。

如上文所述,拜占庭將軍問題提供了對分布式共識問題的一種情景化描述,是分布式系統領域最複雜的模型。此外, 它也為我們理解和分類現有的眾多分布式一致性協議和演算法提供了框架。現有的分布式一致性協議和演算法主要可分為兩類:

一類是故障容錯演算法(crash fault tolerance, cft), 即非拜占庭容錯演算法,解決的是分布式系統中存在故障,但不存在惡意攻擊的場景下的共識問題。也就是說,在該場景下可能存在訊息丟失,訊息重複,但不存在訊息被篡改或偽造的場景。一般用於區域網場景下的分布式系統,如分布式資料庫。屬於此類的常見演算法有paxos演算法、raft演算法,、zab協議等。

一類是拜占庭容錯演算法,可以解決分布式系統中既存在故障,又存在惡意攻擊場景下的共識問題。一般用於網際網路場景下的分布式系統,如在數字貨幣的區塊鏈技術中。屬於此類的常見演算法有pbft演算法、pow演算法。

技術戰「疫」,賈揚清、李飛飛要給程式設計師直播講ai技術!

一文讀懂區塊鏈拜占庭將軍問題(小白版)

聊到區塊鏈技術,都繞不開拜占庭將軍問題,拜占庭將軍問題到底是什麼問題呢?是乙個人還是具體什麼東西?其實,拜占庭將軍問題是點對點通訊中的經典問題,它是以乙個虛構的故事模型提出的。網上很多關於解釋拜占庭將軍問題是什麼的文章,但是對於非技術人員來說,看了那些內容以後,只會更迷茫。本文千氪財經專欄作者,針對...

拜占庭將軍問題

前進中的可信計算 拜占庭將軍問題 閔應驊 乙個可信的計算機系統必須容忍乙個或多個部件的失效。失效的部件可能送出相互矛盾的資訊給系統的其他部件。這正是目前網路安全要對付的情況,如銀行交易安全 存款安全。美國2001 9 11遭恐怖襲擊之後,大家普遍認識到銀行的異地備份非常重要。紐約的一家銀行可以在東京...

拜占庭將軍問題

假設有4個將軍圍攻乙個敵人,只有三個將軍同時出擊才可以將敵人擊敗,任意兩個或者乙個將軍出擊均會被敵人擊敗,4個將軍通過一對一的通訊機制協商共同出擊時機,同時4個將軍中有乙個是內奸,他會混淆通訊結果,避免3個將軍協商出統一的出擊時機。拜占庭將軍 pbft 問題既指在這種情況下將軍們如果達成共識,共同擊...