应用数字签名技术的分级并发拜占庭共识方法及系统与流程

文档序号:17246016发布日期:2019-03-30 08:49阅读:343来源:国知局
应用数字签名技术的分级并发拜占庭共识方法及系统与流程

本发明涉及区块链分布式节点的共识算法领域,尤其涉及一种应用数字签名技术的分级并发拜占庭共识方法及系统。



背景技术:

近年来,随着区块链技术的快速发展和数字货币的应用普及,区块链技术得到了越来越多的重视。区块链技术由于其独特的分布式记账方法,在经济社会发展中也扮演着越来越重要的角色。分布式账本的实现必然要求底层节点能够实现信息的有效共识,因而底层节点的共识方法也就成为了区块链技术的核心部分之一。

比特币(bitcoin)作为当下最为知名的开放式区块链的代表,使用工作量证明(proofofwork)作为其共识机制的核心,要求每一个节点通过计算hash值来获取工作量证明从而获得领导地位,因此即使作为开放性区块链依然可以保证领导节点的可信性。然而由于比特币的通信依然采用点对点的通信,如果对链上所有节点都采用pow算法,同样会造成吞吐量和共识效率低的问题。

数字签名(digitalsignature),就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。数字签名的文件的完整性是很容易验证的,而且数字签名具有不可抵赖性。数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用hash函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。由于数字签名可以基于公钥进行解密,因此多个节点可以针对相同的消息包进行多次验证与叠加签名,使得节点之间消息传递的时间复杂度可以降低到o(n)级别,能够非常有效地提升节点间的共识效率。

拜占庭将军的问题是指分布式系统的一个或几个组成部分出现故障,从而导致整个系统无法达成共识从而无法正常工作的问题。在一般情况下,使用实用拜占庭容错算法(pbft)能够在一定程度上解决共识问题。拜占庭容错算法依赖于一个区域内的领导节点的统一决断,当一个区域内的领导节点收到了不同的消息,则会根据简单的“少数服从多数”原则忽略少数意见,以大多数节点的消息作为该区域内的共识结果。

然而,拜占庭容错算法在某些特定环境下依然存在以下的一些不足之处:

(1)拜占庭容错算法的前提是能够保证领导节点的可信性。假如一个区域内的领导节点由于某种原因而失效,则该范围内的共识则无法进行,更严重的是,假如一个领导节点由于被攻陷而变得不可信,则该区域将会完全受到领导节点行为的控制。

(2)拜占庭容错算法对于领导节点的稳定性要求。拜占庭容错算法不能够适用于一些开放式区块链比如比特币的应用,因为后者在节点的产生过程中需要不断改变领导节点,而拜占庭容错算法的前提在于区域内给定的领导节点,因此不能够适用于开放式区块链的应用。

(3)拜占庭容错算法的每一个共识阶段都需要所有领导节点之间完成一对一的共识通信,从而导致了o(n2)的时间复杂度,这在节点数目较多的开放链应用中是不可接受的。

因此,如何使得拜占庭容错算法在开放链以及领导节点可信度无法被完全保证的情况下依然能够稳定高效地工作就成为了一个亟待解决的问题。



技术实现要素:

针对拜占庭容错算法在开放性区块链中的三个主要缺陷,本发明首先提供了一种应用数字签名技术的分级并发拜占庭共识方法,是一种在开放性区块链系统中依然能够高效实现拜占庭容错的共识方法。

具体技术方案如下:

一种应用数字签名技术的分级并发拜占庭共识方法,包括以下步骤:

(1)将在预设时间宽度的滑动时间窗口内创建过块的节点选举为领导节点参加共识,以最新块的创建节点为最高领导节点,根据股权从大到小建立股权金字塔;在所述股权金字塔中,每一个上层领导节点和一定数量的下层领导节点组成一个共识组;

其中,所述滑动时间窗口的窗口后沿为当前时刻;

