03.14 溫故知新之共識機制(上)

溫故知新之共識機制(上)

區塊鏈綜述

傳統的關係數據庫管理系統、NoSQL 數據庫管理系統都是由單一機構進行管理和維護,單一機構對所有數據擁有絕對的控制權,其它機構無法完整了解數據更新過程,因而無法完全信任數據庫中的數據。所以,在多個機構協作模式下,中心化的數據庫管理系統始終存在信任問題。以金融行業的清算和結算業務為例, 傳統中心化的數據庫因無法解決多方互信問題,使得每個參與方都需要獨立維護一套承載自己業務數據的數據庫,這些數據庫實際上是一座座信息孤島,造成清結算過程耗費大量人工進行對賬的情況,目前的清結算時間最快也需按天來計。 如果存在一個多方參與者一致信任的數據庫系統,則可顯著減少人工成本及縮短結算週期。

區塊鏈(Blockchain)是一種去中心化、不可篡改、可追溯、多方共同維護的分佈式數據庫,能夠將傳統單方維護的僅涉及自己業務的多個孤立數據庫整合在一起,分佈式地存儲在多方共同維護的多個節點上,任何一方都無法完全控制這些數據,只能按照嚴格的規則和共識進行更新,從而實現了可信的多方間的信息共享和監督,避免了繁瑣的人工對賬,提高了業務處理效率,降低了交易成本。

區塊鏈通過集成 P2P 協議、非對稱加密、共識機制、塊鏈結構等多種技術,解決了數據的可信問題。通過應用區塊鏈技術,無需藉助任何第三方可信機構,互不瞭解、互不信任的多方可實現可信、對等的價值傳輸。

公有鏈(Public Blockchain)

公有鏈通常也稱為非許可鏈(Permissionless Blockchain),無官方組織及管理機構,無中心服務器,參與的借點按照系統規格自由接入網路、不受控制,節點間基於共識機制開展工作。

公有鏈是真正意義上的完全去中心化的區塊鏈,它通過密碼學保證交易不可篡改,同時也利用密碼學驗證以及經濟上的激勵,在互為陌生的網絡環境中建立共 識,從而形成去中心化的信用機制。在公有鏈中的共識機制一般是工作量證明 (PoW)或權益證明(PoS),用戶對共識形成的影響力直接取決於他們在網絡中擁有資源的佔比。 公有鏈一般適合於虛擬貨幣、面向大眾的電子商務、互聯網金融等 B2C、C2C 或C2B 等應用場景,比特幣和以太坊等就是典型的公有鏈。

聯盟鏈(Consortium Blockchain)

聯盟鏈是一種需要註冊許可的區塊鏈,這種區塊鏈也稱為許可鏈(Permissioned Blockchain)。聯盟鏈僅限於聯盟成員參與,區塊鏈上的讀寫權限、參與記賬權 限按聯盟規則來制定。整個網絡由成員機構共同維護,網絡接入一般通過成員機構的網關節點接入,共識過程由預先選好的節點控制。

由於參與共識的節點比較 少,聯盟鏈一般不採用工作量證明的挖礦機制,而是多采用權益證明(PoS)或 PBFT(Practical Byzantine Fault Tolerant)、RAFT 等共識算法

一般來說,聯盟鏈適合於機構間的交易、結算或清算等 B2B 場景。例如在銀行間進行支付、結算、清算的系統就可以採用聯盟鏈的形式,將各家銀行的網關節點作為記賬節點,當網絡上有超過 2/3 的節點確認一個區塊,該區塊記錄的交易將得到全網確認。聯盟鏈對交易的確認時間、每秒交易數都與公有鏈有較大的區別, 對安全和性能的要求也比公共鏈高。

私有鏈(Private Blockchain)

私有鏈建立在某個企業內部,系統的運作規則根據企業要求進行設定。私有鏈的應用場景一般是企業內部的應用,如數據庫管理、審計等;在政府行業也會有一 些應用,比如政府的預算和執行,或者政府的行業統計數據,這個一般來說由政府登記,但公眾有權力監督。私有鏈的價值主要是提供安全、可追溯、不可篡改、 自動執行的運算平臺,可以同時防範來自內部和外部對數據的安全攻擊,這個在傳統的系統是很難做到的。

溫故知新之共識機制(上)

體系架構

從最早應用區塊鏈技術的比特幣到最先在區塊鏈引入智能合約的以太坊,再到應用最廣的聯盟鏈 Hyperledger Fabric,它們儘管在具體實現上各有不同,但在整體體系架構上存在著諸多共性。如下圖所示,區塊鏈平臺整體上可劃分為網絡層、共識層、數據層、智能合約層和應用層五個層次。

溫故知新之共識機制(上)

共識機制概述

區塊鏈有以下三個基本特徵:

1、區塊鏈是一個分佈式數據庫(系統) ;

2、區塊鏈採用密碼學,保證數據不被篡改;

3、區塊鏈採用共識算法來對於新增的數據達成共識。

溫故知新之共識機制(上)

