拜占庭將軍問題:如何在互不信任的環境下,達成有效共識?

想全面瞭解區塊鏈,就必須瞭解拜占庭將軍問題,這也是區塊鏈共識機制所要解決的核心問題之一。

拜占庭將軍問題:如何在互不信任的環境下,達成有效共識?

為了讓大家更好的理解,先說一段我曾經職場經歷。

剛從大學畢業不久,我到了一家郭企子公司做業務。我所在部門一共6個人,5位普通員工,1位主管。主管老P是個職場老油條,最擅長欺下瞞上,暗地裡做了不少見不得人的勾當,但公司卻毫不知情。

終於有一天,同事小W看不下去了,把我們5個人聚在一起說:“後天的例會上,我要向領導揭發老P,到時候我牽頭髮言,你們附和就行,怎麼樣?”

年輕氣盛的我早就看老P不順眼,於是第一個答應:沒問題!其他3位互相看了看,也點點頭說:好吧。由此,我們達成了所謂的“共識”。

例會上,小W義正言辭的控訴老P六大罪狀,我也跟著附和了幾句,但萬沒想到的是,另外3人卻背叛了我們。

他們一邊和稀泥,一邊為老P說話:他這麼做也是為公司好,年輕人要體諒老同志嘛!小W當時臉都綠了,我的內心也有一萬匹草泥馬呼嘯而過......

隨後,我倆就從公司離職了。

這段悲慘的職場經歷,其實就是個典型的“拜占庭將軍問題”。

什麼是拜占庭將軍問題?

拜占庭將軍問題,是由美國計算機學家萊斯利•蘭伯特於上世紀80年代提出的,本質上描述的是信息傳遞中的信任問題。

中世紀的拜占庭帝國富得流油,周圍10個鄰邦國垂誕不已。但拜占庭固若金湯,任何一個鄰邦單獨入侵必定失敗,同時也有可能被其他9個鄰邦趁機入侵。由於拜占庭帝國城防堅不可摧,10個鄰邦中至少要有6國同時參與進攻,才可能攻破。

拜占庭將軍問題:如何在互不信任的環境下,達成有效共識?

拜占庭問題假設將軍們通過“信使”傳達進攻信息,而非點對點直接通信。

假如一個或幾個鄰邦答應一起進攻,但最後卻出現叛徒(就好像上面我那個職場的例子),那麼進攻者就會被拜占庭全部殲滅。雖然鄰邦的將軍都想攻進拜占庭,但他們面臨共同的困擾,就是不確定中間是否有叛徒,因為叛徒可以擅自改變、偽報進攻或撤退的命令。

拜占庭將軍問題:如何在互不信任的環境下,達成有效共識?

問題來了,如果每個城邦向其他九個城邦派出一名信使,意味著這十個城邦每個都派出了九名信使,也就是在任何一個時間,都有總計九十次的信息傳輸,並且每個城市分別收到九條信息,可能每一條都寫著不同的進攻時間。

而如果叛徒想要破壞原有的約定時間,就會自己修改相關信息,然後發給其他城邦以混淆視聽,遵循錯誤信息的城邦將重新廣播一條錯誤信息鏈,原本正確的信息鏈,會隨著他們所發送的錯誤信息,變成攻擊時間與攻擊指令相互矛盾的糾結體。

拜占庭將軍問題:如何在互不信任的環境下,達成有效共識?

於是,每個鄰國的將軍都疑神疑鬼,彼此無法達成有效共識——這就是拜占庭將軍問題。

解決問題的終極方法:區塊鏈共識機制

我們可以把這些鄰國,看成一個由互不信任的多個節點組成的分佈式網絡。

解決拜占庭問題的傳統方法主要有兩種:口頭協議算法、書面協議算法。但這兩種算法都存在顯著的缺陷,前者無法做到信息的溯源,後者無法解決信息傳輸延時、簽名記錄中心化存儲的問題。

直到密碼學家中本聰的出現,困擾多年的拜占庭將軍問題才得以解決。

拜占庭將軍問題:如何在互不信任的環境下,達成有效共識?

其實中本聰只做出了一個簡單的變化,即在發送信息的過程中引入了“成本”,並加入了一個隨機元素,以保證在一個時間只有一個城邦可以進行廣播。

這個所謂的“成本”就是“工作量證明”(即挖礦),並且工作量證明是基於計算一個隨機哈希值。任何節點(城邦)必須完成一個計算工作之後,才能向其他節點傳播消息,誰第一個完成工作,誰最先傳播消息。當某節點發出“進攻”的消息後,各個節點收到消息猴必須簽名蓋章,確認各自的身份。在這裡,中本聰又引入了“非對稱加密”技術為信息簽名。

我們在之前的文章中提到過過非對稱加密,講過私鑰和公鑰。簡單來說,憑藉非對稱加密技術,可以有效保護消息內容, 讓消息接收者能夠確定發送方的身份。

拜占庭將軍問題:如何在互不信任的環境下,達成有效共識?

比如,將軍A給將軍B發送進攻消息,為防止消息洩露,將軍A只需要用B的公鑰為信息加密,然後B用只有他自己才能使用的私鑰解密,驗證有效哈希值和附加的簽名和時間戳信息即可。將軍B可以寫一段”簽名文本“來證明自己的身份,用私鑰簽名並廣播出去,其他城邦可用B的公鑰來驗證該簽名,確定B的身份。

隨後,將軍B發給將軍C時,會在原來的消息上加入將軍B已查閱該信息的記錄,並加蓋時間戳。其他將軍接受消息後,重複此流程直至所有城邦都收到消息。

如果叛徒想要修改進攻信息,其他城邦會立刻識到無法通過加密技術驗證的異常信息,同步的虛假信息將不被認可。而且叛徒無法破壞10個城邦中的至少6個,也就是無法破壞大部分的節點,這樣信息的一致性就得到了保證。

拜占庭將軍問題:如何在互不信任的環境下,達成有效共識?

由此,一個不可信的分佈式網絡變成了一個可信的網絡,所有的參與者可以在某件事在達成共識。

區塊鏈的共識機制通過不斷同步各個節點的信息,使得各分佈式節點之間達成一種平衡,保證了絕大多數節點的一致性,即達成了共識。這就是區塊鏈共識機制為何如此的特別和關鍵,它是區塊鏈技術最核心的解決方案。

下次,我們將聊聊區塊鏈共識機制的發展與變遷。


分享到:


相關文章: