什麼是拜占庭將軍問題

2022-09-15 10:06:11 字數 2601 閱讀 9762

接觸區塊鏈的同學,多少都聽說過拜占庭將軍問題,經常看到或聽到某某區塊鏈使用某某演算法解決了拜占庭將軍問題,那麼究竟什麼是拜占庭將軍問題呢?

也被稱為「拜占庭容錯」、「拜占庭將軍問題」。

拜占庭將軍問題是leslie lamport(2023年的圖靈講得住)用來為描述分布式系統一致性問題(distributed consensus)在**中抽象出來乙個著名的例子。

這個例子大意是這樣的:

拜占庭帝國想要進攻乙個強大的敵人,為此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵禦5支常規拜占庭軍隊的同時襲擊。這10支軍隊在分開的包圍狀態下同時攻擊。他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊(一半以上)同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通訊兵騎馬相互通訊來協商進攻意向及進攻時間。困擾這些將軍的問題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者進攻時間。在這種狀態下,拜占庭將軍們才能保證有多於6支軍隊在同一時間一起發起進攻,從而贏取戰鬥?

拜占庭將軍問題中並不去考慮通訊兵是否會被截獲或無法傳達資訊等問題,即訊息傳遞的通道絕無問題。lamport已經證明了在訊息可能丟失的不可靠通道上試圖通過訊息傳遞的方式達到一致性是不可能的。所以,在研究拜占庭將軍問題的時候,已經假定了通道是沒有問題的.

單從上面的說明可能無法理解這個問題的複雜性,我們來簡單分析一下:

先看在沒有叛徒情況下,假如乙個將軍a提乙個進攻提議(如:明日下午1點進攻,你願意加入嗎?)由通訊兵通訊分別告訴其他的將軍,如果幸運中的幸運,他收到了其他6位將軍以上的同意,發起進攻。如果不幸,其他的將軍也在此時發出不同的進攻提議(如:明日下午2點、3點進攻,你願意加入嗎?),由於時間上的差異,不同的將軍收到(並認可)的進攻提議可能是不一樣的,這是可能出現a提議有3個支持者,b提議有4個支持者,c提議有2個支持者等等。

再加一點複雜性,在有叛徒情況下,乙個叛徒會向不同的將軍發出不同的進攻提議(通知a明日下午1點進攻, 通知b明日下午2點進攻等等),乙個叛徒也會可能同意多個進攻提議(即同意下午1點進攻又同意下午2點進攻)。

叛徒傳送前後不一致的進攻提議,被稱為「拜占庭錯誤」,而能夠處理拜占庭錯誤的這種容錯性稱為「byzantine fault tolerance」,簡稱為bft。

相信大家已經可以明白這個問題的複雜性了。

在出現位元幣之前,解決分布式系統一致性問題主要是lamport提出的paxos演算法或其衍生演算法。paxos類演算法僅適用於中心化的分布式系統,這樣的系統的沒有不誠實的節點(不會傳送虛假錯誤訊息,但允許出現網路不通或宕機出現的訊息延遲)。

中本聰在位元幣中創造性的引入了「工作量證明(pow : proof of work)」來解決這個問題,有興趣可進一步閱讀工作量證明。

通過工作量證明就增加了傳送資訊的成本,降低節點傳送訊息速率,這樣就以保證在乙個時間只有乙個節點(或是很少)在進行廣播,同時在廣播時會附上自己的簽名。

這個過程就像一位將軍a在向其他的將軍(b、c、d...)發起乙個進攻提議一樣,將軍b、c、d...看到將軍a簽過名的進攻提議書,如果是誠實的將軍就會立刻同意進攻提議,而不會發起自己新的進攻提議。

以上就是位元幣網路中是單個區塊(賬本)達成共識的方法(取得一致性)。

理解了單個區塊取得一致性的方法,那麼整個區塊鏈(總賬本)如果達成一致也好理解。

我們稍微把將軍問題改一下:假設攻下乙個城堡需要多次的進攻,每次進攻的提議必須基於之前最多次數的勝利進攻下提出的(只有這樣敵方已有損失最大,我方進攻勝利的可能性就更大),這樣約定之後,將軍a在收到進攻提議時,就會檢查一下這個提議是不是基於最多的勝利提出的,如果不是(基於最多的勝利)將軍a就不會同意這樣的提議,如果是的,將軍a就會把這次提議記下來。

這就是位元幣網路最長鏈選擇。

工作量證明其實相當於提高了做叛徒(發布虛假區塊)的成本,在工作量證明下,只有第乙個完成證明的節點才能廣播區塊,競爭難度非常大,需要很高的算力,如果不成功其算力就白白的耗費了(算力是需要成本的),如果有這樣的算力作為誠實的節點,同樣也可以獲得很大的收益(這就是礦工所作的工作),這也實際就不會有做叛徒的動機,整個系統也因此而更穩定。

很多人批評工作量證明造成巨大的電力浪費,促使人們去探索新的解決一致性(共識)問題的機制:權益證明機制(pos: proof of stake)是乙個代表。在拜占庭將軍問題的角度來看,它同樣提高了做叛徒的成本,因為賬戶需要首先持有大量餘額才能有更多的機率廣播區塊,pos不是本文重點,以後在講。

共識演算法的核心就是解決拜占庭將軍問題(分布式網路一致性問題)。

the byzantine generals problem

系統的學習區塊鏈技術可以前往區塊鏈技術學習指引

如果你想和認識我,想和我一起交流區塊鏈技術,歡迎加入我的知識星球深入淺出區塊鏈,我也會在星球裡為大家解答區塊鏈技術問題,作為星友福利,星友可加入我常見的區塊鏈技術付費***,***內已經聚集了100多位區塊鏈技術愛好者。

深入淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術部落格。

我的知識星球為各位解答區塊鏈技術問題,歡迎加入討論。

什麼是拜占庭將軍問題

也被稱為 拜占庭容錯 拜占庭將軍問題 拜占庭將軍問題是leslie lamport 2013年的圖靈講得住 用來為描述分布式系統一致性問題 distributed consensus 在 中抽象出來乙個著名的例子。這個例子大意是這樣的 拜占庭帝國想要進攻乙個強大的敵人,為此派出了10支軍隊去包圍這個...

什麼是拜占庭將軍問題

簡單點說 拜占庭有 n 個將軍,每次命令下發之後,將軍之間都會進行資訊傳遞 n個將軍中會有敵軍的叛徒發出誤導資訊來誤導其他將軍的判斷,那麼忠誠的將軍要在什麼樣的條件下才能達成資訊的一致性 這是前提條件 a1.每個被傳送的訊息都能夠被正確的投遞 a2.資訊接收者知道是誰傳送的訊息 a3.能夠知道缺少的...

漫畫 什麼是拜占庭將軍問題

接觸區塊鏈的同學,多少都聽說過拜占庭將軍問題,經常看到或聽到某某區塊鏈使用某某演算法解決了拜占庭將軍問題,那麼究竟什麼是拜占庭將軍問題呢?也被稱為 拜占庭容錯 拜占庭將軍問題 拜占庭將軍問題是leslie lamport 2013年的圖靈講得主 用來為描述分布式系統一致性問題 distributed...