(2)从上而下依次检查并调整所述股权金字塔,使其中每个共识组的股权制约关系满足式(a):p/s≤49%,其中s为该共识组中所有领导节点的股权数之和,p为上层领导节点的股权数;

(3)调整完成后,由最高领导节点发起每一条交易信息的共识,由上而下依次在每一级的每一个共识组内进行共识;进行共识时,各领导节点通过数字签名的方式进行消息传递;

(4)所有共识组共识完成后,向全网广播当前交易信息的共识结果,重复步骤(3)开始下一条交易信息的共识;

(5)当有新块创建时,滑动时间窗口向后滑动一个块,重复步骤(1)~(4)。

在本发明的共识方法中,只有在滑动时间窗口内创建过新块的节点才能获得领导节点参加共识的资格,而在滑动时间窗口内没有创建过新块的节点则被排除在领导委员会之外,在一定程度上增加了成为领导节点的成本,增加了领导节点的可信性。

若在滑动时间窗口内,一个领导节点创建了一个块,则该领导节点相应地获得一份股权;若在滑动时间窗口内,一个领导节点创建了多个块,则该领导节点相应地获得多份股权。

滑动时间窗口的时间宽度根据具体情况进行设置,比如在新链挖掘速度较低时,滑动时间窗口的宽度就要相应地增加,从而能够保证在每一个时刻在领导委员会中都存在着足够分散的股权去进行相应的权力制衡。

每一级的共识只会发生在相邻的两层领导者之间,每一个上层领导节点都会和一定数量的下层领导节点组成一个共识组。假如某一级共识中有n个上层领导者,则相应地会组成n个同级共识组。

为了避免某一个领导节点拥有过多的权利而导致整个领导委员会共识的崩溃,在共识之前,需要通过步骤(2)的分级股权制约的方式来调整股权金字塔的结构。

步骤(2)包括:从上至下依次检查每个共识组的股权制约关系是否满足式(a);

若不满足,则进行操作(i):从下层领导节点的下一层节点中选择一个并提升至下层领导节点中,直至满足式(a);

若进行操作(i)无法满足式(a),则进行操作(ii):取消该共识组,将两层领导节点合并为一层,重组加入上一级的共识;

若进行操作(ii)无法满足式(a),则将股权金字塔回滚至上一次完成了股权制约的股权金字塔;

若所有共识组都能够满足式(a),则记录下当前的股权金字塔形状,股权制约关系检查完成。

股权制约关系检查完成后,由最高领导节点发起共识,由上而下依次在每一级的每一个共识组内进行共识。

步骤(3)中,不同级别的共识组按照级别高低依次进行共识,同级别的共识组并发执行共识。

步骤(3)中,在一个共识组内,若满足式(b):r/s≥51%,则该共识组达成共识,其中s为该共识组中所有领导节点的股权数之和,r为达成共识的所有领导节点的股权数之和;

否则,该共识组无法达成共识,当前交易信息共识失败并进行标记,开始下一条交易信息的共识。

步骤(3)中,在共识组内进行共识包括:

(3-1)由上层领导节点创建一个带有共识内容的数据包,并采用私钥进行数字签名,传递给一个下层领导节点;

(3-2)该下层领导节点将自己的共识信息添加到该数据包的末尾并使用私钥进行数字签名,传递给下一个下层领导节点;

(3-3)重复步骤(3-2),直至所有下层领导节点均进行共识和数字签名,传递给上层领导节点;

(3-4)该共识组内每一个领导节点使用公钥验证共识组的共识结果,若成功达成共识,则将共识结果记录到自己的分布式账本中。

一级共识完成后,该级共识的下层领导节点作为上层领导节点发起下一级共识,重复步骤(3-1)~(3-4);直至所述股权金字塔中的所有领导节点达成共识。

基于同样的发明构思,本发明还提供了一种应用数字签名技术的分级并发拜占庭共识系统,包括:

领导选举模块,将在预设时间宽度的滑动时间窗口内创建过块的节点选举为领导节点参加共识,以最新块的创建节点为最高领导节点,根据股权从大到小建立股权金字塔;在所述股权金字塔中,每一个上层领导节点和一定数量的下层领导节点组成一个共识组;

分级股权制约模块,从上而下依次检查并调整所述股权金字塔,使其中每个共识组的股权制约关系满足式(a):p/s≤49%,其中s为该共识组中所有领导节点的股权数之和,p为上层领导节点的股权数;

分级并发共识模块,由最高领导节点发起每一条交易信息的共识,由上而下依次在每一级的每一个共识组内进行共识;所有共识组共识完成后,向全网广播当前交易信息的共识结果;

数字签名模块,在每一个共识组内进行共识时,为各领导节点间传递的消息进行数字签名。

与现有技术相比,本发明的有益效果为:

在本发明中,使用工作量证明的思想选举领导节点,保证了开放链中领导节点的选举问题;使用依靠股权进行分级制衡的方法,解决了领导节点的可信性问题;使用分级并发共识的方法,并且应用了数字签名技术,极大地降低了完成整个共识的时间复杂度,显著地提升了整个系统的吞吐量。

附图说明

图1为本发明的应用数字签名技术的分级并发拜占庭共识系统的整体模块结构图;

图2为本发明的应用数字签名技术的分级并发拜占庭共识算法的流程示意图;

图3为动态选举领导节点的工作原理示意图;

图4为股权金字塔调整原理示意图;

图5为分级共识算法原理示意图;

图6为数字签名共识方法示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步详细描述,需要指出的是,以下所述实施例旨在便于对本发明的理解,而对其不起任何限定作用。

本发明的应用数字签名技术的分级并发拜占庭共识系统的整体结构如图1所示,包括领导选举模块、分级股权制约模块、分级并发共识模块以及数字签名模块。整个分级并发拜占庭共识系统的工作流程如图2所示,以下通过各个模块分别进行说明。

1、基于pow算法的领导选举模块

对于领导节点在开放性区块链中的选择问题,本发明采用了一种基于pow算法的领导选举方式,将比特币中的工作量证明机制转化为领导选取机制。如图3所示,过程如下:

(1)确定一个具体的时间窗口(共享窗口),这一个窗口内所有挖掘出新块的节点被承认为领导节点。当一个新的块被连接到末尾时,则创建这一个新块的节点获得领导成员资格,同时时间窗口向前移动一个块的位置,这就导致了最前面第一个块的领导权力失效。

(2)所有在当前时间窗口中创建过块的节点都作为领导委员会成员参加共识,而其他在近期内没有过贡献的节点则被排除在领导委员会之外,在一定程度上增加了成为领导节点的成本,增加了领导节点的可信性。

(3)若一个节点在时间窗口中拥有着一个块的所有权,则该领导节点相应的获得一份股权;若一个节点在时间窗口中拥有者多个块的所有权,则该领导节点的股权也会按照相应倍数增加。

(4)共享窗口的大小定义受到外界因素的影响,比如在新链挖掘速度较低时,时间窗口就会相应增加,从而能够保证在每一个时刻在领导委员会中都存在着足够分散的股权去进行相应的权力制衡。每有一个新块创建,时间窗口都会向后滑动一次,即每创建一个新块都会重新构建一个新的股权金字塔,并对新区块到下一次新块产生的时间段之间的所有交易信息进行共识。

(5)当一个节点挖掘出了一个新块之后,从当前开始到下一个新块被挖掘出之前,这一段时间内的所有领导委员会内部的共识都由这一个节点发起,这个节点成为这一段时间内的最高领导节点。同时其他各个节点按照其股权大小分级形成一个自上而下的股权金字塔。每一次最高领导节点变更之后都会重新刷新相应的金字塔结构,按照每个节点股权的变更情况进行restruct()操作。restruct()操作是指对当前领导节点与其下层所有领导节点的关系进行调整。遍历当前领导节点的下层领导节点列表中的所有领导节点,如果某下层领导节点的股权大于当前领导节点,则将该下层领导节点的位置和当前领导节点的位置进行对调,如果下层领导节点的股权等于当前节点,则将该下层领导节点其提升至和当前领导节点相平级。

