什么是拜占庭將軍問題
拜占庭將軍問題(Byzantine failures),是由萊斯利·蘭伯特提出的點對點通信中的基本問題。含義是在存在消息丟失的不可靠信道上試圖通過消息傳遞的方式達到一致性是不可能的。因此對一致性的研究一般假設信道是可靠的,或不存在本問題。
起源
拜占庭位于如今的土耳其的伊斯坦布爾,是東羅馬帝國的首都。由于當時拜占庭羅馬帝國國土遼闊,為了防御目的,因此每個軍隊都分隔很遠,將軍與將軍之間只能靠信差傳消息。 在戰爭的時候,拜占庭軍隊內所有將軍和副官必須達成一致的共識,決定是否有贏的機會才去攻打敵人的陣營。但是,在軍隊內有可能存有叛徒和敵軍的間諜,左右將軍們的決定又擾亂整體軍隊的秩序。在進行共識時,結果并不代表大多數人的意見。這時候,在已知有成員謀反的情況下,其余忠誠的將軍在不受叛徒的影響下如何達成一致的協議,拜占庭問題就此形成。
問題闡述
拜占庭將軍問題是一個協議問題,拜占庭帝國軍隊的將軍們必須全體一致的決定是否攻擊某一支敵軍。問題是這些將軍在地理上是分隔開來的,并且將軍中存在叛徒。叛徒可以任意行動以達到以下目標:欺騙某些將軍采取進攻行動;促成一個不是所有將軍都同意的決定,如當將軍們不希望進攻時促成進攻行動;或者迷惑某些將軍,使他們無法做出決定。如果叛徒達到了這些目的之一,則任何攻擊行動的結果都是注定要失敗的,只有完全達成一致的努力才能獲得勝利。
拜占庭假設是對現實世界的模型化,由于硬件錯誤、網絡擁塞或斷開以及遭到惡意攻擊,計算機和網絡可能出現不可預料的行為。拜占庭容錯協議必須處理這些失效,并且這些協議還要滿足所要解決的問題要求的規范。這些算法通常以其彈性t作為特征,t表示算法可以應付的錯誤進程數。
很多經典算法問題只有在n ≥ 3t+1時才有解,如拜占庭將軍問題,其中n是系統中進程的總數。
問題分析
在計算機技術及網絡還未完全發展到2000年以后這么成熟時,任何人想要嘗試解決拜占庭將軍問題,都失敗了。
在不使用當今的計算機及網絡通信技術,那么點對點的通信一般都是通過“口頭傳遞信息”或“書面傳遞信息”的方式來進行。
口頭傳遞信息最大的問題就是無法驗證消息的真偽,容易被偷聽,也無法追溯消息的源頭,是最不靠譜的通信方式,就是在今天,我們在工作時,如果為了避免扯皮,一般都建議用書面方式來溝通,至少書面的溝通,還有個記錄,可以防止抵賴。
書面傳遞信息它確實也解決了口頭傳遞信息可能存在的“空口無憑”的問題,但書面傳遞在不使用計算機或網絡通信技術的前提下,它存在延時的問題,另外一個仍然是消息的真偽性仍然無法驗證,有人或許會提出,簽字蓋章,但是看過古裝劇的人,恐怕都看過,書信仍然是很容易偽造的,模仿字體,私刻簽章。
那么拜占庭將軍問題是不是就真的無解了?
當然不是!
如何解決拜占庭將軍問題
萊斯利·蘭伯特提出了“拜占庭將軍問題”,但真正完美解決這以難題的是——中本聰。
終極解決方案:區塊鏈技術
互聯網的存在,首先降低了信息的流通成本。每個將軍配一臺電腦,就解決了”書面協議“中騎馬通訊造成時間延遲的問題。
如果10個將軍中的幾個同時發起消息,勢必會造成系統的混亂,造成各說各的攻擊時間方案,行動難以一致。
誰都可以發起進攻的信息,但由誰來發出呢?中本聰巧妙地在個系統加入了發送信息的成本,即:一段時間內只有一個節點可以傳播信息。
它加入的成本就是”工作量“——節點必須完成一個計算工作才能向各城邦傳播消息,當然,誰第一個完成工作,誰才能傳播消息。
當某個節點發出統一進攻的消息后,各個節點收到發起者的消息必須簽名蓋章,確認各自的身份。中本聰在這里引用現代加密技術為這個信息簽名。
這種加密技術——非對稱加密完全可以解決古代難以解決的簽名問題:
? 消息傳送的私密性
? 能夠確認身份
? 簽名不可偽造、篡改
非對稱加密算法的加密和解密使用不同的兩個密鑰.這兩個密鑰就是我們經常聽到的"公開密鑰"(公鑰)和"私有密鑰"(私鑰).
公鑰和私鑰一般成對出現, 如果消息使用公鑰加密,那么需要該公鑰對應的私鑰才能解密; 同樣,如果消息使用私鑰加密,那么需要該私鑰對應的公鑰才能解密.
非對稱加密的作用是:保護消息內容, 并且讓消息接收方確定發送方的身份.
比如,將軍A想給將軍B發送消息,為防止消息泄露,將軍A只需要使用B的公鑰對信息加密,而B的公鑰是公開的,B只需要用只有他自己只的私鑰解密即可。
將軍B想要在信件上聲明自己的身份,他可以自己寫一段”簽名文本“,并用私鑰簽名,并廣播出去,所有人可以根據B的公鑰來驗證該簽名,確定的B的身份。
由此,一個不可信的分布式網絡變成了一個可信的網絡,所有的參與者可以在某件事在達成一致。
為什么是比特幣
這里是比特幣為何如此特別的關鍵:它代表了一個對于一個困難的算法上的難題的解決方案,這一解決方案在一系列的歷史事件發生之前是不可能的。
這些事件有:
1. 互聯網的創造
2. 公鑰加密算法的發明
3. 點對點Bitorrent(BT)協議的發明。BT協議最開始是開發來用于在網絡上的相對小的用戶子集之間共享許多文件的,但比特幣用它來在所有用戶之間共享單個文件。
4. 人們意識到,在系統中添加一個簡單的時間延遲,同時使用公鑰加密算法以驗證每筆交易,可以解決這個問題。
如果說一些最棒的想法在事后看來是很簡單的,那么上述的第四點就完全符合條件,盡管整個項目是站在了巨人的肩膀上的。
最后,這一對于拜占庭將軍問題的解決方案,可以推廣到任何核心問題是在分布式網絡上缺乏信任的領域。如我們已經提到的,人們正在為互聯網建設一個分布式的域名系統,以及為政治選舉建設分布式的投票系統(還沒有網站)。
如果人們認為單純的文件分享攪亂了這個世界,那么比特幣解決方案,才剛剛打開洪水的閘門。