兩軍問題與拜占庭將軍問題


下面這篇文章,感覺講的非常好:

http://www.8btc.com/baizhantingjiangjun

 

拜占庭將軍問題是一個共識問題: 首先由Leslie Lamport與另外兩人在1982年提出,被稱為The Byzantine Generals Problem或者Byzantine Failure。核心描述是軍中可能有叛徒,卻要保證進攻一致,由此引申到計算領域,發展成了一種容錯理論。隨着比特幣的出現和興起,這個著名問題又重入大眾視野。

 

應該明確的是,拜占庭將軍問題中並不去考慮通信兵是否會被截獲或無法傳達信息等問題,即消息傳遞的信道絕無問。Lamport已經證明了在消息可能丟失的不可靠信道上試圖通過消息傳遞的方式達到一致性是不可能的。所以,在研究拜占庭將軍問題的時候,我們已經假定了信道是沒有問題的,並在這個前提下,去做一致性和容錯性相關研究。如果需要考慮信道是有問題的,這涉及到了另一個相關問題:兩軍問題

 

1.2.與拜占庭將軍相關問題:兩軍問題

正如前文所說,拜占庭將軍問題和兩軍問題實質是不一樣的。國內大量解釋拜占庭將軍問題的文章將兩者混為一談,其實是混淆了兩個問題的實質,由此造成了許多誤解。這兩個問題看起來的確有點相似,但是問題的前提和研究方向都截然不同。

看到這里您可能發現兩軍問題和拜占庭將軍問題有一定的相似性,但我們必須注意的是,通信兵得經過敵人的溝渠,在這過程中他可能被捕,也就是說,兩軍問題中信道是不可靠的並且其中沒有叛徒之說,這就是兩軍問題和拜占庭將軍問題的根本性不同。由此可見,大量混淆了拜占庭將軍問題和兩軍問題的文章並沒有充分理解兩者。

 

兩軍問題的根本問題在於信道的不可靠,反過來說,如果傳遞消息的信道是可靠的,兩軍問題可解。然而,並不存在這樣一種信道,所以兩軍問題在經典情境下是不可解的.

 

但我們能不能通過一種相對可靠的方式來解決大部分情形呢?這需要談到TCP協議。事實上,搜索“兩軍問題與三次握手”,您一定可以找到大量與TCP協議相關的內容。

權當筆者是班門弄斧,這里僅用最淺顯易懂的方式科普TCP協議的原理和局限,可能存在一些毛刺,請多包涵。

 

那么,是否能夠找到一個理論方法來真正的破解兩軍問題呢?答案是有的,量子通訊協議,筆者並沒有能力弄清這個頗為高深的問題。據我的理解,處於量子糾纏態的兩個粒子,無論相隔多遠都能夠彼此同步,光是直觀的來看,這個效應可以用來實現保密通訊。

但是由於測不准原理,一測量粒子狀態就會改變其狀態,所以通訊時還必須通過不可靠信道發送另一條信息。盡管這個“另一條信息”是不可靠的,但是由於已經存在了一條絕對可靠的信道(量子糾纏),保證了另一條信道即使不可靠也能保證消息是可靠的,否則至少被竊取了一定能夠被發現。

 

 

2.1. 拜占庭將軍問題實質

至此,我們將拜占庭將軍問題簡化成了,所有忠誠的將軍都能夠讓別的將軍接收到自己的真實意圖,並最終一致行動;而形式化的要求就是,

“一致性”與“正確性”

 

2.2.形式化條件的推演

拜占庭問題,關鍵要達到下面兩個目標:

IC1:所有忠誠的副官遵守一個命令,即一致性。

IC2:若司令是忠誠的,每一個忠誠的副官遵守他發出的命令,即正確性。

 

在經典的情形下,我們可以找到兩種辦法,口頭協議書面協議。筆者將會逐一探討兩種算法的推演和證明,其中證明部分並不會采用純推理,而以介紹證明思路為主。

 

Part3:口頭協議

首先,我們明確什么是口頭協議。我們將滿足以下三個條件的方式稱為口頭協議:

A1:每個被發送的消息都能夠被正確的投遞

A2:信息接收者知道是誰發送的消息

A3:能夠知道缺少的消息

 

先告知結論:采用口頭協議,若叛徒數少於1/3,則拜占庭將軍問題可解。也就是說,若叛徒數為m,當將軍總數n至少為3m+1時,問題可解(即滿足了IC1和IC2)。

 

3.1.口頭協議算法OM(m)

倘若司令在OM(1)中給各副官發送的消息都是進攻(A),之后OM(0)時,叛徒副官3給副官1和副官2說他收到的消息是撤退(R)。那么對於副官1(或副官2)來說,他綜合司令、副官3和副官2(或副官1)后得到的消息向量都將會是(A,A,R),利用majority函數之后,將會采用A,滿足了IC1和IC2(回顧IC1:所有忠誠的副官遵守一個命令,IC2:若司令是忠誠的,每一個忠誠的副官遵守他發出的命令)。

 

倘若司令是叛徒,那么我們已經不需要滿足IC2。為方便,我們假設叛徒司令在OM(1)會給三個副官發送的信息是(x,y,z),其中x,y,z都可以是A或R的任意一種。之后,三位忠誠的副官將會按照OM(0)要求的那樣,交換他們收到的信息。

對於副官1,他綜合司令、副官2和副官3后得到的消息向量將會是(x,y,z),可以發現對於其他兩個忠實的副官,他們得到的消息向量也將是(x,y,z)。不管x,y,z如何變化,majority(x,y,z)對於三人來說都是一樣的,所以三個副官將會采用一致的行動。

 

 

(3)m=2,n=7的情形 接下來,我們將討論m=2,n=7的情形,雖然只是多了一個叛徒,但是這里會出現遞歸過程,所以會復雜很多。

 

在OM(2)中,司令將攻擊命令(A)傳給各個副官。在OM(1)中,忠誠的副官們將會發送他們收到的消息(A),但由於副官5和副官6是叛徒,他們將會發送別的信息(比如R)。這時,忠誠的副官們將會采用使用OM(1)中的方法來確定各個v1~v6。例如,對於副官1,他收到了司令傳來的命令,他會直接采用majority函數綜合司令和其他將軍傳來的信息嗎?他不會,因為這還在OM(1)中,他並不知道司令是不是叛徒,他會利用詢問別人的方式來確認將軍的命令,但是按照算法他會把司令的命令作為v1(即v1=A)並傳給其他人。

接下來他會努力取得其他的v2~v6的值,這時已經在OM(1)中了,副官1絕不會輕易相信別人傳來的消息,比如副官2給他傳來了命令A,但是他會懷疑副官2傳來的消息,所以他用OM(1)大法,問其他人副官2傳給了他們什么,副官3和副官4誠實的告訴副官1(也就是所有人都要問到,都要聽到),副官2給他們傳的是A,而這時副官5和副官6又要撒謊了,他們又亂說,我們姑且假定他們傳來的是x’和y’吧。這樣,終於進入到了OM(0),這時副官1將會綜合其他副官對於v2的反饋,得到向量(A,A,A,x’,y’),再利用majority函數,得到了v2=A。如下圖,這是副官1在OM(1)中得到的信息(x,y等表示了不確定的命令)。

所以,我們可以發現忠誠的副官采用的命令都是A(滿足IC1),並且和忠誠的將軍的命令一致(滿足IC2)。至此,您應該已經明白了這個算法是怎么遞歸的,不管m等於多少,都只是一個算法步驟多寡的問題。

 

 

至於司令是叛徒的情形,其實是相似的,這里簡單的再提一下便於理解。若您已經明白了算法過程,完全可以跳過。

 

最終他們采用的行動都會是A(滿足了IC1),而司令是叛徒不需要滿足IC2。

 

我們回顧一下命題:

將軍總數為n,叛徒數量為m,OM(m)可以實現,在n>3m(至少3m+1)的情況下,使得:

IC1:所有忠誠的副官遵守一個命令。

IC2:若司令是忠誠的,每一個忠誠的副官遵守他發出的命令。

 

 

Part4:書面協議

 

除了A1,A2和A3以外,我們在口頭協議之上添加一個條件A4,使之成為書面協議

A4:(a)簽名不可偽造,一旦被篡改即可發現,而叛徒的簽名可被其他叛徒偽造;(b)任何人都可以驗證簽名的可靠性。

回顧A1-3:

A1:每個被發送的消息都能夠被正確的投遞

A2:信息接收者知道是誰發送的消息

A3:能夠知道缺少的消息

 

那么,我們先說結論:對於任意m,最多只有m個背叛者情況下,算法SM(m)能解決拜占庭將軍問題。也就是說,在使用簽名的情況下,書面協議可以打破三模冗余的僵局,使用了簽名的情況下,只要知道了叛徒數量,我們就可以利用SM(m)算法解決拜占庭將軍問題。

 

4.1.書面協議算法SM(m)

筆者對書面協議盡量簡短的介紹。回顧

IC1:所有忠誠的副官遵守一個命令,即一致性。

IC2:若司令是忠誠的,每一個忠誠的副官遵守他發出的命令,即正確性。

 

 

4.2.書面協議實例推演

舉個例子,n=3,m=1,其中司令是叛徒,這是口頭協議不能解決的狀況。

很顯然,副官1得到的V1={A,R},副官2得到相同的V2={A,R}。他們采用choice函數后得到的命令一定相同。

 

回顧之前的口頭協議,m=1, n=3是無法解決的。因為:

如果司令是叛徒,兩個副官忠誠,司令會發送兩個不同的命令。當兩個副官對照命令時,他們又凌亂了,無法判斷司令是叛徒或者對方是叛徒,從而又無法判斷。這個情形非常簡易的說明了三模冗余是無法動態容錯的。

 

可以看出,OM無法處理三模冗余,是因為無法判斷消息本來是司令亂發的,還是另一個副官篡改的。 而SM書面協議能夠保證消息不被篡改,所以就OK了。

關鍵點就在於簽名不可偽造。

 

相似的,n=4,m=2,其中司令是叛徒,這同樣是口頭協議不能解決的狀況。

 

 

書面協議的本質就是引入了簽名系統。 

 

結論

書面協議的結論非常令人興奮,這不是解決了拜占庭將軍問題了嗎?但請注意我們在A1~A4中實際上是添加了一些條件的,這使得拜占庭將軍問題在這些假設下能夠解決,但是在實際狀況中卻會有一些問題。觀察A1~A4,我們做了一些在現實中比較難以完成的假設,比如沒考慮傳輸信息的延遲時間,書面協議的簽名體系難以實現,而且簽名消息記錄的保存難以擺脫一個中心化機構而獨立存在。

回顧A1-A4:

A1:每個被發送的消息都能夠被正確的投遞

A2:信息接收者知道是誰發送的消息

A3:能夠知道缺少的消息

A4:(a)簽名不可偽造,一旦被篡改即可發現,而叛徒的簽名可被其他叛徒偽造;(b)任何人都可以驗證簽名的可靠性。

 

事實上,存在能夠完美解決書面協議實際局限的方法,這個方法就是區塊鏈。可以看我的下一篇文章:

http://www.cnblogs.com/charlesblc/p/6272785.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM