1.一种基于动态节点的拜占庭容错共识协议的数据共识方法,其特征在于,包括:构建区块链系统,该系统包括副本节点、主节点、C‑collector节点以及E‑collector节点,其中,C‑collector为提交收集器,E‑collector为执行收集器;采用基于动态节点的拜占庭容错共识协议对数据进行共识的过程包括:S1:初始化系统的共识参数和各个节点的密钥;
S2:根据初始化的共识参数随机选取节点作为共识组;
S3:更新共识组中的各个节点,得到新的共识组;更新共识组包括新的节点加入共识组或者共识组中的节点被撤销;其中,共识组中的节点被撤销包括:节点分布式主动退出共识组、节点分布式被动撤销共识组以及退出节点密钥管理;新的节点加入共识组的过程包括:步骤1:新加入节点向共识组节点发送加入申请;
步骤2:共识组节点验证新加入节点身份,对其包含身份信息的数据进行签名,并将签名后的数据发送给C‑collector;
步骤3:C‑collector若收到所有节点的签名消息,则将其聚合并广播给共识组的所有节点;
步骤4:共识组节点根据新加入节点的身份,生成对应的私钥份额发送给新加入节点;
步骤5:新加入节点将签名份额进行累加,得到自己的私钥,根据私钥计算自己的公钥,并将公钥广播给共识组的所有节点;
步骤6:共识组节点将新加入节点的公钥添加至公共参数中,并进行一次公共参数的共识;
节点分布式主动退出共识组的过程包括:
步骤1:主动退出节点向共识组节点发送退出申请;
步骤2:共识组节点验证退出消息的有效性,并发送签名给E‑collector;
步骤3:E‑collector若收到超过(2n)/3的节点发来的签名消息,则将其聚合并广播给共识组的所有节点;
步骤4:共识组节点验证聚合签名的有效性,然后向主动退出节点发送退出成功消息;
步骤5:共识组节点将其退出消息记录在撤销列表CRL中,删除公共参数中退出节点的公钥,并发送退出成功消息给主动退出节点;
步骤6:共识组节点广播撤销列表,对撤销列表以及公共参数达成分布式一致;
节点分布式被动撤销共识组的过程包括:
步骤1:共识组节点广播投诉消息给共识组的所有节点;
步骤2:共识组中的节点若收到超过(2n)/3的节点发来的投诉消息,则发送签名给E‑collector;
步骤3:E‑collector若收到(2n)/3的签名消息,则将签名进行聚合并广播退出成功消息给共识组的所有节点;
步骤4:共识组节点将其退出消息记录在撤销列表CRL中,删除公共参数中退出节点的公钥;
步骤5:共识组节点广播撤销列表,对撤销列表以及公共参数达成分布式一致;
退出节点密钥管理的过程包括:
步骤1:若退出节点为初始共识组节点,则退出节点在分布式密钥生成中所使用多项式将由其余节点赋予新加入的某个节点,此时这个节点拥有与初始签名组同等的权利;
步骤2:若退出节点不为初始共识组节点,则无需进行多项式的权利变更操作,直接退出共识组;
S4:在新的共识组节点中选取主节点,并随机选取C‑collector节点和E‑collector节点;具体包括:S41:获取全网公知的数seed,根据数seed和该节点的私钥ski采用确定性算法F生成随机数value;设置阈值条件,该阈值条件为分布在1~n之内的随机数;将生成的随机数与设置的阈值条件进行对比,若该随机数满足设置的阈值条件,则生成该随机数的节点为当前主节点,否则,该节点不为主节点;
S42:将全网公知的数seed和私钥输入到确定性算法F中,生成随机数的证明proof;
S43:验证proof是否可以正确计算出value,且value是否由ski的拥有者所生成;其中验证过程在主节点发布打包区块之后,由共识组其余节点进行验证,判断其是否为当前主节点S5:主节点接收来自客户端的请求信息,并将请求信息打包成区块后广播到共识组的所有节点;
S6:每个节点采用自己的私钥ski对区块信息进行签名,并将签名发送给C‑collector节点;
S7:C‑collector节点确定接收的数据,根据接收的数据判断执行fast‑path数据共识过程或者执行linear‑PBFT数据共识过程,具体包括:设置数据接收时间阈值,在设置的数据接收时间阈值范围内确定C‑collector节点接收的数据量,若在接收的数据量未超过3f+c+1,则执行fast‑path数据共识过程;若在数据接收时间阈值内超过3f+c+1,则执行执行linear‑PBFT数据共识过程;其中,f表示可容忍的拜占庭节点个数,c表示冗余服务器的个数。
2.根据权利要求1所述的一种基于动态节点的拜占庭容错共识协议的数据共识方法,其特征在于,初始化系统的共识参数和各个节点的密钥包括:S11:确定共识组的初始节点数n;
S12:确定签名初始阈值参数t1、t2以及t3;
S13:每个节点运行分布式密钥生成算法生成各自的私钥ski,并根据私钥计算公钥pki,并将公钥广播给给个节点;
S14:每个节点运行共识算法,对初始化过程中生成的公共参数params达成分布式一致,所述公共参数包括共识小组初始节点数、签名阈值参数以及公私钥集。
3.根据权利要求1所述的一种基于动态节点的拜占庭容错共识协议的数据共识方法,其特征在于,执行fast‑path数据共识过程包括:步骤1:C‑collector节点对签名进行聚合,并将聚合签名发送至共识组所有节点;
步骤2:每个节点收到聚合签名后提交区块,并执行客户端请求,对当前区块状态摘要d=digest(Dx)进行签名,并将该签名发送给E‑collector节点;其中digest表示哈希函数,Dx表示区块状态;
步骤3:E‑collector节点将签名进行聚合,并将聚合签名发送至共识组所有节点以及客户端;
步骤4:客户端验证共识操作是否被执行,若被执行,则共识完成,否则共识无效。
4.根据权利要求1所述的一种基于动态节点的拜占庭容错共识协议的数据共识方法,其特征在于,执行linear‑PBFT数据共识过程包括:步骤1:C‑collector节点对签名进行聚合,并将聚合签名发送至共识组所有节点;
步骤2:每个节点收到聚合签名后,对聚合签名进行第二次签名并发送给C‑collector节点;
步骤3:C‑collector节点将第二次签名进行聚合,并将聚合签名发送至共识组所有节点;
步骤4:每个节点收到聚合签名后提交区块,并执行客户端请求,对当前区块状态摘要d=digest(Dx)进行签名,并将该签名发送给E‑collector节点;其中digest表示哈希函数,Dx表示区块状态;
步骤5:E‑collector节点将签名进行聚合,并将聚合签名发送至共识组所有节点以及客户端;
步骤6:客户端验证共识操作是否被执行,若被执行,则共识完成,否则共识无效。