區塊鏈技術的偉大之處就是它的共識機制,在去中心化的思想上解決了節點間互相信任的問題。區塊鏈擁有眾多節點並達到一種平衡狀態是因為共識機制。儘管密碼學佔據了區塊鏈的半壁江山,但是共識機制才是讓區塊鏈系統不斷運行下去的關鍵。所以,要深入談及區塊鏈的共識機制,就避不開一個問題--拜占庭問題。

拜占庭將軍問題

拜占庭問題是容錯計算中的一個老問題,有萊斯特蘭伯特等人在 1982 年提出。拜佔廷帝國為公元 395 年直至 1453 年的東羅馬帝國,拜占庭城邦擁有巨大的財富,令他的十個鄰邦垂涎已久,但是拜占庭高牆聳立,固若金湯,沒有任何一個單獨的鄰邦能夠成功入侵,任何單個城邦的入侵行動都會失敗,而入侵者的軍隊也會被殲滅,使得其自身反而容易遭到其它九個城邦的入侵。這十個城邦之間也互相覬覦對方的財富並經常爆發戰爭。

溫故知新之共識機制(上)

拜占庭的防禦能力如此之強,非大多數人一起不能攻破。而且只要其中一個城邦背叛盟軍,那麼所有進攻軍隊都會被殲滅,並隨後被其他鄰邦所劫掠。因此這是一個互不信任的各個鄰邦構成的分佈式網絡。每一方都小心行事,因為稍有不慎就會給自己帶來災難。為了獲取拜占庭的鉅額財富,這些鄰邦分散在拜占庭的周圍,依靠士兵傳遞消息來協商進攻目的及進攻時間,這些鄰邦將軍想要攻克拜占庭,但面臨的一個困擾,鄰邦將軍不確定他們之中是否有叛徒,叛徒是否擅自變 更進攻意向或者進攻時間?在這種狀態下,將軍們能否找到一種分佈式協議來進行遠程協商達成他們的共識,進而贏取拜占庭城邦的財富呢?

在拜占庭將軍問題模型中,對於將軍們有兩個公認的假設:

1、所有忠誠的將軍受到相同的命令後,執行這條命令,得到的結果一定是相同的,它的含義是所有節點對命令的解析和執行是一樣的,這個命令必須是一個確定性的命令,不能存在隨機性,也不能依賴節點自身的狀態,也就是說這個秘密不能是心情好,就攻擊敵人,心情不好就原地休息。

2、如果命令是正確的,那麼所有忠誠的將軍必須執行這條命令,換句話說, 忠誠的將軍需要判斷,接收到的命令是不是正確的。

對於將軍們的通訊過程,在“拜占庭將軍問題”中也是有默認假設的:點對點通信是沒有問題的,也就是說在這裡,我們假設 A 將軍要給 B 將軍一條命令“M”,那麼派出去的傳令兵一定會準確的把命令“M”傳給 B 將軍。

但問題在於,如果每個城邦向其他九個城邦派出一名信使,那麼就是這十個城邦,每一個都派出了九名信使,也就是在任何一個時間有總計 90 次的信息傳輸,並且每個城市分別收到九條信息,可能每一條都寫著不同的進攻時間,除此以外,信息傳輸過程中,如果叛徒想要破壞原有的約定時間,就會自己修改相關信息,然後發給其他城邦以混淆試聽,這樣的結果是,部分城邦收到錯誤信息後,會遵循一個或者多個城邦已經修改過的攻擊時間相關信息,從而背叛發起人的本意。這樣一來,遵循錯誤信息的城邦(包含叛徒),將重新廣播超過一條信息的信息鏈,整個信息鏈會隨著他們所發送的錯誤信息,迅速變成不可信的信息和攻擊時間,變成一個相互矛盾的糾結體。

針對這個問題,人們主要提出了兩種解決方法,一個是口頭協議算法,另一個是書面協議算法。

口頭協議算法的核心思想:要求每一個被髮送的消息都能被正確投遞,信息接收 者明確知道消息發送者的身份,並且信息接收者知道信息中是否缺少信息。採用 口頭協議算法,若叛徒數少於 1/3 時,則拜占庭將軍問題可以很容易解決。但是口頭協議算法存在著明顯的缺點,那就是消息不能溯源。

為解決該問題,提出了書面協議算法。該算法要求籤名,不可偽造,一旦被篡改即可發現,同時任何人都可以驗證簽名的可靠性。

就算是書面協議算法,也不能完全解決拜占庭將軍問題,因為該算法沒有考慮信息傳輸延遲、簽名體系難以實現的問題。且簽名消息記錄的保存,也難以擺脫中心化機構。

而這個問題該如何解決?中本聰的理念給出了一個比較好的答案:不能讓所有人都有資格發信息,而是給發信息設置了一個條件:“工作量”。將軍們同時做一道計算題,誰先算完,誰才能獲得給其他小國發信息的資格。而其他小國在收到信息後,必須採用加密技術進行簽字蓋戳,以確認身份。然後再繼續做題,做對題的再繼續發消息......對這種先後順序達成共識的算法,開創了共識機制的先河。

未完待續...

「力場 lichang.io」公鏈挖礦第一社區!


分享到:


相關文章: