拜占庭將軍問題(轉自維基百科)

拜占庭將軍問題(Byzantine Generals Problem),是由萊斯利·蘭波特在其同名論文中提出的分佈式對等網絡通訊容錯問題。算法

在分佈式計算中,不一樣的計算機經過通信交換信息達成共識而按照同一套協做策略行動。但有時候,系統中的成員計算機可能出錯而發送錯誤的信息,用於傳遞信息的通信網絡也可能致使信息損壞,使得網絡中不一樣的成員關於全體協做的策略得出不一樣結論,從而破壞系統一致性。拜占庭將軍問題被認爲是容錯性問題中最難的問題類型之一。安全

 

目錄

  • 1問題描述
  • 2早期的解決方案
  • 3實用拜占庭容錯
  • 4計算機系統
  • 5實務應用

 

問題描述

萊斯利·蘭波特在其論文中描述了以下問題:網絡

一組拜占庭將軍分別各率領一支軍隊共同圍困一座城市。爲了簡化問題,將各支軍隊的行動策略限定爲進攻或撤離兩種。由於部分軍隊進攻部分軍隊撤離可能會形成災難性後果,所以各位將軍必須經過投票來達成一致策略,即全部軍隊一塊兒進攻或全部軍隊一塊兒撤離。由於各位將軍分處城市不一樣方向,他們只能經過信使互相聯繫。在投票過程當中每位將軍都將本身投票給進攻仍是撤退的信息經過信使分別通知其餘全部將軍,這樣一來每位將軍根據本身的投票和其餘全部將軍送來的信息就能夠知道共同的投票結果而決定行動策略。架構

系統的問題在於,將軍中可能出現叛徒,他們不只可能向較爲糟糕的策略投票,還可能選擇性地發送投票信息。假設有9位將軍投票,其中1名叛徒。8名忠誠的將軍中出現了4人投進攻,4人投撤離的狀況。這時候叛徒可能故意給4名投進攻的將領送信表示投票進攻,而給4名投撤離的將領送信表示投撤離。這樣一來在4名投進攻的將領看來,投票結果是5人投進攻,從而發起進攻;而在4名投撤離的將軍看來則是5人投撤離。這樣各支軍隊的一致協同就遭到了破壞。分佈式

因爲將軍之間須要經過信使通信,叛變將軍可能經過僞造信件來以其餘將軍的身份發送假投票。而即便在保證全部將軍忠誠的狀況下,也不能排除信使被敵人截殺,甚至被敵人間諜替換等狀況。所以很難經過保證人員可靠性及通信可靠性來解決問題。函數

假始那些忠誠(或是沒有出錯)的將軍仍然能經過多數決定來決定他們的戰略,便稱達到了拜占庭容錯。在此,票都會有一個默認值,若消息(票)沒有被收到,則使用此默認值來投票。性能

上述的故事映射到計算機系統裏,將軍便成了計算機,而信差就是通訊系統。雖然上述的問題涉及了電子化的決策支持與信息安全,卻沒辦法單純的用密碼學數字簽名來解決。由於不正常的電壓仍可能影響整個加密過程,這不是密碼學與數字簽名算法在解決的問題。所以計算機就有可能將錯誤的結果提交去,亦可能致使錯誤的決策。區塊鏈

早期的解決方案

在1982年的論文中提過幾個解決方案。方案中把問題往下拆解,認爲在「拜占庭將軍」的問題能夠在「軍官與士官的問題」裏解決,以下降將軍問題的發生。而所謂的「軍官與士官的問題」,就是探討軍官與他的士官是否能忠實實行命令。加密

  • 其中一個解決方案認爲即便出現了僞造或錯誤的消息。只要有問題的將軍的數量不到三分之一,仍能夠達到「拜占庭容錯」。緣由是把一樣的標準下放到「軍官與士官的問題」時,在背叛的軍士官不足三分之一的狀況下,有問題的軍士官能夠很容易的被糾出來。好比有軍官A,士官B與士官C。當A要求B進攻,卻要求C撤退時。只要B與C交換所收到的命令,就會馬上發現A有問題。以函數來表示,將軍的總數爲nn裏面背叛者的數量爲t,則只要n > 3t就能夠容錯。
  • 另外一個解決方案須要有沒法消去的簽名。在現今許多高度信息安全要求的關鍵系統裏,數字簽名就常常被用來實現拜占庭容錯,找出有問題的將軍。然而,在生命攸關係統裏,使用錯誤偵測碼就能夠大幅下降問題的發生。不管系統是否存在拜占庭將軍問題。因此須要作密碼軍算的數字簽名也不必定適合這類系統。
  • 假如上述兩個解決方案裏,將軍們沒法直接通訊時,該論文亦有進一步的解決方案。

此外,1980年代還有其餘用來達到拜占庭容錯的架構被提出,如:FTMP、MMFCS 與 SIFT。spa

實用拜占庭容錯

1999年,卡斯托(Miguel Castro)與李斯克夫(Barbara Liskov)提出了實用拜占庭容錯(PBFT)算法。該算法能提供高性能的運算,使得系統能夠每秒處理成千的請求,比起舊式系統快了一些。

而在PBFT以後,許多用於拜占庭容錯(BFT)的通訊協議也被提出來改善其通訊的強健性與效率。好比Q/U、HQ、Zyzzyva與ABsTRACTs ...,用來提高效率。而Aardvark與RBFT是用來增強強健性。另外,Adapt則使用原有的BFT協議作調適,以強化其效率與強健性。BFT協議更能夠藉由加入可任務的單元,以減小發出副本的次數。好比:A2M-PBFT-EA與MinBFT。

計算機系統

分佈式對等網絡中須要按照共同一致策略協做的成員計算機即爲問題中的將軍,而各成員計算機賴以進行通信的網絡鏈路即爲信使。拜占庭將軍問題描述的就是某些成員計算機或網絡鏈路出現錯誤、甚至被蓄意破壞者控制的狀況。

實務應用

在點對點式數字貨幣系統比特幣裏,比特幣網絡的運做是平行的(parallel)。各結點與終端都運算著散列煉來達成工做量證實(PoW)。工做量證實的煉結是解決比特幣系統中拜占庭問題的關鍵,避免有問題的結點(即前文提到的「反叛的將軍」)破壞數字貨幣系統裏交易賬的正確性,是對整個系統的運行狀態有着重要的意義。

在一些飛行器(如波音777)的系統中也有使用拜占庭容錯。並且因爲是即時系統,容錯的功能也要能儘快回覆,好比即便系統中有錯誤發生,容錯系統也只能作出一微秒之內的延遲。

一些航天飛機的飛行系統甚至將容錯功能放到整個系統的設計之中。

拜占庭容錯機制是將收到的消息(或是收到的消息的簽名)轉交到其餘的接收者。這類機制都假設它們轉交的消息均可能念有拜占庭問題。在高度安全要求的系統中,這些假設甚至要求證實錯誤能在一個合理的檔次下被排除。固然,要證實這點,首先遇到的問題就是如何有效的找出全部可能的、應能被容錯的錯誤。這時候會試着在系統中加入錯誤插入器。

做者按區塊鏈在解決這個問題上,有必定優點。推薦兩個教程:

相關文章
相關標籤/搜索