下层领导节点均分至上层领导节点之下,每个上层领导节点与一定数量的下层领导节点组成一个共识组。

图3中,共享窗口内包括1、2、3、4号节点,表明这些节点在近段时间内拥有着被承认的工作量证明,从而这些节点被选为领导节点。

由于3号节点是最新块的所有者,因此3号节点被置于股权金字塔的顶端,作为最高领导节点。

每一个领导节点都会根据它们在共享窗口中所控制的块数获得相应数量的股权,如1、2号节点控制着四个块,因此都获得四份股权,而4号节点只控制了一个块,因此只能获得一份股权。

每一个节点都按照股权的多少排布在最高领导节点下,形成了一个最初的股权金字塔。每一次共享窗口刷新后都会重新根据最新的股权分布来重构股权金字塔。

2、分级股权制约模块

对于领导节点的可信性问题,本发明采用了分级股权制约的方式来避免某一个节点拥有过多的权力而导致整个领导委员会共识的崩溃。过程如下:

(1)每一级的共识只会发生在相邻的两层领导者之间,每一个上层领导者都会和一定数量的下层领导者组成一个共识组。假如这一级共识中有n个上层领导者,则相应地会组成n个同级共识组。在所有共识开始之前,必须从上至下检查金字塔每两层之间每个共识组的股权制约关系:

获得这个共识组中节点的股权数之和为s,同时上层节点的股权数为p,必须满足

p/s≤49%(a)

否则就需要在下层领导中进行promote()操作直到满足(a)式;promote()操作是指:对一个节点进行晋升,将该节点从其上层节点的下层节点信息列表中删除,并将其提升至与其原先的上层节点相平级的等级。

若下层通过promote()操作无法获得足够满足(a)的股权,则取消该组共识,将两层领导节点合并为同一层,重组加入上一级的共识。若依然无法满足式(a),则进行rollback()操作,回滚至上一次完成了股权制约的股权金字塔形状。

若最终所有共识组都能够满足式(a),则进行record()操作,记录下当前的股权金字塔形状,股权制约关系检查完成。

(2)股权制约检查完成之后形成的金字塔可以保证所有共识组都可以满足(a)式,股权制约检查阶段完成。

如图4所示,图4中左侧显示的是未经过调整前的股权金字塔,在a和b处都由于上层领导者所占股权过多而导致无法通过股权检查,因此需要对a和b处进行调整。

a处由于下层通过promote()操作可以实现对于上层领导节点的股权制约,因此只需要从下一级共识中提上一个节点加入该级共识即可,如图4右侧所示。

b处由于下层通过promote()函数依然无法实现该级共识的股权制约,因此取消了该级共识,将下层领导节点和上层领导节点合并,共同加入上一级共识,如图4右侧所示。

3、分级并发共识模块

在完成股权制约检查之后开始进行分级并发共识,按照股权金字塔自上而下完成每一级共识。

(1)共识阶段由最高领导节点发起共识,由上而下依次在每一级的每一个共识组内部实现共识,不同级的共识组按照级别依次进行共识,同级别不同共识组的共识并发执行:

获得这个共识组中节点的股权数之和为s,同时成功达成共识的节点的股权数之和为r,则必须满足

r/s≥51%(b)

若无法满足(b)式的条件,则该共识组无法达成共识,当前进行共识的这一条交易信息共识失败,对这一条信息打上“未共识”的标记,并开始下一条交易信息的共识。

(2)(a)、(b)式能够保证即使上层领导者由于某种原因不再变得可信时,下层领导者依然可以通过集体股权的优势驳回上层领导者的不当行为,能够非常有效地避免某一个领导节点股权过于集中的问题,限制了其对于整个系统的影响力。同时许多同级共识组可以并发执行共识,可以非常有效地提升系统的吞吐量。

