拜占庭将军问题与中本聪
拜占庭將軍問(wèn)題很多人可能聽過(guò),但不知道是什么意思,本文從非專業(yè)的角度來(lái)講講,拜占庭將軍問(wèn)題到底是說(shuō)什么的。
拜占庭將軍問(wèn)題(Byzantine Generals Problem),首先由Leslie Lamport與另外兩人在1982年提出,很簡(jiǎn)單的故事模型,卻困擾了計(jì)算機(jī)科學(xué)家們數(shù)十年。
故事大概是這么說(shuō)的:
拜占庭帝國(guó)即中世紀(jì)的土耳其,擁有巨大的財(cái)富,周圍10個(gè)鄰邦垂誕已久,但拜占庭高墻聳立,固若金湯,沒(méi)有一個(gè)單獨(dú)的鄰邦能夠成功入侵。任何單個(gè)鄰邦入侵的都會(huì)失敗,同時(shí)也有可能自身被其他9個(gè)鄰邦入侵。拜占庭帝國(guó)防御能力如此之強(qiáng),至少要有十個(gè)鄰邦中的一半以上同時(shí)進(jìn)攻,才有可能攻破。然而,如果其中的一個(gè)或者幾個(gè)鄰邦本身答應(yīng)好一起進(jìn)攻,但實(shí)際過(guò)程出現(xiàn)背叛,那么入侵者可能都會(huì)被殲滅。于是每一方都小心行事,不敢輕易相信鄰國(guó)。這就是拜占庭將軍問(wèn)題。在拜占庭問(wèn)題里,各鄰國(guó)最重要的事情是:所有將軍如何能過(guò)達(dá)成共識(shí)去攻打拜占庭帝國(guó)。
達(dá)成共識(shí)并非坐下來(lái)開個(gè)會(huì)那么簡(jiǎn)單,有的將軍心機(jī)深不可測(cè),口是心非,如果有叛徒,可能會(huì)出現(xiàn)各種問(wèn)題:
叛徒可能欺騙某些將軍自己將采取進(jìn)攻行動(dòng)。 叛徒可能慫恿其他將軍行動(dòng)。 叛徒可能迷惑其他將軍,使他們接受不一致的信息,從而感到迷惑。針對(duì)拜占庭問(wèn)題的深入研究,科學(xué)家們得出一個(gè)結(jié)論:如果叛徒的數(shù)量大于或等于1/3,拜占庭問(wèn)題不可解。
解釋過(guò)程可以用一個(gè)副官模型來(lái)解釋:
假設(shè)只有3個(gè)人,A、B、C,三人中如果其中一個(gè)是叛徒。當(dāng)A發(fā)出進(jìn)攻命令時(shí),B如果是叛徒,他可能告訴C,他收到的是“撤退”的命令。這時(shí)C收到一個(gè)“進(jìn)攻”,一個(gè)“撤退“,于是C被信息迷惑,而無(wú)所適從。如果A是叛徒。他告訴B“進(jìn)攻”,告訴C“撤退”。當(dāng)C告訴B,他收到“撤退”命令時(shí),B由于收到了司令“進(jìn)攻”的命令,而無(wú)法與C保持一致。正由于上述原因,在只有三個(gè)角色的系統(tǒng)中,只要有一個(gè)是叛徒,即叛徒數(shù)等于1/3,拜占庭問(wèn)題便不可解。當(dāng)然,只要叛徒數(shù)小于1/3,問(wèn)題還是可解的。
科學(xué)家們提出了口頭信息方案和書面協(xié)議兩個(gè)方案。
解決方案一:用口頭信息
口頭信息即使將軍們派人用口信傳達(dá)消息,口頭傳達(dá)消息的實(shí)際含義指的是:
每個(gè)被發(fā)送的消息都能夠被正確投遞 信息接受者知道消息是誰(shuí)發(fā)的 沉默(不發(fā)消息)可以被檢測(cè)口頭協(xié)議的算法很簡(jiǎn)單,如果其中一個(gè)節(jié)點(diǎn),比如1發(fā)布消息出去,210都接受到1的消息,然后210也分別轉(zhuǎn)告給其他的節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都是信息的轉(zhuǎn)達(dá)者,一輪下來(lái),每個(gè)節(jié)點(diǎn)手上都會(huì)有10個(gè)信息(進(jìn)攻或者撤退),有叛徒的話,那信息可能有進(jìn)攻或者不進(jìn)攻的不一致消息。每個(gè)人相當(dāng)于手里有一本消息的賬本,該怎么決策呢?如果有一半以上的人說(shuō)進(jìn)攻,那么采取進(jìn)攻行動(dòng)就是能成功的,所以這時(shí)即便有叛徒,只要聽大部分人的,少數(shù)服從多數(shù)來(lái)行動(dòng)即是有利的。
這種口頭協(xié)議的算法也存在明顯的缺點(diǎn):口頭協(xié)議并不會(huì)告知消息的上一個(gè)來(lái)源是誰(shuí),也就是消息不可追根溯源,出現(xiàn)信息不一致也很難找到叛徒在哪。
解決方案二:用書面協(xié)議
可以假設(shè)10個(gè)國(guó)家,每個(gè)國(guó)家都可以派人向各個(gè)國(guó)家派信,比如一起約定 “某天早上六點(diǎn),大家一起進(jìn)攻拜占庭,同意就簽個(gè)字”。收到信的國(guó)家如果同意的話,就可以在原信上簽名蓋章。
書面協(xié)議相比口頭協(xié)議,實(shí)際說(shuō)的是在這個(gè)多人的將軍模型中加了了個(gè)隱含條件:
將軍們能夠使用簽名技術(shù),簽名不可偽造,一旦篡改即可發(fā)現(xiàn)。 同時(shí)任何人都可以驗(yàn)證簽名的可靠性。書面協(xié)議相比口頭協(xié)議,所有的消息都是有記錄的,解決了追根溯源的問(wèn)題。
但在現(xiàn)實(shí)中仍然可能面臨各種問(wèn)題:
中世紀(jì)的鄰邦之間溝通只能靠信使騎馬,將軍們互不信任,也不可能親自聚在一起開會(huì),物理距離導(dǎo)致信息傳輸延遲。真正可信的簽名體系難以實(shí)現(xiàn)。簽名造假的問(wèn)題也沒(méi)法避免。簽名消息記錄的保存難以擺脫中心化的機(jī)構(gòu)。另外,倘若每個(gè)國(guó)家都各自向其他9個(gè)國(guó)家派出信使,在這個(gè)網(wǎng)絡(luò)即需要90次的傳輸才能完成一輪信息交流,但是每個(gè)國(guó)家可能回饋不同的進(jìn)攻時(shí)間,在這種異步通信的條件下,要能協(xié)商一致是個(gè)大問(wèn)題。
也就是如果能夠依賴中心化可信的機(jī)構(gòu),也許能通過(guò)多方的簽名記錄整合在一起,更容易地實(shí)現(xiàn)9個(gè)國(guó)家的意見統(tǒng)一,但這是個(gè)偽假設(shè),因?yàn)榍疤崾沁@個(gè)網(wǎng)絡(luò)就是互不信任的。
這就是一個(gè)由互不信任的各個(gè)鄰邦國(guó)家所構(gòu)成的分布式網(wǎng)絡(luò),要獲得最大的利益,又必須一起努力才能完成,如何達(dá)成一致的共識(shí),變成了一個(gè)難題。
萊斯利·蘭伯特提出了“拜占庭將軍問(wèn)題”,但真正解決這以難題的是——中本聰。
終極解決方案:區(qū)塊鏈技術(shù)
互聯(lián)網(wǎng)的存在,首先降低了信息的流通成本。每個(gè)將軍配一臺(tái)電腦,就解決了”書面協(xié)議“中騎馬通訊造成時(shí)間延遲的問(wèn)題。
如果10個(gè)將軍中的幾個(gè)同時(shí)發(fā)起消息,勢(shì)必會(huì)造成系統(tǒng)的混亂,造成各說(shuō)各的攻擊時(shí)間方案,行動(dòng)難以一致。
誰(shuí)都可以發(fā)起進(jìn)攻的信息,但由誰(shuí)來(lái)發(fā)出呢?中本聰巧妙地在個(gè)系統(tǒng)加入了發(fā)送信息的成本,即:一段時(shí)間內(nèi)只有一個(gè)節(jié)點(diǎn)可以傳播信息。
它加入的成本就是”工作量“——節(jié)點(diǎn)必須完成一個(gè)計(jì)算工作才能向各城邦傳播消息,當(dāng)然,誰(shuí)第一個(gè)完成工作,誰(shuí)才能傳播消息。
當(dāng)某個(gè)節(jié)點(diǎn)發(fā)出統(tǒng)一進(jìn)攻的消息后,各個(gè)節(jié)點(diǎn)收到發(fā)起者的消息必須簽名蓋章,確認(rèn)各自的身份。中本聰在這里引用現(xiàn)代加密技術(shù)為這個(gè)信息簽名。
這種加密技術(shù)——非對(duì)稱加密完全可以解決古代難以解決的簽名問(wèn)題:
消息傳送的私密性 能夠確認(rèn)身份 簽名不可偽造、篡改非對(duì)稱加密算法的加密和解密使用不同的兩個(gè)密鑰.這兩個(gè)密鑰就是我們經(jīng)常聽到的”公開密鑰”(公鑰)和”私有密鑰”(私鑰).
公鑰和私鑰一般成對(duì)出現(xiàn), 如果消息使用公鑰加密,那么需要該公鑰對(duì)應(yīng)的私鑰才能解密; 同樣,如果消息使用私鑰加密,那么需要該私鑰對(duì)應(yīng)的公鑰才能解密.
非對(duì)稱加密的作用是:保護(hù)消息內(nèi)容, 并且讓消息接收方確定發(fā)送方的身份.
比如,將軍A想給將軍B發(fā)送消息,為防止消息泄露,將軍A只需要使用B的公鑰對(duì)信息加密,而B的公鑰是公開的,B只需要用只有他自己只的私鑰解密即可。
將軍B想要在信件上聲明自己的身份,他可以自己寫一段”簽名文本“,并用私鑰簽名,并廣播出去,所有人可以根據(jù)B的公鑰來(lái)驗(yàn)證該簽名,確定的B的身份。
由此,一個(gè)不可信的分布式網(wǎng)絡(luò)變成了一個(gè)可信的網(wǎng)絡(luò),所有的參與者可以在某件事在達(dá)成一致。
寫到這里,同時(shí)終于明白了工作量證明(Proof Of Work)的意義。有人說(shuō)挖礦浪費(fèi)了巨大的社會(huì)資源,但建立信任的成本可不是0,挖礦是維護(hù)比特幣網(wǎng)絡(luò)可靠性的最好辦法。
工作量證明,簡(jiǎn)單的理解就是一份證明,現(xiàn)實(shí)中的畢業(yè)證、駕駛證都屬于工作量證明,它用以檢驗(yàn)結(jié)果的方式證明你過(guò)去所做過(guò)了多少工作。
在拜占庭的系統(tǒng)里,加入工作量證明,其實(shí)就是簡(jiǎn)單粗暴地引入了一個(gè)條件:大家都別忙著發(fā)起消息,都來(lái)做個(gè)題,看誰(shuí)最聰明,誰(shuí)就有資格第一個(gè)發(fā)起消息。
這個(gè)題必須是絕對(duì)公平的,中本聰在設(shè)計(jì)比特幣時(shí),它采用了一種工作量證明機(jī)制叫哈希現(xiàn)金,在一個(gè)交易塊這要找到一個(gè)隨機(jī)數(shù),計(jì)算機(jī)只能用窮舉法來(lái)找到這個(gè)隨機(jī)數(shù),可以說(shuō),能不能找到全靠運(yùn)氣,所以對(duì)于各個(gè)節(jié)點(diǎn)來(lái)說(shuō),這個(gè)世界上,只有隨機(jī)才是真正的公平,實(shí)現(xiàn)隨機(jī)的最好辦法是使用數(shù)學(xué),所有的將軍在尋找共識(shí)的過(guò)程,借助了大家都認(rèn)可的數(shù)學(xué)邏輯。
如果不同的將軍先后解出了題,各自先后向這個(gè)網(wǎng)絡(luò)發(fā)布消息,于是各個(gè)節(jié)點(diǎn)都會(huì)收到來(lái)自不同節(jié)點(diǎn)發(fā)起的進(jìn)攻或者不進(jìn)攻的消息,那怎么辦的?只有時(shí)間最早的發(fā)起者才是有效的。中本聰巧妙的設(shè)計(jì)了一個(gè)時(shí)間戳的東西,為每個(gè)將軍在解好題的時(shí)間(出塊時(shí)間)蓋上時(shí)間印章。
將軍們那又憑什么要一起做工作量證明呢?中本聰也完全可以設(shè)置一個(gè)獎(jiǎng)勵(lì)機(jī)制,比特幣的獎(jiǎng)勵(lì)機(jī)制是每打包一個(gè)塊,目前是獎(jiǎng)勵(lì)25個(gè)比特幣,當(dāng)然,拜占庭將軍問(wèn)題的獎(jiǎng)勵(lì)機(jī)制可以是瓜分拜占庭獲得的利益。
對(duì)了,如果有出現(xiàn)背叛怎么辦?
在這個(gè)分布式網(wǎng)絡(luò)里:
每個(gè)將軍都有一份實(shí)時(shí)與其他將軍同步的消息賬本。 賬本里有每個(gè)將軍的簽名都是可以驗(yàn)證身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些將軍。 盡管有消息不一致的,只要超過(guò)半數(shù)同意進(jìn)攻,少數(shù)服從多數(shù),共識(shí)達(dá)成。由此,在一個(gè)分布式的系統(tǒng)中,盡管有壞人,壞人可以做任意事情(不受protocol限制),比如不響應(yīng)、發(fā)送錯(cuò)誤信息、對(duì)不同節(jié)點(diǎn)發(fā)送不同決定、不同錯(cuò)誤節(jié)點(diǎn)聯(lián)合起來(lái)干壞事等等。但是,只要大多數(shù)人是好人,就完全有可能去中心化地實(shí)現(xiàn)共識(shí)(Consensus)。
區(qū)塊鏈上的共識(shí)機(jī)制主要解決由誰(shuí)來(lái)構(gòu)造區(qū)塊,以及如何維護(hù)區(qū)塊鏈統(tǒng)一的問(wèn)題。
拜占庭容錯(cuò)問(wèn)題需要解決的也同樣是誰(shuí)來(lái)發(fā)起信息,如何實(shí)現(xiàn)信息的統(tǒng)一同步的問(wèn)題。
到這里也可以知道了,基于互聯(lián)網(wǎng)的區(qū)塊鏈技術(shù),它克服了口頭協(xié)議與書面協(xié)議的種種缺點(diǎn),使用消息加密技術(shù)、以及公平的工作量證明機(jī)制,創(chuàng)建了一組所有將軍都認(rèn)可的協(xié)議,這套協(xié)議的出現(xiàn),拜占庭將軍問(wèn)題也就完美的得到了解決。
偉大的創(chuàng)新往往是站在前人的肩膀上,中本聰就是各種前沿技術(shù)的整合者,古老的疑難雜癥在這種整合創(chuàng)新下,就變得不再是問(wèn)題了。
總結(jié)
以上是生活随笔為你收集整理的拜占庭将军问题与中本聪的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 两种拜占庭算法
- 下一篇: 一致性算法 - Raft