拜占庭帝國即中世紀的土耳其,擁有巨大的財富,周圍10個鄰邦垂誕已久,但拜占庭高墻聳立,固若金湯,沒有壹個單獨的鄰邦能夠成功入侵。任何單個鄰邦入侵的都會失敗,同時也有可能自身被其他9個鄰邦入侵。拜占庭帝國防禦能力如此之強,至少要有十個鄰邦中的壹半以上同時進攻,才有可能攻破。
然而,如果其中的壹個或者幾個鄰邦本身答應好壹起進攻,但實際過程出現背叛,那麽入侵者可能都會被殲滅。
於是每壹方都小心行事,不敢輕易相信鄰國。這就是拜占庭將軍問題。
在拜占庭問題中,最重要的point就是: 所有將軍如何達成壹致攻打拜占庭的***識 ,這當中,可能出現的情況舉例如下:
用壹個模型解釋壹下:
假設只有3個人,A、B、C,三人中如果其中壹個是叛徒。當A發出進攻命令時,B如果是叛徒,他可能告訴C,他收到的是“撤退”的命令。這時C收到壹個“進攻”,壹個“撤退“,於是C被信息迷惑,而無所適從。
如果A是叛徒。他告訴B“進攻”,告訴C“撤退”。當C告訴B,他收到“撤退”命令時,B由於收到了司令“進攻”的命令,而無法與C保持壹致。
正由於上述原因,在只有三個角色的系統中,只要有壹個是叛徒,即叛徒數等於1/3,拜占庭問題便不可解。
可以看得出, 只要叛徒的數量大於或等於1/3,拜占庭問題不可解
從技術上理解, 拜占庭將軍問題是分布式系統容錯性問題 。加密貨幣建立在P2P網絡之上,是典型的分布式系統,類比壹下, 將軍就是P2P網絡中的節點,信使就是節點之間的通信,進攻還是撤退的決定就是需要達成的***識 。 如果某臺獨立的節點計算機拓機、掉線或攻擊網絡搞破壞,整個系統就要停止運行,那這樣的系統將非常脆弱,所以容許部分節點出錯或搞破壞而不影響整個系統運行是必要的 , 這就需要算法理論上的支撐,保證分布式系統在壹定量的錯誤節點存在的情況下,仍然保持壹致性和可用性 。
而且,拜占庭將軍與兩軍問題不同,前者假定信差沒有問題,只是將軍出現了叛變等問題;後者研究信差的通信問題。
終極解決方案到了——
如果 10個將軍中的幾個同時發起消息,勢必會造成系統的混亂,造成各說各的攻擊時間方案,行動難以壹致 。
誰都可以發起進攻的信息,但由誰來發出呢?中本聰巧妙地在個系統加入了 發送信息的成本 ,即:
它加入的 成本就是”工作量“ —— 節點必須完成壹個計算工作才能向各城邦傳播消息 ,當然,誰第壹個完成工作,誰才能傳播消息。(這也是 工作量證明機制的意義:以檢驗結果的方式證明妳過去所做過了多少工作 )
這種加密技術——非對稱加密,完全可以解決古代難以解決的簽名問題:
中本聰在設計比特幣時,它采用了壹種工作量證明機制叫哈希現金,在壹個交易塊這要找到壹個隨機數,計算機只能用窮舉法來找到這個隨機數,可以說,能不能找到全靠運氣,所以對於各個節點來說,這個世界上,只有隨機才是真正的公平,實現隨機的最好辦法是使用數學,所有的將軍在尋找***識的過程,借助了大家都認可的數學邏輯。
當然了, 憑什麽要義務進行計算工作,那麽肯定要有壹個激勵機制 :比特幣的獎勵機制是每打包壹個塊,目前是獎勵25個比特幣,而拜占庭將軍問題的獎勵機制可以是瓜分拜占庭獲得的利益。
在這個分布式網絡裏:
每個將軍都有壹份實時與其他將軍同步的消息賬本 。
賬本裏有每個將軍的簽名都是可以驗證身份的。 如果有哪些消息不壹致,可以知道消息不壹致的是哪些將軍 。
盡管有消息不壹致的,只要超過半數同意進攻,少數服從多數,***識達成(只要大多數是好人,那麽就可以實現***識)。
區塊鏈上的***識機制主要解決 由誰來構造區塊 ,以及 如何維護區塊鏈統壹 的問題。
拜占庭容錯問題需要解決的也同樣是 誰來發起信息 ,如何 實現信息的統壹同步 的問題。
註:區塊鏈學習新人,若有不正確的地方,望指出