今日獻(xiàn)丑,給大家講一下拜占庭將軍問(wèn)題——保證通俗易懂。背景介紹拜占庭將軍問(wèn)題是一位名叫萊斯利·蘭伯特(Leslie Lamport)的高手(曾獲得圖靈獎(jiǎng))
今日獻(xiàn)丑,給大家講一下拜占庭將軍問(wèn)題——保證通俗易懂。
背景介紹
拜占庭將軍問(wèn)題是一位名叫萊斯利·蘭伯特(Leslie Lamport)的高手(曾獲得圖靈獎(jiǎng))在1982年提出的,關(guān)于點(diǎn)對(duì)點(diǎn)信息傳輸、系統(tǒng)容錯(cuò)等問(wèn)題。這個(gè)拜占庭將軍問(wèn)題一提出來(lái),大家覺(jué)得“嗯,以故事來(lái)講技術(shù)理論”很有意思。
幾乎每本關(guān)于比特幣的書都會(huì)講這個(gè)問(wèn)題,只是這個(gè)問(wèn)題翻譯到中國(guó)之后呢,講得有點(diǎn)詭異難懂。每個(gè)研究比特幣的人,都會(huì)看到拜占庭將軍問(wèn)題??纯春孟穸耍趾孟駴](méi)懂。那么,到底懂沒(méi)懂呢?答案是,沒(méi)懂。
拜占庭將軍問(wèn)題本身我認(rèn)為是一個(gè)好的引子,但并不算是一個(gè)好的故事,咱中國(guó)人不熟悉呀。一雙臭腳萬(wàn)人捧,時(shí)間長(zhǎng)了,似懂非懂也就這樣了。咱沒(méi)有人家萊斯利的水平,這個(gè)故事講給有計(jì)算機(jī)密碼學(xué)功底的人聽(tīng),是個(gè)好類比,對(duì)我們未必是。
軍師聯(lián)盟
今天我們從新解構(gòu)這個(gè)問(wèn)題,用大家熟知的三國(guó)故事更加細(xì)致地講解所謂的拜占庭將軍問(wèn)題。
把時(shí)間軸拉回到三國(guó)時(shí)代,咱們?cè)O(shè)定一個(gè)前提,當(dāng)時(shí)的時(shí)代背景下,只要一個(gè)書信文件是你寫下來(lái)的信息,有你的簽名和的蓋章就要認(rèn)賬,信譽(yù)很重要。再設(shè)定一個(gè)背景,當(dāng)時(shí)的老大是曹操,他軟禁了正牌兒的皇帝漢獻(xiàn)帝。曹操的都城周邊有十個(gè)將軍或者軍師,有諸葛亮、荀彧、郭嘉、孫策、徐庶等等軍師聯(lián)盟。這十個(gè)人呢,分居各地(如同分布式的節(jié)點(diǎn)),半數(shù)以上的人聯(lián)合的話就可以打敗曹操,商量著要不要打曹操。
當(dāng)時(shí)傳輸信息主要用的是信鴿飛來(lái)飛去,十個(gè)軍師之間飛鴿傳書,就是模擬點(diǎn)對(duì)點(diǎn)的信息傳輸。
這里面有兩個(gè)問(wèn)題:
第一,如果出現(xiàn)了奸細(xì),其實(shí),都不用出現(xiàn)奸細(xì),諸葛亮的信鴿飛到了郭嘉那里,郭嘉一看要打主公呀,我給你改成不打,再發(fā)出去。行不行?如何保證每一個(gè)節(jié)點(diǎn)不會(huì)篡改另一個(gè)節(jié)點(diǎn)發(fā)出的信息(所謂的惡意節(jié)點(diǎn)冒充正常節(jié)點(diǎn))?
第二,怎么樣保證每一個(gè)節(jié)點(diǎn)(軍師或?qū)④?信息的記錄是一致的?
第一個(gè)問(wèn)題怎么解決呢?用非對(duì)稱加密技術(shù)。
比如,諸葛亮說(shuō)要打曹操,對(duì)發(fā)出的信件蓋章簽名,這個(gè)過(guò)程是用自己的私鑰進(jìn)行加密;加完密之后,信鴿飛呀飛到郭嘉那里,郭嘉一看,要打主公呀,想改成不打曹操,但是看得見(jiàn)改不了呀。
第二個(gè)問(wèn)題呢,怎么保證每個(gè)節(jié)點(diǎn)(軍師或者將軍)記錄的信息是一樣的呢?
現(xiàn)在的問(wèn)題已經(jīng)不是打不打曹操的問(wèn)題,關(guān)鍵是大家記錄的軍令信息是一樣的。
比如,
諸葛亮的信息:下個(gè)月三號(hào)早上八點(diǎn)從岐山發(fā)兵進(jìn)攻曹操;
郭嘉:我不打曹操;
荀彧:曹丞相還不錯(cuò),先不要打;
魯肅:我走水路去打曹操;
司馬懿:我過(guò)三十年再打,兄弟們先上……
打不打都可以,但是大家記錄的這些信息需要一致。
每個(gè)軍師都有資格記錄軍令信息,那誰(shuí)記錄的為準(zhǔn)呢?設(shè)置一個(gè)數(shù)學(xué)題,然后誰(shuí)先算出來(lái)這個(gè)數(shù)學(xué)題呢誰(shuí)就來(lái)記錄信息。交給一個(gè)人來(lái)記錄然后發(fā)布給大家。誰(shuí)智商高,誰(shuí)算力大,誰(shuí)先算出數(shù)學(xué)題的概率就比較大。讓他來(lái)記這個(gè)信息,然后張貼告示英雄榜,讓大家都知道,誰(shuí)打誰(shuí)不打這些信息(類比比特幣的交易信息)。然后大家一看數(shù)學(xué)題都算出來(lái)了,這次的算數(shù)題就算了,開始爭(zhēng)取下張英雄榜算下一個(gè)題。
激勵(lì)機(jī)制
各位想想,我去發(fā)英雄榜(記賬、廣播)這是個(gè)勞動(dòng)呀,為什么還要我累死累活得去算數(shù)學(xué)題?這時(shí)候加入一個(gè)激勵(lì)機(jī)制。以比特幣原理為例,算出一個(gè)數(shù)學(xué)題挖出一個(gè)區(qū)塊,獎(jiǎng)勵(lì)50個(gè)BTC(四年獎(jiǎng)勵(lì)減半的事兒今天不講,簡(jiǎn)化模型)。三國(guó)時(shí)代,一位軍師每次先算出來(lái)數(shù)學(xué)題,記錄好信息并貼出告示發(fā)出英雄榜,就送你50錠金子或者50個(gè)美女或者50座城池——這其實(shí)類似比特幣發(fā)明人中本聰設(shè)計(jì)的激勵(lì)機(jī)制。
這個(gè)時(shí)候呢,大家就有積極性了,都去搶著算這個(gè)數(shù)學(xué)題,算出來(lái)后就記好信息,張貼英雄榜。這就是PoW工作量證明機(jī)制,用PoW工作量證明機(jī)制保證記錄的信息是一致的。
完美地解決了拜占庭將軍問(wèn)題。
招三千門客挖礦
故事進(jìn)行到這里,打不打曹操就更不重要了。這十個(gè)軍師呢,每個(gè)人都想就想去算數(shù)學(xué)題,然后記錄好信息,張貼這個(gè)告示發(fā)英雄榜(發(fā)布到全網(wǎng)),可以得到獎(jiǎng)勵(lì),50錠金子或50座城池(50個(gè)比特幣)的誘惑力太大了。
這個(gè)時(shí)候,有人就雞賊了,比如諸葛亮,一個(gè)人不好算嘛。我的腦子變聰明了,我的智商升高了,比如從CUP到GPU到ASIC芯片級(jí)別了。但是,發(fā)現(xiàn)郭嘉、荀彧的智商也升高了,從100變成200了。好吧,我有錢,我招門客,你招300門客,我招3000門客,3000個(gè)門客3000個(gè)人給我一起算這個(gè)數(shù)學(xué)題!智商基數(shù)更高,算力更高,我先算出來(lái)的概率就大了。我先算出來(lái)題了,一公布出來(lái),別的軍師(節(jié)點(diǎn)、礦工)就不用再算這個(gè)題了,去算下一個(gè)題。
這3000門客就相當(dāng)于3000臺(tái)礦機(jī),這就是比特幣的挖礦原理。
當(dāng)然,大家還可以繼續(xù)開腦洞,諸葛亮養(yǎng)門客的食宿費(fèi)用就像礦機(jī)的電費(fèi)、維護(hù)費(fèi)用;3000門客在一起就組成了礦場(chǎng);還有礦池、接入算力平臺(tái)等等。朋友們可以自行腦補(bǔ),在此不再贅述。
總結(jié):比特幣解決了拜占庭將軍問(wèn)題。第一個(gè)解決的問(wèn)題是保證我(一個(gè)誠(chéng)實(shí)節(jié)點(diǎn))發(fā)出的信息不會(huì)被人(另一個(gè)節(jié)點(diǎn))修改,方法是非對(duì)稱的加密技術(shù);第二個(gè)解決的問(wèn)題保證是每個(gè)人發(fā)出的信息被人記錄下來(lái)的數(shù)據(jù)是一致的。方法是PoW工作量證明機(jī)制。