拜占庭將軍問題

萊斯利·蘭伯特提出的協議問題

拜占庭將軍問題(Byzantine failures),是由萊斯利·蘭伯特提出的點對點通信中的基本問題。含義是在存在消息丟失的不可靠通道上試圖通過消息傳遞的方式達到一致性是不可能的。

地域起源


拜占庭位於如今的土耳其的伊斯坦布爾,是東羅馬帝國的首都。由於當時拜占庭羅馬帝國國土遼闊,為了達到防禦目的,每個軍隊都分隔很遠,將軍與將軍之間只能靠信差傳消息。在戰爭的時候,拜占庭軍隊內所有將軍和副官必須達成一致的共識,決定是否有贏的機會才去攻打敵人的陣營。但是,在軍隊內有可能存有叛徒和敵軍的間諜,左右將軍們的決定又擾亂整體軍隊的秩序。在進行共識時,結果並不代表大多數人的意見。這時候,在已知有成員謀反的情況下,其餘忠誠的將軍在不受叛徒的影響下如何達成一致的協議,拜占庭問題就此形成。

基本簡介


拜占庭將軍問題是一個協議問題,拜占庭帝國軍隊的將軍們必須全體一致的決定是否攻擊某一支敵軍。問題是這些將軍在地理上是分隔開來的,並且將軍中存在叛徒。叛徒可以任意行動以達到以下目標:欺騙某些將軍採取進攻行動;促成一個不是所有將軍都同意的決定,如當將軍們不希望進攻時促成進攻行動;或者迷惑某些將軍,使他們無法做出決定。如果叛徒達到了這些目的之一,則任何攻擊行動的結果都是註定要失敗的,只有完全達成一致的努力才能獲得勝利。
拜占庭假設是對現實世界的模型化,由於硬體錯誤、網路擁塞或斷開以及遭到惡意攻擊,計算機和網路可能出現不可預料的行為。

內涵概括


“拜占庭將軍問題”延伸到網際網路生活中來,其內涵可概括為:在網際網路大背景下,當需要與不熟悉的對方進行價值交換活動時,人們如何才能防止不會被其中的惡意破壞者欺騙、迷惑從而作出錯誤的決策。進一步將“拜占庭將軍問題”延伸到技術領域中來,其內涵可概括為:在缺少可信任的中央節點和可信任的通道的情況下,分佈在網路中的各個節點應如何達成共識。

根本難題


中本聰發明比特幣以前,世界上並沒有一個非常完美的方法來解決“拜占庭將軍問題”。
究其根底,“拜占庭將軍問題”最終想解決的是網際網路交易、合作過程中的四個問題:
(1)信息發送的身份追溯;
(2)信息的私密性;
(3)不可偽造的簽名;
(4)發送信息的規則。
“拜占庭將軍問題”其實就是網路世界的模型化。
僅拿比特幣世界來說,我們可以將每一個比特幣交易賬號看作一個將軍,這些賬號分佈在世界各地,無法聚在一起,很可能會有惡意賬號,賬號之間的溝通也很可能因為機器壞了、網路斷了、黑客攻擊等受到破壞,並且有關賬號是不是要支付、具體支付多少的討論也會浪費很多時間。

解決方法


區塊鏈輕而易舉地解決了這一問題,它為信息發送加入了成本,降低了信息傳遞的速率,而且加入了一個隨機元素使得在一定時間內只有一個將軍可以廣播信息。這裡所說的成本就是區塊鏈系統中基於隨機哈希演演算法的“工作量證明”。哈希演演算法所做的事情就是計算獲得的輸入,得到一串64位的隨機數字和字母的字元串。
區塊鏈系統計算的輸入數據是指節點發送的當前時間點的整個總賬。當前計算機的算力使其可以實時計算出單個哈希值,但是區塊鏈系統只接受前13個字元是0的哈希值結果作為“工作量證明”。而前13個字元是0的哈希值是非常罕見的,需要整個網路花費10分鐘的時間才在數以億計的數據中找到一個。在一個有效的哈希值被計算出來之前,網路中已經生產了無數個無效值,這就是降低信息傳遞速率並使得整個系統成功運行的“工作量證明”。
在拜占庭將軍問題中,第一個廣播信息的將軍就是第一個發現有效哈希值的計算機,只要其他將軍接收到並驗證通過了這個有效哈希值和附著在上面的信息,他們就只能使用新的信息更新他們的總賬複製,然後重新計算哈希值。下一個計算出有效哈希值的將軍就可以將自己再次更新的信息附著在有效哈希值上廣播給大家。然後哈希計算競賽從一個新的開始點重新開始。由於網路信息的持續同步,所有網路上的計算機都使用著同一版本的總賬。
比特幣區塊鏈系統找到有效哈希值的時間間隔為10分鐘,這是演演算法設置好的。演演算法難度每隔兩周調整一次就是為了保證這10分鐘的間隔,不能多也不能少。每隔10分鐘,總賬的信息就會在區塊鏈更新並在全網同步一次。因此分散的交易記錄是在所有網路上的計算機之間進行對賬和同步的。
當個人用戶在區塊鏈系統發起一筆交易的時候,他們會使用私鑰和公鑰為這筆交易簽名,而內嵌在比特幣系統的標準公鑰則承擔了加密工具的角色,對應在拜占庭將軍問題中,加密工具就是用於簽名和驗證消息的印章。
因此,哈希演演算法對信息傳遞速率的限制加上加密工具使得區塊鏈構成了一個無須信任的數據交互系統。在區塊鏈上,一系列的交易、時間約定、域名記錄、政治投票系統或者任何其他需要建立分散式協議的地方,參與者都可以達成一致。

延伸領域


“拜占庭將軍問題”可以進一步延伸到各個領域。人們在網際網路上進行數據交易的時候,總會習慣性依賴強大的第三方平台來進行信任擔保。然而,這些解決人們信任問題的第三方正在逐漸失效,因為總有黑客能夠抓住第三方平台的漏洞進行金融詐騙。“拜占庭將軍問題”中的“叛徒”就是網際網路金融交易中的“騙子”,如果第三方平台出現了大漏洞或者為了規避過多的步驟將第三方信任機構撤走,“叛徒”就會利用信息在沒有第三方信任機構的擔保之下進行“行騙”。在不去花費大量時間、資源揪出這個“叛徒”的情況下,能夠讓交易者雙方都彼此信任、進行正常交易的方式就是區塊鏈。