各位圈友好!我是你的老朋友,力場日更營成員峰嵐泛舟,與你一道共度鏈賺時光。
寫在前面
有時就是這樣,不去了解的時候,會覺得很神秘,當漸漸深入之后,越發覺得神秘,但盡管如此,個人覺得這才是生活該有的模樣,哈哈!在我們對區塊鏈概念及特征了解之后,今天我接著與圈友學習分享《區塊鏈——從數字貨幣到信用社會》區塊鏈工作原理之拜占庭將軍問題。
峰嵐學習認識
關于拜占庭將軍問題,這是一個容錯計算中的經典問題,1982年由萊斯利·蘭伯特(Leslie Lamport)等人提出。
PS:拜占庭帝國存在于公元5~15世紀的東羅馬帝國,即現在的土耳其所處領域。
話說拜占庭城邦擁有無與倫比的財富,十分富足,這也使與之相鄰的十個鄰邦覬覦垂涎。但是拜占庭高墻聳立,防御更是固若金湯,任何一個心存妄念的鄰邦若想單獨入侵,成功是妄想,失敗是必然;單獨行動的入侵者會被殲滅,同時其自身老巢也極易遭受其他九個城邦的反入侵。
這些鄰邦之間也互相覬覦對方的財富并經常爆發戰爭,彼此之間。拜占庭的防御能力如此之強,十個鄰邦中須有至少一半同時參與進攻,才能將城池攻破。換句話來說,就是只要6個或者更多鄰邦一起攜手進攻,就會取得成功并獲得拜占庭的財富。
當然愿望總不完全如此,只要其中有1個或者更多鄰邦心生別念頭出現背叛,允諾一起入侵但在其他人進攻的時候又不干了,就會導致只有五支或者更少的軍隊在同時進攻,那么所有的進攻軍隊都將會被殲滅,且隨后被其他鄰邦所劫掠。沒有信任保障、各自打著自己小九九的同盟,看看是多么的不堪。
這是一個由不互相信任的各個鄰邦(節點)構成的分布式網絡,每一方都如履薄冰、小心行事,因為只要稍有不慎,就可能會給自己帶來滅頂之災??蔀榱双@取拜占庭的巨額財富,這些鄰邦分散在拜占庭的周圍,依靠士兵相互通信來協商進攻目標及進攻時間。
這些鄰邦將軍們想要攻克拜占庭,都會面臨著一個問題困擾,那就是不確定領邦中是否有被叛者,叛徒可能擅自變更進攻意向或者調整進攻時間。
在這種狀態下,將軍們能否找到一種分布式協議進行遠程協商,進而贏取拜占庭城堡攻克戰役的勝利呢?這就是拜占庭將軍問題。
針對拜占庭將軍問題,有人提出兩套解決方法:口頭協議算法、書面協議算法。
口頭協議算法:
在確保每條發送的消息都能被正確投遞,信息接收者知曉消息發送者的身份,也知道缺少的消息信息的情況下。采用口頭協議算法,只要背叛者數少于1/3,則拜占庭將軍問題可解。也就是說,若叛徒數為m,當將軍總數n至少為3m+1時(m=2,則n=3x2+1=7),問題可解??墒?,口頭協議算法存在明顯的缺點,那就是消息不能追根溯源。(一句話口說無憑,誰說我沒出力,拿證據來呀)
書面協議算法:
信息需要共同認可的簽名,同時該算法要求簽名不可偽造(有公認的防偽標識及特征),一旦被篡改即可發現,同時任何人都可以驗證簽名的可靠性。書面協議算法在口頭協議基礎上雖有優化,但也不能完全解決拜占庭將軍問題。因為該算法沒有考慮到信息傳輸時延、其簽名體系難以實現,且簽名消息記錄的保存難以擺脫中心化機構。(一句話誰來搭建主動承擔及防范中心化作惡)
那么我們來看看區塊鏈是如何來解決這個問題的呢?
在發送信息中導入了成本概念,從而降低信息傳遞的速率,并加入一個隨機數以保證在一段時間內只有一個礦工(授權的士兵)可以進行傳播。這個加入的成本就是“工作量”,區塊鏈礦工必須完成一個隨機哈希算法的計算工作量才能向各城邦傳播消息。
即:當用戶向網絡輸入一筆交易的時候,內嵌在客戶端的標準公鑰加密工具,為這筆交易簽名,這好比拜占庭將軍問題中用來簽名和驗證消息時使用的“密印”。
通過哈希計算速率的限制,加上公鑰加密,使一個不可信網絡變成了一個可信的網絡,使所有參與者可以在某些事情上達成一致。(有沒有感覺到,在一套可信任系統里,完成接頭暗語傳遞秘密信息的味道,哈哈!)
有關拜占“庭將軍問題”的區塊鏈解決方案,實際上可以推廣到任何在分布式網絡上缺乏信任的領域,比如說域名、投票選舉或其他需要分布式協議的地方。
尾巴小結
峰嵐認為以上雖是談拜占庭問題的解決方案,實則是在尋求一種不被人為因素所干擾的信任共識機制!就追求極簡的人來講,還是顯得有些繁瑣冗長,但這對于信任的價值、有效制衡背叛的代價又是值得的。
*以上文字理解與表述,基于峰嵐認知,難免有不妥不當之處,敬請場東諒解指正,謝謝!