- 區塊鏈系列:重塑經濟與世界+數字貨幣到信用社會+解碼區塊鏈全球應用與投資案例
- 徐明星 長鋏 韓鋒 龔鳴
- 3181字
- 2019-01-04 19:14:02
二、區塊鏈的工作原理
(一)拜占庭將軍問題
拜占庭將軍問題是容錯計算中的一個老問題,由萊斯利·蘭伯特(Leslie Lamport)等人在1982年提出。拜占庭帝國是5~15世紀的東羅馬帝國,即現在的土耳其。拜占庭城邦擁有巨大的財富,使它的十個鄰邦垂涎已久。但是拜占庭高墻聳立,固若金湯,沒有一個單獨的鄰邦能夠成功入侵。任何單個城邦的入侵行動都會失敗,而入侵者的軍隊也會被殲滅,使其自身反而容易遭到其他九個城邦的入侵。這十個鄰邦之間也互相覬覦對方的財富并經常爆發戰爭。拜占庭的防御能力如此之強,十個鄰邦中的至少一半同時進攻,才能攻破。也就是說,如果六個或者更多的鄰邦一起進攻,就會成功并獲得拜占庭的財富。然而,如果其中有一個或者更多鄰邦發生背叛,答應一起入侵但在其他人進攻的時候又不干了,會導致只有五支或者更少的軍隊在同時進攻,那么所有的進攻軍隊都會被殲滅,并隨后被其他鄰邦所劫掠。因此,這是一個由不互相信任的各個鄰邦構成的分布式網絡,每一方都小心行事,因為稍有不慎,就會給自己帶來災難。為了獲取拜占庭的巨額財富,這些鄰邦分散在拜占庭的周圍,依靠士兵相互通信來協商進攻目標及進攻時間。這些鄰邦將軍想要攻克拜占庭,都面臨著一個困擾,也就是拜占庭將軍問題。
鄰邦將軍不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者進攻時間。在這種狀態下,將軍們能否找到一種分布式協議進行遠程協商,進而贏取拜占庭城堡攻克戰役的勝利呢?這就是拜占庭將軍問題。
針對拜占庭將軍問題的解決方法包括:口頭協議算法、書面協議算法等??陬^協議算法的核心思想如下:要求每個被發送的消息都能被正確投遞,信息接收者知道消息的發送者身份,知道缺少的消息信息。采用口頭協議算法,若叛徒數少于1/3,則拜占庭將軍問題可解。也就是說,若叛徒數為m,當將軍總數n至少為3m+1時,問題可解。然而,口頭協議算法存在明顯的缺點,那就是消息不能追根溯源。為解決該問題,提出了書面協議算法。該算法要求簽名不可偽造,一旦被篡改即可發現,同時任何人都可以驗證簽名的可靠性。書面協議算法也不能完全解決拜占庭將軍問題。因為該算法沒有考慮信息傳輸時延、其簽名體系難以實現且簽名消息記錄的保存難以擺脫中心化機構。
與已有方法相比,區塊鏈技術將是更完美的解決方案。區塊鏈是怎樣來解決這個問題的呢?它為發送信息加入了成本,降低了信息傳遞的速率,并加入了一個隨機數以保證在一段時間內只有一個礦工可以進行傳播。它加入的成本就是“工作量”,區塊鏈礦工必須完成一個隨機哈希算法的計算工作量才能向各城邦傳播消息。
當用戶向網絡輸入一筆交易的時候,他們使用內嵌在客戶端的標準公鑰加密工具為這筆交易簽名,這好比拜占庭將軍問題中他們用來簽名和驗證消息時使用的“印章”。因此,哈希計算速率的限制,加上公鑰加密,使一個不可信網絡變成了一個可信的網絡,使所有參與者可以在某些事情上達成一致。拜占庭將軍問題的區塊鏈解決方案可以推廣到任何在分布式網絡上缺乏信任的領域,比如說域名、投票選舉或其他需要分布式協議的地方。
(二)區塊鏈工作流程
區塊鏈的工作流程主要包括如下步驟(圖2-6)。
①發送節點將新的數據記錄向全網進行廣播。
②接收節點對收到的數據記錄信息進行檢驗,比如記錄信息是否合法,通過檢驗后,數據記錄將被納入一個區塊中。
③全網所有接收節點對區塊執行共識算法(工作量證明、權益證明等。
④區塊通過共識算法過程后被正式納入區塊鏈中存儲,全網節點均表示接受該區塊,而表示接受的方法,就是將該區塊的隨機散列值視為最新的區塊散列值,新區塊的制造將以該區塊鏈為基礎進行延長。

圖2-6 區塊鏈的工作流程
節點始終都將最長的區塊鏈視為正確的鏈,并持續以此為基礎驗證和延長它。如果有兩個節點同時廣播不同版本的新區塊,那么其他節點在接收到該區塊的時間上將存在先后差別,它們將在先收到的區塊基礎上進行工作,但也會保留另外一個鏈條,以防后者變成長的鏈條。該僵局的打破需要共識算法的進一步運行,當其中的一條鏈條被證實為是較長的一條,那么在另一條分支鏈條上工作的節點將轉換陣營,開始在較長的鏈條上工作。以上就是防止區塊鏈分叉的整個過程。
所謂“新的數據記錄廣播”,實際上不需要抵達全部的節點。只要數據記錄信息能夠抵達足夠多的節點,那么將很快地被整合進一個區塊中。而區塊的廣播對被丟棄的信息是具有容錯能力的。如果一個節點沒有收到某特定區塊,那么該節點將會發現自己缺失了某個區塊,也就可以提出自己下載該區塊的請求。
現在我們都知道了區塊鏈網絡里的記賬者是節點,節點負責把數據記錄記到數據區塊里,為了鼓勵節點記賬,系統會按照規則隨機地對記賬的節點進行獎勵。那么如何保證不會有人制造假數據記錄或者說如何保證造假數據記錄不被通過驗證?這就涉及時間戳。這也正是區塊鏈與眾不同的地方。區塊鏈不僅關注數據區塊里的內容,也關注數據區塊本身,把數據區塊的內容與數據區塊本身通過時間戳聯系起來。時間戳為什么會出現?這是由區塊鏈的性質規定的。節點把數據記入了區塊,因此一個區塊就相當于一頁賬簿,每筆數據在賬簿中的記錄可以自動按時間先后排列,那么賬簿的頁與頁怎么銜接起來?也就是說,這一個區塊與下一個區塊的繼承關系如何斷定就成為問題。于是時間戳就出現了。
時間戳的重要意義在于其使數據區塊形成了新的結構。這個新的結構使各個區塊通過時間線有序連接起來,形成了一個區塊的鏈條,因此才稱為區塊鏈。區塊按時間的先后順序排列使賬簿的頁與頁的記錄也具有了連續性。通過給數據記錄印上時間標簽,使每一條數據記錄都具有唯一性,從而使數據記錄本身在區塊和區塊上的哪個位置上發生可以被精確定位且可回溯,也給其他的校驗機制協同發揮作用提供了極大的便利和確定性,使整個區塊鏈網絡能夠確定性地驗證某條數據記錄是否真實。由于區塊鏈網絡是公開的,意味著系統知道過去發生的所有數據記錄,而任何新的數據記錄都繼承于過去的數據記錄,因為過去的數據記錄是真實的,而且鏈條的各個區塊記錄由時間戳連接起來使之環環相扣,所以如果想要制造一個假的數據記錄,就必須在區塊鏈上修改過去的所有數據記錄。盡管在挖礦的過程中,形成了多個鏈條,但因為最長的那個被誠實的節點所控制,所以想要修改過去的數據記錄,首先就要從頭構造出一個長度比之前最長的那個還要長的鏈條,在這個新的鏈條超過原來的那個鏈條后,才能制造雙重支付的虛假數據。然而隨著時間推移,制造新鏈條的難度和成本都是呈指數級上升的,而且隨著鏈條越來越長,其難度也變得越來越大,成本也就越來越高。同時,因為去中心化的設置,區塊鏈的各個核心客戶端同時又是服務器,保存了區塊鏈網絡的完整數據,因此使對區塊鏈網絡的攻擊很難像對傳統的中央處理節點那樣有效,一般情況下很難對區塊鏈網絡構成重大沖擊。最終,區塊鏈網絡成為一個難以攻破的、公開的、不可篡改數據記錄和制造虛假數據的誠實可信系統。
區塊鏈保證數據安全、不可篡改以及透明性的關鍵技術包括兩個方面:一是數據加密簽名機制;二是共識算法。在數據加密簽名機制中,首先,要有一個私鑰,私鑰是證明個人所有權的關鍵,比如證明某人有權從一個特定的錢包消費數字貨幣,是通過數字簽名來實現的。其次,要使用哈希(Hash)算法。哈希散列是密碼學里的經典技術,把任意長度的輸入通過哈希算法計算,變換成固定長度的由字母和數字組成的輸出,具有不可逆性。共識算法是區塊鏈中節點保持區塊數據一致、準確的基礎,現有的主流共識算法包括工作量證明(PoW)、權益證明(PoS)、瑞波共識協議(RCP)等。以PoW為例,是指通過消耗節點算力形成新的區塊,是節點利用自身的計算機硬件為網絡做數學計算進行交易確認和提高安全性的過程。交易支持者(礦工)在電腦上運行比特幣軟件不斷計算軟件提供的復雜的密碼學問題來保證交易的進行。作為對他們服務的獎勵,礦工可以得到他們所確認的交易中包含的手續費,以及新產生的比特幣。