區塊鏈竟然還有孫子兵法?拜占庭將軍問題究竟是什麼?

買賣虛擬貨幣

如果你平時經常閱讀區塊鏈行業資訊文和白皮書,相信你對“拜占庭將軍問題”這個名詞並不陌生。“拜占庭將軍問題”是由萊斯利·蘭伯特提出的點對點通訊的基本問題。那麼在區塊鏈中,這個問題又是怎樣解決的呢?

拜占庭將軍問題是什麼

拜占庭將軍問題是一個共識問題: 核心描述是軍中可能有叛徒,卻要保證進攻一致,由此引申到計算領域,發展成了一種容錯理論。隨著比特幣的出現和興起,這個著名問題又重入大眾視野。

在區塊鏈中文詞典中,對這一問題是這樣描述的:拜占庭將軍問題是指“在存在訊息丟失的不可靠通道上,試圖透過訊息傳遞的方式達到一致性是不可能的”。因此,在系統中存在除了訊息延遲或不可送達的故障以外的錯誤,包括訊息被篡改、節點不按照協議進行處理等問題,將會潛在地會對系統造成針對性的破壞。

拜占庭將軍問題場景

關於拜占庭將軍問題,一個簡易的非正式描述如下:

拜占庭帝國想要進攻一個強大的敵人,為此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵禦5支常規拜占庭軍隊的同時襲擊。基於一些原因,這10支軍隊不能集合在一起單點突破,必須在分開的包圍狀態下同時攻擊。他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通訊兵相互通訊來協商進攻意向及進攻時間。

困擾這些將軍的問題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者進攻時間。在這種狀態下,拜占庭將軍們能否找到一種分散式的協議來讓他們能夠遠端協商,從而贏取戰鬥?這就是著名的拜占庭將軍問題。

應該明確的是,拜占庭將軍問題中並不去考慮通訊兵是否會被截獲或無法傳達資訊等問題,即訊息傳遞的通道絕無問。Lamport已經證明了在訊息可能丟失的不可靠通道上試圖透過訊息傳遞的方式達到一致性是不可能的。

所以,在研究拜占庭將軍問題的時候,我們已經假定了通道是沒有問題的,並在這個前提下,去做一致性和容錯性相關研究。

比特幣的解決之道

拜占庭將軍問題的核心就是如何在可能存在不可靠節點和不可靠通訊的情況下交換資訊,達成共識。而且根據科學家們對這個問題的研究,假如叛徒的數量大於等於1/3,那麼拜占庭將軍問題將不可解。

這個問題在1982年被提出,但直到2008年中本聰(Satoshi Nakamoto)提出比特幣,才得到一定程度的解決。

我們可以看到,拜占庭將軍問題有本質性的問題有兩個:“一致性”和“正確性”問題。而它之所以難解,其中有兩個重要的原因:

  • 資訊不加密,容易被破解,冒充和偽造;

  • 節點惡意行為影響共識的成本很低;

比特幣網路可以將節點傳送的資訊進行加密,即使用非對稱加密技術保護節點發出的資訊。這種技術有三個特點:

  • 訊息傳送的私密性

  • 能夠確認身份

  • 簽名不可偽造、篡改

由於區塊鏈網路是去中心化的,資訊在每個節點上是共享的,因此,降低了由於資訊不透明導致的向不同節點傳遞不同資訊的可能性。另外,非對稱加密演算法的加密和解密使用不同的兩個金鑰:"公開金鑰"(公鑰)和"私有金鑰"(私鑰),這解決了節點資訊被篡改,洩露,偽造的問題。

解決場景

如何利用區塊鏈解決這個問題:

我們給每個將軍都配一臺電腦。大家在電腦上傳送資訊,這樣就不用派通訊兵出去給其他將軍傳令了,先把時間節約下來。然後我們再設定幾個規則:

  • 一個時間段內只能發起一個訊息。比如10點到10點一刻,只能發出一個簽名並蓋上時間章的進攻訊息,別的將軍要想發動攻擊,必須在10點一刻以後才行。

  • 訊息傳遞出去以後,收到進攻訊息的將軍必須也要在訊息上簽名,確認各自的身份,並蓋上時間印章,然後把這個資訊複製下來傳遞給其他將軍。

  • 為防止有將軍籤假名,資訊都加了密。系統中各個將軍都有一個公用密碼和私人密碼,公用密碼是公開的。A將訊息傳遞給B時,使用B的公用密碼加密,而B則要用他的私人密碼才能解密。B簽完名後,所有將軍都可以透過他的公用密碼來驗證他簽名的真實性。

  • 大家都能從各自的電腦上看到資訊的傳遞進度。

這樣做的好處是:

  • 資訊裡每個將軍都要簽名驗證身份,如果有將軍篡改了訊息,大家就能看到是哪些將軍篡改了訊息。

  • 儘管有不一致的訊息。但只要一個訊息得到了6名或6名以上將軍的同意,那麼大家就達成了共識。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;