APP下载

虚拟加密货币与区块链共识机制

2018-12-22孙一蓬

电脑知识与技术 2018年32期

孙一蓬

摘要:区块链(blockchain)最初作为以比特币为代表的虚拟加密货币的数字账本核心技术而出现。近些年来,随着各类虚拟加密货币的兴起,区块链的概念也随之逐渐走入各行各业。因为区块链具有的某些特性,如今不仅在金融、物流、医疗等诸多领域有引入区块链技术,还出现了许多所谓的区块链理财项目。与此同时大量用户并不了解区块链和这些虚拟加密货币究竟是什么关系,该文将介绍虚拟加密货币为引子,介绍其和工作量证明机制、股权证明机制与实用拜占庭容错算法等区块链共识机制的关系。

关键词: 區块链; 虚拟加密货币; 共识机制; 工作量证明; 股权证明; 实用拜占庭容错算法

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)32-0046-03

区块链是一种构建去中心化的分布式存储的对等可信数据网络技术,通过区块链技术可以建立一套可信的交易基础平台。其去中心化、去信任、数据防篡改、节点匿名等特点,为构建可信节点、点对点数据安全共享提供了技术基础[1]。而以比特币为代表的虚拟加密货币,则是构建区块链网络的核心。

1 区块链和数字加密货币

区块链没有一个中心管理节点对全网数据进行管理,所有参与共识算法的节点自发收集系统内网络广播的交易数据,并进行竞争记账,再分布式存储在系统中的每一个节点中。在这一过程中,共识算法是协调全网中所有节点的数据一致性的算法协议,区块链中的各个节点按照该算法协议对参与竞争计算的节点发出的数据进行验证确认,当得到大部分节点认可后,该数据才算真实有效的数据。只有经过确认之后的有效数据才能写入到区块链的每一个区块中,形成连续的不可篡改的数据块链条[2]。

而现有的各类虚拟加密货币,则是完成整套共识机制算法的重要核心工具。以比特币为例,整个比特币系统中加密存储的数据就是从第一个比特币区块生成开始的全部比特币数据以及交易记录。所谓的“挖矿”则是竞争一段时间内(通常是10分钟之内)所有比特币交易记录的记账权,获得记账权的节点能够生成区块链的新数据区块,并获得该新生区块附带生成的一笔比特币。

实际上,区块链的共识机制算法不仅仅包括虚拟加密货币挖矿一种,但是不管是哪种区块链共识算法,其所面临的共同问题是:如何设计一个能够在有不信任参与节点故意作乱的情况下,使正常的交易数据依旧能够征得参与共识计算的大多数的节点验证通过,并将数据按特定结构分布式地存储于区块链系统下的各个有效节点中。目前,主要的区块链共识机制算法由工作量证明机制,股权证明机制和拜占庭容错算法以及它们的各种衍生算法来组成。

2 工作量证明机制

工作量证明(Proof of Work,简称PoW)机制,该算法主要特征就是要求每个客户端节点进行一定量的有一定难度的计算,争取抢在其他节点之前得出一个正确结果,发送给其他节点进行验证,而验证方则很容易检查发送方结果的正确性,率先得到正确结果并被其他节点检查通过的客户端节点,就能获得该次记账权。

PoW算法的思路就是让发起者消耗一定的算力,耗费一定的经济资源,从而大大提升了攻击所需的开销,避免服务的滥用和攻击。显而易见,为了增加自己获得记账权的概率,就必须加大自己的节点的计算能力,整个系统在这种相互刺激之下会不断地增加计算能力,这一方面加大了整套系统的攻击难度,另一方面则浪费了大量的计算资源。

(1)系统定期检查之前一段时间之内,每个区块获得共识的时间,以确定下一段时间的区块生成计算难度值。具体表现为,系统将决定之后一段时间之内生成的区块,整个区块数据进行SHA256计算后的最终结果,有至少N个前导数0[3]。

(2)每个参与竞争记账的节点,都收集上个区块产生的这段时间里,整个系统的网络中广播的虚拟加密货币的交易信息,并按照一定的存储结构(如Merkle树结构)存入自己的预生成的区块中。

(3)参与竞争的节点尝试寻找出一个随机数,使得包含该随机数的预生成区块,在进行SHA256计算后所得到的哈希值,符合开头有N个前导数0的特征。

(4)率先寻找到合适随机数的节点将自己的区块在区块链网络中广播,其他节点收到记账请求后就会验证该请求的合法性。若合法则保存下来作为新的区块,并开始进行下个区块的竞争计算。而竞争成功的节点则获得该新生成区块所有的虚拟加密货币。

PoW算法的流程如上图所示,在PoW算法的体系中,每个参与竞争的节点的计算能力就是整个区块链共识机制算法乃至于整个虚拟加密货币系统的安全性的核心保障。如果有人想要擅自篡改系统内的数据,他必须获得压倒正确节点的计算能力,才能强行将自己修改过的区块放入区块链中。因此产生了51%攻击理论,即攻击者必须获得整个系统至少51%的运算能力才有可能攻占新生成的区块数据,并强制性让整个系统接受自己的区块才是“合法”区块[3]。而大型的区块链网络通常由大量的高性能计算节点组成,以比特币为例,目前整个比特币网络的计算能力已经超过了一个国家的运算能力,想要获得至少比特币网络一半的计算性能,这远远超过了个人和一般组织的能力。

与此同时,入侵者想要修改的数据很可能并不是存在正在生成的新区块中的新数据,而是想要修改之前区块中存储的数据。在这种情况下,因为区块链每个区块生成后不得对原数据进行修改的特性,攻击者必须重新生成符合哈希值要求的从要修改的区块到最新生成的区块中间所有的区块[2]。而在攻击者重新生成自己的区块链分支的同时,可信任节点仍然在不断生成新的正常区块。因为系统默认优先承认最长的区块链分支为主链的特性,所以理论上一旦要篡改的数据所在的区块在k个正常区块之前,那么该数据将几乎不可能被篡改。一般认为k>6时能够基本满足数据安全性要求,当k>144时,即区块生成大约一天之后,该数据可被基本认为无法篡改[4]。

3 股权证明机制

至今为止工作量证明算法依旧被认为是最为有效的区块链共识机制算法,但是它的缺点也很明显,即大多数节点都必须不断地进行高性能计算,而这个计算在未能争取到记账权的情况下是毫无意义的。PoW算法的这个特性带来了大量的运行开销和计算能力浪费,为了解决这个问题,股权证明(Proof of Stake,简称PoS)算法随之诞生。PoS是一种相对节能的共识算法机制,其核心思想是拥有越多股权的节点有越大的概率获得区块的记录权。它要求工作者证明自己持有股份(现金)的多少,根据工作者持有的股份多少来调整挖矿的难度。

PoS算法目前有多种具体的实现方式,当提到PoS的时候,通常并不是特指某一个算法,而是说这一大类算法的总称。这类算法目前各有优劣,在解决PoW机制存在的问题的同时又带来了各自的问题,现有的PoS类算法主要有如下几种:

(1)最原始的PoS算法,是通过确定系统中拥有最多股权(虚拟加密货币)的节点,拥有最多股权的节点直接获得记录权。但是这会导致一个问题,那就是拥有最多股权的节点很可能会不断地拥有更高的股权,故而一般情况下区块链系统使用的是PoS算法的各类衍生算法。

(2)币龄竞争方法,即以获得的虚拟币数量以及持有货币的时长的乘积计算币龄,在竞争记账权时通过对比币龄的大小来争取记录权[5]。获胜的节点在获得记账权的同时币龄将被清空(但是虚拟货币不会被清空),需要较长时间重新积攒币龄才能再次竞争记账权。这种方法能够比较有效解决记账权可能被一个节点长期占有的情况,但是可能会造成对某一个特定时间对区块的攻击成功概率大幅上升的问题。

(3)轮流记账方法,即在一段时间内,当前拥有股权排名的前M个节点被选为记账人,或者由系统内每一个持有股份的节点进行投票,选出M个节点作为代表作为记账人。M个记账人轮流获得记录权,在M个节点全部完成记账之后,系统重新对股权进行排名,选出下一批节点进行轮流记账[4],这种方式也被称为股份授权证明机制(Delegated Proof-of-Stake ,简称DPoS)。

(4)目前PoS的最新方向是和其他共识机制算法结合起来,如PoS和PoW联合使用的情况下,先通过PoS确定股权的排名,而拥有越多的股权的节点,在后续的PoW计算中,区块数据进行哈希计算后的最终结果的前导数0的个数N越小。在这种情况下 每个节点都能够参与竞争,但是拥有股权越多的节点能够获得记账权的概率越大。

PoS算法减少了整个系统中大多数无意义运算,所以其比PoW更加节能和高效,但是建立在账户股份多少的基础上的机制是极度不公平的。目前不管是哪种具体实现方法,都无法杜绝PoS算法的区块链系统下,虚拟加密货币会不断地朝几个特定的节点集中的问题。而且PoS的安全性的核心思想是:拥有越多股权的节点将会为了保证自己的财产安全,越会保护整个系统的安全。在某些特定情况下,这反而导致区块链系统增加了不安全因素。

4 虚拟加密货币为核心的共识算法的局限性

PoW和PoS两种共识算法都脱离不了虚拟加密货币的存在,系统的正常运转必须有给予获得新区块记账权的节点一定量的虚拟币的奖励机制,以激励各个节点去竞争,这样才能保证整个区块链系统的安全性。换句话来说,整个系统的安全性实际上是由系统内虚拟加密货币的持有者来保护的。其具体思路都是通过不同的手段,增加攻击者成功发动攻击所需要的经济开销,达到攻击者不能承受或者攻击开销超出攻击收益的情况。

当前区块链网络已经度过了纯粹的作为网络虚拟货币系统的1.0时代,已经向着智能合约的2.0和大规模应用的3.0时代靠近。而一旦区块链系统实际运用到商业应用时,由区块链系统所承载的资产价值很可能远远超出其发行的虚拟加密货币的价值。例如,假设有一套金融系统引入了区块链系统以及附带的虚拟加密货币机制,并通过PoW、PoS或者其相关衍生算法保证数据共识安全。在这个金融系统中每天承载的交易额数以亿计,但是保证其安全的核心的虚拟加密货币的总价值可能仅仅只有数千万元。那么就很可能会有为了数以亿计的潜在收益而不计代价的攻击总价值数千万元的虚拟加密货币的情况出现。因为只要控制了作为核心的虚拟加密货币系统,就能间接的掌握整个金融系统。由此可见,由虚拟币的持有者自发的保证系统的安全及稳定性将是不可靠的。

除此之外,因为这两种算法都属于竞争记账模式,所以每次交易获得确认,都必须至少等待一次竞争记账周期完成。根据系统的不同,整个交易完成确认的时间可能将长达数分钟至数十分钟[3],这对于对实时性要求很高的系统来说难以被接受。另一方面,因为每一次共识的完成都要对该次请求共识的数据做大量重复的哈希运算,这也对系统的数据吞吐量造成了极大的影响。以比特币为例,比特币系统的理论数据吞吐量仅有每秒7次[3],实际数据吞吐量更是只有每秒4次。而PoS算法下的数据吞吐量有较大的改善,现有PoS算法已经能够完成每秒上千次的数据吞吐容量,但是这对于动辄要求数据吞吐量为上万次甚至十多万次的大型系统比如金融系统来说,依旧难以被接受。

5 实用拜占庭容错算法

想要从根本上解决上述问题,则必须设计一种没有虚拟加密货币与相关竞争记账机制参与的共识算法,例如实用拜占庭容错算法(Practical Byzantine Fault Tolerance,简称PBFT)就可以完全脱离虚拟加密货币的存在。PBFT算法的安全性由系统业务的各个节点共同保证,其共识主要依据节点之间的三次投票決定[2],一个节点代表一票,以少数服从绝对多数的方式实现在各个节点之间取得共识。与PoW和PoS允许不超过49%的节点失效不同,PBFT算法最多可以允许不超过1/3的节点失效,即在有3F+1个节点的环境下,至少有2F+1个正常节点,整个系统就便可正常运作[6]。

PBFT算法的运作步骤如上图所示

(1)前期阶段,每过一段规定的时间,通过投票法或其他方式选取一个副本节点作为主节点,其他的副本节点作为备份节点;

(2)需求阶段,需要向区块链系统存储数据的用户端向主节点发送使用服务操作的请求;

(3)预准备阶段,主节点收到各个客户端的请求之后对其进行整理和编号,生成预生成区块,然后将该预生成区块的全部交易请求广播给其他副本节点;

(4)准备阶段,所有副本节点接收请求后,将记录下这些请求,并各自生成预生成区块。并将预生成区块的哈希值作为该请求的准备信息,向其他节点广播;

(5)确认阶段,所有可用节点接收到至少2F个节点广播的准备消息后,与自己预生成区块的哈希值进行对比,如果一样的话则向其他节点广播确认请求消息;

(6)答复阶段,可用节点收到至少2F个节点发送的确认请求信息之后将正式执行这些请求,各个节点的预生成区块将作为正式区块存入节点下的区块链中,并将确认结果发回客户端;

(7)用户端需要等待2F+1个不同副本节点发回相同的结果,才能最终确认请求已被确认。

PBFT算法相对于前两者的最大优势就在于其完全不需要节点参与竞争记账的计算工作,也就是不需要所谓的“挖矿”。这样可以回避虚拟加密货币作为核心的共识机制的虚拟货币安全性问题,也能够有效解决竞争记账机制带来的高延迟和算力浪费问题。同时PBFT算法可以容纳相对巨大的数据吞吐量,通过对IBM的开源项目Hyperledge Fabric项目的PBFT算法实现进行测试,由试验数据得知,PBFT每秒吞吐量可以保持在1.2万次以上[4]。

PBFT算法在解决PoW和PoS的高开销、高延迟、低数据吞吐的问题的同时,也带来了其他问题。PBFT算法的要完成一次共识需要对全网进行至少2P次网络广播(P为有效节点个数),故其对网络开销要求较高。进一步测试表明,传统的PBFT算法下仅能保持不超过100个节点之间的运行稳定,这对于对节点数要求较大的公有链来说也是难以被接受的。同时PBFT虽然能够保证共识的安全性,但是由于其存在中心服务节点,所以根本上影响了分布式系统本身所具有的抗重要节点攻击的特性,也对系统后续的扩展造成了不良的影响。

为了解决上述问题,目前的研究方向主要是一系列基于PBFT的改进算法。如DDBFT算法减少了节点之间互相确认的环节,以降低可靠性为代价降低了网络开销,其特性较适用于面向用户变动较大的公有链系统[4]。同时还有将PoW、PoS算法和PBFT算法进行结合使用的研究,试图同时发挥各自的优点,解决PBFT算法存在的网络开销和节点扩展的问题[6]。

6 总结

虚拟加密货币以及竞争记账机制是一项伟大的发明,其成功地将整个系统的安全性保障的任务下降给各个节点。至今为止工作量证明机制仍然是最为有效的区块链共识机制,但是其客观存在的问题却成了区块链被引入各行各业应用系统的一个拦路虎。PoS、PBFT以及它们的一系列衍生算法在致力于解决工作量证明机制所带来的问题的同时,也生成了各式各样的其他问题。目前依旧没有一个算法能够有效解决各种情况下的区块链共识需求,在构建区块链网络架构的时候必须按照该系统的具体特性,通过单一或组合的形式选择合适的共识机制算法。

参考文献:

[1] 焦锋.基于网络交易的区块链安全技术研究[J].中国信息化,2017(11):65-67.

[2] 朱岩,甘国华,邓迪,等.区块链关键技术中的安全性研究[J].信息安全研究,2016,2(12):1090-1097.

[3] 邵奇峰,金澈清,张召,等.区块链技术:架构及进展[J].计算机学报,2018,41(05):969-988.

[4] 刘肖飞.基于动态授权的拜占庭容错共识算法的区块链性能改进研究[D].浙江大学,2017.

[5] 王晓光.区块链技术共识算法綜述[J].信息与电脑(理论版),2017(09):72-74.

[6] 韩璇,刘亚敏.区块链技术中的共识机制研究[J].信息网络安全,2017(09):147-152.

【通联编辑:代影】