一种基于分布式密钥的拜占庭容错共识方法与流程

文档序号:21360902发布日期:2020-07-04 04:34阅读:355来源:国知局
一种基于分布式密钥的拜占庭容错共识方法与流程

本发明属于网络空间安全学科中的安全认证领域,更具体地说,涉及一种基于分布式密钥的拜占庭容错共识方法。



背景技术:

随着区块链技术的快速发展,区块链的应用也相应的越来越多,在利用区块链技术保证数据安全的同时,在联盟链环境下如何提高节点间达成共识的效率,成为了亟待解决的问题。

由于联盟链的节点是由各个相关机构或单位组成的,存在利益关系的各节点间无法相互信任的。因此各个节点在达成共识的过程中,需要利用对方公钥来对其发送的消息进行验证。但是密钥由谁生成,生成的密钥又如何进行分发授权是亟待解决的问题。

另外,在授权拜占庭容错共识算法中,参与共识过程的超级节点识又分为主节点与副节点两类节点。主节点将决策整理签名后广播给各副节点,副节点接收到决策后,需要对主节点的签名进行验证并签名。各副节点也要将自己签名的消息广播给其他副节点。在这个过程中,副节点将进行多轮验证及签名,随着节点的增多,会浪费大量的时间与算力进行这些操作。因此,从实际情况来看,还需提高联盟链节点达成共识过程的效率。



技术实现要素:

为了克服上述现有技术的不足,本发明提供了一种基于分布式密钥生成与聚合签名的授权拜占庭容错共识算法。其主要的目的是解决在联盟链环境下多中心密钥授权问题,以及在此基础上提高节点间达成共识时进行验证签名的效率问题。

本发明解决上述技术问题所采用的技术方案包括:

在本方面的第一方面,本发明提供了一种基于分布式密钥的拜占庭容错共识方法,所述方法包括:

s1、对联盟链服务器中各个非记账的普通节点进行投票,选择出候选节点;从候选节点中选择出能够记账且参与共识的超级节点;联盟链服务器根据安全参数生成系统公共参数;

s2、各个超级节点根据系统发送的公共参数,通过相互交互和认证来生成各自的公/私钥对,并作为系统的公/私钥对,使候选节点通过系统的公/私钥对生成其公/私钥;

s3、根据当前块高度和超级节点的数量,从超级节点中选择出一个主节点,并向其他超级节点即副节点发送提案请求,即发起新一轮共识;

s4、副节点收到提案请求后,验证主节点的签名,通过验证则广播提案响应信息,副节点使用基于身份的聚合签名对接收到的提案响应信息进行签名验证;主节点及副节点接收到超过三分之二的其他副节点发送的提案响应信息,则广播提交信息,副节点接收提交信息,若超过三分之二的副节点同意则发送块;

s5、普通节点接收到块,完成事件触发后,返回步骤s3,重新进行初始化。

在本方面的第二方面,本发明还提供了另一种基于分布式密钥的拜占庭容错共识方法,所述方法在本发明第一方面的基础上,还包括当步骤s3-s5中任意一个步骤中副节点等待主节点的提案请求超时或等待提案响应超时,则触发步骤s6,使得广播视图更改请求更换主节点;所述步骤s6具体包括:

s61、将主节点的超时时间设置为2v+2*tblock;令视图递增编号k=1,

s62、令v_k=v+k;副节点向其他副节点发出第v_k个视图更改请求;

s63、广播视图更改请求信息,并检查已收到的视图更改请求数目:若收到超过n-f个超级节点发出的视图更改请求,即更改视图达成共识,则改变本地视图,初始化本地共识信息,并根据新的视图编号确认下一轮共识的主节点;

s64、如果在经过时间间隔后,视图更改仍未达成共识,则令k=k+1并返回到步骤s62;

其中,v表示当前视图的编号。

本发明的有益效果:

本发明提出了一个能够实现在在联盟链环境下进行多中心密钥授权及提高共识效率的拜占庭容错共识方法,在联盟链中,各节点的密钥也不再由密钥生成中心来负责管理,而是由联盟链中选举出的超级节点共同生成。每个超级节点在得到自己的密钥的同时,也为候选节点生成他的部分密钥并发送给候选节点,由候选节点合成自己的私钥。由于每个超级节点只知道候选节点的部分私钥,因此,如果不是所有超级节点共同合谋就无法获取候选节点的私钥,即可以抵抗来自n-1个超级节点的合谋攻击。

