第一章探尋區塊鏈的源頭「重回拜占庭」

每一個時代都有自己值得驕傲的技術,無論是晶體管、激光、互聯網,還是載人航天飛機。近10年中,金融網絡領域最具顛覆性、最閃耀的技術發明莫過於區塊鏈。無論是與數字貨幣一道橫空出世,繼續發力衍生出智能合約,還是可預見的未來,不斷重塑整個金融世界,都使它的奪目光芒無法掩蓋。然而究其源頭,我們不得不追溯到“拜占庭將軍問題”和“雙花問題”。後者比較簡單,即如何杜絕非實體貨幣的再次被使用,或者是雙重支付(只要引入蓋時間戳的電子簽名就能解決)。而前者,“拜占庭將軍問題”則看起來費解且撲朔迷離,但我們又不能迴避,因為它是整個區塊鏈技術核心思想的真正根源,也直接決定了區塊鏈技術的種種與眾不同的顛覆性特質。

在某種程度上,問題比答案更重要。很難想像:如果沒有“拜占庭將軍問題”,沒有它揭示出在人類散兵游勇的狀態下,永恆的“共識”困境,那麼對於這種困境的反思和探索便無法成為可能,逃離困境到達光明之地也無法成為可能。所以在我們向偉大的“答案”——區塊鏈致以敬意之時,請不要忘記它的源頭,不要忘記拜占庭。

拜占庭將軍的難題

古老的“拜占庭將軍問題”

讓人生,讓人死,讓人癡迷,讓人瘋狂。

這就是傳說中繁華與沒落,絕望與救贖並存的東羅馬帝國首都,拜占庭。

在2013年獲得計算機科學領域最高獎項圖靈獎的31年前,1972年,萊斯利·蘭伯特(Leslie Lamport)搬到灣區。此時,他仍然是一個寂寂無聞的美國小伙。他充當Compass(馬薩諸塞州計算機合夥人公司)西海岸計劃前哨基地的先鋒,不幸的是,這個分支機構最終未能落實。在長達5年的時間裡,他曾是Compass總部派駐加州的唯一員工。最後,他卻收到撤回東海岸的指令。於是,他決定加入斯坦福國際研究院(SRI)。在那段歲月裡,SRI有一個項目,要在美國航空航天局建立容錯型航電計算機系統。考慮到系統的工作性質,故障是不允許發生的。這段經歷孕育了兩篇旨在解決一種特殊故障的論文,由蘭伯特和SRI同事馬歇爾·皮斯(Marshall Pies)及羅伯特·肖斯塔克(Robert Shostak)合作完成。用計算學術語說,普通故障可能會導致信息丟失或進程停止,但系統不會遭到破壞,因為這種普通故障屬於一出錯就會停下來的故障類型,剩下的備份的、正常的部分照樣可以運轉,發揮作用。就像戰場上的士兵,他們一旦受傷或陣亡就停止戰鬥,但並不妨礙他人繼續作戰。

然而一旦發生“拜占庭故障”,就會非常麻煩,因為它們不會停下來,還會繼續運轉,並且給出錯誤訊息。就像戰爭中有人成了叛徒,會繼續假傳軍情,惑亂人心。當時為了解決這個問題,常常使用的技術被稱為“三重模塊冗余”:也就是說使用三台計算機進行萬一出錯的備份工作,三台獨立的計算機按照少數服從多數的原則“投票”。這樣,即使其中一台機器提供了錯誤結果,其他兩台仍然會提供正確答案。但是為了證明這種方法的有效性,必須拿出證據。而在編寫證據的過程中,研究人員遇到了一個問題:“錯誤”計算機可能給其他兩台計算機發送互不相同的錯誤值,而後者卻不會知道。這就需要使用第四台計算機來應對這個故障。

蘭伯特說:“如果你使用數字簽名,就可以用三台機器達成目的,因為如果‘壞了’的計算機向一台計算機發送了帶簽名的錯誤值,並向另一台發送了不同的帶簽名錯誤值,另外兩台計算機就能夠交換消息,以檢查究竟發生了什麼情況,因為兩個不同的值都是簽名發送的。”蘭伯特還聽吉姆·格雷談論過另一個性質大體相同的問題,人們稱之為“中國將軍問題”。這引起了蘭伯特有關司令將軍和叛徒將軍的聯想,於是他將這個問題及其解決方案命名為“拜占庭將軍問題”。加 入 會 員 微 信

“我記得,與我的朋友懷特·迪菲(White Duffy)坐在伯克利的一間咖啡館裡,當時他描述了一個構建數字簽名的問題。”蘭伯特回憶說,“他說:‘如果能辦到的話,會非常有用。’我說:‘這聽起來並不很困難。’於是在一張餐巾紙上,我為他勾畫出了第一種數字簽名算法。雖然當時並不很實用,但目前已經變得切實可行。”只可惜那張餐巾紙已經消逝在時間的流沙中。在後來1982年正式出版的拜占庭將軍論文的序言中,他這樣寫道:

“我一直覺得正是因為通過用一組圍坐在圓桌旁的哲學家來表述,Dijkstra(迪克斯塔)的‘哲學家就餐問題’才變得如此讓人關注(比如在理論界,它可能比‘讀者/作者’問題都引人注目,儘管讀者/作者問題可能更具實際意義)。我認為Reaching Agreement in the Presence of Faults(達成共識的缺陷)中所描述的問題十分重要,值得計算機科學家們去關注。‘哲學家就餐問題’使我認識到,把問題以講故事的形式表達出來更能引起人們的關注。在分佈式計算領域有一個被稱作‘中國將軍問題’的問題。在這個問題中,兩個將軍必須在進攻還是撤退上達成一致,但是相互只能通過信使傳送消息,而且這個信使可能永遠都無法到達。我借用了這裡的將軍的叫法,並把它擴展成一組將軍,同時這些將軍中有些是叛徒,他們需要達成一致的決定。同時我想給這些將軍賦予一個國家,同時不能得罪任何讀者。那時候,阿爾巴尼亞還是一個完全封閉的國家,我覺得應該不會有阿爾巴尼亞人看到這篇文章,所以最初的時候這篇論文題目實際是The Albanian Generals Problem(阿爾巴尼亞將軍問題)。但是Jack Goldberg(傑克·古登博格)後來提醒我,在這個世界上除了阿爾巴尼亞之外還有很多阿爾巴尼亞移民,所以建議我換個名字。於是就想到了這一更合適的叫法——Byzantine generals(拜占庭將軍)。”

寫這篇論文的最主要目的是將拜占庭將軍這個叫法用在這個問題上。基本的算法文章在1980年的論文中就已經出現了。

起源:拜占庭位於現在土耳其的伊斯坦布爾,是東羅馬帝國的首都。由於當時拜占庭羅馬帝國國土遼闊,為了防禦敵人每個軍隊都分隔很遠,將軍與將軍之間只能靠信差傳消息。在戰爭時期,拜占庭軍隊內所有將軍和副官必須達成一致共識,決定是否有贏的機會才去攻打敵人的陣營。但是,軍隊可能有叛徒和敵軍間諜,左右將軍們的決定,擾亂軍隊整體的秩序。在達成共識的過程中,有些信息,往往並不代表大多數人的意見。這時候,在已知有成員謀反的情況下,其餘忠誠的將軍在不受叛徒的影響下如何達成一致的協議,就是“拜占庭將軍問題”。

兩軍問題:軍隊與軍隊之間分隔很遠,傳遞信息的信差可能在途中陣亡,或因軍隊距離不能在得到消息後即時回復,發送方也無法確認消息確實丟失的情形,導致不可能達到一致性。在分佈式計算上,試圖在異步系統和不可靠的通道上達到一致性是不可能的。因此對一致性的研究一般假設信道是可靠的,或非異步系統上運行。來自維基百科。

[2]在數學和計算機科學之中,算法為一個計算的具體步驟,常用於計算、數據處理和自動推理。

《區塊鏈:重塑經濟與世界》