拜占庭將軍問題是學習比特幣技術(shù)一個繞不開的話題。下次聽別人談起拜占庭,你也可以過去侃兩句啦。
什么是拜占庭將軍問題?
拜占庭將軍問題(Byzantine failures),是由計算機科學史上的傳奇人物萊斯利·蘭伯特提出的。主要針對點對點通信中的基本問題——分布式系統(tǒng)一致性問題。
是不是有種不明覺厲的感覺?完全聽不懂??!
別著急,繼續(xù)往下看唄。
蘭伯特說:故事讓問題變得受歡迎。所以,拜占庭將軍問題,是蘭伯特在研究分布式系統(tǒng)容錯性時,編的一個故事:
拜占庭帝國想要進攻一個無比強大的敵人,派出了10支軍隊去包圍這個敵人。由于這樣那樣的原因,這10支軍隊不能集合在一起進攻,必須分開駐扎,然后同時發(fā)起攻擊。
而這個敵人十分的強大,可以同時抵抗5支拜占庭軍隊的襲擊。拜占庭軍隊里的任何一支,想要單獨進攻的話,都毫無勝算。除非至少超過一半(即6支及以上的軍隊)同時進攻,才能打敗敵人。軍隊分散在敵人的四周,依靠通信兵來相互傳遞消息:商量“要不要進攻”和“什么時候進攻”。
(因為存在消息丟失的不可靠信道上,試圖通過消息傳遞來達到一致性,是不可能的。所以,在研究拜占庭將軍問題的時候,我們已經(jīng)假定了信道是沒有問題的。即所有的通信兵是靠譜的,沒有叛徒。)
那么問題來了,如果將軍里有叛徒,那么這個叛徒將軍可能發(fā)送錯誤消息。比如:告訴其中4只軍隊要進攻,然后告訴另外5只軍隊不進攻,然后只有4只軍隊同時進攻,吃了敗仗。剩下5只軍隊,也無法戰(zhàn)勝這個強大的敵人。最后拜占庭軍隊戰(zhàn)敗。叛徒真的面黑心黑。
在這種狀態(tài)下,拜占庭將軍們,能不能找到一種分布式的協(xié)議,讓他們能夠遠程協(xié)商,保證多于6支軍隊在同時發(fā)起進攻?從而打贏這場仗?
計算機科學中,有類似的問題,比如安全漏洞。
系統(tǒng)中的不同節(jié)點,會對觀察者提供不同的信號。在不知道這些信息是否損壞的情況下,如何交換信息?
比特幣和拜占庭將軍問題有什么關系?
比特幣解決了網(wǎng)絡中存在的拜占庭將軍問題。
比特幣解決了分布式系統(tǒng)信息不一致的問題。
眾所周知,比特幣是一個分散網(wǎng)絡,一個個節(jié)點,一個個礦工,就像包圍敵人的拜占庭將軍們。
而礦工記錄的區(qū)塊信息是否真實?會不會造假人?如何判斷?
作惡的礦工造假賬,就像混進了軍隊里的的叛徒。他們會跟其他節(jié)點說,他們的假信息是真的,他們記的假賬也是真的。叛徒混了進來,會破壞整個比特幣網(wǎng)絡的真實性和有效性。
大神中本聰解決了這個問題。
首先,大神在設計比特幣時,采用了工作量證明機制(PoW)。礦工需要找到一個正確的隨機數(shù),才能記賬。而隨機數(shù)是大家認可的數(shù)學邏輯,隨機嘛,誰都控制不了。這樣,所有的礦工(將軍)達成共識,投身于轟轟烈烈的挖礦事業(yè)中。
其次,造假成本高,真實有獎勵。礦工挖礦,要耗費越來越多的時間、電力、資源,造假成本太高。而新幣獎勵,也激勵著礦工真實記賬。
第三,每個節(jié)點(將軍)手里,都有一份實時與其他節(jié)點同步的賬本,而且賬本有時間戳加持,有簽名驗證身份,如果誰造假,可以非常清楚何人何時造假。
最后,當意見不一致,只要大多數(shù)人(超過50%)的人同意,少數(shù)服從多數(shù),在分散式網(wǎng)絡中共識達成。只要好節(jié)點是大多數(shù),整個比特幣網(wǎng)絡的記賬就是真實的。
來源: 區(qū)塊鏈研習社?