另外,在共识过程中,副节点在需要对自己收到的主节点及其他副节点发送的消息进行验证签名,以及主节点需要对收到的副节点发送的消息进行验证签名时,无需再进行多次交互,通过利用聚合签名,参与共识的节点能够将多条需要验证签名的消息进行聚合,进行批量验证及签名,极大地提高了签名和验证的效率,在此基础上提高了共识达成的效率。

本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。

附图说明

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步的详细描述,其中:

图1为本发明所述系统模型示意图;

图2为本发明的一种基于分布式密钥的拜占庭容错共识方法流程框图;

图3为本发明的另一种基于分布式密钥的拜占庭容错共识方法流程框图;

图4为本发明的广播视图更改请求更换主节点触发条件图;

图5为本发明系统初始化流程框图;

图6为本发明超级节点与密钥生成流程框图;

图7为本发明候选节点与私钥生成流程框图;

图8为本发明超级节点验证签名流程框图;

图9为本发明视图更改流程框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。

其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本发明的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若有术语“上”、“下”、“左”、“右”、“前”、“后”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本发明的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。

本发明的系统模型如图1所示,该模型由四层组成,分别为普通节点层、候选节点层、超级节点层和议长与议员层,首先普通节点通过各自持有的权利,通过投票选出候选节点。接下来再从候选节点中选择出参与共识的超级节点,超级节点通过协议进行交互,协商出该系统的密钥以及他们各自的密钥。参与共识的超级节点又分为主节点与副节点,主节点负责整理并提出决策,副节点对决策进行验证投票。

本发明提供的一种基于分布式密钥的拜占庭容错共识方法参见图2,包括以下步骤:

s1、对联盟链服务器中各个非记账的普通节点进行投票,选择出候选节点;从候选节点中选择出能够记账且参与共识的超级节点;联盟链服务器根据安全参数生成系统公共参数;

s2、各个超级节点根据系统发送的公共参数,通过相互交互和认证来生成各自的公/私钥对,并作为系统的公/私钥对,使候选节点通过系统的公/私钥对生成其公/私钥;

s3、根据当前块高度和超级节点的数量,从超级节点中选择出一个主节点,并向其他超级节点即副节点发送提案请求,即发起新一轮共识;

s4、副节点收到提案请求后,验证主节点的签名,通过验证则广播提案响应信息,副节点使用基于身份的聚合签名对接收到的提案响应信息进行签名验证;主节点及副节点接收到超过三分之二的其他副节点发送的提案响应信息,则广播提交信息,副节点接收提交信息,若超过三分之二的副节点同意则发送块;

s5、普通节点接收到块,完成事件触发后,返回步骤s3,重新进行初始化。

可以理解的是,本发明需要确定系统中各节点角色。将其划分为非记账人和记账人节点,非记账人为普通节点,记账人为超级节点。超级节点参与共识流程。普通节点可以看到共识过程并同步账本信息,但是不参与记账。被提名有权参与共识节点竞选的账户为候选人节点。n个超级节点分为1个主节点和n-1个副节点,主节点会轮流当选,每次记账时,先由主节点发起区块提案,也就是拟账的区块内容。一旦有2/3以上的副节点同意了这个提案,那么这个提案就会成为最终发布的区块,并且这个区块是不可逆的,里面所有的交易都是百分之百确认的。

在一个优选实施例中,本发明提供的另一种基于分布式密钥的拜占庭容错共识方法参见图3,包括以下步骤:

s1、对联盟链服务器中各个非记账的普通节点进行投票,选择出候选节点;从候选节点中选择出能够记账且参与共识的超级节点;联盟链服务器根据安全参数生成系统公共参数;

s2、各个超级节点根据系统发送的公共参数,通过相互交互和认证来生成各自的公/私钥对,并作为系统的公/私钥对,使候选节点通过系统的公/私钥对生成其公/私钥;

s3、根据当前块高度和超级节点的数量,从超级节点中选择出一个主节点,并向其他超级节点即副节点发送提案请求,即发起新一轮共识;

s4、副节点收到提案请求后,验证主节点的签名,通过验证则广播提案响应信息,副节点使用基于身份的聚合签名对接收到的提案响应信息进行签名验证;主节点及副节点接收到超过三分之二的其他副节点发送的提案响应信息,则广播提交信息,副节点接收提交信息,若超过三分之二的副节点同意则发送块;

s5、普通节点接收到块,完成事件触发后,返回步骤s3,重新进行初始化。

s6、其他副节点等待主节点的提案请求超时或等待提案响应超时,则广播视图更改请求更换主节点。

