BFT( Byzantine Fault Tolerance)稱爲 拜占庭容錯。拜占庭容錯技術是一類分佈式計算領域的容錯技術。拜占庭假設是對現實世界的模型化,因爲硬件錯誤、網絡擁塞或中斷以及遭到惡意攻擊等緣由,計算機和網絡可能出現不可預料的行爲。拜占庭容錯技術被設計用來處理這些異常行爲,並知足所要解決的問題的規範要求。算法
拜占庭容錯技術來源於拜占庭將軍問題。 拜占庭將軍問題是Leslie Lamport(2013年的圖靈講得住)用來爲描述分佈式系統一致性問題(Distributed Consensus)在論文中抽象出來一個著名的例子。安全
拜占庭帝國想要進攻一個強大的敵人,爲此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵禦5支常規拜占庭軍隊的同時襲擊。這10支軍隊在分開的包圍狀態下同時攻擊。他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊(一半以上)同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通訊兵騎馬相互通訊來協商進攻意向及進攻時間。困擾這些將軍的問題是,他們不肯定他們中是否有叛徒,叛徒可能擅自變動進攻意向或者進攻時間。在這種狀態下,拜占庭將軍們才能保證有多於6支軍隊在同一時間一塊兒發起進攻,從而贏取戰鬥?網絡
拜占庭將軍問題中並不去考慮通訊兵是否會被截獲或沒法傳達信息等問題,即消息傳遞的信道絕無問題。Lamport已經證實了在消息可能丟失的不可靠信道上試圖經過消息傳遞的方式達到一致性是不可能的。因此,在研究拜占庭將軍問題的時候,已經假定了信道是沒有問題的.
咱們將拜占庭將軍問題簡化成了,全部忠誠的將軍都可以讓別的將軍接收到本身的真實意圖,並最終一致行動;而形式化的要求就是,「一致性」與「正確性」。一致性
:每一個忠誠的將軍必須收到相同的命令值vi(vi是第i個將軍的命令)正確性
:若是第i個將軍是忠誠的,那麼他發送的命令和每一個忠誠將軍收到的vi相同。異步
Lamport 對拜占庭將軍的問題的研究代表,當 n > 3m 時,即叛徒的個數 m 小於將軍總數的 n 的 1/3 時,經過口頭同步通訊(假設通訊是可靠的),能夠構造同時知足「一致性」和「正確性」的解決方法,即將軍們能夠達成一致的命令。分佈式
區塊鏈網絡的記帳共識和拜占庭將軍的問題是類似的。參與共識記帳的每個節點至關於將軍,節點之間的消息傳遞至關於信使,某些節點可能因爲各類緣由而產生錯誤的信息傳遞給其餘節點。一般這些發生故障的節點被稱爲拜占庭節點,而正常的節點即爲非拜占庭節點。
假設分佈式系統擁有n臺節點,並假設整個系統拜占庭節點不超過m臺(n ≥ 3m + 1),拜占庭容錯系統須要知足以下兩個條件:區塊鏈
另外,拜占庭容錯系統須要達成以下兩個指標:設計
在分析拜占庭問題的時候,假設信道是可信的。拓展開來,在拜占庭容錯系統,廣泛採用的假設條件包括:code