The Byzantine Generals Problem全文要點翻譯及理解
題目:The Byzantine Generals Problem
年份:1982
來源:ACM Transactions on Programming Languages and Systems
作者:LESLIE LAMPORT, ROBERT SHOSTAK, and MARSHALL PEASE
- 1.Introduction
- 2.Impossible Results
- 3. A Solution With Oral Messages
- 4. A Solution With Signed Messages
- 5. Missing Communication Paths
- 6. Reliable Systems
- 7. 結論
- 8. 個人理解&與PBFT的聯絡與區別
1.Introduction
問題定義
將軍決定對敵方城市一個統一的計劃,將軍之間通過信使通訊。
解決該問題有效演算法的限定條件:
A.所有誠實的將軍決定一致的行動計劃(誠實的將軍要麼都是撤退,要麼都是進攻)
B. 少部分的叛徒並不會導致誠實的將軍接受錯誤的計劃
條件A若為真,則後述內容為真:每一個誠實的將軍必須獲得相同的資訊(也可表述為:任意兩個城市節點的收到將軍i的v(i)值是相同的);如果第i個將軍是忠誠的,那麼其他將軍用到的他所發出的資訊也必須是v(i)。
拜占庭將軍問題:一個commanding general傳送給他的n-1個lieutenant generals命令,以達成一致,約束條件如下:
IC1.所有誠實的中尉遵從相同的命令;
IC2.如果將軍誠實,每一個誠實的中尉都遵從指揮官的命令。
IC1&IC2也被稱為互動一致性( interactive consistency )。
這裡的IC1&IC2分別保證了分散式系統中的Safety與Liveness。
2.Impossible Results
2.1 3將軍(1叛徒)問題不存在解/不能達成共識
如圖所示,在three-general(one traitor)問題中,不管指揮官還是中尉2是叛徒,中尉1都無法對拜占庭節點進行區分,在圖2中,中尉1最終會選擇進攻,而中尉2會選擇撤退,所以就不滿足IC1。因此,一個指揮官兩個中尉(中尉必須服從指揮官的命令),存在一個叛徒的情況下不能達成一致的的行動計劃。
2.2 少於3m+1個將軍(有m個叛徒)不存在解/不能達成共識。
2.2.1 精確一致性的證明
證明(反證法):
注意此處的拜占庭將軍並不單指叛徒,而是指所有的將軍。
本文假設3m個將軍(m個叛徒)存在解,用這一解來構造three-general (one traitor)問題的解。而3將軍解由上文分析可以知道是不存在的(也就是如果構造出來了,那就說明3將軍解存在),但這與已知(3將軍問題不存在解)矛盾,所以假設(即3m將軍問題存在解)不成立。
將3m將軍m叛徒問題中的將軍稱為阿爾巴尼亞將軍,3將軍1叛徒中的將軍稱為拜占庭將軍,以示區分。
拜占庭指揮官代表一個阿爾巴尼亞指揮官和m-1個阿爾巴尼亞中尉,兩個拜占庭中尉分別代表m個阿爾巴尼亞中尉。因此對於拜占庭叛徒將軍(代表m個阿爾巴尼亞將軍),最多對應m個阿爾巴尼亞叛徒將軍。
由IC1可知,m個阿爾巴尼亞中尉(由單個誠實拜占庭中尉所代表)遵循相同的命令,這一命令也是該誠實拜占庭節點所需要遵守的命令。
對於阿爾巴尼亞將軍,可知是滿足IC1和IC2的,又由以上對應關係,可知3將軍問題是滿足IC1和IC2的,也即3將軍問題存在解,與已知矛盾,故3m將軍問題不存在解
2.2.2 近似一致性的證明
精確一致性與近似一致性是同等困難的
本文假設將軍必須同意一個大致的攻擊時間,而不是具體的攻擊計劃,即,指揮官下令指示攻擊時間,且滿足以下條件:
IC1'. 所有的誠實中尉在十分鐘內發起攻擊。
IC2'. 指揮官誠實,則誠實的中尉在指揮官命令中的寫的進攻時間的±10min會進攻
(攻擊之前一天該命令就已經被中尉們收到;收到命令的時間不重要。只有在命令中指示的的攻擊時間重要。)
上述問題類似於拜占庭將軍問題,除非誠實的將軍數多於2/3,否則本問題無解。
證明(依舊反證法):
假設本問題有解,那麼我們可以用這個解構造出拜占庭3將軍問題的解。
假設:指揮官傳送給中尉資訊攻擊的時間。1:00代表進攻,2:00代表撤退。
(1)每個中尉根據收到的攻擊時間而遵循的命令:
時間是1:10以前,則攻擊;
時間是1:50之後,則撤退;
否則轉向(2)
(2)查詢其他中尉做出的“進攻”或“撤退”的命令
如果其他中尉做出了決定,則該中尉遵循與其他中尉相同的命令;
否則,撤退。
對上述問題的分析:
如果指揮官是忠誠的,那麼IC2'就被滿足,由IC2'可以推出IC1'。
如果指揮官是叛徒,則需要IC2'成立,此時兩個中尉都是誠實的。根據IC1',如果一箇中尉(稱該中尉為L1)決定進攻,那麼另一個就不能夠決定是進攻還是撤退(因為不滿足IC1'的條件,稱該不能決定的中尉為L2),所以L2轉向step(2),查詢到L1的決定為進攻,因此L2也決定進攻,那麼L1和L2就達到了共識,故IC1'也滿足。因此就構造出了拜占庭問題的3將軍問題的解,同理,拜占庭的3將軍問題不存在解,因此本問題也不存在解。
同理對於該近似一致性的3m將軍問題的解與上文所述一致。
3. A Solution With Oral Messages
3.1 Oral Messages的定義
Oral messages:
- A1 每一個正常節點發出的資訊都被正確的送達;
- A2 資訊接收者知道資訊的傳送者;
- A3 資訊缺失能夠被檢測到。
A1&A2保證叛徒節點不能夠干擾兩個誠實節點的通訊,A1保證資訊傳輸的正確性,A2保證資訊本身的正確性。A3能夠阻止叛徒不傳送資訊來干擾共識達成。(具體實現在section 6)
以上要求了將軍之間能夠直接進行通訊,section 5 提出了不能進行直接通訊的演算法。
3.2 OM(m)演算法的步驟及其正確性推導
3.2.1 演算法步驟
本節提出的演算法OM(m)
,m為叛徒個數。叛徒為指揮官時可能不傳送進攻或者撤退的訊息,本文把撤退作為預設命令。
中尉的編號是1~(n-1),每個中尉傳送的資訊是vi(作者發現用中尉“獲得某一值”比“服從命令”要更加方便)
函式majority:
取收到的訊息(v1,v2……vn-1)的大多數。
(大多數的確定:眾數或者中位數)
演算法OM(0):
(1)指揮官傳送命令
(2)中尉收到指揮官的命令
演算法OM(m) m>0:
(1)指揮官傳送其命令給所有中尉
(2)對每一箇中尉i,若收到來自指揮官的命令,那麼將其值賦給vi,否則,vi的值為RETREAT
。中尉i作為指揮官執行OM(m-1)
演算法將他的vi值傳送給其他n-2箇中尉。
(3)對每一箇中尉i,讓vj代表i在步驟(2)收到的來自其他中尉j的值vj。那麼中尉i會採用majority(v1,v2……vn-1)。
如圖示例:m=1, n=4.
當一箇中尉為叛徒的情況
(1) 在OM(1)的第一階段,指揮官傳送值v給其餘三個中尉;
(2) 第二階段:中尉1用演算法OM(0)傳送值v給中尉2,中尉3傳送給中尉2值x;
(3) 在第三步,中尉2此時獲得了兩個v和一個x,因此最終中尉2獲得正確的值為v=majority(v,v,x)。中尉1同理。
當指揮官為叛徒的情況
(1) 指揮官傳送值x,y,z給中尉1,2,3;
(2)~(3) 最終每一箇中尉都得到majority(x,y,z),並不能得到統一的解。
由以上過程,可知演算法是遞迴執行的,從OM(m)到OM(m-1)...OM(0),OM(m)呼叫n-1個OM(m-1),每個OM(m-1)呼叫n-2個OM(m-2)...一直到OM(0)
節點數n,叛徒數m的情況下若叛徒節點參與通訊(傳送錯誤資訊):
OM(m-1)被呼叫的次數n-1
OM(m-2)被呼叫的次數(n-1)(n-2)
OM(m-3)被呼叫的次數(n-1)(n-2)(n-3)
OM(m-k)被呼叫的次數(n-1)(n-2)(n-3)..(n-k)
總的次數:n-1+(n-1)(n-2)+(n-1)(n-2)(n-3)+(n-1)(n-2)(n-3)..(n-k)
3.2.2 OM(M)演算法的正確性證明
引理1:對任意m,k,若系統中將軍總數超過2k+m,叛徒最多有k個,演算法OM(m)滿足IC2,即如果指揮官誠實,那麼每一個誠實的中尉都遵從指揮官的命令。
引理1證明:
當m=0時,由A1可知,IC2滿足;
當m>0時,在OM(m)演算法的step(1),指揮官把值傳給n-1箇中尉,在step(2)中,每一個誠實的中尉呼叫OM(m-1),前文已知n>2k+m,因此n-1>2k+(m-1),所以每一個誠實的中尉i都會得到城實中尉的vj=v。又因為n-1>2k+(m-1)>=2k,即這n-1箇中尉的半數以上都是誠實的,所以step(3)中獲得的majority(v1,v2……vn-1)必等於v,即滿足IC2。
定理1 對任意m,如果將軍數量大於3m且叛徒數最多是m,演算法OM(m)滿足IC1和IC2。
定理1證明:
當不存在叛徒(m=0)的時候,顯然OM(0)滿足IC1&IC2的約束,因此假定OM(m-1)成立,證明OM(m),m>0成立。
假設指揮官誠實,由引理1可知,若k與m相等,則OM(m)滿足IC2,又因為在指揮官誠實的情況下IC1可以由IC2推出,所以只需要證明在指揮官是叛徒的情況下檢驗是否滿足IC1。
已知指揮官是叛徒,最多有m個叛徒。所以中尉中最多有m-1個叛徒。中尉的數量是3m-1,且3m-1>3(m-1),因此OM(m-1)滿足IC1&IC2。對於每一個j,任意兩個誠實的中尉得到的都是相同的vj的值(這任意兩個中尉有一個是j的話就由IC2可以推出;若不包括j的話,由IC1可以推出)。因此,任意兩個誠實的中尉最終會得到相同的v1,v2……vn-1,也即演算法step(3)的majority(v1,v2……vn-1)相同,OM(m)的IC1的以證明。
對於證明的思路分析:
採用了歸納演繹法,
顯然OM(0)恆成立;
假設OM(m-1)成立,
若指揮官誠實,那麼由引理1可推OM(m)的IC2成立,進而OM(m)IC1成立。
若指揮官為叛徒,
通過歸納法證明過程中對任意j由OM(m-1)的IC2推出任意兩個誠實中尉有相同v<sub>j</sub>的值,
這是因為如果j為兩個誠實中尉之一,那麼就符合OM(m-1)的IC2條件;
如果j不是這兩個誠實中尉之一,那麼j是誠實將軍自不必多說,
如果j是叛徒的話,因為該任意兩個中尉是誠實的,
由IC1也可推知二者Vj的值也相同,
雖然不是正確值,但達成了共識。
因此滿足IC1,即OM(m)滿足IC1&IC2。
綜上,定理1成立。
4. A Solution With Signed Messages
4.1 Signed Message的定義
叛徒能夠“撒謊”導致拜占庭將軍問題變的難以解決。可以通過讓將軍傳送不可偽造的資訊的方式進行解決。
在A1~A3的基礎上新增A4約束:
(a) 誠實將軍的簽名不可偽造且可以檢測到任何其簽名的資訊的改動;
(b) 任何人都可以驗證將軍的簽名的真實性。
並未對叛徒將軍的資訊進行約束,因此叛徒將軍之間可以共謀。
有了以上約束,3將軍問題就存在瞭解。
m叛徒任意數量將軍演算法:(將軍總數少於m+2是無意義的)
4.2 SM(m)演算法的步驟及其正確性推導
4.2.1 SM(m)演算法的步驟
演算法大致流程:
指揮官傳送帶有自己簽名的資訊給所有中尉;
中尉在指揮官簽名的基礎上附上自己的簽名併發給其他中尉;
其他中尉重複操作。
定義choice
函式將一組命令轉變成單個命令:
1. 如果集合V由單個元素v組成,choice(V)=v;
2. choice(None)=RETREAT。
choice函式的定義也可以是中位數。
x:i
表示被將軍i簽名的資訊x,v:j:i
表示先被j簽名的資訊v,然後又被i簽名的v:j
。
General 0代表commander.
每一個lieutenant i都維持一個集合Vi,Vi是當前收到的被正確簽名的命令的集合。(如果指揮官誠實,那麼此集合只有一個元素。)
演算法SM(m)步驟:
(1). Initially $V_i=\Phi$
(2). For each i:
(A) If Lieutenant i receives a message of the form v:0 from the commander and he has not yet received any order, then
(i) he lets $V_i$ equals ($v$):
(ii) he sends the message $v:0:i$ to every other lieutenant.
(B) If Lieutenant i receives a message of the form $v:0:j_1:...:j_k$ and $v$ is not int the set $V_i$, then:
(i) he adds $v$ to $V_i$;
(ii) if $k<m$, then he sends the messages $v:0:j_1:...:j_k:i$ to every lieutenant other than $j_1:...:j_k$.
(3). For each i: When Lietenant i will receive no more messages, he obeys the order $choice(V_i)$.
在步驟(2),中尉i會忽略任何已經包含在集合$V_i$中的命令$v$的資訊。
在step(3)如果一箇中尉不接受到資訊該如何決斷呢?一箇中尉在step(2)能夠最多接收到一次 $v:0:j_1:...:j_k:i$ 資訊,若約束中尉$j_k$要麼傳送該資訊(指 $v:0:j_1:...:j_k:i$ ),要麼傳送一個其停止接收該資訊的資訊,就能夠在收到所有資訊較容易地做出決定。(通過A3約束,即任何資訊的缺失都能夠被檢測到,任一中尉都能夠檢測到上述關於$j_k$上述兩個資訊的缺失) 。除此以外,當無資訊到達時超時機制也可用於進行決斷(Section 6給出)。
step(2)中收到簽名的中尉會丟棄具有不正確簽名格式的資訊,這是為了節省儲存空間。因為如果不這麼辦的話,當一個命令$v$被$k$箇中尉簽名並以訊息形式傳遞給其他中尉的時候,系統中就會存在$(n-k-2)(n-k-3)...(n-m-2)$個拷貝。
以n=7,m=2為例:(本文應該是預設叛徒不參與通訊(也可能是無法進行通訊)或且發出的資訊並不留存)
被k箇中尉簽名 | 拷貝數目(理論值) | 訊息發出時狀態 |
---|---|---|
0 | n-1 | $v:0$ |
1 | 4*(7-2-2) | $v:0:j_1$ |
2 | 3 (此時k=1<m,並不會停止傳播) | $v:0:j_1:j_2$ |
之後所有節點發現k=m,轉step(3)
上圖5展示了演算法SM(1)的執行過程,叛徒指揮官發給中尉1命令$"attack":0$ ,發給中尉2命令$"retreat":0$ 。經過step(2),兩個中尉的$V_1=V_2={"attack","retreat"}$,且都遵循該命令$choice=({"attack","retreat"})$,與圖2的OM演算法不同之處在於中尉通過最後的$choice$可以知道指揮官是叛徒,並且A4也能保證其結論的正確性。
事實上,第m個將軍並不需要繼續在命令的後邊附上自己的簽名,因為他收到命令之後就不會再轉發給別人了。因此SM(1)的簽名是不必要的。
4.2.2 SM(m)演算法的正確性證明
定理2 對任意m,演算法能夠解決最多m個叛徒的拜占庭將軍問題。
證明:
先證IC2,當指揮官是誠實的情況下,在step(1)他會發送$v:0$給他的中尉們,每一個誠實的中尉在step(2)(A)都會收到命令$v$,因為叛徒中尉並不能偽造指揮官簽名,因此在step(2)(B)並不能對訊息進行篡改,所以誠實的中尉在step(2)(B)並不能收到除了$v$以外的其他命令。這就保證了集合$V_i$只會有一個命令$v$,再經由step(3)的$choice$函式,最後每一箇中尉的命令都是一樣的,也即滿足IC2。
因為在指揮官是誠實的情況下IC1可以由IC2推匯出,因此只需要證明指揮官是叛徒的情況下是否符合IC1即可。若兩個中尉$i,j$最後在步驟3服從相同的命令,那麼他們倆在step(2)的$V_i,V_j$也是一樣的。因此,證明IC1就是證明
如果$i$在step(2)將$v$加入到集合$V_i$,那麼$j$也一定在step(2)把$v$加入到$V_j$中。
如果i在step(2)(A)收到了命令$v$,那麼他就會將其在step(2)(A)(ii)傳送給$j$,所以$j$就會收到這一資訊(因為訊息的A1約束)。如果$i$在step(2)(B)將命令新增到自身的$V_i$中,那他一定收到了資訊 $v:0:j_1:...:j_k$ 。如果$j$是其中一個$j_r$那麼通過A4約束,他一定已經收到了訊息$v$,如果$j$不在該簽名佇列( $j_1:...:j_k$ )中,分兩種情況
- $k<m$的話,i就會將資訊$v:0:j_1:...:j_k:i$發給$j$,$j$同樣會收到命令$v$。
- $k=m$的話,除叛徒指揮官之外,n-1箇中尉中最多還有m-1個叛徒中尉,因此至少在$j_1,j_2 ...:j_m$中,至少有一箇中尉是誠實的。那麼這個誠實的中尉也在他收到訊息的第一時間將$v$發給$j$。
所以無論如何$j$還是會收到$v$
綜上所述,SM(m)演算法滿足IC1&IC2,定理2成立。
5. Missing Communication Paths
前文所述都是將軍之間可以兩兩直接傳送訊息的情況,以下討論移除這一假設對演算法OM(m)和SM(m)進行擴充套件。
3-正則圖(3-regular graph):每一個節點的度都是3.如下圖所示。
如果兩個將軍有邊相連,那麼稱這兩個將軍為鄰居。
定義1 :
(a) 節點i的鄰居正則集合(regular set of neighbors)是滿足以下條件的點集${i_1,...,i_p}$
(i) 每一個$i_j$是點$i$的鄰居,且
(ii) 對每一個不同於$i$的將軍$k$,存在至少兩條從$i_j$到$k$的不經過$i$且只有終點$k$重合的路徑$\gamma_j,_k$。
(b) 如果圖G的每一個點都有一個由p個點構成的regular set of neighbors,那麼圖G被稱為p-正則圖(p-regular)。
圖6就是一個$3-regular$,圖7就不是,因為中心點沒有有3個點的regular set of neighbors。
5.1 對OM(m)的改進OM(m,p)
前提:需要將軍(包括叛徒將軍)之間的能夠傳送訊息的圖是一個$3m-regular$。
對所有的正數$m,p$,如果圖G是一個$p-regular$,定義演算法$OM(m,p)$如下所示。
$OM(m,p)