拜占庭將軍問題的前世與區塊鏈今生
文/國立中央大學資工系蔡宗翰教授 蔡宗翰
拜占庭將軍問題(The Byzantine Generals Problem)是一個分散式對等網路通信容錯問題,如今被廣泛應用於區塊鏈等領域。然而,為何取名叫拜占庭將軍?為什麼不是英國將軍或中國將軍?讓深入研究拜占庭歷史的資工學者蔡宗翰教授為您分析。

拜占庭帝國指的是395年分家以後的東羅馬帝國,首都位於新羅馬,又稱為君士坦丁堡。它的國祚長達1061年,一直到1453年才被奧斯曼帝國(Ottoman Empire)滅亡。為何現在多數人不以東羅馬稱呼這個帝國呢?因為西羅馬在476年就滅亡,其疆域由蠻族王國繼承發展。800年時,一統中西歐的查理大帝(或譯查理曼)由教皇加冕為皇帝,雖然帝國一百年後就分裂,實際被許多大大小小的封建領主分治,但以中歐德奧為主的這個鬆散的政治聯盟就被稱為神聖羅馬帝國。1557年,神聖羅馬歷史學家赫羅尼姆斯·沃爾夫為了區分神聖羅馬與東羅馬,就取東羅馬首都的古稱拜占庭,來代替東羅馬。
接下來蔡老師來說明拜占庭將軍問題本身。假設有一次敵人來犯,帝國徵召了 10支駐扎在不同地點的塞馬州軍隊去迎擊敵人,至少要有 6 支軍隊同時襲擊才能戰勝。每位將軍要如何保證至少有 6 支軍隊同時發起進攻?在古代,將軍們必須透過信使來互通訊息。論文中,Lamport 用數學證明,叛徒數必須少於總數的1/3,才能達成共識。
那為何今世的區塊鏈也會扯到古代的拜占庭將軍問題呢?因為區塊鏈想解決的也是一樣概念的問題:
各節點(將軍)送訊給所有節點(將軍),各節點(將軍)根據收到的所有消息決策,如何避免惡意節點(叛徒)影響共識的達成?
在過程中,若節點故意拒絕合作(惡意節點)或根本沒有說任何事情(錯誤節點),就是叛徒。因此,在比特幣的區塊鏈網路設計中 , 中本聰藉由密碼學與工作量證明機制 (Proof of Work,PoW)等方法來制約這些叛徒。透過PoW,節點必須付出大量的工作量(算力)去證明自己的忠誠,之後才能打包交易,送訊給其他節點。最長鏈機制則是各節點都沿著已知的最長鏈進行。所以即使惡意節點試圖破壞,也會付出很大的代價(付出超過整體系統一半的算力)。 在各節點都想最大化自己利益的情況下,PoW的確有效抑制了叛徒作惡的動機,進而解決了拜占庭將軍問題。
※本文轉載<拜占庭將軍問題的前世與區塊鏈今生>,感謝蔡老師提供。