區(qū)塊鏈能否解決拜占庭將軍的問(wèn)題
拜占庭將軍問(wèn)題(Byzantine Generals Problem)是由萊斯利·蘭波特(Leslie Lamport)與另外兩人在1982年提出的一個(gè)虛擬模型,并由此引申到計(jì)算領(lǐng)域,提出了分布式對(duì)等網(wǎng)絡(luò)的通信容錯(cuò)問(wèn)題。
1.問(wèn)題描述
引用一個(gè)經(jīng)典的例子,相距甚遠(yuǎn)的拜占庭將軍分別率領(lǐng)一支軍隊(duì)要共同圍困一座城市,將軍間必須通過(guò)投票來(lái)達(dá)成一致行動(dòng)(進(jìn)攻或撤退)。
每位將軍都將自己“進(jìn)攻”或“撤退”的決定通過(guò)信使分別通知其他將軍,然后每位將軍根據(jù)所有的消息決定進(jìn)攻還是撤退。
但是,當(dāng)將軍中出現(xiàn)“叛徒”時(shí),情況就變復(fù)雜了。叛徒不僅可以投票給錯(cuò)誤的決策,還可能會(huì)選擇性地發(fā)送投票,叛徒的存在會(huì)影響一致性的建立。
如何在軍中可能有叛徒傳遞錯(cuò)誤消息的情況下,保障忠誠(chéng)的將軍行動(dòng)一致,這就是拜占庭將軍問(wèn)題。
拜占庭將軍問(wèn)題的前提是假定消息傳遞的信道絕對(duì)可靠(即不存在兩軍問(wèn)題),在這個(gè)前提下,拜占庭將軍問(wèn)題的實(shí)質(zhì)就是“一致性”和“正確性”。
“一致性”指所有忠誠(chéng)將軍的行為一致;“正確性”指的是每個(gè)忠誠(chéng)的將軍都真實(shí)的表達(dá)了自己的消息。
2.傳統(tǒng)解決方法
在經(jīng)典場(chǎng)景中,解決拜占庭將軍問(wèn)題有兩種方法,口頭協(xié)議和書(shū)面協(xié)議。采用口頭協(xié)議,若叛徒數(shù)少于1/3,則拜占庭將軍問(wèn)題可解。
使用口頭協(xié)議的傳遞消息時(shí),每位將軍除了給其他將軍傳遞消息, 還會(huì)將自己收到的消息分別轉(zhuǎn)給其他將軍,最后每位將軍根據(jù)收到的所有消息選擇與大多數(shù)將軍的行為保持一致。使用口頭協(xié)議時(shí),不能溯源,知道有叛徒也不能確定誰(shuí)是叛徒。
書(shū)面協(xié)議規(guī)定在發(fā)送消息時(shí)添加發(fā)送者的簽名,偽造簽名會(huì)被發(fā)現(xiàn)并且任何人可以驗(yàn)證簽名的可靠性,這使得消息可以追本溯源。
采用書(shū)面協(xié)議,叛徒人數(shù)多于1/3時(shí),拜占庭將軍問(wèn)題仍然有解。書(shū)面協(xié)議真正的實(shí)現(xiàn)需要考慮諸多問(wèn)題,比如可信的簽名體系等。
3.區(qū)塊鏈解決方法
隨著時(shí)代的發(fā)展和技術(shù)的完善,區(qū)塊鏈站在巨人的肩膀上提出了拜占庭將軍問(wèn)題的解決方案--共識(shí)機(jī)制和非對(duì)稱加密技術(shù)。
共識(shí)機(jī)制使得一段時(shí)間內(nèi)只有一個(gè)節(jié)點(diǎn)發(fā)送消息,其他節(jié)點(diǎn)驗(yàn)證即可。由于區(qū)塊鏈消息全網(wǎng)廣播,故各個(gè)節(jié)點(diǎn)接收到的消息是一致的。(訪問(wèn)鏈接:有聲閱讀||分布式信仰的基礎(chǔ)--共識(shí)機(jī)制,了解更多共識(shí)機(jī)制相關(guān)內(nèi)容)
非對(duì)稱加密技術(shù)保護(hù)消息內(nèi)容, 同時(shí)讓消息接收方確定發(fā)送方的身份。A發(fā)給B的消息通過(guò)B的公鑰加密,B通過(guò)私鑰解密。
若A想申明自己的身份,只需要將消息使用自己的私鑰進(jìn)行簽名即可,B收到消息后就可以使用A的公鑰驗(yàn)證消息的來(lái)源。
由此,一個(gè)不可信的分布式網(wǎng)絡(luò)變成了一個(gè)可信的網(wǎng)絡(luò),所有的參與者可以在某件事達(dá)成一致。