如图5所示,股权检查以及股权金字塔调整完成之后从上至下依次开始各级共识。

在图5中a、b处于第二级共识,分别为第二级共识中的两个共识组;c、d处于第三级共识,分别为第三级共识中的两个共识组。

共识首先由最高领导节点发起第一级共识,只有金字塔顶端的三个节点参与了该级共识;第一级共识完成后,第二级共识中的a、b两个共识组并行执行共识;第二级共识完成后,第三级共识中的c、d两个共识组并行执行共识;共识成功后之后整个股权金字塔完成了共识。

所有共识组共识完成后,向全网广播当前交易信息的共识结果,之后开始下一条交易信息的共识;

当有新块创建时,滑动时间窗口向后滑动一个块,重复以上步骤。

4、数字签名模块

(1)每一个共识组中的领导节点间采用数字签名的方式进行消息传递,采用两轮循环的数字签名及验证方式保证每一个领导节点都可以正确记录共识结果,并且将时间复杂度控制在o(n)级别。

第一轮循环:由上层领导节点传递一个带有共识内容的数据包并使用自己的私钥进行加密,这个数据包依次传递给每一个下层领导节点,每一个下层领导节点依次将自己的共识结果添加到数据包的末尾,并使用私钥进行数字签名,再将这个数据包传递给下一个下层领导节点。完成第一次循环后可以获得该级共识中每个下层领导节点对于共识的结果以及它们的数字签名。

第二次循环:该级共识中的每一个领导节点使用公钥验证其他领导节点的共识结果,确认无误后将共识结果记录到自己的分布式账本中。其中假如一个领导节点的共识结果存在异议,但是其他有超过51%的股权都达成了结果的共识,那么该领导节点会根据pbft的原则放弃自己原来的结果,将已共识成功的结果记在账本中。由于每一个节点的共识结果都带有数字签名并且可以通过公钥进行验证,可以保证共识结果的真实性并且无法被恶意伪造。

(2)所有该级共识的领导节点都确认完成后,由这一级的下层领导者发起下一级的共识,而这一级的下层领导者成为下级共识的上层领导者,重新开始步骤(1),最终所有股权金字塔中的领导节点都可以达成共识。

(3)由于每一级共识采用的数字签名的形式,每一个节点所需要进行的共识次数处于o(1)级别,从而完成所有的领导节点间的共识所需要的时间复杂度为o(n)。

如图6所示,节点1为该共识组中的上层领导节点,则首先由节点1向节点2发送带有共识内容的数据包并且附上自己的数字签名,节点2对内容进行共识之后将共识的结果以及自己的数字签名添加到数据包中,再将数据包传递给节点3,经过一轮循环后领导节点1将会收到带有所有节点共识结果和数字签名的数据包。

完成第一轮循环后领导节点1会再次将该数据包发送给节点2开始第二次循环,在这一次循环中每一个节点都会根据数字签名来判断是否有合计超过51%股权的节点已经达成了共识,如果发现共识已经达成则将共识的内容写入自己的分布式账本并无法被修改。

本发明中相关数据结构定义如下:

每一个节点node包含下列成员变量:

每一个节点node包含下列成员函数:

promote()函数:对一个节点进行晋升,将该节点从其上层节点的下层节点信息列表中删除,并将其提升至与其原先的上层节点相平级的等级

restruct()函数:对当前节点与其下层所有节点的关系进行调整。遍历当前节点的下层节点列表中的所有节点,如果下层节点的股权大于当前节点,则将该下层节点的位置和当前节点的位置进行对调,如果下层节点的股权等于当前节点,则将其提升至和当前节点相平级。

rollback()函数:将股权金字塔回滚至上一次完成了股权制约的金字塔的形状

record()函数:记录下当前的股权金字塔的形状

以上所述的实施例对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的具体实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1