其中,如图4所示,触发步骤s6的条件包括:

1)主节点的提案请求没有通过验证;

2)副节点没有接收到超过2/3个副节点发送的提案响应信息;

3)副节点所接到的提案响应信息没有通过验证;

4)主节点没有接收到超过2/3个副节点发送的提交信息;

5)主节点的提交信息没有通过验证。

在一个实施例中,针对步骤s1的系统初始化,本实施例给出了系统初始化的过程,包括:

联盟链服务器随机选择一个素数p作为安全参数,联盟链服务器公开系统公共参数params={g,gt,p,g,e,t,n,ai,k,bj};其中,g和gt是两个阶为q的乘法循环群,g是g的生成元,双线性映射e:g×g→gt;其中t为门限值,n为超级节点个数;ai,k表示第i个超级节点在第k个门限的公钥;i=[1,n],k=[0,t-1];bj表示第j个超级节点的公钥,bj=gyj;y表示超级节点的共享秘密份额;j=[1,n];并为主节点和副节点设置初始超时时间;主节点的初始超时时间设置为tblock,副节点的初始超时时间设置为2v+1*tblock;tblock表示区块周期,v表示当前视图编号。

在一个实施例中,如图5所示,对于步骤s2密钥生成的流程,包括:

输入安全参数;

生成系统公共参数;

输出系统公共参数。

具体的,还可以包括:

s21、接收系统发送的公共参数后,联盟链服务器中的超级节点生成多项式;

s22、各个超级节点根据该多项式计算其自身的私钥,计算其自身的公钥,并广播;

s23、各个超级节点验证接受到的秘密值的有效性,若无效,则要求错误的超级节点重新发送秘密值;否则进入步骤s24;

s24、超级节点通过任意多个秘密值份额恢复出联合生成的随机秘密值;

s25、候选节点从超级节点中申请部分密钥,通过验证等式验证其有效性;

s26、如果部分密钥无效,候选节点公开部分密钥请求其他超级节点认证,否则候选节点计算其自身的密钥。

关于分布式密钥生成(由系统中的超级节点作为弱中心进行联合决定并生成随机的共享秘密值),包括:

s211、超级节点pi选择一个t-1次多项式其中,ai,j表示第i个超级节点在第k个门限的私钥;i=1,2,…,n,且pi选择的随机值为si=fi(0)。

s212、pi广播其公钥ai,k=gai,kmodp,其中k=0,1,…,t-1。同时,pi计算第i个超级节点所共享的秘密份额yi,j=fi(j),随后将其安全地发送给超级节点pj。

s213、pj收到pi发给他的yi,j后,可以验证其有效性:判断是否成立。如果都有效,则计算第j个超级节点最终的共享份额yj=y1,j+y2,j+…+yn,jmodp。

s214、最终,通过y1,y2,…,yn中的任意t个秘密份额便可恢复出联合生成的随机秘密值s=s1+s2+…+sn。

关于候选节点密钥生成:候选节点在进入共识时需要向超级节点申请部分密钥来生成其私钥。

s221、候选节点id从第i个超级节点申请部分密钥pskid,i=h(id)yi后,可以通过验证等式e(pskid,i,g)=e(h(id),bi)是否成立验证其有效性。

s222、如果部分密钥无效,候选节点可以公开部分密钥请求其他弱中心认证;否则,候选节点计算其自身的密钥

在一个实施例中,关于系统的密钥生成流程还可以采用如图6所示的流程。

在一个实施例中,关于候选节点的密钥生成流程可以采用如图7所示的流程。

在一个实施例中,步骤s3中选择主节点的过程包括:

s31、设置编号为(h-v)modn的超级节点为本轮共识的主节点,其他超级节点设置为副节点;其中,h为区块高度,v为当前视图编号,n为超级节点数目;

s32、当出块条件满足后,主节点向其他副节点发送提案请求。

具体的,所述步骤s31包括:

s331、在经过主节点的超时时间后,按照共识策略从内存池中选取交易,取哈希打包为提案请求并广播,发起新一轮共识;

s332、将主节点的超时时间设置为(2(v+1)-k(v))*t_block。

s333、副节点在超时时间范围内未能广播则进入步骤s6进行视图更改。

在一个实施例中,对于步骤s4,如图8所示,对于超级节点进行验证签名的过程主要包括:

节点获得其自身的密钥;计算各个个体的签名,若签名通过验证,则计算聚合签名认证,继续判断是否能够通过验证;否则认证失败。

其具体包括:

s41、其他副节点验证主节点发送的提案请求的合法性,以及是否符合本地共识状态;若验证通过,则广播提案响应信息;

s42、任意一个副节点收到其他副节点发送的提案响应信息,利用基于身份的聚合签名算法验证消息合法性;

s43、将副节点的超时时间延长;

s44、更新本地共识状态;

s45、对于交易消息包含的交易哈希,从内存池或未确认的交易中获取相应交易,并添加至共识模块;

s46、向副节点查询步骤s44中未在本地找到的交易信息,若未在超时前接收到主节点发出的提案请求,则进入步骤s6,改变视图。

对于所述步骤s41中的验证,其主要包括:

s411、计算出超级节点的公钥为其私钥为si=ai,0;ai,k表示第i个超级节点在第k个门限的私钥;

s412、计算出主节点对副节点的验证签名:h(m)表示对消息m进行哈希运算;

s413、副节点接收区块消息m与其签名δ;验证等式e(δ,g)=e(h(m),ai,0)是否成立,即验证主节点发送的消息和签名是否正确;如果等式成立,则认为认证成立,否则认证失败;

s414、副节点签名并广播提案响应信息。

对于所述步骤s42中的聚合验证,所述步骤s42主要包括:

s421、副节点收到超过三分之二个其他副节点发送的提议响应信息时,则进行基于身份的聚合签名认证;对于超级节点集合子集,在消息mj上提供一个签名;聚合签名当需要批量验证n条来自于n个签名者id1,id2,…,idn的签名时,这n条签名δj=(aj,k,sj)对应于n个消息mj,其中j=1,…,n,k=0,1,…,t-1;

s422、验证等式是否成立;即其他副节点对收到的提案响应信息进行验证;如果等式成立,则认为认证成立,否则认证失败。

s423、若在主节点的超时时间前,主节点收集到至少m个副节点的提案响应信息,包括:验证每一条提案响应信息中消息的合法性、是否符合本地共识状态,若通过验证,则将本节点的超时时间延长以及广播提交信息;

s424、若步骤s423出现验证错误时进入步骤s6,进行视图更改。

其中,h(m)表示对消息m进行哈希运算;y表示多项式值;sj表示第j个节点选择的随机值。

所述步骤s5包括:

s51、每个已收集齐提案请求中交易信息的超级节点,若超级节点在超时时间范围前收集到至少m个超级节点的提交信息,包括:验证消息的合法性,以及是否符合本地共识状态,若通过验证,则将本节点的超时时间延长以及生成并广播新块;

s52、若步骤s51出现错误,则广播警告信息,并将超时时间设置为2*tblock,重新返回步骤s3。

在一个优选实施例中,当副节点认为主节点发生错误,副节点向其他副节点广播视图更改请求信息;具体的:可以参考图9所示,步骤s6的具体操作可以包括:

s61、将主节点的超时时间设置为2v+2*tblock;令视图递增编号k=1;

s62、令v_k=v+k;副节点向其他副节点发出第v_k个视图更改请求<changeview,h,v,i,v_k>;

s63、广播视图更改请求信息,并检查已收到的视图更改请求数目:若收到超过n-f个超级节点发出的视图更改请求,即更改视图达成共识,则改变本地视图,初始化本地共识信息,并根据新的视图编号确认下一轮共识的主节点;

s64、如果在经过时间间隔后,视图更改仍未达成共识,则令k=k+1并返回到步骤s62;

对于本发明中的超时时间设置,可以参考以下步骤:

1)系统初始化时为主节点和副节点设置初始超时时间;主节点的初始超时时间为tblock,副节点的初始超时时间为2v+1*tblock;tblock表示区块周期;

2)主节点一旦成功广播提案请求,根据系统初始化时的设置,将主节点的超时时间设置为(2^(v+1)-k(v))*t_block;

3)副节点在成功接收到主节点或副节点发送的提案请求或提案响应信息后,进入验证签名过程时,根据系统初始化时的设置,将超时时间延长;

4)若主节点与副节点在原超时时间前未能接收到相应信息,超时时间不再延长,进入视图更改(s6)步骤。

当然,可以理解的是,本发明中由哪种节点进行的操作,就遵守其对应的超时时间,即主节点进行操作时,则进行主节点的超时时间,副节点进行操作时,则进行副节点的超时时间。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:rom、ram、磁盘或光盘等。

以上所举实施例,对本发明的目的、技术方案和优点进行了进一步的详细说明,所应理解的是,以上所举实施例仅为本发明的优选实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内对本发明所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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