2.793

                    2018影響因子

                    (CJCR)

                    • 中文核心
                    • EI
                    • 中國科技核心
                    • Scopus
                    • CSCD
                    • 英國科學文摘

                    留言板

                    尊敬的讀者、作者、審稿人, 關于本刊的投稿、審稿、編輯和出版的任何問題, 您可以本頁添加留言。我們將盡快給您答復。謝謝您的支持!

                    姓名
                    郵箱
                    手機號碼
                    標題
                    留言內容
                    驗證碼

                    Hyperledger Fabric共識機制優化方案

                    孟吳同 張大偉

                    孟吳同, 張大偉. Hyperledger Fabric共識機制優化方案. 自動化學報, 2020, 46(x): 1?14. doi: 10.16383/j.aas.c190516
                    引用本文: 孟吳同, 張大偉. Hyperledger Fabric共識機制優化方案. 自動化學報, 2020, 46(x): 1?14. doi: 10.16383/j.aas.c190516
                    Meng Wu-Tong, Zhang Da-Wei. Optimization scheme for hyperledger fabric consensus mechanism. Acta Automatica Sinica, 2020, 46(x): 1?14. doi: 10.16383/j.aas.c190516
                    Citation: Meng Wu-Tong, Zhang Da-Wei. Optimization scheme for hyperledger fabric consensus mechanism. Acta Automatica Sinica, 2020, 46(x): 1?14. doi: 10.16383/j.aas.c190516

                    Hyperledger Fabric共識機制優化方案


                    DOI: 10.16383/j.aas.c190516
                    詳細信息
                      作者簡介:

                      北京交通大學碩士研究生. 2017年獲得河北大學網絡工程學士學位. 主要研究方向為區塊鏈.E-mail: mengwt@bjtu.edu.cn

                      北京交通大學計算機與信息技術學院副教授. 2004年于北京航空航天大學獲得通信與信息系統專業博士學位. 主要研究方向為區塊鏈, 安全協議, 可信計算. 本文通信作者.E-mail: dwzhang@bjtu.edu.cn

                    • 基金項目:  國家留學基金(201807095023)資助

                    Optimization Scheme for Hyperledger Fabric Consensus Mechanism

                    More Information
                    • Fund Project:  Supported by China Scholarship Council (201807095023)
                    • 摘要: 針對Hyperledger Fabric使用固定背書節點處理交易所帶來的安全風險和性能瓶頸問題, 提出了一種非交互、可驗證的隨機化背書節點優化方案. 基于“背書-排序-驗證”的Hyperledger Fabric共識模型, 引入背書節點候選集, 使用可驗證隨機函數隨機抽取背書節點進行交易背書, 實現了可驗證情況下背書節點的非交互式隨機選取和背書過程的并行處理. 分析和實驗表明, 優化后的共識機制具有更高的安全性和更快的交易處理速度.
                    • 圖  1  Hyperledger Fabric共識機制示意圖

                      Fig.  1  Diagrammatic sketch of hyperledger fabric consensus mechanism parameters

                      圖  2  優化后的Hyperledger Fabric共識機制

                      Fig.  2  Diagrammatic sketch of optimized hyperledger fabric consensus mechanism

                      圖  3  敵手攻擊成功的概率

                      Fig.  3  Probability of successful enemy attack consensus mechanism

                      圖  4  實驗網絡拓撲圖

                      Fig.  4  Network topology of experiment

                      圖  5  原有方案與優化方案交易時間對比

                      Fig.  5  The comparison of transaction time between original scheme and optimized scheme

                      圖  6  原有方案與優化方案交易延遲對比

                      Fig.  6  The comparison of transaction delay between original scheme and optimized scheme

                      圖  7  原有方案與優化方案交易成本對比

                      Fig.  7  The comparison of transaction delay between original plan and optimization scheme

                      表  1  優化方案與其他共識機制的對比

                      Table  1  Comparison of optimization schemes with other consensus mechanisms

                      共識機制 VRF的作用 共識原理 資源消耗 容錯能力
                      Algorand 出塊節點的選取 VRF+PBFT $3f+1$
                      Definity 出塊節點的選取 VRF+PoS 較高 $2f+1$
                      Ouroboros Praos 出塊節點的選取 VRF+PoS 較高 $2f+1$
                      優化方案 背書節點的選取 VRF+背書+排序+驗證 F($m,t$)
                      下載: 導出CSV

                      表  2  無背書節點情況發生次數

                      Table  2  Frequency of nonoccurence of endorsing peer

                      交易次數 敵手成功次數 攻擊成功概率
                      原始方案 1000 1000 100%
                      優化方案 100000 686 6.86%
                      下載: 導出CSV

                      表  3  無背書節點情況發生次數

                      Table  3  Frequency of nonoccurence of endorsing peer

                      交易次數 是否使用計時重傳 無背書節點情況發生次數
                      1000 2
                      100000 17
                      1000 0
                      100000 0
                      下載: 導出CSV

                      表  4  可驗證隨機函數各部分算法運行時間

                      Table  4  Running time of each part of the vrf algorithm

                      算法 次數 總時間(ms) 平均時間(ms)
                      生成密鑰 10000 2878.3546 0.2878
                      生成隨機數和證明 10000 10395.3927 1.0395
                      驗證隨機數和證明 10000 12874.6190 1.2875
                      下載: 導出CSV
                      360彩票
                    • [1] Nakamoto S. Bitcoin: a peer-to-peer electronic cash system[Online], available: https://bitcoin.org/bitcoin.pdf, December 17, 2019
                      [2] 劉敖迪, 杜學繪, 王娜, 李少卓. 區塊鏈技術及其在信息安全領域的研究進展. 軟件學報, 2018, 29(7): 2092?2115

                      2 Liu Ao-Di, Du Xue-Hui, Wang Na, Li Shao-Zhuo. Research progress of blockchain technology and its application in information security. Journal of Software, 2018, 29(7): 2092?2115
                      [3] 韓璇, 袁勇, 王飛躍. 區塊鏈安全問題:研究現狀與展望. 自動化學報, 2019, 45(1): 206?225

                      3 Han Xuan, Yuan Yong, Wang Fei-Yue. Security problems on blockchain: the state of the art and future trends. Acta Automatica Sinica, 2019, 45(1): 206?225
                      [4] 4 Nguyen G T, Kim K. A survey about consensus algorithms used in blockchain. Journal of Information Processing Systems, 2018, 14(1): 101?128
                      [5] Elli A, Artem B, Vita B, Christian C, Konstantinos C, Angelo D. Hyperledger Fabric: a distributed operating system for permissioned blockchains. In: Proceedings of the Thirteenth EuroSys Conference. Porto, Portugal: ACM, 2018. 30
                      [6] Vukoli? M. Rethinking permissioned blockchains. In: Proceedings of the ACM Workshop on Blockchain, Cryptocurrencies and Contracts. Abu Dhabi, United Arab Emirates: ACM, 2017. 3−7
                      [7] Bessani A, Sousa J, Vukoli? M. A byzantine fault-tolerant ordering service for the Hyperledger Fabric blockchain platform. In: Proceedings of The Workshop on Scalable & Resilient Infrastructures for Distributed Ledgers. Luxembourg City, Luxembourg: IEEE, 2018. 51−58
                      [8] 袁勇, 王飛躍. 區塊鏈技術發展現狀與展望. 自動化學報, 2016, 42(4): 481?494

                      8 Yuan Yong, Wang Fei-Yue. Blockchain: The state of the art and future trends. Acta Automatica Sinica, 2016, 42(4): 481?494
                      [9] Bach L M, Mihaljevic B, Zagar M. Comparative analysis of blockchain consensus algorithms In: Proceedings of 2018 41st International Convention on Information and Communication Technology, Electronics and Microelectronics (MIPRO). Opatija, Croatia: IEEE, 2018. 1545−1550
                      [10] 10 Lamport L, Shostak R, Pease M. The byzantine generals problem. Acm Transactions on Programming Languages & Systems, 1982, 4(3): 382?401
                      [11] 11 Lamport L. Paxos made simple. ACM Sigact News, 2001, 32(4): 18?25
                      [12] Ongaro D, Ousterhout J. In search of an understandable consensus algorithm. In: Proceedings of Usenix Conference on Usenix Technical Conference. Philadelphia, PA, USA: ACM, 2014. 305−319
                      [13] 范捷, 易樂天, 舒繼武. 拜占庭系統技術研究綜述. 軟件學報, 2013, 24(6): 1346?1360

                      13 Fan Jie, Yi Le-Tian, Shu Ji-Wu. Research on the technologies of byzantine system. Journal of Software, 2013, 24(6): 1346?1360
                      [14] Castro M, Liskov B. Practical byzantine fault tolerance. In: Proceedings of the third Symposium on Operating Systems Design and Implementation. New Orleans, Louisiana, USA: OSDI, 1999.173−186
                      [15] 袁勇, 倪曉春, 曾帥, 王飛躍. 區塊鏈共識算法的發展現狀與展望. 自動化學報, 2018, 44(11): 2011?2022

                      15 Yuan Yong, Ni Xiao-Chun, Zeng Shuai, Wang Fei-Yue. Blockchain consensus algorithms: the state of the art and future trends. Acta Automatica Sinica, 2018, 44(11): 2011?2022
                      [16] Bentov I, Lee C, Mizrahi A, Rosenfeld M. Proof of activity: extending bitcoin's proof of work via proof of stake.[Online], available: http://eprint.iacr.org/2014/452, December 16, 2019
                      [17] S. King and S. Nadal. PPCoin: peer-to-peer crypto-currency with proofof-stake(whitepaper), available: https://bitcoin.peryaudo.org/vendor/peercoin-paper.pdf, December 17, 2019
                      [18] Li W, Andreina S, Bohli J M, Karame G. Securing proof-of-stake blockchain protocols. In: Proceedings of Cryptocurrencies and Blockchain Technology.Barcelona, Spain: Springer, 2017. 297−315
                      [19] Bitshares. Delegated proof of stake[Online], available: https://docs.bitshares.org/en/master/technology/dpos.html, December 17, 2019
                      [20] Silvio M, Salil V, Michael R. Verifiable random functions. In: 40th Annual Symposium on Foundations of Computer Science. New York, USA : IEEE, 1999. 120−130
                      [21] Abdalla M, Catalano D, Fiore D. Verifiable random functions from identity-based key encapsulation. In: Proceedings of Annual International Conference on the Theory and Applications of Cryptographic Techniques. Cologne, Germany: Springer, 2009.554−571
                      [22] Gilad Y, Hemo R, Micali S, Vlachos G, Zeldovich K. Algorand: scaling byzantine agreements for cryptocurrencies. In: Proceedings of the 26th Symposium on Operating Systems Principles. Shanghai, China: ACM, 2017.51−68
                      [23] Hanke T, Movahedi M, Williams D. Dfinity technology overview series, consensus system. arXiv preprint arXiv: 2018, 1805.04548
                      [24] Boneh D, Boyen X. Short signatures without random oracles. In: Proceedings of International conference on the theory and applications of cryptographic techniques. Interlaken, Switzerland: Springer, 2004. 56−73
                      [25] Kiayias A, Russell A, David B, Oliynykov R. Ouroboros: a provably secure proof-of-stake blockchain protocol. In: Proceedings of Annual International Cryptology Conference. Paris, France: Springer, 2017.357−388
                      [26] David B, Ga?i P, Kiayias A, Russell A. Ouroboros Praos: an adaptively-secure, semi-synchronous proof-of-stake blockchain. In: Proceedings of Annual International Conference on the Theory and Applications of Cryptographic Techniques. Tel Aviv, Israel: Springer, 2018. 66−98.
                      [27] Hearn M. Corda: A distributed ledger[Online], available: https://docs.corda.net/releases/release-V3.1/-\\static/corda-technical-whitepaper.pdf, December 17, 2019
                      [28] Yamashita K, Nomura Y, Zhou E, Pi B, Jun S. Potential risks of Hyperledger Fabric smart contracts. In: Proceedings of 2019 IEEE International Workshop on Blockchain Oriented Software Engineering (IWBOSE). Hangzhou, China: IEEE, 2019. 1−10
                      [29] 29 Manevich Y, Barger A, Tock Y. Endorsement in Hyperledger Fabric via service discovery. IBM Journal of Research and Development, 2019, 63(2): 1?9
                      [30] Brandenburger M, Cachin C, Kapitza R, Sorniotti A. blockchain and trusted computing: problems, pitfalls, and a solution for Hyperledger Fabric. arXiv preprint arXiv, 2018, 1805.08541
                      [31] Sukhwani H, Wang N, Trivedi K S, Rindos A. performance modeling of Hyperledger Fabric (permissioned blockchain network). In: Proceedings of 2018 IEEE 17th International Symposium on Network Computing and Applications (NCA). Cambridge, MA, USA: IEEE, 2018.1−8
                      [32] Sukhwani H, Martínez J M, Chang X, Trivedi K, Rindos A. Performance modeling of pbft consensus process for permissioned blockchain network (hyperledger fabric).In: Proceedings of 2017 IEEE 36th Symposium on Reliable Distributed Systems (SRDS). Hong Kong, China: IEEE, 2017. 253−255
                      [33] Baliga A, Solanki N, Verekar S, Pednekar A, Kamat P, Chatterjee S. Performance characterization of Hyperledger Fabric. In: Proceedings of 2018 Crypto Valley Conference on Blockchain Technology (CVCBT). Zug, Switzerland: IEEE, 2018. 65−74.
                      [34] Goldberg S, Reyzin L, Papadopoulos D, Vcelak J. Verifiable random functions (VRFs)[Online], available: https://datatracker.ietf.org/doc/draft-irtf-cfrg-vrf/, February 08, 2019
                      [35] Boneh D, Lynn B, Shacham H. Short signatures from the Weil pairing. In: Proceedings of International Conference on the Theory and Application of Cryptology and Information Security. Gold Coast, Australia: Springer, 2001. 514−532
                      [36] 36 Carter J L, Wegman M N. Universal classes of hash functions. Journal of computer and system sciences, 1979, 18(2): 143?154 doi:  10.1016/0022-0000(79)90044-8
                      [37] Nguyen T S L, Jourjon G, Potop-Butucaru M, Thai K L. Impact of network delays on Hyperledger Fabric. arXiv preprint arXiv: 2019. 1903.08856
                    • [1] 袁勇, 王飛躍. 可編輯區塊鏈: 模型、技術與方法[J]. 自動化學報, doi: 10.16383/j.aas.2020.y000002
                      [2] 張超, 李強, 陳子豪, 黎祖睿, 張震. Medical Chain:聯盟式醫療區塊鏈系統[J]. 自動化學報, doi: 10.16383/j.aas.c180131
                      [3] 歐陽麗煒, 王帥, 袁勇, 倪曉春, 王飛躍. 智能合約:架構及進展[J]. 自動化學報, doi: 10.16383/j.aas.c180586
                      [4] 曾帥, 袁勇, 倪曉春, 王飛躍. 面向比特幣的區塊鏈擴容:關鍵技術, 制約因素與衍生問題[J]. 自動化學報, doi: 10.16383/j.aas.c180100
                      [5] 韓璇, 袁勇, 王飛躍. 區塊鏈安全問題:研究現狀與展望[J]. 自動化學報, doi: 10.16383/j.aas.c180710
                      [6] 王飛躍, 張軍, 張俊, 王曉. 工業智聯網:基本概念、關鍵技術與核心應用[J]. 自動化學報, doi: 10.16383/j.aas.2018.y000004
                      [7] 王飛躍, 孫奇, 江國進, 譚珂, 張俊, 侯家琛, 熊剛, 朱鳳華, 韓雙雙, 董西松, 王嫘. 核能5.0:智能時代的核電工業新形態與體系架構[J]. 自動化學報, doi: 10.16383/j.aas.2018.y000003
                      [8] 袁勇, 倪曉春, 曾帥, 王飛躍. 區塊鏈共識算法的發展現狀與展望[J]. 自動化學報, doi: 10.16383/j.aas.2018.c180268
                      [9] 袁勇, 周濤, 周傲英, 段永朝, 王飛躍. 區塊鏈技術:從數據智能到知識自動化[J]. 自動化學報
                      [10] 袁勇, 周濤, 周傲英, 段永朝, 王飛躍. 區塊鏈技術:從數據智能到知識自動化[J]. 自動化學報
                      [11] 王飛躍, 張俊. 智聯網:概念、問題和平臺[J]. 自動化學報, doi: 10.16383/j.aas.2017.y000006
                      [12] 張俊, 高文忠, 張應晨, 鄭心湖, 楊柳青, 郝君, 戴瀟瀟. 運行于區塊鏈上的智能分布式電力能源系統:需求、概念、方法以及展望[J]. 自動化學報, doi: 10.16383/j.aas.2017.c160744
                      [13] 唐長兵, 楊珍, 鄭忠龍, 陳中育, 李翔. PoW共識算法中的博弈困境分析與優化[J]. 自動化學報, doi: 10.16383/j.aas.2017.c160672
                      [14] 袁勇, 王飛躍. 平行區塊鏈:概念、方法與內涵解析[J]. 自動化學報, doi: 10.16383/j.aas.2017.c170543
                      [15] 李牧南. 區塊鏈和比特幣相關主題的知識結構分析:共被引和耦合聚類分析視角[J]. 自動化學報, doi: 10.16383/j.aas.2017.c160648
                      [16] 薛騰飛, 傅群超, 王樅, 王新宴. 基于區塊鏈的醫療數據共享模型研究[J]. 自動化學報, doi: 10.16383/j.aas.2017.c160661
                      [17] 袁勇, 王飛躍. 區塊鏈技術發展現狀與展望[J]. 自動化學報
                      [18] 袁勇, 王飛躍. 區塊鏈技術發展現狀與展望[J]. 自動化學報, doi: 10.16383/j.aas.2016.c160158
                      [19] 李聰, 駱志剛. 基于數據非隨機缺失機制的推薦系統托攻擊探測[J]. 自動化學報, doi: 10.3724/SP.J.1004.2013.01681
                      [20] 蔣昌俊, 疏松桂, 鄭應平. 約束并發機制下Petri網模型的邏輯行為考察與隨機性能評估[J]. 自動化學報
                    • 加載中
                    計量
                    • 文章訪問數:  1913
                    • HTML全文瀏覽量:  1772
                    • 被引次數: 0
                    出版歷程
                    • 收稿日期:  2019-07-07
                    • 錄用日期:  2019-12-15
                    • 網絡出版日期:  2020-01-20

                    Hyperledger Fabric共識機制優化方案

                    doi: 10.16383/j.aas.c190516
                      基金項目:  國家留學基金(201807095023)資助
                      作者簡介:

                      北京交通大學碩士研究生. 2017年獲得河北大學網絡工程學士學位. 主要研究方向為區塊鏈.E-mail: mengwt@bjtu.edu.cn

                      北京交通大學計算機與信息技術學院副教授. 2004年于北京航空航天大學獲得通信與信息系統專業博士學位. 主要研究方向為區塊鏈, 安全協議, 可信計算. 本文通信作者.E-mail: dwzhang@bjtu.edu.cn

                    摘要: 針對Hyperledger Fabric使用固定背書節點處理交易所帶來的安全風險和性能瓶頸問題, 提出了一種非交互、可驗證的隨機化背書節點優化方案. 基于“背書-排序-驗證”的Hyperledger Fabric共識模型, 引入背書節點候選集, 使用可驗證隨機函數隨機抽取背書節點進行交易背書, 實現了可驗證情況下背書節點的非交互式隨機選取和背書過程的并行處理. 分析和實驗表明, 優化后的共識機制具有更高的安全性和更快的交易處理速度.

                    English Abstract

                    孟吳同, 張大偉. Hyperledger Fabric共識機制優化方案. 自動化學報, 2020, 46(x): 1?14. doi: 10.16383/j.aas.c190516
                    引用本文: 孟吳同, 張大偉. Hyperledger Fabric共識機制優化方案. 自動化學報, 2020, 46(x): 1?14. doi: 10.16383/j.aas.c190516
                    Meng Wu-Tong, Zhang Da-Wei. Optimization scheme for hyperledger fabric consensus mechanism. Acta Automatica Sinica, 2020, 46(x): 1?14. doi: 10.16383/j.aas.c190516
                    Citation: Meng Wu-Tong, Zhang Da-Wei. Optimization scheme for hyperledger fabric consensus mechanism. Acta Automatica Sinica, 2020, 46(x): 1?14. doi: 10.16383/j.aas.c190516
                    • 來源于比特幣[1]的區塊鏈融合了數學、密碼學、計算機科學等多種技術, 其去中心化、不可篡改、多方維護等特性使得區塊鏈得到了各個領域的 廣泛關注. 隨著人們對區塊鏈技術的深入研究和普及推廣, 區塊鏈很可能對當今互聯網產生顛覆式的影響.

                      區塊鏈技術的一個核心問題是在無中心、弱信任的分布式系統中讓各個節點達成共識. 所謂共識, 簡單來說是讓分布式系統中各 個節點對某個值或某種狀態產生相同的看法[2]. 達成共識的方法就是區塊鏈的核心技術 - 共識機制. 共識機制需要注重安全性、效率和能耗等問題[3], 從而保證區塊鏈系統能夠正 常運行. 目前主流的共識機制有工作量證明(Proof of Work, PoW), 權益證明(Proof of Stake, PoS)、授權權益證明(Delegated Proof of Stake, DPoS)等證明類共識機制, 以及實用拜占庭容錯(Practical Byzantine Fault Tolerance, PBFT)等傳統分布式系統一致性算法[4]. 不同于前面提到的幾種共識機制, Hyperledger Fabric采用“背書-排序-驗證”的方式來達成共識[5].

                      Hyperledger Fabric將應用層的信任模型同底層的共識協議解耦, 拆分共識過程為交易內容合法性驗證和交易順序一致性保證兩個步驟. 背書和驗證保證交 易內容的合法性, 排序保證交易順序的一致性. 通過將這兩部分進行解耦[6], 智能合約的開發者可以設計更為靈活的信任模型, Hyperledger Fabric網絡也獲得了更快的交易處理速度. 但是在Hyperledger Fabric中, 背書節點屬于關鍵節點, 數量較少卻承擔著對所有交易內容的合法性進行背書的重要任務; 并且為了便于交易客戶 端識別和驗證, 背書節點的身份必須公開. 在區塊鏈網絡中身份公開且承載著大量的敏感交易數據, 這必然使得背書節 點成為敵手的首要攻擊目標. 此外, 由于每個背書節點都要處理所有的交易, 因此使其成為系統中交易處理的性能瓶頸, 單個背書節點的處理能力限制了整個區塊鏈網絡的交易速度.

                      Hyperledger Fabric將應用層信任同底層共識協議相解耦的共識模型非常利于構建基于業務邏輯的共識機制, 因此在實際系統中得到了廣泛應用. 目前Hyperledger Fabric共識機制的相關研究工作在對背書節點高度信任的假設前提下多側重于排序過程的改進, 即對交易順序一致性進行優化[7]. 而忽視了對于背書節點和 共識機制的安全性考量. 事實上由于交易安全性高度依賴于固定身份的背書節點, 背書節點一旦被惡意攻擊, 最終賬本數據的正確性將無從保證. 公有鏈系統 所面臨的開放式網絡環境使得其共識機制的設計充分考慮了安全性問題, 多使用隨機抽取共識節點的方法使敵手難以選擇攻擊目標, 從而提高攻擊難度. 因此, 本文針對聯盟 鏈中共識機制的安全性問題, 在“背書-排序-驗證”共識模型的基礎上引入非交互式可驗證隨機節點抽取方法, 提出了一種Hyperledger Fabric共識機制的優化方案:

                      1) 引入背書節點候選集, 使用可驗證隨機函數(Verifiable Random Functions, VRF)的隨機輸出特性在非交互模式下抽取背書節點, 降低背書節點中心化程度, 增加系統的抗攻擊能力;

                      2) 交易客戶端利用可驗證隨機函數的驗證特性來完成背書節點的身份認證, 從而在節點隨機抽取過程中確保背書節點身份的真實性和可驗證性;

                      3) 將原有的一組背書節點為所有交易背書, 改進為多組背書節點為交易進行背書, 使用并行處理的方式, 提高交易處理速度.

                      本文結構如下: 第一節概述了區塊鏈共識機制需考慮的關鍵問題、可驗證隨機函數 的定義以及可驗證隨機函數在區塊鏈共識機制中的應用; 第二節詳細介紹了Hyperledger Fabric的共識機制及其存在的問題; 第三節針對Hyperledger Fabric存在的問題提出了具體的優化方案; 第四節對優化方案的安全性和性能進行了分析; 第五節構建了優化方案的原型系統, 對方案的性能進行了對比測試; 第六節對本文工作進行了總結.

                      • 區塊鏈技術本身是基于分布式系統的, 因此區塊鏈技術仍然需要解決一些分布式系統中存在的問題. 其中最核心的問題是如何高效的就不同節點數據一致性達成共識, 因此需要從安全性和共識速度兩個角度設計共識算法[8].

                        共識問題受多種系統因素的影響, 比如節點數量的多少, 是否具有拜占庭節點等. 節點數量是區塊鏈系統去中心化程度的直觀表現. 節點數量與賬本的安全性成正比, 與共識難度成反比. 即節點數量越多, 賬本的備份也就越多, 攻擊者修改賬本的難度越高, 數據越安全, 但是讓這些節點的賬本保持一致性的難度也越高[9]. 拜占庭節點來源于拜占庭將軍問題[10], 是指系統中因運行故障(如, 被惡意攻擊) 而發送錯誤信息的節點. 在不具有拜占庭節點的網絡中, 僅存在數據丟包和延遲等非惡意行為; 而在具有拜占庭節點的網絡中, 惡意節點可能會主動發送錯誤信息, 以謀取利益. 在不考慮非拜占庭節點的情況下, Paxos[11], Raft[12]等算法可以實現較為高效的共識, 但是現實中很難構建一個不存在非拜占庭節點的系統, 因此大多數共識算法基于的安全模型中都是存在拜占庭節點的.

                        傳統分布式一致性算法一般采用協商的方式解決共識問題[13], 如1999 年, Barbara Liskov等提出的PBFT[14]算法(Practical Byzantine Fault Tolerance, PBFT)可以在保證活性(Liveness) 和安全性(Safety) 的前提下提供(n-1)/3 的容錯性(其中n 為節點總數). PBFT算法共識速度快且易于實現, 但是PBFT算法的消息復雜度(O(N2))會隨節點的增加而增加, 因此不適用于大規模節點的場景.

                        從另一個角度講, 拜占庭節點可以理解為被敵手攻擊的節點, 減少拜占庭節點的產生, 需要增加敵手的攻擊難度. 為此, 一方面可以增加節點數量, 另一方面是增加出塊節點的隨機性[15]. 傳統分布式一致性算法往往會因為節點數量的增加而帶來巨大的通信量, 因此更多共識算法選擇后者來保證安全性.

                        以工作量證明為例, 工作量證明[1](Proof of Work, PoW)使用“挖礦”的方式隨機選取出塊者. “挖礦”是指每個節點不斷嘗試解決一個求解困難但是驗證容易的數學難題. 最快解決該難題的節點會獲得發布下一區塊的權利(記賬權)以及系統的獎勵. PoW的隨機性依賴于哈希函數值的均勻分布, 但是大量的哈希計算伴隨著巨大的能源消耗, 而且這種消耗所用來解決的問題是無意義的[16]. 同時隨著“礦機”的產生及發展, 計算能力逐漸被一些大的礦池壟斷, 也對系統安全性產生了威脅. 此外PoW共識的效率較低, 過長的出塊時間和交易確認時間難以滿足現實需求.

                        權益證明[17](Proof of Stake, PoS)同樣是使用“挖礦”的方式選取出塊者, 但是“挖礦”成功的概率與節點的權益有關, 節點持有的權益越大, “挖礦”成功的概率越高, 這從整體上加快了區塊的產出速度, 提高了共識的效率, 同時計算量不再是“挖礦”的主要影響因素, 從而減少了大量計算帶來的資源浪費. 但是PoS中存在的“無利害攻擊”, “長程攻擊”等問題使PoS的安全性備受質疑[18].

                        在PoS的基礎上, 授權權益證明[19](Delegated Poof of stake, DPoS)通過犧牲一定的“去中心化”特性以實現更高的共識效率. 每個節點可以將其持有的權益作為選票投給一名代表, 最終投票最多的前N個用戶會構成參與共識的“委員會”, 每一個委員輪流負責對交易進行打包, 生成區塊. 由于參與共識節點數量的減少, DPoS具有很高的交易速度. 但DPoS在去中心化過程中所產生的代理節點令敵手的攻擊目標更加明確, 從而降低了敵手的攻擊成本.

                        從上述共識算法可以看出, 隨機選取節點可以增加共識機制的安全性, 因此隨機選取方式的設計變得尤為關鍵, 隨機選取算法既要保證結果的隨機性還要具有較高的運行效率.

                      • 可驗證隨機函數(Verifiable Random Function, VRF)[20]是由Silvio Micali等人于1999年提出的. VRF本質上是一類具有驗證功能的偽隨機函數. 對于一個特定的輸入$ x $以及輸入者的私鑰 $ SK $, VRF會輸出一個隨機數$ v $以及一個證明$ proof $, 驗證者可以通過輸出的隨機數、證明和輸入這三部分驗證出隨機數是否是由該輸入產生. 這個過程不必暴露輸入者的私鑰, 因此是安全的.

                        VRF需要滿足三個性質: 可驗證性、確定性和隨機性:

                        $ \bullet $ 可驗證性是指通過$ proof $可以驗證出$ v $$ SK $$ v $對應的輸出.

                        $ \bullet $ 確定性是指在$ SK $$ x $不變的情況下, 輸出的$ v $也是不變的.

                        $ \bullet $ 隨機性是指在不給定證明$ proof $的情況下, VRF的輸出$ v $與一個隨機數對于敵手來說兩者之間是不可區分的.

                        文獻[21]中的VRF具體定義如下: VRF: 設$ G $,$ F $,$ V $是多項式時間算法:

                        $ \bullet $ $ G $是一個概率性算法, 其輸入是安全參數$ k $, 輸出公鑰$ PK $和私鑰$ SK $;

                        $ \bullet $ $ F $ = ($ F_1 $,$ F_2 $)是一個確定性算法, 輸入包括$ x $和私鑰$ SK $, 輸出為$ value $ = $ F_1 $($ x $,$ SK $)和$ proof $ = $ F_2 $(x,$ SK $), 其中$ value $是VRF輸出的隨機值,$ proof $是對隨機值的證明;

                        $ \bullet $ $ V $是一個概率性算法, 輸入為:($ PK $,$ x $,$ v $,$ proof $), 輸出為YES或NO.

                        $ a : {\bf N} \rightarrow {\bf N} \in \{*\}; b, s:{\bf N}\rightarrow {\bf N} $是任意三個poly($ k $)時間內可計算的函數, 并且都以一個$ k $的多項式為上界(除非a$ \in ${0,1}$ ^{*} $), 其中k為安全參數. 我們稱(G, F, V)是輸入長度為a($ k $)、輸出長度為b($ k $)、安全性為s($ k $)的可驗證的偽隨機函數(VRF), 如果滿足以下幾條性質:

                        (1)下面兩條以1-$ 2^{-\Omega(k)} $的概率成立, 其中($ PK $,$ SK $)$ \overset{R}{\leftarrow} $$ G $(1$ ^{k} $):

                        1)值域的正確性:

                        對于任意$ x $$ \in ${0,1}$ ^{a(k)} $,$ F_1 $($ SK $,$ x $)$ \in ${0,1}$ ^{b(k)} $

                        2)完全可證性:

                        對于任意$ x $$ \in ${0,1}$ ^{a(k)} $, 如果$ v =F_1 (SK,x) $$ proof $ = $ F_2 $($ SK $,$ x $)那么

                        $$ \begin{array}{l} Pr[V(PK, x, v, proof) = \rm{YES}]>1-2^{-\text{Ω}(k)} \end{array} $$ (1)

                        (2)唯一可證性:

                        對每一個$ PK $,$ x $,$ v_1 $,$ v_2 $,$ proof_1 $,$ proof_2 $, 其中$ v_1\neq v_2 $, 下面的不等式對于i = 1或i = 2都成立:

                        $$ \begin{array}{l} Pr[V(PK, x, v_i, proof_i) = \rm{YES}]>1-2^{-\text{Ω}(k)} \end{array} $$ (2)

                        (3)剩余偽隨機性:

                        $ T $ = ($ T_{E} $,$ T_{J} $)是任意一對算法, 滿足第一次輸入為1$ ^{k} $時,$ T_E(\cdot, \cdot) $$ T_J(\cdot, \cdot) $總共運行了最多$ s(k) $步, 則T在下面的實驗中成功的概率至多為1/2+1/$ s(k) $:

                        1)運行$ G $(1$ ^k $), 得到($ PK, SK $).

                        2)運行$ {T}_{E}^{F(SK, \cdot)}(1^k, PK) $, 得到$ (x, state) $.

                        3)選擇$ r $$ \overset{R}{\leftarrow} ${0,1}:

                        ①如果$ r $ = 0, 選擇$ v $ = $ F_1 $($ SK $,$ x $)

                        ②如果$ r $ = 1, 選擇v$ \overset{R}{\leftarrow}\{0,1\}^{b(k)} $

                        4)運行$ {T}_{J}^{F(SK, \cdot)}(1^k, PK) $, 得到值$ guess $.

                        5)如果$ x $$ \in ${0,1}$ ^{a(k)} $,$ guess = r $, 并且$ x $沒有被$ T_{E} $$ T_{J} $作為$ F $($ SK $,$ \cdot $)的查詢串查詢過, 則$ T= $$ (T_{E} $,$ T_{J} $)成功.

                      • 可驗證隨機函數在提出之后, 一般主要用在密鑰封裝[21]、數字簽名等領域. 隨著近年來人們對區塊鏈技術的深入研究, 可驗證隨機函數的特性使其開始被應用在共識機制的設計中.

                        2016 年, Sivio Micali等人提出的Algorand[22], 將可驗證隨機函數與PBFT算法相結合. 使用可驗證隨機函數選取出塊者, 之后采用類似于PBFT的協議進行通過若干輪投票, 而每一輪的投票者也是通過可驗證隨機函數選出的. 該共識算法具有較高的安全性和交易速度.

                        2016年Timo Hanke等人提出的Dfinity[23], 將全網中節點分為多組委員會, 當前負責出塊的委員會中的每個成員使用基于BLS門限簽名算法[24]的可驗證隨機函數選擇出塊節點, 然后閾值中繼技術(threshold relay technology)選出其下一輪負責出塊的委員會, 從而達到安全而快速生成區塊的目的.

                        2017年Kiayias等人提出的Ouroboros[25]共識算法在PoS的基礎上, 使用秘密共享和追隨中本聰算法選取出塊節點. 算法本身雖然經過安全性證明, 但是其出塊節點身份可以被提前獲知, 可能導致敵手的攻擊, 因此2018年Ouroboros的第二個版本Praos[26]使用可驗證隨機函數代替原有的選取算法來抽取出塊節點, 增強了原有共識機制的安全性.

                        由此可見, 可驗證隨機函數已在區塊鏈領域成為非交互模式下節點身份隨機選取的重要工具.

                        需要注意的是, Algorand、Dfinity、Ouroboros Praox均是公有鏈系統, 網絡中的節點身份是對等的, 因此他們面臨的問題一般是如何從全網的節點中安全的選出一個出塊節點. 而Hyperledger Fabric、Corda[27]等聯盟鏈系統則采用分層信任模型, 并且達成共識的過程也解耦為應用層信任和底層共識兩部分, 需要具有不同職能的節點共同參與. 其中一些節點會對交易內容的合法性進行背書, 因此在共識過程中承擔著重要任務, 我們稱之為關鍵節點, 如Hyperledger Fabric中的背書節點和Corda中的Notary節點. 這些節點的身份一般會在區塊鏈網絡構建之初就確定下來, 因此攻擊者可以直接確定攻擊目標, 一旦攻擊成功, 會對整個系統造成嚴重危害. 所以這些聯盟鏈系統面臨的問題是如何降低關鍵節點被攻擊的風險. 通過借鑒公有鏈中利用可驗證隨機函數抽取節點的方式, 將關鍵節點的身份由固定變為隨機抽取的, 可以使敵手的攻擊目標不再明確, 這樣就降低了關鍵節點被攻擊的風險.

                      • Hyperledger 是linux基金會于2015年主導發起的開源項目, 其子項目Hyperledger Fabric是一個允許多方參與、開發、部署和運行區塊鏈應用的聯盟鏈平臺[7]. Hyperledger Fabric旨在創造一個模塊化和可擴展的區塊鏈開發框架, 為企業級區塊鏈應用的開發提供解決方案. Hyperledger Fabric區塊鏈系統主要包含以下幾部分組件:

                        鏈碼(Chaincode): 鏈碼是Hyperledger Fabric中的智能合約, 它以代碼的形式將復雜的業務邏輯固定在Fabric系統中. 當滿足特定條件時, 鏈碼會被執行[28].

                        客戶端(Client): 客戶端是用戶與Hyperledger Fabric網絡的接入點, 其上會部署專有的SDK. 用戶可使用客戶端發起交易請求, 即提案(Proposal).

                        背書節點(Endorser): 在Hyperledger Fabric中, 當客戶端想要發起交易時, 首先需要為交易得到一定數量的背書(Endorsement), 這些背書來自背書節點. 背書節點會通過運行鏈碼模擬執行交易, 生成讀寫集, 之后會為該交易進行背書(對讀寫集進行簽名, 并附加自己的身份), 以證明該交易已經過背書節點處理[29].

                        排序節點(Orderer): 在Hyperledger Fabric中通過多個排序節點來提供排序服務[30]. 排序服務接收來自全網的所有交易并將交易按照時間排序、打包成塊. 排序服務并不參與交易的執行與驗證, 因此并不關心交易的具體內容, 排序服務的目標是就交易產生的順序達成一致的結果, 并將這個結果廣播出去.

                        提交節點(Committer): 提交節點是Hyperledger Fabric網絡中賬本維護的主體. 提交節點接收排序服務打包的區塊, 驗證區塊中交易的有效性, 并據此將有效交易提交到賬本. 另外, 背書節點也屬于提交節點, 背書是其在維護賬本基礎上的額外功能.

                      • 圖1所示, Hyperledger Fabric共識機制如下:

                        圖  1  Hyperledger Fabric共識機制示意圖

                        Figure 1.  Diagrammatic sketch of hyperledger fabric consensus mechanism parameters

                        (1)客戶端創建一個提案, 依據背書策略將其發送給相應的背書節點. 提案包含了需要調用的鏈碼函數及其參數、時間戳和客戶端簽名等信息;

                        (2)背書節點會驗證客戶端簽名, 確保提案是由已認證的客戶端發出. 否則終止交易. 背書節點執行背書過程, 即根據提案使用鏈碼模擬執行交易請求, 生成執行結果并附加背書節點的簽名. 模擬執行的結果是一組基于當前賬本狀態的讀寫集, 也就是說背書過程并不會更改當前賬本的狀態;

                        (3)客戶端驗證背書結果的簽名, 確保其來自合法的背書節點. 否則終止交易. 由于一筆交易可能會需要多個背書節點進行背書, 客戶端會收集來自不同節點的背書結果并比較這些結果中的讀寫集是否一致. 如果一致則根據背書結果生成交易(transaction, 簡記為tx)然后發送給排序服務, 否則終止交易.

                        (4)當存在多個排序節點時, Hyperledger Fabric使用Kafka[31]對交易進行排序. 排序節點在收到來自客戶端的交易后, 會將接收到的交易發送到Kafka集群中, 同時會按照一定的規則從Kafka集群中讀取一定數量的排序好的交易, 然后打包成塊. 排序服務對區塊簽名后, 將區塊分發給提交節點;

                        (5)當提交節點收到區塊后, 會對區塊進行驗證. 提交節點使用讀寫集合的讀集部分來檢查交易的有效性, 如果一筆交易通過了有效性驗證, 提交節點會使用寫集更新狀態數據庫.

                        當各個提交節點完成以上操作后, 可以視為對該客戶端發起的交易達成了共識. 在這一過程中, 背書策略和背書過程確保了交易(鏈碼)按照業務邏輯信任模型正確執行; 排序服務確保了節點對交易順序的一致性達成共識; 提交節點根據相同的規則對每筆交易的數據進行驗證, 從而在交易內容的合法性上達成共識. 由此可見, Hyperledger Fabric通過“背書-排序-驗證”的共識機制有效地將應用層的信任模型同底層的共識協議相解耦, 從而實現了更為靈活的信任模型和更高的交易吞吐量.

                      • Hyperledger Fabric將節點的身份進行劃分, 在一定程度上簡化了交易流程提高了交易速度, 但是也使系統產生了一些較為“中心化”的節點–背書節點. Hyperledger Fabric背書的目的是為了在保證交易合法性的同時, 提高交易處理的速度[32]. 因為如果去除背書環節, 則各個節點為了達成共識, 都需要執行提案(即調用鏈碼), 這樣會限制交易的處理速度. 而通過一部分背書節點提前去執行提案, 再讓所有的節點只對結果進行檢驗, 則可以在犧牲一定安全性的條件下達到較高的交易處理速度[33].

                        但這一共識機制存在如下2方面的問題:

                        1) 首先, 背書節點在區塊鏈網絡搭建之初就已經確定且客戶端必須能夠識別并信任, 因此其身份必須公開且可驗證. 其次, 背書節點在提案執行過程中會直接處理敏感的交易數據. 上述兩點必然導致背書節點會成為攻擊者的首要目標;

                        2) 背書節點的數量相較于全部節點數量而言占比極少, 部分系統中的背書節點數僅為個位數, 而這些節點卻要處理系統中的全部交易, 這就導致了明顯的交易速度瓶頸. 同時, 客戶端與背書節點是多對一的關系, 當客戶端產生大量交易時, 背書節點可能難以及時并發處理, 造成交易處理時間增加, 甚至導致背書節點的崩潰.

                        上述問題產生的根本原因在于Hyperledger Fabric在共識過程中缺少對背書節點的動態隨機選取過程.

                      • 為了解決Hyperledger Fabric共識機制在安全和性能兩方面的問題, 我們在背書節點的確認中引入動態隨機選取過程, 以實現節點身份的隱藏和節點數量的動態擴展. 但在這一過程中, 同時需解決如下2個問題:

                        (1) 背書節點隨機選擇的過程應是非交互式的, 以降低系統的通信和計算開銷, 減少選擇過程對交易性能的影響;

                        (2) 選擇后的背書節點身份必須能夠被客戶端識別和信任, 即選擇算法應同時具有身份認證功能, 以避免節點身份偽裝攻擊的問題.

                        在基于fabric基本共識機制框架的基礎上, 我們設計了一種非交互、可驗證的隨機化背書節點優化方案. 優化方案引入了背書節點候選集, 通過可驗證隨機函數在候選集中隨機選取交易背書節點完成交易背書. 方案的改進一方面實現了交易背書前背書節點的身份隱私保護; 另一方面也動態隨機擴展了交易背書節點的數量, 提高了交易處理能力.

                      • 優化后的共識機制如圖2所示:

                        圖  2  優化后的Hyperledger Fabric共識機制

                        Figure 2.  Diagrammatic sketch of optimized hyperledger fabric consensus mechanism

                        (1)客戶端生成提案proposal$ < $req, s$ > $$ _{sig} $, 其中req為交易數據, 包括希望調用的chaincode及其參數.$ s $為客戶端選擇的隨機值, 作為節點身份抽取算法的種子. 客戶端對proposal簽名后將其發送給背書節點候選集. 交易發送成功后, 客戶端會啟動一個計時器;

                        (2)各個候選背書節點收到客戶端的proposal后, 首先根據簽名驗證proposal的完整性, 驗證失敗則終止交易. 候選背書節點執行背書節點身份抽取算法$ r, proof, result) = VRF_Result( s, SK), $并根據$ result $判斷自己是否為背書節點.

                        (3)如果確定自己是背書節點, 執行提案并生成讀寫集rw_set以及背書結果edm. 隨后生成提案響應信息:proposal_response$ < $ rw_set, edm,($ r, proof $)$ > $$ _{sig} $. 背書節點抽取算法流程如下所示:

                        1)根據輸入生成隨機數及其證明

                        ($ r, proof $) = $ F(s, SK) $

                        2)返回抽簽結果

                        依據$ r $計算抽取結果并與閾值進行$ \lambda $比較, 其中hash()為密碼雜湊算法, hashlen是hash算法的輸出長度, 如果$ \dfrac{\rm{hash}(r)}{2^{\text {hashlen}}}>\lambda $, 返回($ { r} $, $ { proof} $,$ { yes}) $; 否則返回$ ({ r} $, $ { proof} $,$ { no}) $.

                        (4)在計時器結束前的這段時間內, 客戶端持續收集來自不同背書節點的proposal_response并根據簽名驗證proposal_response的完整性, 驗證失敗則終止交易. 使用背書節點身份驗證算法VRF_Verify()驗證該節點是否為合法的背書節點. 如果不是則丟棄其該背書結果. 在合法的proposal_response中, 如果大部分(超過一半)讀寫集一致, 則根據這些背書結果生成交易tx$ < $r_w_set,{edm}$ ^k $ $ > $$ _{sig} $. 其中{edm}$ ^k $表示來自$ k $個合法背書節點的簽名. 客戶端將交易tx簽名后發送給排序節點. 背書節點身份驗證算法流程如下所示:

                        1) 驗證隨機數合法性

                        $ bool = V(s, r, PK) $

                        2)返回驗證結果

                        如果隨機數合法且滿足閾值條件, 認定其為背書節點. 如果bool &$ \dfrac{\rm{hash}(r)}{2^{\text {hashlen}}}>\lambda $, 返回$ { yes} $;否則返回$ { no} $.

                        需要注意的是由于背書節點身份抽取是一個概率算法, 可能存在一筆交易沒有對應的背書節點的情況, 因此需要設置適當的閾值$ \lambda $ 來降低這種情況產生的概率, 以6.2節中的實驗為例, 背書點候選集中節點數量為10,$ \lambda $ = 0.4時, 不產生背書節點的概率為:Pr = (0.4)$ ^{10} $$ \approx $0.01%, 即10 000筆交易中可能會有1筆交易沒有背書節點為其背書. 同時, 如果設置的計時器超時后仍然沒有收到背書節點的proposal_response, 可以選擇對proposal進行重發, 這樣就使得不產生背書節點的概率進一步降低.

                        (4)排序節點監聽并接收全網所有交易, 并將交易打包成區塊block$ < $ {tx}$ ^m $ $ > $$ _{sig} $,{tx}$ ^m $表示區塊中包含的$ m $個有序交易. 排序節點對block簽名后將其進行廣播;

                        (5)提交節點收到blcok后首先驗證簽名檢查區塊完整性, 之后對讀寫集進行驗證, 并依此更新賬本. 當各個提交節點完成以上操作后, 可以視為對該客戶端發起的交易達成了共識.

                      • 本文依據IRTF提出的VRF標準草案[34]設計了基于橢圓曲線的可驗證隨機函數, 方案設計主要分為三部分:

                        1)公私鑰對生成函數$ G $

                        設橢圓曲線的基點為$ O $, 階數為$ n $, 公私鑰對生成算法如下:

                        A1: 選擇隨機數$ k $$ \in $[1,$ n $-1];

                        A2: 生成一對橢圓曲線密鑰, 其中私鑰為k, 公鑰為$ Y = kO $;

                        2)隨機數和證明生成函數$ F $

                        輸入: 消息$ m $, 私鑰$ k $

                        輸出: 隨機數$ v $, 證明$ proof $

                        B1: 選擇隨機數$ r $$ \in $[1,$ n $-1]; B2: 使用散列函數h1計算$ H = h_1(m) $, 將消息m映射到橢圓曲線上一點$ H $; B3: 計算$ rH, rO $; B4: 使用函數$ h_2 $將輸入編碼成一個整數s, 并且

                        $$ \begin{array}{l} s = (r H, r O) \end{array} $$ (3)

                        B5: 計算

                        $$ \begin{array}{l} t = (r-s * k) od n \end{array} $$ (4)

                        B6: 計算

                        $$ \begin{array}{l} V = k H \end{array} $$ (5)

                        B7: 使用函數$ h_3 $將橢圓曲線上的點編碼成一個整數, 獲得隨機數$ value $ = $ h_3(V $), 證明$ proof $為($ V;t;s $).

                        3)驗證函數$ V $

                        輸入: 消息$ m' $, 證明$ proof' $

                        輸出: 合法性($ valid $ or $ invalid $)

                        C1: 使用散列函數$ h_1 $將消息$ m' $映射到橢圓曲線上一點$ H' $;

                        C2: 計算

                        $$ \begin{array}{l} U_{1} = t^{\prime} H^{\prime}+s^{\prime} V^{\prime} \end{array} $$ (6)
                        $$ \begin{array}{l} U_{2} = t^{\prime} O+s^{\prime} Y \end{array} \;\;\;$$ (7)

                        C3: 計算

                        $$ \begin{array}{l} s^{\prime} = \rm{h}_2\left(U_{1}, U_{2}\right) \end{array} $$ (8)

                        C4: 如果$ s = s' $, 則表明隨機數有效, 驗證通過, 輸出$ valid $; 否則表明隨機數無效, 驗證不通過, 輸出$ invalid $.

                      • 由2.2節可知, VRF需要滿足三個性質: 可驗證性、確定性和隨機性. 下面將從這三個方面對設計的的可驗證隨機函數進行分析:

                        1)可驗證性

                        如果$ proof $未被篡改, 且$ m' = m $, 則

                        $$ \begin{array}{l} H^{\prime} = H,\; t^{\prime} = t, \; s^{\prime} = s, \; V^{\prime} = V, \; P = r H \end{array}\qquad $$ (9)
                        $$ \begin{split} U_{1} =& t^{\prime} H^{\prime}+s^{\prime} V^{\prime} = t H+s V = t H+s k H = \\ &(t+s k) H = r H \end{split} $$ (10)
                        $$ \begin{split}U_{2} = &O+s^{\prime}(k O) = t O+s(k O) =\\ &t G+s k O = (t+s k) O = r O \end{split}\qquad\qquad\quad $$ (11)
                        $$ \begin{array}{l} s^{\prime} = \rm{h}_{2}\left(\rm{U}_{1}, \rm{U}_{2}\right) = \rm{s} \end{array} \qquad\qquad\qquad\qquad\qquad\;$$ (12)

                        2)唯一性和隨機性

                        VRF得到隨機數的過程分為三步, 首先是使用一個從有限域到橢圓曲線上的散列函數$ h_1 $將消息$ m $映射到橢圓曲線上一點$ H $, 然后使用私鑰$ k $計算得到$ kH $, 最后將$ kH $編碼成一個整數$ value $作為最終輸出的隨機數. 可以看出, 計算$ value $是一個確定的過程. 在這個過程中$ k $是不變的整數, $ h_3 $一個編碼函數對于相同的輸入總能保證相同的輸出. 因此$ value $的確定性和隨機性取決于$ h_1 $函數的性質. Dan Boneh[35]等人提出了一種從有限域映射到橢圓曲線上點的散列函數構造方法, 并且證明了構造方法的正確性. 使用這種方法構造的的$ h_1 $具有散列函數的性質[36]. 散列函數的值域唯一性保證了對于相同$ m $, $ H = h_1(m) $也是相同的, 因此value也是確定的, 即滿足了唯一性. 散列函數均勻分布的性質保證了$ H = h_1(m) $與橢圓曲線上隨機一點對于敵手來說是不可區分的, 即保證了$ H $的隨機性, 從而保證了$ value $的隨機性.

                      • 改進方案的關鍵點在于將Hyperledger Fabric中的背書節點由固定配置改為隨機選取. 選取方式為使用可驗證隨機函數, 根據輸出隨機數的所在區間確定候選節點是否為背書節點. 這一方案在增加身份抽取隨機性、保護節點身份隱私、提供節點身份認證和降低背書被攻擊風險方面都提供了更好的安全性.

                        首先, 由3.2.2節中隨機性的分析可知, 可驗證隨機函數的輸出具有良好的隨機性, 因此確保了在非交互模式下抽取背書節點的隨機性, 降低了背書節點的中心化程度; 同時, 在私鑰未泄露的情況下, 觀察者無法計算背書節點身份抽取的結果, 確保了共識過程啟動時背書節點的身份隱私; 此外, 客戶端可以使用可驗證隨機函數的公鑰對節點的身份進行驗證, 由3.2.2中可驗證性的分析可知, 這一特性確保了背書節點身份的真實性和可驗證性, 防止敵手冒充背書節點.

                        在原始方案中, 客戶端會將接受到的所有背書結果進行對比, 只有全部相同的情況下才會繼續交易. 因此, 即使敵手只成功攻擊了一個背書節點, 客戶端也會因為得到的背書結果不一致而終止交易, 即使將判定策略改為超過一半的背書結果一致則背書結果有效, 這種情況下, 背書節點中惡意節點數超過一半時, 敵手可以完全控制交易的背書結果, 從而影響交易內容正確性. 而在優化方案中, 客戶端不再需要得到全部背書節點的背書結果, 使得攻擊者影響交易的概率降低. 同樣是攻擊成功一個候選背書節點, 如果敵手試圖影響交易, 則需要背書節點候選集中只產生一個背書節點, 且該節點就是被敵手攻擊成功的節點, 其成功概率為:

                        $$ \begin{array}{l} P r = \frac{1}{n} C_{n}^{1}(1-\lambda) \lambda^{n-1} = (1-\lambda) \lambda^{n-1} \end{array} $$ (13)

                        其中$ {\lambda} $為抽取背書節點時的閾值, n為背書節點集的數量. 以實驗為例, 當n = 10, $ {\lambda} $ = 0.4時攻擊成功一個背書節點, 攻擊者可以影響交易的概率為:

                        $$ \begin{array}{l} p r_{i} = \left\{\begin{array}{c} {C_{k}^{i}(1-\lambda)^{i}(\lambda)^{n-i}, 0<\rm{i} \leq \rm{k}} \\ {C_{n-k}^{i-k}(1-\lambda)^{i}(\lambda)^{n-i}, \rm{k}<\rm{i}<2 \rm{k}} \end{array}\right. \end{array} $$ (14)

                        所以控制了$ k $個候選背書節點的敵手, 成功影響交易的概率為:

                        $$ \begin{array}{l} {\rm{Pr}} = \displaystyle\sum\limits_{i = 1}^{n} p r_{i} \end{array} $$ (15)

                        $ n $ = 10, $ \lambda $ = 0.4;$ k $, $ i $$ \in $(0,$ n $]的情況下, 敵手攻擊成功的概率變化如圖3所示:

                        圖  3  敵手攻擊成功的概率

                        Figure 3.  Probability of successful enemy attack consensus mechanism

                        圖3可知, 敵手攻擊成功的概率會隨控制節點的數量的增加而提高, 并且變化趨勢呈指數增長. 雖然當敵手控制了全部候選背書節點時, 攻擊成功的概率會接近100%(可能會有不產生背書節點的情況, 因此概率不是100%, 而是1-$ \lambda^{n} $), 但是當敵手未完全控制背書候選節點時, 仍然可以保證敵手以一個較低的概率攻擊成功, 因此可以通過設置$ \lambda $$ n $, 以滿足不同強度的安全需求.

                      • 由2.2節可知, 在輸入$ x $相同的情況下, 如果可驗證隨機函數的私鑰不同, 則輸出的隨機數也不相同. 因此, 對于接受同一筆交易, 不同的節點生成的隨機數是不同的, 最終背書節點候選集中部分節點會成為該節點的背書節點, 而剩余節點可能成為其他交易的背書節點. 從整體上看, 可驗證隨機函數的輸出隨機性確保了交易被均勻的分發給了所有的候選節點, 這樣就減少了每個節點的工作量, 從而提高了交易的并發處理能力.

                      • 交易延遲是指一筆交易從發起到確認經歷的時間. 在Hyperledger Fabric中, 交易延遲的時間是指從客戶端發起提案, 經過背書, 排序, 最終被提交到賬本所花費的時間[37]. 本文中影響交易延遲的第一個因素是優化方案增加了抽取背書節點以及驗證節點身份的過程, 很明顯可驗證隨機函數的算法效率會對交易的處理產生影響, 進而影響交易延遲, 因此需要通過實驗對方案設計的可驗證隨機函數的算法效率進行測試. 影響交易延遲的另一個因素是優化方案對背書過程進行了調整. 在假設可驗證隨機函數對交易延遲的影響忽略不計的前提下, 從交易流程上看, 優化方案與原始方案的僅在背書過程中有所不同, 所以從兩種方案交易處理速度可以推斷出二者的交易延遲差異不大.

                      • PBFT共識算法中所有$ N $個節點均以廣播的形式發送數據, 因此導致了$ O(N^2) $量級的通信成本, Hyperledger Fabric中客戶端與背書節點之間、客戶端與排序節點之間是點對點形式的雙向通信, 排序節點與提交節點之間是廣播形式的單向通信, 因此通信成本為$ O(N) $量級. 從整體流程上看, 優化方案與原始方案在各個階段的通信方式保持一致, 因此通信成本同樣為$ O(N) $量級, 并不會帶來額外的通信開銷.

                      • 除了優化方案與原始方案的比較外, 本文也將對優化后的Hyperledger Fabric共識機制與Algorand、Definity、Ouroboros Praos這三種基于可驗證隨機函數的共識機制進行了對比分析.

                        由于Hyperledger Fabric是一個聯盟鏈系統, 而Algorand、Definity和Ouroboros Praos則是公有鏈系統, 二者的應用場景、構建方法、共識原理都是不同的. Hyperledger Fabric的共識機制采取了將應用層信任模型同底層共識協議相解耦的方式, 因此不便于直接從性能效率方面同公有鏈共識算法進行比較. 所以本文從算法特性的角度對這幾種共識機制進行比較分析. 如表1所示, 本文對比分析了這幾種共識機制中可驗證隨機函數的作用、共識原理、資源消耗以及容錯能力.

                        表 1  優化方案與其他共識機制的對比

                        Table 1.  Comparison of optimization schemes with other consensus mechanisms

                        共識機制 VRF的作用 共識原理 資源消耗 容錯能力
                        Algorand 出塊節點的選取 VRF+PBFT $3f+1$
                        Definity 出塊節點的選取 VRF+PoS 較高 $2f+1$
                        Ouroboros Praos 出塊節點的選取 VRF+PoS 較高 $2f+1$
                        優化方案 背書節點的選取 VRF+背書+排序+驗證 F($m,t$)

                        在Hyperledger Fabric共識機制的應用層信任模型中背書節點是固定的且身份公開, 這是導致fabric背書節點易受攻擊的原因. 因此fabric需要解決的重點問題是如何可驗證地隨機選取背書節點. 優化方案正是基于此問題, 使用可驗證隨機函數選取背書節點, 增加敵手的攻擊難度. Algorand、Definity、Ouroboros Praos, 他們需要解決的問題都是如何在全網節點中安全的選取一個出塊節點. 具體而言, Algorand是在全網中選取一個出塊節點, 再選取委員會對區塊進行多輪投票, 最終達成共識; Dfinity將全網中節點分為多組委員會, 在當前負責出塊的委員會中選取出塊節點. Ouroboros同樣是在全網中選取出塊節點.

                        從共識原理上看, 作為公鏈共識算法的Algorand、Definity、Ouroboros Praos并無應用層信任模型的概念, 仍是在系統層共識機制的基礎上進行的改進. Algorand使用的是一個變種的PBFT算法([22]中稱為BBA算法), Definity底層直接使用PoS算法, Ouroboros Praos則是一個經過了安全證明的PoS共識模型. PBFT和PoS共識機制將交易內容和交易順序同時交給出塊節點完成, 這導致Algorand、Definity、Ouroboros Praos共識模型是緊耦合的, 并且限制了共識機制的優化. Hyperledger Fabric優化方案將應用層的信任模型同底層共識算法相解耦, 應用層背書策略和交易合法性驗證可根據具體應用進行定制. 而對于交易順序一致性則交給排序節點完成, 而排序節點本身并不關心交易內容是否合法, 因此可以選擇不同算法去完成交易順序的共識, 比如可以把當前的kafka替換為raft算法. 這樣Hyperledger Fabric優化方案可以根據場景的不同, 選擇不同的排序算法, 從而具有較高的靈活性.

                        在資源消耗方面, 基于PBFT的Algorand不存在“挖礦”的過程, 所以不會有大量計算消耗, 但是投票過程中的多輪交互會導致較高的通信成本. 基于PoS的Dfinity和Ouroboros Praos仍然會有“挖礦”的過程, 所以還是會導致資源浪費. Hyperledger Fabric優化方案同樣不存在“挖礦”的過程, 并且只有排序節點發送區塊的過程是全網廣播的, 其他過程都是部分節點間的交互, 因此資源消耗很少.

                        Algorand、Definity、Ouroboros Praos都是支持拜占庭容錯的, 他們的容錯能力分別為$ n = 3f+1 $、$ n = 2f+1 $、$ n = 2f+1 $. 其中,$ n $表示全網節點數,$ f $代表惡意節點的數量. Hyperledger Fabric對共識模型進行了解耦, 并且具有不同的節點類型, 所以要從不同的角度去分析其容錯能力. 在交易內容一致性的層面并沒有提供拜占庭容錯的能力, 他只支持對排序節點的一般故障容錯, 如數據丟失或延遲. 對于惡意排序節點發送的錯誤數據, 并不具備容錯能力. 而在交易內容合法性的層面, 如果客戶端是惡意節點, 其偽造的交易由于不具有正確的背書最終不會驗證通過, 從這一點上看, Hyperledger Fabric對于客戶端是支持拜占庭容錯的. 但是如果背書節點是惡意節點, 客戶端會因為收到不同的數據而終止交易, 所以這一點上看, Hyperledger Fabric對于背書節點是不支持拜占庭容錯的. 優化方案使用可驗證隨機函數抽取背書節點, 客戶端不再接受非背書節點發送的數據, 這樣就減少了交易被終止的情況. 所以從整體上而言, 優化方案提升了原始方案的容錯能力. 優化方案中背書節點的容錯能力取決于背書節點的數量$ m $和抽取閾值$ \lambda $的設定.

                        總的來說, 相較于其他基于可驗證隨機函數的共識機制來說, 優化方案具有更靈活的架構和更低的資源消耗, 并且具有高于Fabric原始方案的容錯能力.

                      • 本文依照Hyperledger Fabric的架構構建了一個區塊鏈系統. 系統對Hyperledger Fabric的交易流程進行了模擬, 特別的是, 系統中可以使用固定和隨機兩種方式選取背書節點, 即系統可以分別按照原始方案和優化方案進行交易. 本文的實驗環境是一臺12核CPU, 16G內存, 2T機械硬盤的服務器. 實驗使用Docker技術將節點以容器的形式部署在服務器上. 系統的網絡拓撲如圖4所示, 系統中有四類節點: 客戶端、候選背書節點、排序節點和提交節點. 節點通過網絡互連, 既可以進行廣播通信, 又可以進行點對點通信. 本實驗中的節點設置如下: 100個客戶端, 10個候選背書節點, 1個排序節點, 100個提交節點. 客戶端之間相互獨立, 可以同時發起交易. 當系統使用原始方案時, 所有的候選背書節點都需要對提案進行背書, 使用優化方案時, 會增加背書節點的抽取過程(抽取的閾值$ \lambda $ = 0.4), 客戶端也會相應增加驗證背書節點身份的過程. 除此之外, 原始方案與優化方案的排序和提交策略保持一致. 實驗使用Golang1.9實現了原始方案與優化方案的業務邏輯. 其中可驗證隨機函數的實現基于Golang中的crypto包, 使用的橢圓曲線為curve-p256, 使用的hash函數為sha-256. 通過對兩種方案的性能測試比較, 本文將在安全性、交易處理速度、交易延遲、通信成本四個方面對優化方案進行分析.

                        圖  4  實驗網絡拓撲圖

                        Figure 4.  Network topology of experiment

                      • 在安全性方面, 實驗主要對惡意節點對背書過程的攻擊風險方面進行了測試對比分析. 原有共識機制存在的主要問題是背書節點中只要存在一個惡意節點就會導致交易背書過程中斷, 交易失敗. 如4.1節中的分析所述, 即使將判定策略改為“超過一半的背書結果一致則背書結果有效”, 當背書節點中惡意節點數超過一半時, 敵手仍然能夠成功控制交易流程. 改進方案則通過使用VRF隨機抽取背書節點, 增加敵手影響交易流程的難度, 降低了背書過程被攻擊的風險.

                        為此, 測試方案選擇在候選節點數$ n= 10 $和惡意節點數$ k = 5$的條件下進行測試, 結果如表2所示. 實驗結果表明, 對于原始方案, 背書節點中惡意節點數超過一半時, 敵手會以100%的概率成功控制了交易流程. 而使用優化方案后, 只有惡意節點被選為背書節點并且惡意節點數超過選中背書節點數一半以上時, 惡意攻擊才能成功控制交易流程, 導致交易失敗. 實驗中10 000次交易情況下敵手攻擊成功的概率為6.86%, 與4.1節中的計算值7.1%基本接近, 由此可見優化方案中敵手攻擊成功的概率明顯低于原始方案, 這也證明了優化方案相較于原始方案的安全性提升.

                        表 2  無背書節點情況發生次數

                        Table 2.  Frequency of nonoccurence of endorsing peer

                        交易次數 敵手成功次數 攻擊成功概率
                        原始方案 1000 1000 100%
                        優化方案 100000 686 6.86%
                      • 由4.1節中的分析可知, 由于引入了VRF進行節點身份隨機抽取時可能出現抽取結果為0個背書節點的情況, 影響系統的可靠性. 為此優化方案在客戶端使用計時重傳機制來解決這一問題, 當客戶端在固定時間內未接收到有效的背書響應時會重新發起交易. 實驗對這種情況進行了驗證, 并且對使用計時重傳機制后進行了再次驗證, 結果如表3所示. 從實驗結果可以看出, 當交易次數較多時, 會出現無背書節點的情況, 但是這種情況發生的概率還是很低的. 使用計時重傳機制后, 無背書節點情況發生的次數明顯降低, 事實上重傳后仍無背書節點情況發生的概率為$ \lambda^{2n} $, 基本可以將無背書節點的情況忽略不計.

                        表 3  無背書節點情況發生次數

                        Table 3.  Frequency of nonoccurence of endorsing peer

                        交易次數 是否使用計時重傳 無背書節點情況發生次數
                        1000 2
                        100000 17
                        1000 0
                        100000 0
                      • 與Hyperledger Fabric原始的共識機制相比, 本方案通過將交易的背書分攤給多個節點, 降低背書節點需要背書的交易數量. 考慮一種特殊情況: 假設兩筆交易對應的的背書節點之間并不存在交集, 則這兩筆交易可以同時進行背書, 可以視為對交易的并行處理. 不出現這種情況, 從整體而言, 每個背書節點不需要依次處理所有的交易, 而是只是其中一部分, 一批交易所需的背書時間僅取決于分配交易數最多的背書節點, 這樣改進方案的背書時間相較于原有方案有所縮短, 從而提高交易的處理速度.

                        實驗分別對原有的Hyperledger Fabric共識機制和優化后的共識機制進行了仿真, 通過模擬構建兩種方案中的交易系統, 將兩種方案的交易處理速度進行了對比. 其中系統參數設置為: 背書節點候選集數量為10, 閾值$ \lambda $為0.4. 實驗結果如圖5所示.

                        圖  5  原有方案與優化方案交易時間對比

                        Figure 5.  The comparison of transaction time between original scheme and optimized scheme

                        圖5中的實驗結果可以看出, 優化后的方案在交易處理速度方面相較于原始方案有了明顯提高. 特別是當交易數較大時, 雖然隨著交易數量的增加二者的交易時間都呈現上升趨勢, 但是優化方案仍能比原始方案的時間少約50%, 優化方案的交易處理速度提升明顯.

                      • 本文針對5.2.2節中提到的影響交易延遲的兩個因素, 分別進行了測試.

                        第一個是對本文設計的可驗證隨機函數的性能測試. 本文實現的可驗證隨機函數主要分為三部分, 生成密鑰, 生成隨機數和證明, 驗證隨機數和證明. 實驗對方案設計的可驗證隨機函數進行了多次測試, 各部分算法的運行時間如表4所示:

                        表 4  可驗證隨機函數各部分算法運行時間

                        Table 4.  Running time of each part of the vrf algorithm

                        算法 次數 總時間(ms) 平均時間(ms)
                        生成密鑰 10000 2878.3546 0.2878
                        生成隨機數和證明 10000 10395.3927 1.0395
                        驗證隨機數和證明 10000 12874.6190 1.2875

                        由實驗結果可知, 可驗證隨機函數各部分算法的運行時間均在毫秒級, 并且相較于5.2.2中處理交易所需的總時間, 基本可以忽略其對交易處理速度的影響. 在此基礎上, 本文對兩種方案的交易延遲進行了測試, 實驗結果如圖6所示. 原始方案和優化方案的交易延遲時間都會隨著交易數量的增加而增長, 這是由于交易數量超過處理上限后, 需要排隊等待節點處理. 可以看出, 在相同交易數量的情況下, 優化方案的交易延遲明顯低于原始方案.

                        圖  6  原有方案與優化方案交易延遲對比

                        Figure 6.  The comparison of transaction delay between original scheme and optimized scheme

                      • 本文將一筆交易從發出到確認這段時間內, 區塊鏈網絡產生的所有報文的報文數量和報文大小作為這筆交易的通信成本. 實驗分別測試了原有方案與優化方案下, 一筆交易和多筆交易時的通信成本, 實驗結果如圖7所示. 原始方案中, 每個背書節點都會將背書信息發送給客戶端, 而在優化方案中, 未被選中的候選背書節點將不再執行此操作, 因此在本實驗中, 優化方案的報文數量和總報文大小均小于原始方案, 這表明使用優化方案可以在一定程度上降低通信成本.

                        圖  7  原有方案與優化方案交易成本對比

                        Figure 7.  The comparison of transaction delay between original plan and optimization scheme

                      • 本文針對Hyperledger fabric原有共識機制存在的問題, 提出了一種基于可驗證隨機函數的背書節點隨機選取的優化方案, 并對優化后的共識機制從安全性、性能等方面進行了分析比對和實驗測試. 實驗結果表明, 優化后的共識機制在保證通信成本基本不變的前提下, 具有更高的安全性、更低的交易延遲和更快的交易處理速度.

                    WeChat 關注分享

                    返回頂部

                    目錄

                      /

                      返回文章
                      返回