了解過比特幣和區塊鏈的人,多少都聽說過拜占庭將軍問題,或聽說過比特幣(或區塊鏈)的一個重要成就正是解決了拜占庭將軍問題。 看到這個詞語時,我曾經一度認為有一位名叫拜占庭的將軍帶領著一支龐大的軍隊打仗時遇到了難題,但查閱了一些資料后,發現實際上并沒有拜占庭將軍,也沒有這場戰爭,完全是計算機專家假想出的問題。
拜占庭這個專有名詞取自于拜占庭帝國,又叫東羅馬帝國,其軍事力量很強大,地處現今歐洲的土耳其國家。 萊斯利·蘭伯特(Leslie Lamport),是微軟研究院的首席研究員,曾獲得2013年圖靈獎——計算機界的諾貝爾獎。這家伙覺得故事讓問題變得受歡迎,因此他在提出觀點和問題時常用故事背景吸引眼球,拜占庭將軍的故事就是蘭伯特在研究分布式系統容錯性的時候編出的一個故事。 論文中的原文: We imagine that several divisions of theByzantine army are camped outside an enemy city, each division commanded by itsown general. The generals can communicate with one another only by messenger.After observing the enemy, they must decide upon a common plan of action.However, some of the generals may be traitors, trying to prevent the loyalgenerals from reaching agreement. 關于拜占庭將軍問題,一個簡易的非正式描述如下: 拜占庭帝國想要進攻一個強大的敵人,為此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵御5支常規拜占庭軍隊的同時襲擊。基于一些原因,這10支軍隊不能集合在一起單點突破,必須在分開的包圍狀態下同時攻擊。 他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通信兵相互通信來協商進攻意向及進攻時間。 這個問題的簡潔描述:這些將軍離得很遠,不能每遇到一個問題,就聚到一起開會商量對策,耽誤時機,拜占庭將軍們能否找到一種分布式的協議來讓他們能夠遠程協商,達成共識,執行共同的作戰計劃,來取得戰爭的勝利? 這就是著名的拜占庭將軍問題。 -------------------------------------------- 拜占庭將軍問題包含著兩軍問題,國內大量解釋拜占庭將軍問題的文章將兩者混為一談,這兩個問題看起來的確有點相似,但是問題的前提和研究方向都截然不同。 兩軍問題的難點: · 他們不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者 進攻時間。 · 信使在傳遞消息時可能會把信弄丟 · 信息可能會被敵國截獲 · 無法確定消息是否真的來自某位將軍 因此,拜占庭將軍問題的場景,是建立在信兵可以正確的傳達信息的基礎上的,即信道絕對可信。兩軍問題的探討更多是真假信道的實質。 把軍隊想像成計算機節點,把信使想像成計算機間的網絡通訊,攻占敵軍就是寫入一個大家公認的區塊記錄。 區塊鏈技術在發送信息中加入了成本,降低了信息傳遞的速率,并采用了工作量證明(PoW),即一個節點必須經過大量嘗試性計算才能得出一個結果,而其它節點只需極少的時間就能證明其真偽,這樣能夠減少垃圾消息、假消息在節點間傳播的狀況。 挖礦節點把一段時間內的交易信息打包成一個區塊,蓋上時間戳,與上一個區塊銜接在一起,每個區塊都包含了上一個區塊的索引(哈希值),然后再寫入新的信息,從而形成新的區塊,首尾相連,最終形成了區塊鏈。 用工作量證明、公鑰加密等技術,使比特幣網絡從一個去中心化的不可信網絡變為可信網絡,使所有參與者可以在某些事情上達成一致,使價值傳遞成為了可能。 如果10個將軍中的幾個同時發起消息,勢必會造成系統的混亂,造成各說各的攻擊時間方案,行動難以一致。 中本聰巧妙地在個系統加入了發送信息的成本,即:一段時間內只有一個節點可以傳播信息。 它加入的成本就是”工作量“——節點必須完成一個計算工作才能向各城邦傳播消息,當然,誰第一個完成工作,誰才能傳播消息。 當某個節點發出統一進攻的消息后,各個節點收到發起者的消息必須簽名蓋章,確認各自的身份。中本聰在這里引用現代加密技術為這個信息簽名。 · 消息傳送的私密性 · 能夠確認身份 · 簽名不可偽造、篡改 由此,一個不可信的分布式網絡變成了一個可信的網絡,所有的參與者可以在某件事在達成一致。 使用消息加密技術、以及公平的工作量證明機制,創建了一組所有將軍都認可的協議,這套協議的出現,拜占庭將軍問題也就完美的得到了解決。
|
|