一种适用于联盟链的共识机制

  • 来源:网络空间安全
  • 关键字:联盟链,共识机制,拜占庭容错
  • 发布时间:2019-07-07 23:17

  摘 要:随着比特币的风靡,区块链技术已经成为当下研究领域的主流。区块链系统根据应用场景的不同,一般分为公有链、联盟链和私有链。由于公有链完全去中心化的性质导致其无法满足企业的需求,所以在实际应用中企业往往选择部分去中心的联盟链。共识机制是区块链的引擎与核心。目前,主流的共识机制主要针对公有链提出,难以适用于联盟链与私有链。在此背景下,论文为联盟链提出一种共识机制。该共识机制不仅解决传统共识效率低的问题,而且在一定程度上可以应对拜占庭容错。

  关键词:联盟链;共识机制;拜占庭容错

  中图分类号:TP311.13 文献标识码:J

  Abstract: With the popularity of bitcoin, blockchain technology has become the mainstream of current research field. Block chain system is generally divided into public blockchain, consortium blockchain and private blockchain. Because of the completely decentralized nature of public blockchain, it can not meet the needs of enterprises, so in practical applications enterprises often choose part of the decentralized consortium blockchain. Consensus mechanism is the engine and core of blockchain. At present, the mainstream consensus mechanism is mainly for the public chain, and it is difficult to apply to the consortium blockchain and private chain. Under this background, this paper proposes a consensus mechanism for the consortium blockchain. This consensus mechanism not only solves the inefficiency of traditional consensus, but also can deal with Byzantine failures.

  Key words: consortium chain; consensus mechanism; Byzantine failures

  1 引言

  区块链是一种去中心化的分布式账本系统,它可以用于登记和发行数字化资产、产权存证和信息追溯等。最早被提出的区块链参与形式被称为公有链,系统的结构完全去中心化,任何用户都能参与并获取链上存储的所有数据,但由于系统开放性的限制,用户的隐私和监督都存在不足,在个别领域的相关应用难以满足效率需求[1]。因此,私有链就随之应运而生,私有链虽然能够解决以上问题,但如果仅仅由各个企业自己单独建立,那么还将是一个个信息孤岛。因此,以Hyperledger为代表的行业内部联盟链将会成为区块链在未来实体应用的主流方向。

  共识机制是区块链的核心模块,共识机制能保证在没有中心主体控制下,系统中的各参与方能够遵循相同记账规划,实现数据分布式的一致性[2]。优秀的共识机制在保证系统的安全可控的情況下尽可能提升性能。但是由于区块链发展时间较短和当前社会主流目光还停留在比特币上,目前主流的共识机制主要面向公有链,联盟链共识机制相对较少。联盟链的共识机制在未来是区块链研究的一个重要方向。

  2 区块链相关技术与概念

  2.1 区块链基本架构

  区块链的设计目的是让所有节点共同参与维护公共数据账本的系统,让数据账本公开透明。区块链的基础架构可以分成六层。

  如图1所示,区块链系统一般由数据层、网络层、共识层、激励层、合约层和应用层组成。数据层用于构建数据区块,对数据进行加密签名,增加时间戳;网络层包括分布式对等网络,用于节点间的通信和数据验证;共识层实现各类共识算法;激励层主要用于制定相应的激励机制,在联盟链和私有链中并不需要,因为激励在系统外就已经确认;合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;应用层则是基于区块链技术的各类应用[3]。

  2.2 区块链的分类

  区块链系统根据应用场景和设计体系的不同,一般分为公有链、联盟链和私有链[4]。

  公有链的各个节点可以自由加入和退出网络,并参加链上数据的读写,运行时以扁平的拓扑结构互联互通,网络中不存在任何中心化的服务端节点。

  私有链的各个节点的写入权限收归内部控制,而读取权限可使需求有选择性地对外开放。私有链仍然具备区块链多节点运行的通用结构,适用于特定机构的内部数据管理与审计。

  联盟链介于私有链与公有链之间,是一种需要注册许可的区块链,仅限于联盟中具有权限的成员参与账本的读写,网络中节点的角色及功能划分需预先设定,且网络中的共识、运维和接入均由预先设定的节点控制。一般来说,联盟链适合于跨机构的交易、结算、协同办公及存证等B2B场景[5]。

  3 共识算法分析

  3.1主流的共识算法

  3.1.1 Paxos和Raft算法

  Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致,一种基于选举领導者的共识机制。领导者状态的共识节点拥有绝对权限,并允许强监管节点参与,性能高,资源消耗低。所有节点一般有线下准入机制,但选举过程中不允许有作恶节点,不具备容错性。

  由于Paxos难于理解,加上难以实现,其简化版本Raft应运而生。Raft更注重协议的可理解性和落地性,其特点是任何时刻最多只有一个合法领导者,可容错节点数为N/2-1。两个共识机制面向应用领域为数据库,在个别节点宕机情况下确保数据一致[6]。

  3.1.2 工作量证明算法(PoW)

  工作量证明机制用来确认某个节点做过一定量的工作,是一种应对拒绝服务攻击和其它服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的计算资源,该理论是1993年Cynthia Dwork和Moni Naor首次提出的[7]。

  3.1.3 股权证明(PoS)

  PoS主要思想是节点记账权的获得难度与节点持有的权益成反比,相对于PoW,一定程度减少了数学运算带来的资源消耗,性能也得到了相应的提升,但依然是基于哈希运算竞争获取记账权的方式,可监管性弱,该共识机制容错性和PoW相同[8]。

  3.1.4 授权股权证明(DPoS)

  DPoS是对PoS机制的一种改进,其原理是通过投票选出一定数量的代表获取记账的权力,每个代表按照时间表记账,记账结束后会获取对应的报酬。投票权重以投票人持Token比例为准,整个共识依赖于代币机制[9]。

  3.1.5 权威证明(PoA)

  PoA算法初期形成可设定具有投票权或者签名权的认证节点,区块链上的新发生交易需经过认证节点签名后才能够完成上链广播,对于后期新加入的节点,认证节点也可通过签名投票来决定是否允许新节点的加入。PoA共识算法由于减少了共识达成的计算成本,可以极大地提升速率,但是由于其缺少对区块验证的步骤,所以一旦有恶意节点,往往在发生事故后才能察觉。

  3.1.6 实用拜占庭算法(PBFT)

  PBFT与Paxos类似,也是一种采用许可投票、少数服从多数来选举领导者进行记账的共识机制。实用拜占庭算法允许强监管节点参与,具备权限分级能力,性能更高,耗能更低。该算法每轮记账都会由全网节点共同选举领导者,允许33%的节点作恶[10]。

  3.2 共识算法性能对比

  在区块链系统中,效率、安全和去中心化三方是无法都兼顾的。主流共识机制在这三方面都选择不同程度侧重,但侧重的最终表现形式一般为TPS、成本、分叉、权限和拜占庭容错这五个方面。各个共识机制特点对比如表1所示。

  Paxos、Raft和PoA算法主要面对节点宕机情况,而不考虑恶意节点篡改数据,缺乏监督无法解决拜占庭容错问题,所以这些算法仅适合高信任度的情况;PoW虽然能应对拜占庭容错问题,但是耗时耗能;PoS与PoW相比在一定程度上减少能源消耗,但依然需要挖矿。DPoS共识需要依赖Token,而很多商业模式并不需要Token;PBFT虽然可以应对恶意节点攻击,但是其网络结构是静态类型,如果动态增加节点,则必须重启应用,造成不必要的性能损失[11]。

  4 改进型联盟链共识算法

  4.1 目前联盟链面临的困境

  目前,针对联盟链提出的共识算法非常少,已知联盟链使用的共识算法有以太坊测试网PoA共识机制和Hyperledger的排序算法。但由于参与联盟链的节点都是信任节点,这些算法为了追求效率而放弃对区块的验证。但是,如果一个共识完全忽视对区块的验证,那区块链应用的场景将大幅度减少。即便是对信任要求极高的联盟链,在理论上也存在出现恶意节点或者某节点被黑客操控的可能。

  所以在实际联盟链系统设计中,为了保障信息安全,往往在应用层增加多种加密措施。这样做费时费力,为系统设计添加不必要的研发成本,也阻碍了区块链服务实体的发展。

  4.2 改进型共识流程

  鉴于目前联盟链困境,本文为联盟链提出一种高效、安全和低成本的共识机制,共识流程如图2所示。

  在一切正常的情况下,该改进型共识流程分为六步。

  (1)在创始区块中指定一组初始授权的共识节点,在系统启动后共识节点加入或移除需要通过投票表决。

  (2)当系统启动后,共识节点开始产生区块并签名广播。通过优先级算法保证每一个即将产生的区块都有一个共识节点处于优先状况,该共识节点会优先广播区块,其他共识节点必须经过一段延迟才能广播从而避免了系统分叉。再通过一定的算法确保一个共识节点不能连续地出块。

  (3)共识节点只有打包和广播的权力,但最终写入区块链账本需要经过验证节点的验证。验证节点验证该区块是否合法,如果合法则写入区块链,否则发起移除负责该区块的共识节点提案。

  (4)该提案通过广播的方式传给所有共识节点。所有共识节点对该提案进行投票,如果发现该节点是恶意节点,则投赞成,否则投反对。若该提案有超过50%的共识节点表示赞同,则移除该节点,否则对验证节点进行检查并且强制验证节点阻止的区块写入区块链账本。

  (5)写进区块链账本的区块除了验证节点的签名,也需要共识节点的签名。如果区块有投票通过的签名,则直接写入账本。

  (6)新的共识节点的加入也通过验证节点提案的方式,当超过50%的共识节点表示赞同时,新的节点加入到共识节点中。

  4.3 改进型共识设计

  4.3.1 区块结构设计

  在本文提出的共识机制里区块结构至少由几个部分组成的:一些相关信息片段组成的集合称为Header,即区块头;一个个交易Transaction组成Body,即区块体,这部分占据区块大小的主要部分;剩余部分为票数统计,这部分称作Votes,区块结构如图3所示。

  (1)区块头

  区块的验证主要通过验证区块头的方式,是区块中最重要的部分。区块头包含的参数信息涉及几个方面。

  ParentHash:父区块头的Keccak256位哈希。

  StateRoot:所有交易被执行完且区块定稿后的状态树(State Trie)根节点的Keccak256位哈希。

  TransactionsRoot:由当前区块中所包含的所有交易所组成的树结构(Transaction Trie)根节点的Keccak256位哈希。

  ReceiptsRoot:由当前区块中所有交易的数据所组成的树结构(Receipt Trie)根节点的Keccak256位哈希。

  Priority:区块优先级,值为1或者2。同一个高度的区块,只有一个共识节点为2,2的优先级最高。

  Number:当前区块的祖先的数量,创世区块里这个数值为0。

  ExtraData:存储当前共识节点集合的地址。

  (2)区块体

  区块体由各个交易组成,需要包含交易全部内容,所占空间最大,系统区块体结构参数如下:

  From:交易发起人地址;

  To:交易接收人地址;

  Signature:交易发起人签名;

  Value:交易内容;

  Nonce:标志唯一性。

  (3)Votes

  Votes部分负责记录投票信息,在没有恶意节点的情况下该部分为0,Votes包含的参数信息涉及几个方面。

  From:投票人地址。

  Beneficiary:被提名为共识节点的节点地址,在正常情况下为0,仅在投票时修改。

  VoteHash:投票区块哈希。

  HV:发起投票区块的高度。

  VoteType:投票类型,加入或移除。

  Signature:投票签名。

  4.3.2 区块存储

  本文的共识机制区块和交易等数据选择存储在LevelDB数据库中。LevelDB是Google开源的KV(Key Value,存储的数据都是KV的形式)单机数据库,即交易数据会以键值对方法存储在LevelDB中。其中,Key一般与Hash相关,Value一般是要存储的数据结构的RLP编码,且区块存储时将区块头和区块体分开存储。对于区块头存储格式中的Key由区块头前缀、区块号(Uint64大端格式)、区块Hash构成,Value是区块头的RLP编码。区块体的存储包括Key由区块体前缀、区块号(Uint64大端格式)、区块Hash构成,Value是区块体的RLP编码。Votes部分同理,三者通过Key值的前缀进行区分,具体流程如图4所示。

  对数据库数据进行读写及修改等操作时首先要初始化数据库,同时配置数据库基本参数如Open Files Cache Capacity、Block Cache Capacity、Write Buffer、Filter等,其意义分别是打开文件数(默认1024)、区块缓存容量(默认384MB)、Memtable容量(默认192MB)、Level文件哈希数(默认10次)。此外,LevelDB在数据写入时先将数据写入Batch后再写入LevelDB,这样做的好处是减少数据的交互次数,提高数据存储效率。

  4.3.3 区块验证

  验证节点在验证新的区块时,仅验证其区块头。节点会从区块头的Extra Data字段中取出认证节点的签名,利用标准的spec256k1椭圆曲线进行反解公钥信息,并且从公钥中截取出签发节点的地址,若该节点是共识节点,且该节点本轮拥有签名的权限,则认为该区块为合法区块。此外,验证节点自己也会搜集这段时间的交易,通过验证Merkle树的方式确保区块内容正确,如果没有错误,将区块打入区块链账本。

  5 结束语

  联盟链在未来有很强的应用场景,但是目前缺少专门针对联盟链的共识机制。本文总结对比目前主流共识机制的不足,基于联盟链的特点和要求提出一种改进型共识机制。新的共识机制将验证与打包区块功能分开,提高效率的同时又确保了系统能够及时发现错误。

  共识机制作为区块链应用最核心和关键的组成部分,目前已经成为区块链技术发展的瓶颈[12]。由于应用场景的多种多样,各个共识机制无法面面俱到。本文提出的共识也仅适用在信任度较高的情况,未来区块链如何结合实体经济仍然值得大家的关注。

  参考文献

  [1] 徐治理,封化民,刘飚.一种基于信用的改进PBFT高效的共识机制[J].计算机应用研究, 2019,36(10).

  [2] 李剑峰.基于拜占庭容错机制的区块链共识算法研究与应用[D].郑州大学, 2018.

  [3] Nguyen QK. Blockchain – A Financial Technology for Future Sustainable Development[C].International Conference on Green Technology and Sustainable Development.IEEE,2016.51-54.

  [4] 袁勇,王跃飞.区块链技术发展现状与展望[J].自动化学报,2016,42(4):481-494.

  [5] 王朔.区块链技术在金融领域的研究现状及创新趋势[J].上海金融,2016(2):26-29.

  [6] 李哲.基于区块链的电子发票云平台构建研究[D].中国财政科学研究院,2018.

  [7] 邹均.区块链技术指南[M].北京:机械工业出版社,2016:69-78.

  [8] 陈何清.基于区块链的IMIX传輸系统的设计与实现[D].南京大学,2016.

  [9] WOOD G. Ethereum: A secure decentralized generalized transaction ledger[EB/OL].Ethereum Project Yellow Paper,2014,[2017-06-07].http://gavwood.com/paper.pdf

  [10] 梅晨.基于区块链的物联网安全平台的设计与实现[D].北京邮电大学,2018.

  [11] 杨茜.基于区块链的智能合约研究与实现[D].西南科技大学,2018.

  [12] 范捷,易乐天,舒继武.拜占庭技术研究综述[J].软件学报,2013,6:012.

  作者简介:

  曹兆磊(1995-),男,汉族,江苏盐城人,南京邮电大学,学士,工程师;主要研究方向和关注领域:区块链系统方案设计与测试。

……
关注读览天下微信, 100万篇深度好文, 等你来看……
阅读完整内容请先登录:
帐户:
密码: