了解過比特幣和區(qū)塊鏈的人,多少都聽說過拜占庭將軍問題,或聽說過區(qū)塊鏈的一個重要成就正是解決了拜占庭將軍問題。但真正明白這個問題的人并不多,甚至知道這個問題實質(zhì)的人都很罕見。
關(guān)于拜占庭問題,我學到的是如下幾個知識點:
1.拜占庭將軍問題(Byzantine Generals Problem)是一個共識問題,它并不是真實存在的歷史事件,而是圖靈獎得主Leslie Lamport和他的兩位同事于1982年在其論文中提出的一個問題。
2.這個問題其中一種描述是這樣的:在很久很久以前,有一個強大的帝國叫作拜占庭,它的軍隊非常強大,周圍有10個小國家,飽受拜占庭帝國的欺壓,但是,必須同一時間有6個以上的國家進攻才有可能打敗拜占庭帝國,否則就一定會戰(zhàn)敗。
這個時候,問題就出現(xiàn)了,古時候軍隊之間的通信完全依賴于人,如果一個國家的軍隊里有奸細,無論是下令的將軍還是傳信的通信兵,都可能會使得另外9個國家收到假消息,從而造成作戰(zhàn)失敗。那么,如果你是其中一個小國的國王,你該如何判斷一定會有另外5個以上的國家與你并肩作戰(zhàn)呢?畢竟一個不小心,你就亡國了。
3.與拜占庭將軍問題高度相似的描述是類兩軍問題:白軍駐扎在溝渠里,藍軍則分散在溝渠兩邊。白軍比任何一支藍軍都更為強大,但是藍軍若能同時合力進攻則能夠打敗白軍。他們不能夠遠程的溝通,只能派遣通信兵穿過溝渠去通知對方藍軍協(xié)商進攻時間。是否存在一個能使藍軍必勝的通信協(xié)議,這就是兩軍問題。
看到這里您可能發(fā)現(xiàn)拜占庭將軍問題(第一種描述)和兩軍問題(第二種描述)有一定的相似性,但我們必須注意的是,通信兵得經(jīng)過敵人的溝渠,在這過程中他可能被捕,也就是說,兩軍問題中信道是不可靠的,并且其中沒有叛徒之說,這就是兩軍問題和拜占庭將軍問題的根本性不同。由此可見,大量混淆了拜占庭將軍問題和兩軍問題的文章并沒有充分理解兩者。
兩軍問題的根本問題在于信道的不可靠,反過來說,如果傳遞消息的信道是可靠的,兩軍問題可解。然而,并不存在這樣一種信道,所以兩軍問題在經(jīng)典情境下是不可解的,為什么呢?
倘若1號藍軍(簡稱1)向2號藍軍(簡稱2)派出了通信兵,若1要知道2是否收到了自己的信息,1必須要求2給自己傳輸一個回執(zhí),說“你的信息我已經(jīng)收到了,我同意你提議的明天早上10點9分準時進攻”。
然而,就算2已經(jīng)送出了這條信息,2也不能確定1就一定會在這個時間進攻,因為2發(fā)出的回執(zhí)1并不一定能夠收到。所以,1必須再給2發(fā)出一個回執(zhí)說“我收到了”,但是1也不會知道2是否收到了這樣一個回執(zhí),所以1還會期待一個2的回執(zhí)。
4.隨著技術(shù)的發(fā)展,解決兩軍問題的信道問題已經(jīng)得到解決,比如TCP協(xié)議,比如量子糾纏技術(shù)。所以回到拜占庭將軍問題本身上來,其實質(zhì)見下一條。
5.拜占庭將軍問題的實質(zhì)是:軍中可能有叛徒,卻要保證進攻一致,這里“一致性”才是拜占庭將軍問題探討的內(nèi)容,如果本來叛徒數(shù)量就已經(jīng)多到了問題不可解的地步,這個就是“反叛”的問題了;同時,我們的目標是忠誠的將軍能夠達成一致,對于這些忠誠的將軍來說,進攻或者撤退都是可以的,只要他們能夠達成一致就行。
由此引申到計算領(lǐng)域,發(fā)展成了一種容錯理論。換句話說我們無法保證沒有叛徒,關(guān)鍵是我們要保證叛徒在一定的數(shù)量之內(nèi),否則必敗無疑。我們需要達成某種共識,這也是一種共識機制。
拜占庭將軍問題是一個共識問題。