随机数生成方法、区块链节点、系统及介质
技术领域
本发明涉及区块链技术领域,尤其涉及随机数生成方法、区块链节点、系统及介质。
背景技术
随机数的生成是区块链领域内一个非常重要的技术问题。随机数被用于区块链技术方案的很多方面,例如:基于区块链的游戏、抽奖类Dapp(Decentralized Application,去中心化应用程序),以及一些使用随机数作为选取出块依据的区块链方案等。一个好的随机数应该具有不可预测、不可控且可公证的特性。
现有技术方案中,生成的随机数或者仅具有上述的部分特性,或者开销较大,使用相对复杂。
发明内容
本发明的主要目的在于提供随机数生成方法、区块链节点、系统及介质,能够解决随机数生成的问题,且生成的随机数不可预测、不可控制,还能够被各方公正认可。
为实现上述目的,本发明提供一种随机数生成方法,应用于区块链节点所述方法包括:
所述区块链节点确定包括自身在内的N个节点参与共识,并获取每个节点的编码;
基于可验证密钥共享机制,所述区块链节点构建自身的M个公私钥片段对,其中,M、N均为整数,且M=roundup(预设比例*N);
所述区块链节点根据自身的M个私钥片段计算对应于每个节点的编码的N个数值,将计算的数值分别发送至符合对应编码的其他节点,并接收其他节点发送的数值;
当有区块需要共识时,根据所述区块链节点上保存的与自身编码对应的数值合成所述区块链节点的第一签名,并根据所述区块链节点的第一签名构建所述区块链节点对待共识区块的prepare投票;
将prepare投票发送至参与共识的其它区块链节点,以及接收其它区块链节点发送的prepare投票;
所述区块链节点利用每个参与共识的区块链节点的第j段公钥片段构建唯一公钥,其中j为小于或等于M的自然数;
当在所述N个节点中,prepare投票通过验证的节点达到M个时,所述区块链节点利用M个节点的prepare投票构建第二签名;
当采用所述唯一公钥验证所述第二签名,且所述第二签名通过验证时,所述区块链节点将所述第二签名确定为随机数。
优选地,所述区块链节点根据自身的M个私钥片段计算对应于每个节点的编码的N个数值,将计算的数值分别发送至符合对应编码的其他节点包括:
所述区块链节点构建具有M项的(M-1)阶多项式,所述多项式的系数依次为所述区块链节点的M个私钥片段,并将每个节点的编码依次作为所述多项式的变量值输入至所述多项式中,得到所述区块链节点的N个数值;
所述区块链节点确定计算每个数值的编码,并根据确定的编码将每个数值发送至与所述确定的编码相对应的节点。
优选地,所述根据所述区块链节点上保存的与自身编码对应的数值合成所述区块链节点的第一签名包括:
获取待共识区块的哈希值;
将其保存的N个数值累加后对所述待共识区块的哈希值进行签名,得到所述区块链节点的第一签名。
优选地,所述区块链节点利用M个节点的prepare投票构建第二签名包括:
区块链节点利用M个节点的prepare投票中包括的第一签名构建M个方程组成的方程组,求解得到第二签名,第二签名为每个参与共识的区块链节点的第j段私钥片段累加后对待共识区块的哈希值的签名。
优选地,所述方法还包括:
所述区块链节点获取所述区块的执行结果,并确定commit阶段的commit标识;
所述区块链节点根据所述执行结果、所述随机数及所述commit标识构建所述区块链节点的commit投票;
当在所述N个节点中,commit投票通过验证的节点大于所述预设比例时,所述区块链节点确定所述区块能够提交。
优选地,所述方法还包括:
当在预设时间内,prepare投票通过验证的节点没有达到M个,及/或commit投票通过验证的节点没有达到M个时,所述区块链节点确定提块失败;
所述区块链节点获取生成的新随机数,并根据所述新随机数进行提块。
为实现上述目的,本发明提供一种随机数生成方法,应用于区块链系统,所述方法包括:
确定区块链系统中参与共识的N个节点及每个节点的编码;
基于可验证密钥共享机制,构建每个节点自身的M个公私钥片段对,其中,M、N均为整数,且M=roundup(预设比例*N);
根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值并将计算的数值分别发送至符合对应编码的节点;
当有区块需要共识时,根据每个节点上保存的与自身编码对应的数值合成每个节点的第一签名,并根据每个节点的第一签名构建每个节点对待共识区块的prepare投票;
利用每个参与共识的区块链节点的第j段公钥片段构建唯一公钥,其中j为小于或等于M的自然数;
当prepare投票通过验证的节点达到M个时,利用M个节点的prepare投票构建第二签名;
采用所述唯一公钥验证所述第二签名;
当所述第二签名通过验证时,将所述第二签名确定为随机数。
优选地,所述根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值,并将计算的数值分别发送至符合对应编码的节点包括:
对于每个节点,构建具有M项的(M-1)阶多项式,所述多项式的系数依次为该节点的M个私钥片段,并将每个节点的编码依次作为所述多项式的变量值输入至所述多项式中,得到该节点的N个数值;
确定计算每个数值的编码;
根据确定的编码将每个数值发送至与所述确定的编码相对应的节点。
优选地,所述根据每个节点上保存的与自身编码对应的数值合成每个节点的第一签名包括:
获取待共识区块的哈希值;
将每个节点保存的N个数值累加后对所述待共识区块的哈希值进行签名,得到每个节点的第一签名。
优选地,所述利用M个节点的prepare投票构建第二签名包括:
利用M个节点的prepare投票中包括的第一签名构建M个方程组成的方程组,求解得到第二签名,第二签名为每个参与共识的区块链节点的第j段私钥片段累加后对待共识区块的哈希值的签名。
优选地,所述方法还包括:
执行所述区块,得到执行结果;
确定commit阶段的commit标识;
根据所述执行结果、所述随机数及所述commit标识构建每个节点的commit投票;
当commit投票通过验证的节点大于所述预设比例时,提交所述区块。
优选地,所述方法还包括:
当在预设时间内,prepare投票通过验证的节点没有达到M个,及/或commit投票通过验证的节点没有达到M个时,确定提块失败;
生成新随机数;
根据所述新随机数进行提块。
为实现上述目的,本发明进一步提供一种区块链节点,所述区块链节点包括:
存储设备,存储至少一个指令;及
处理设备,执行所述存储设备中存储的指令以实现所述随机数生成方法。
为实现上述目的,本发明进一步提供一种区块链系统,所述区块链系统包括:
存储器,存储至少一个指令;及
处理器,执行所述存储器中存储的指令以实现所述随机数生成方法。
为实现上述目的,本发明进一步提供一种随机数生成装置,所述装置包括:
确定单元,用于确定区块链系统中参与共识的N个节点及每个节点的编码;
构建单元,用于基于可验证密钥共享机制,构建每个节点自身的M个公私钥片段对,其中,M、N均为整数,且M=roundup(预设比例*N);
发送单元,用于根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值并将计算的数值分别发送至符合对应编码的节点;
所述构建单元,还用于当有区块需要共识时,根据每个节点上保存的与自身编码对应的数值合成每个节点的第一签名,并根据每个节点的第一签名构建每个节点对待共识区块的prepare投票;
所述构建单元,还用于利用每个参与共识的区块链节点的第j段公钥片段构建唯一公钥,其中j为小于或等于M的自然数;
所述构建单元,还用于,用于当prepare投票通过验证的节点达到M个时,利用M个节点的prepare投票构建第二签名;
验证单元,用于采用所述唯一公钥验证所述第二签名;
所述确定单元,还用于当所述第二签名通过验证时,将所述第二签名确定为随机数。
优选地,所述发送单元具体用于:
对于每个节点,构建具有M项的(M-1)阶多项式,所述多项式的系数依次为该节点的M个私钥片段,并将每个节点的编码依次作为所述多项式的变量值输入至所述多项式中,得到该节点的N个数值;
确定计算每个数值的编码;
根据确定的编码将每个数值发送至与所述确定的编码相对应的节点。
优选地,所述构建单元根据每个节点上保存的与自身编码对应的数值合成每个节点的第一签名包括:
获取待共识区块的哈希值;
将每个节点保存的N个数值累加后对所述待共识区块的哈希值进行签名,得到每个节点的第一签名。
优选地,所述构建单元,利用M个节点的prepare投票构建第二签名包括:
利用M个节点的prepare投票中包括的第一签名构建M个方程组成的方程组,求解得到第二签名,第二签名为每个参与共识的区块链节点的第j段私钥片段累加后对待共识区块的哈希值的签名。
优选地,所述装置还包括:
执行单元,用于执行所述区块,得到执行结果;
所述确定单元,还用于确定commit阶段的commit标识;
所述构建单元,还用于根据所述执行结果、所述随机数及所述commit标识构建每个节点的commit投票;
提交单元,用于当commit投票通过验证的节点大于所述预设比例时,提交所述区块。
优选地,所述装置还包括:
所述确定单元,还用于当在预设时间内,prepare投票通过验证的节点没有达到M个,及/或commit投票通过验证的节点没有达到M个时,确定提块失败;
生成单元,用于生成新随机数;
提块单元,用于根据所述新随机数进行提块。
综上所述,本发明能够在区块链系统上结合可验证密钥共享机制及预设签名算法生成随机数,具备去中心化的特性,该随机数由部分节点构建的唯一私钥对区块的哈希值进行阈值签名而生成,使得该随机数具有包含区块提议者在内的不可控且不可预测的特性,并且预设签名算法的使用确保了该随机数可被所有节点验证通过,确保了其公开可验证特性,同时,利用预设签名算法的信息交互过程被融合至拜占庭容错算法的prepare投票阶段,节省了交互时间,该随机数可以直接被应用于当前所生成的区块,因此也保证了随机数的实时可用性。
附图说明
图1为本发明一实施例的流程示意图;
图2为本发明另一实施例的流程示意图;
图3为本发明一实施例揭露的区块链系统的内部结构示意图;
图4为本发明一实施例揭露的区块链节点的结构示意图;
图5为本发明随机数生成装置的功能模块示意图;
主要元件符号说明
区块链系统 |
1 |
存储器 |
12 |
处理器 |
13 |
随机数生成装置 |
11 |
确定单元 |
110 |
构建单元 |
111 |
发送单元 |
112 |
验证单元 |
114 |
执行单元 |
115 |
提交单元 |
116 |
生成单元 |
117 |
提块单元 |
118 |
区块链节点 |
2 |
存储设备 |
22 |
处理设备 |
23 |
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明提供一种随机数生成方法。
参照图1,为本发明一实施例的流程示意图。根据不同的需求,该流程示意图中步骤的顺序可以改变,某些步骤可以省略。
所述随机数生成方法应用于一个或者多个区块链节点组成的区块链系统中,所述区块链节点是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,所述区块链节点的硬件设备包括但不限于微处理器、专用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable GateArray,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述区块链节点可以是任何一种可与用户进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(Internet Protocol Television,IPTV)、智能式穿戴式设备等。
所述区块链节点还可以包括网络设备和/或用户设备。其中,所述网络设备包括,但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(CloudComputing)的由大量主机或网络服务器构成的云。
所述区块链节点所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
在一实施例中,该方法包括:
S10,所述区块链节点确定包括自身在内的N个节点参与共识,并获取每个节点的编码。
本实施例中,区块链节点所在系统采用PBFT(Practical Byzantine FaultTolerance,实用拜占庭容错算法)共识算法,具体可参考本发明其它实施例的描述。
举例来说,N个节点的编码可以为1,2,3……N,假设有4个节点A、B、C、D时,编码分别为1、2、3、4。
S11,基于可验证密钥共享机制,所述区块链节点构建自身的M个公私钥片段对,其中,M、N均为整数,且M=roundup(预设比例*N)。
每个公私钥片段对包括一个公钥片段和一个私钥片段,其中,所有的公钥片段在构建之后向区块链系统中的其它节点公开。
例如:当N=4时,M=3,节点A的3个公钥片段可以表示为bPKA1、bPKA2及bPKA3,节点A的3个私钥片段分别为bSKA1、bSKA2及bSKA3。
S12,所述区块链节点根据自身的M个私钥片段计算对应于每个节点的编码的N个数值,将计算的数值分别发送至符合对应编码的其他节点,并接收其他节点发送的数值。
同样以N=4,M=3为例,区块链节点A构建一个3项2阶多项式,记作F(x)=r1+r2*x+r3*x2,所述节点A的3个私钥片段分别为bSKA1、bSKA2及bSKA3,则所述节点A的多项式为:FA(x)=bSKA1+bSKA2*x+bSKA3*x2,所述区块链系统将x=1、2、3、4依次作为变量值代入该多项式,分别计算获得FA(1)、FA(2)、FA(3)及FA(4)作为所述节点A的4个数值,FA(1)=bSKA1+bSKA2+bSKA3,FA(2)=bSKA1+2bSKA2+4bSKA3,FA(3)=bSKA1+3bSKA2+9bSKA3,FA(4)=bSKA1+4bSKA2+16bSKA3;进一步地,节点A将FA(2)秘密发送给对应于编号2的B节点,将FA(3)秘密发送给对应于编号3的C节点,并将FA(4)秘密发送给对应于编号4的D节点,即所述节点A只保留数值FA(1)。
同理,所述区块链系统对节点B、节点C、节点D执行同样的操作。最后,所述节点A拥有FA(1)=bSKA1+bSKA2+bSKA3、FB(1)=bSKB1+bSKB2+bSKB3、FC(1)=bSKC1+bSKC2+bSKC3及FD(1)=bSKD1+bSKD2+bSKD3,所述节点B拥有FA(2)、FB(2)、FC(2)及FD(2),所述节点C拥有FA(3)、FB(3)、FC(3)及FD(3),且所述节点D拥有FA(4)、FB(4)、FC(4)及FD(4)。
在本发明的至少一个实施例中,在根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值后,此时如果参与共识的节点发生变化,则根据新的节点重新构建每个节点的数值。
S13,当有区块需要共识时,根据所述区块链节点上保存的与自身编码对应的数值合成所述区块链节点的第一签名,并根据所述区块链节点的第一签名构建所述区块链节点对待共识区块的prepare投票。
优选地,区块链节点使用其预先创建的第一私钥对prepare投票进行签名后,将签名与prepare投票一起广播至参与共识的其它节点,其它节点接收签名与prepare投票后,利用区块链节点预先公开的第一公钥进行验证。
需要说明的是,区块链节点可以预先创建第一公私钥对,用于PBFT共识过程,第一公私钥对即包括第一私钥和第一公钥,可以采用现有技术中的非对称密钥生成算法,在此不再赘述。
具体的,提议节点生成待共识区块,并将待共识区块发送到其它节点进行共识。
举例来说,区块链节点可以获取待共识区块的哈希值,并将其保存的N个数值累加后对待共识区块的哈希值进行签名,得到第一签名。
例如:对于所述节点A,获取的待共识区块的哈希值为BlockHash,则所述节点A的第一签名为:SigF,1=(FA(1)+FB(1)+FC(1)+FD(1))*BlockHash。
在本发明的至少一个实施例中,所述区块链系统根据每个节点的第一签名构建每个节点对待共识区块的prepare投票包括:
所述区块链系统以每个节点的第一签名、所述区块的哈希值及prepare阶段的prepare标识构建每个节点的prepare投票。
其中,所述prepare标识用于表示当前处于prepare阶段。
例如:各节点的prepare投票可以表示为(SigF,i,BlockHash,prepare标识),其中所述节点A的prepare投票可以表示为(SigF,1,BlockHash,prepare标识)。
S14,将prepare投票发送至参与共识的其它区块链节点,以及接收其它区块链节点发送的prepare投票。
基于PBFT共识机制,参与共识的所有区块链节点都具有投票的权利。
S15,所述区块链节点利用每个参与共识的区块链节点的第j段公钥片段构建唯一公钥,其中j为小于或等于M的自然数。
因为每个节点的公钥片段都是公开的,所以区块链节点可以从每个节点的公钥片段中提取一段来创建唯一公钥,优选的,可以提取每个节点的首段公钥片段来构建唯一公钥,即唯一公钥为:BPK=bPKA1+bPKB1+bPKC1+bPKD1。
当然,也可以提取每个节点的第二段公钥片段或第三段公钥片段来构建唯一公钥,后续步骤中在构建第二签名时采用的私钥片段集合与唯一公钥中包含的公钥片段对应即可。
S16,当在所述N个节点中,prepare投票通过验证的节点达到M个时,所述区块链节点利用M个节点的prepare投票构建第二签名。
具体的,区块链节点利用M个节点的prepare投票中包括的第一签名SigF,i构建第二签名,详细构建过程如下:
假设四个节点都通过了prepare投票,区块链节点对SigF,1、SigF,2、SigF,3、SigF,4进行变形:
SigF,1=(FA(1)+FB(1)+FC(1)+FD(1))*BlockHash=((bSKA1+bSKA2+bSKA3)
+(bSKB1+bSKB2+bSKB3)+(bSKC1+bSKC2+bSKC3)+(bSKD1+bSKD2+bSKD3))*BlockHash=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
SigF,2=(FA(2)+FB(2)+FC(2)+FD(2))*BlockHash=(bSKA1+2bSKA2+4bSKA3)+(bSKB1+2bSKB2+4bSKB3)+(bSKC1+2bSKC2+4bSKC3)+(bSKD1+2bSKD2+4bSKD3)=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+2(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+4(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
依次类推得到,SigF,3=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+3(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+9(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
SigF,4=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+4(bSKA2+bSKB2+
bSKC2+bSKD2)*BlockHash+16(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
则通过上述方程组可以解出(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash,即为第二签名SIGBSK=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash。
当然实际上,利用SigF,1、SigF,2、SigF,3、SigF,4的其中3个即可解出第二签名。
S17,当采用所述唯一公钥验证所述第二签名,且所述第二签名通过验证时,所述区块链节点将所述第二签名确定为随机数。
因为第二签名中包含的私钥片段与唯一公钥中的公钥片段对应,所以能够验签所述第二签名。
综上所述,本发明能够在区块链系统上结合可验证密钥共享机制及预设签名算法生成随机数,具备去中心化的特性,该随机数由部分节点构建的唯一私钥对区块的哈希值进行阈值签名而生成,使得该随机数具有包含区块提议者在内的不可控且不可预测的特性,并且预设签名算法的使用确保了该随机数可被所有节点验证通过,确保了其公开可验证特性,同时,利用预设签名算法的信息交互过程被融合至拜占庭容错算法的prepare投票阶段,节省了交互时间,该随机数可以直接被应用于当前所生成的区块,因此也保证了随机数的实时可用性。
上述方法应用于所述区块链节点,而所述区块链节点属于所述区块链系统中众多节点中的一个,因此,下面将以应用于所述区块链系统的实施例对该方法进行详细说明。
参照图2,为本发明另一实施例的流程示意图。根据不同的需求,该流程示意图中步骤的顺序可以改变,某些步骤可以省略。
S20,确定区块链系统中参与共识的N个节点及每个节点的编码。
目前的随机数生成方案主要包括以下几种:
(1)使用链上带有随机属性的因子作为随机数来源,如区块Hash(哈希)值,区块时间戳等。
区块哈希值来自多方不确定的交易集合,区块时间戳为不确定的区块生成时间,这些因子在一定程度上具有随机性。然而区块生成由某个节点提议完成,因此该节点在一定程度上能够影响这些因子。比如在打包交易时,有选择性地打包使得最终哈希值接近对自已有利的值,则生成的随机数不具备不可控性。
(2)使用来自链下的随机信息,如气象数据、地震监测信息等。
来自链下自然界的数据具有真随机、不可预测及完全不可控的特征。然而链下数据传入链上需要一个可行的中间服务来进行,而这种中间服务通常是中心化的,其违背了区块链可验证的去中心化思想。
(3)在链上使用一定的算法生成随机数,例如:VRF算法(Verifiable RandomFunctions,可验证的随机函数)、RANDAO算法、VDF(Verifiable Delay Function,可验证延迟函数)等。
然而,使用VRF算法生成随机数时,通常由多个节点各自做VRF运算,再对多个节点的VRF运算结果进行一定的处理及选择,得到最终的随机数。区块链的分布式特征使得在对多个节点的VRF运算结果进行处理时,需要在一个leader角色上进行,该leader能够选择对自己有利的VRF运算结果,从而在一定程度上控制了随机数的生成。
在使用RANDA算法生成随机数时,需要多个参与者首先发布自己私有信息的承诺,之后所有参与者公布该承诺对应的信息,再对所有的信息进行异或操作得到最终的随机数。该种方式方案使得最后一个公布信息的参与者可以优先计算出其他参与者的信息结果,再根据计算的结果选择是否公布自己的信息,从而在一定程度上控制了随机数的生成。
在使用VDF算法生成随机数时,随机数的生成需要在多方披露完各自信息后,再进行较长一段时间的计算,该段时间远大于披露信息所需的时间。这样参与者将不能在未披露自己的信息之前计算出最终结果,进而得到一个可公证的、不可预测且不可控制的随机数,然而该段时间的计算使得该随机数获取不够实时,通常情况下,在一个区块上请求的随机数将在后面的某个区块才可获取,因此该方案不适用于那些需要根据随机数立即得出结果的任务,比如即时开奖类游戏Dapp(Decentralized Application,去中心化应用程序)。
鉴于上述几个方案各自存在的缺陷,本案提出了一种结合可验证密钥共享机制(Verified Secret Share,VSS)及BLS阈值签名算法(BLS threshold sig)生成随机数的方法,由于上述算法能够以部分推导整体,因此所述区块链系统首先要确定区块链系统中参与共识的N个节点及每个节点的编码。
在本发明的至少一个实施例中,所述N个节点参与PBFT(Practical ByzantineFault Tolerance,实用拜占庭容错算法)共识过程,在该共识算法中,当超过2/3的节点达成共识时,整个系统达成一致。
具体地,所述PBFT共识过程包括以下三个阶段:
(1)re-prepare阶段:由leader节点打包区块并分发给其他节点。
(2)Prepare阶段:其他节点收到区块后,验证区块并进行投票,在收到超过2/3节点的投票后,进入下一阶段。
(3)Commit阶段:进行投票,在收到超过2/3节点的投票后,确认区块。
在本发明的至少一个实施例中,每个节点的编码可以依次为:1-N,其中,N为大于0的整数。
S21,基于可验证密钥共享机制构建每个节点自身的M个公私钥片段对。
其中,M为整数,且M=roundup(预设比例*N)。所述预设比例可以包括2/3等,以符合PBFT共识算法。
例如:当N等于4时,M等于3。
上述配置方式与PBFT共识算法相结合,由于在PBFT共识算法中,当收到超过所述预设比例的节点的投票后,则确认达成共识,因此,本案中配置M=roundup(预设比例*N),进而能够使本案融合至PBFT共识算法中。
在本发明的至少一个实施例中,所述区块链系统基于可验证密钥共享机制,构建每个节点自身的M个公私钥片段对包括:
所述区块链系统基于可验证密钥共享机制,并采用椭圆曲线算法构建每个节点自身的M个公私钥片段对。
在上述实施例中,能够很好的结合PBFT共识及椭圆曲线算法的特性。由于椭圆曲线算法具有双线性映射特性,PBFT共识过程也是在收到超过所述预设比例的节点的投票后达成共识。因此,结合了可验证密钥共享机制,能够在后续只利用构建的公钥片段及私钥片段中的部分片段分别构建出整体的唯一公钥及唯一私钥。
在本发明的至少一个实施例中,所述区块链系统还可以构建一组公私钥对pPk/pSK,用于实现PBFT共识过程。
具体地,所述区块链系统可以通过非对称加密算法构建该组公私钥对,该组公私钥对具有可验证性。
S22,根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值并将计算的数值分别发送至符合对应编码的节点。
在本发明的至少一个实施例中,所述区块链系统根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值,并将计算的数值分别发送至符合对应编码的节点包括:
对于每个节点,所述区块链系统构建具有M项的(M-1)阶多项式,所述多项式的系数依次为该节点的M个私钥片段,并将每个节点的编码依次作为所述多项式的变量值输入至所述多项式中,得到该节点的N个数值,进一步地,所述区块链系统确定计算每个数值的编码,并根据确定的编码将每个数值发送至与所述确定的编码相对应的节点。
例如:当有4个节点A、B、C、D时,M=roundup(预设比例*N)=3,四个节点的编号分别为1、2、3、4。对于节点A,所述区块链系统构建一个3项2阶多项式,记作F(x)=r1+r2*x+r3*x2,所述节点A的3个私钥片段分别为bSKA1、bSKA2及bSKA3,则所述节点A的多项式为:FA(x)=bSKA1+bSKA2*x+bSKA3*x2,所述区块链系统将x=1、2、3、4依次作为变量值代入该多项式,分别计算获得FA(1)、FA(2)、FA(3)及FA(4)作为所述节点A的4个数值,FA(1)=bSKA1+bSKA2+bSKA3,FA(2)=bSKA1+2bSKA2+4bSKA3,FA(3)=bSKA1+3bSKA2+9bSKA3;进一步地,所述区块链系统将FA(2)秘密发送给对应于编号2的B节点,将FA(3)秘密发送给对应于编号3的C节点,并将FA(4)秘密发送给对应于编号4的D节点,即所述节点A只保留数值FA(1)。
同理,所述区块链系统对节点B、节点C、节点D执行同样的操作。最后,所述节点A拥有FA(1)=bSKA1+bSKA2+bSKA3、FB(1)=bSKB1+bSKB2+bSKB3、FC(1)=bSKC1+bSKC2+bSKC3及FD(1)=bSKD1+bSKD2+bSKD3,所述节点B拥有FA(2)、FB(2)、FC(2)及FD(2),所述节点C拥有FA(3)、FB(3)、FC(3)及FD(3),且所述节点D拥有FA(4)、FB(4)、FC(4)及FD(4)。
在本发明的至少一个实施例中,在根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值后,此时如果节点发生变化,则根据新的节点重新构建每个节点的数值。
S23,当有区块需要共识时,根据每个节点上保存的与自身编码对应的数值合成每个节点的第一签名,并根据每个节点的第一签名构建每个节点对待共识区块的prepare投票。
在本发明的至少一个实施例中,所述区块链系统根据每个节点上保存的与自身编码对应的数值合成每个节点的第一签名包括:
所述区块链系统获取待共识区块的哈希值,进一步将每个节点保存的N个数值累加后对所述待共识区块的哈希值进行签名,得到每个节点的第一签名。
例如:对于所述节点A,所述节点A上的数值的累加和为:FA(1)+FB(1)+FC(1)+FD(1),获取的所述区块的哈希值为BlockHash,则所述节点A的第一签名为:SigF,1=(FA(1)+FB(1)+FC(1)+FD(1))*BlockHash。
在本发明的至少一个实施例中,所述区块链系统根据每个节点的第一签名构建每个节点对待共识区块的prepare投票包括:
所述区块链系统以每个节点的第一签名、所述区块的哈希值及prepare阶段的prepare标识构建每个节点的prepare投票。
其中,所述prepare标识用于表示当前处于prepare阶段。
例如:所述节点A的prepare投票可以表示为(SigF,i,BlockHash,prepare标识)。
S24,利用每个参与共识的区块链节点的第j段公钥片段构建唯一公钥。
其中,j为小于或等于M的自然数。
具体地,所述区块链系统可以提取每个节点的首个私钥片段及首个公钥片段。
例如:当所述节点A为生成所述区块的节点时,N个私钥片段可以分别为所述节点A的首个私钥片段bSKA1、所述节点B的首个私钥片段bSKB1、所述节点C的首个私钥片段bSKC1、所述节点D的首个私钥片段bSKD1,所述唯一公钥可以表示为:BPK=bPKA1+bPKB1+bPKC1+bPKD1,其中,bPKA1表示所述节点A的首个公钥片段,bPKB1表示所述节点B的首个公钥片段,bPKC1表示所述节点C的首个公钥片段,且bPKD1表示所述节点D的首个公钥片段。
当然,在其他实施例中,也可以提取每个节点的第二段公钥片段、第三段公钥片段来构建唯一公钥,后续步骤中在构建第二签名时采用的私钥片段集合与唯一公钥中包含的公钥片段对应即可。
进一步地,所述区块链系统在构建了每个节点的prepare投票后,利用与每个节点对应的公私钥对pPk/pSK中的私钥pSK对每个prepare投票进行签名,并将每个prepare投票广播至其他节点,后续则以与每个节点对应的公私钥对中的公钥pPk验证每个prepare投票。
在本发明的至少一个实施例中,所构建的公钥或者公钥片段都是被公布的,以供验证使用。
S25,当prepare投票通过验证的节点达到M个时,利用M个节点的prepare投票构建第二签名。
在本发明的至少一个实施例中,所述区块链系统利用M个节点的prepare投票构建第二签名包括:
所述区块链系统利用M个节点的prepare投票中包括的第一签名构建M个方程组成的方程组,求解得到第二签名,第二签名为每个参与共识的区块链节点的第j段私钥片段累加后对待共识区块的哈希值的签名。
详细构建过程如下:
假设四个节点都通过了prepare投票,区块链节点对SigF,1、SigF,2、SigF,3、SigF,4进行变形:
SigF,1=(FA(1)+FB(1)+FC(1)+FD(1))*BlockHash=((bSKA1+bSKA2+bSKA3)+(bSKB1+bSKB2+bSKB3)+(bSKC1+bSKC2+bSKC3)+(bSKD1+bSKD2+bSKD3))*BlockHash=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
SigF,2=(FA(2)+FB(2)+FC(2)+FD(2))*BlockHash=(bSKA1+2bSKA2+4bSKA3)+(bSKB1+2bSKB2+4bSKB3)+(bSKC1+2bSKC2+4bSKC3)+(bSKD1+2bSKD2+4bSKD3)=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+2(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+4(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
依次类推得到,SigF,3=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+3(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+9(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
SigF,4=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+4(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+16(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
则通过上述方程组可以解出(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash,即为第二签名SIGBSK=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash。
当然实际上,利用SigF,1、SigF,2、SigF,3、SigF,4的其中3个即可解出第二签名。
可以理解的是,随机数相当于由部分节点构建的唯一私钥对区块的哈希值进行阈值签名而生成,使得该随机数具有包含区块提议者在内的不可控且不可预测的特性,并且BLS阈值签名算法的使用确保了该随机数可被所有节点验证通过,确保了其公开可验证特性。并且,同时,利用BLS阈值签名算法的信息交互过程被融合至拜占庭容错算法的prepare投票阶段,节省了交互时间。由于在区块链上实现,还具备去中心化的特性。
S26,采用所述唯一公钥验证所述第二签名。
在本发明的至少一个实施例中,由于所述第二签名是根据所述唯一私钥生成,因此,所述区块链系统可以采用所述唯一公钥验证所述第二签名。
具体地,所述区块链系统中的每个区块链节点都可以验证所述第二签名,如果所述第二签名是正确的,那么每个区块链节点都可以成功验证所述第二签名。
S27,当所述第二签名通过验证时,将所述第二签名确定为随机数。
在本发明的至少一个实施例中,当所述第二签名通过验证时,说明所述第二签名满足可验证性,可以被确定为所述随机数。
在本发明的至少一个实施例中,所述方法还包括:
所述区块链系统执行所述区块,得到执行结果,进一步确定commit阶段的commit标识,所述区块链系统根据所述执行结果、所述随机数及所述commit标识构建每个节点的commit投票,当commit投票通过验证的节点大于所述预设比例时,所述区块链系统提交所述区块。
通过上述实施方式,能够在构建了所述随机数后,直接进入下一阶段,确保了所述随机数的实时可用性。
在本发明的至少一个实施例中,所述方法还包括:
当在预设时间内,prepare投票通过验证的节点没有达到M个,及/或commit投票通过验证的节点没有达到M个时,所述区块链系统确定提块失败,进一步地,所述区块链系统生成新随机数,并根据所述新随机数进行提块。
通过上述实施方式,当确定提块失败时,可以及时重新提块,避免影响区块链系统正常执行任务。
综上所述,本发明能够在区块链系统上结合可验证密钥共享机制及预设签名算法生成随机数,具备去中心化的特性,该随机数由部分节点构建的唯一私钥对区块的哈希值进行阈值签名而生成,使得该随机数具有包含区块提议者在内的不可控且不可预测的特性,并且预设签名算法的使用确保了该随机数可被所有节点验证通过,确保了其公开可验证特性,同时,利用预设签名算法的信息交互过程被融合至拜占庭容错算法的prepare投票阶段,节省了交互时间,该随机数可以直接被应用于当前所生成的区块,因此也保证了随机数的实时可用性。
参见图3,在本实施例中,所述区块链系统1可以是组成内容分发网络或者区块链网络的节点。
所述区块链系统1可以包括存储器12、处理器13和总线,还可以包括存储在所述存储器12中并可在所述处理器13上运行的计算机程序,例如随机数生成程序。
本领域技术人员可以理解,所述示意图仅仅是区块链系统1的示例,并不构成对区块链系统1的限定,所述区块链系统1既可以是总线型结构,也可以是星形结构,所述区块链系统1还可以包括比图示更多或更少的其他硬件或者软件,或者不同的部件布置,例如所述区块链系统1还可以包括输入输出设备、网络接入设备等。
需要说明的是,所述区块链系统1仅为举例,其他现有的或今后可能出现的电子产品如可适应于本发明,也应包含在本发明的保护范围以内,并以引用方式包含于此。
其中,存储器12至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、移动硬盘、多媒体卡、卡型存储器(例如:SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器12在一些实施例中可以是区块链系统1的内部存储单元,例如该区块链系统1的移动硬盘。存储器12在另一些实施例中也可以是区块链系统1的外部存储设备,例如区块链系统1上配备的插接式移动硬盘、智能存储卡(Smart Media Card,SMC)、安全数字(SecureDigital,SD)卡、闪存卡(Flash Card)等。进一步地,存储器12还可以既包括区块链系统1的内部存储单元也包括外部存储设备。存储器12不仅可以用于存储安装于区块链系统1的应用软件及各类数据,例如随机数生成程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器13在一些实施例中可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(Central Processing unit,CPU)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。处理器13是所述区块链系统1的控制核心(Control Unit),利用各种接口和线路连接整个区块链系统1的各个部件,通过运行或执行存储在所述存储器12内的程序或者模块(例如执行随机数生成程序等),以及调用存储在所述存储器12内的数据,以执行区块链系统1的各种功能和处理数据。
所述处理器13执行所述区块链系统1的操作系统以及安装的各类应用程序。所述处理器13执行所述应用程序以实现上述各个随机数生成方法实施例中的步骤,例如图2所示的步骤S20、S21、S22、S23、S24、S25、S26、S27。
或者,所述处理器13执行所述计算机程序时实现上述各装置实施例中各模块/单元的功能,例如:
确定区块链系统中参与共识的N个节点及每个节点的编码;
基于可验证密钥共享机制,构建每个节点自身的M个公私钥片段对,其中,M、N均为整数,且M=roundup(预设比例*N);
根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值并将计算的数值分别发送至符合对应编码的节点;
当有区块需要共识时,根据每个节点上保存的与自身编码对应的数值合成每个节点的第一签名,并根据每个节点的第一签名构建每个节点对待共识区块的prepare投票;
利用每个参与共识的区块链节点的第j段公钥片段构建唯一公钥,其中j为小于或等于M的自然数;
当prepare投票通过验证的节点达到M个时,利用M个节点的prepare投票构建第二签名;
采用所述唯一公钥验证所述第二签名;
当所述第二签名通过验证时,将所述第二签名确定为随机数。
示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器12中,并由所述处理器13执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述区块链系统1中的执行过程。例如,所述计算机程序可以被分割成确定单元110、构建单元111、发送单元112、验证单元114、执行单元115、提交单元116、生成单元117以及提块单元118。
上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、计算机设备,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分。
所述区块链系统1集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指示相关的硬件设备来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。
其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)。
总线可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,在图3中仅用一根箭头表示,但并不表示仅有一根总线或一种类型的总线。所述总线被设置为实现所述存储器12以及至少一个处理器13等之间的连接通信。
尽管未示出,所述区块链系统1还可以包括给各个部件供电的电源(比如电池),优选地,电源可以通过电源管理装置与所述至少一个处理器13逻辑相连,从而通过电源管理装置实现充电管理、放电管理、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电装置、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。所述区块链系统1还可以包括多种传感器、蓝牙模块、Wi-Fi模块等,在此不再赘述。
进一步地,所述区块链系统1还可以包括网络接口,可选地,所述网络接口可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该区块链系统1与其他区块链系统之间建立通信连接。
可选地,该区块链系统1还可以包括用户接口,用户接口可以是显示器(Display)、输入单元(比如键盘(Keyboard)),可选地,用户接口还可以是标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在区块链系统1中处理的信息以及用于显示可视化的用户界面。
应该了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。
图3仅示出了具有组件12-13的区块链系统1,本领域技术人员可以理解的是,图3示出的结构并不构成对所述区块链系统1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
结合图2,所述区块链系统1中的所述存储器12存储多个指令以实现一种随机数生成方法,所述处理器13可执行所述多个指令从而实现:
确定区块链系统中参与共识的N个节点及每个节点的编码;
基于可验证密钥共享机制,构建每个节点自身的M个公私钥片段对,其中,M、N均为整数,且M=roundup(预设比例*N);
根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值并将计算的数值分别发送至符合对应编码的节点;
当有区块需要共识时,根据每个节点上保存的与自身编码对应的数值合成每个节点的第一签名,并根据每个节点的第一签名构建每个节点对待共识区块的prepare投票;
利用每个参与共识的区块链节点的第j段公钥片段构建唯一公钥,其中j为小于或等于M的自然数;
当prepare投票通过验证的节点达到M个时,利用M个节点的prepare投票构建第二签名;
采用所述唯一公钥验证所述第二签名;
当所述第二签名通过验证时,将所述第二签名确定为随机数。
具体地,所述处理器13对上述指令的具体实现方法可参考图2对应实施例中相关步骤的描述,在此不赘述。
参加图4,为本发明一实施例揭露的区块链节点的结构示意图。所述区块链节点2可以包括存储设备22、处理设备23和总线,还可以包括存储在所述存储设备22中并可在所述处理设备23上运行的计算机程序,例如随机数生成程序。
其中,存储设备22至少包括一种类型的可读存储介质,可以用于存储安装于区块链节点2的应用软件及各类数据,例如随机数生成程序的代码等。
处理设备23是所述区块链节点2的控制核心(Control Unit),利用各种接口和线路连接整个区块链节点2的各个部件,通过运行或执行存储在所述存储设备22内的程序或者模块(例如执行随机数生成程序等),以及调用存储在所述存储设备22内的数据,以执行区块链节点2的各种功能和处理数据。
需要说明的是,所述区块链节点2仅为举例,其他现有的或今后可能出现的电子产品如可适应于本发明,也应包含在本发明的保护范围以内,并以引用方式包含于此。
参照图5,为本发明随机数生成装置的功能模块示意图。所述随机数生成装置11包括确定单元110、构建单元111、发送单元112、验证单元114、执行单元115、提交单元116、生成单元117以及提块单元118。本发明所称的模块/单元是指一种能够被处理器13所执行,并且能够完成固定功能的一系列计算机程序段,其存储在存储器12中。在本实施例中,关于各模块/单元的功能将在后续的实施例中详述。
确定单元110确定区块链系统中参与共识的N个节点及每个节点的编码。
目前的随机数生成方案主要包括以下几种:
(1)使用链上带有随机属性的因子作为随机数来源,如区块Hash(哈希)值,区块时间戳等。
区块哈希值来自多方不确定的交易集合,区块时间戳为不确定的区块生成时间,这些因子在一定程度上具有随机性。然而区块生成由某个节点提议完成,因此该节点在一定程度上能够影响这些因子。比如在打包交易时,有选择性地打包使得最终哈希值接近对自已有利的值,则生成的随机数不具备不可控性。
(2)使用来自链下的随机信息,如气象数据、地震监测信息等。
来自链下自然界的数据具有真随机、不可预测及完全不可控的特征。然而链下数据传入链上需要一个可行的中间服务来进行,而这种中间服务通常是中心化的,其违背了区块链可验证的去中心化思想。
(3)在链上使用一定的算法生成随机数,例如:VRF算法(Verifiable RandomFunctions,可验证的随机函数)、RANDAO算法、VDF(Verifiable Delay Function,可验证延迟函数)等。
然而,使用VRF算法生成随机数时,通常由多个节点各自做VRF运算,再对多个节点的VRF运算结果进行一定的处理及选择,得到最终的随机数。区块链的分布式特征使得在对多个节点的VRF运算结果进行处理时,需要在一个leader角色上进行,该leader能够选择对自己有利的VRF运算结果,从而在一定程度上控制了随机数的生成。
在使用RANDA算法生成随机数时,需要多个参与者首先发布自己私有信息的承诺,之后所有参与者公布该承诺对应的信息,再对所有的信息进行异或操作得到最终的随机数。该种方式方案使得最后一个公布信息的参与者可以优先计算出其他参与者的信息结果,再根据计算的结果选择是否公布自己的信息,从而在一定程度上控制了随机数的生成。
在使用VDF算法生成随机数时,随机数的生成需要在多方披露完各自信息后,再进行较长一段时间的计算,该段时间远大于披露信息所需的时间。这样参与者将不能在未披露自己的信息之前计算出最终结果,进而得到一个可公证的、不可预测且不可控制的随机数,然而该段时间的计算使得该随机数获取不够实时,通常情况下,在一个区块上请求的随机数将在后面的某个区块才可获取,因此该方案不适用于那些需要根据随机数立即得出结果的任务,比如即时开奖类游戏Dapp(Decentralized Application,去中心化应用程序)。
鉴于上述几个方案各自存在的缺陷,本案提出了一种结合可验证密钥共享机制(verifiable secret sharing,VSS)及BLS阈值签名算法(BLS threshold sig)生成随机数的方法,由于上述算法能够以部分推导整体,因此所述确定单元110首先要确定区块链系统中参与共识的N个节点及每个节点的编码。
在本发明的至少一个实施例中,所述N个节点参与PBFT(Practical ByzantineFault Tolerance,实用拜占庭容错算法)共识过程,在该共识算法中,当超过2/3的节点达成共识时,整个系统达成一致。
具体地,所述PBFT共识过程包括以下三个阶段:
(1)re-prepare阶段:由leader节点打包区块并分发给其他节点。
(2)Prepare阶段:其他节点收到区块后,验证区块并进行投票,在收到超过2/3节点的投票后,进入下一阶段。
(3)Commit阶段:进行投票,在收到超过2/3节点的投票后,确认区块。
在本发明的至少一个实施例中,每个节点的编码可以依次为:1-N,其中,N为大于0的整数。
构建单元111基于可验证密钥共享机制,构建每个节点自身的M个公私钥片段对。
其中,M为整数,且M=roundup(预设比例*N)。所述预设比例可以包括2/3等,以符合PBFT共识算法。
例如:当N等于4时,M等于3。
上述配置方式与PBFT共识算法相结合,由于在PBFT共识算法中,当收到超过所述预设比例的节点的投票后,则确认达成共识,因此,本案中配置M=roundup(预设比例*N),进而能够使本案融合至PBFT共识算法中。
在本发明的至少一个实施例中,所述构建单元111基于可验证密钥共享机制,构建每个节点自身的M个公私钥片段对包括:
所述构建单元111基于可验证密钥共享机制,并采用椭圆曲线算法构建每个节点自身的M个公私钥片段对。
在上述实施例中,能够很好的结合PBFT共识及椭圆曲线算法的特性。由于椭圆曲线算法具有双线性映射特性,PBFT共识过程也是在收到超过所述预设比例的节点的投票后达成共识。因此,结合了可验证密钥共享机制,能够在后续只利用构建的公钥片段及私钥片段中的部分片段分别构建出整体的唯一公钥及唯一私钥。
在本发明的至少一个实施例中,所述构建单元111还可以构建一组公私钥对pPk/pSK,用于实现PBFT共识过程。
具体地,所述构建单元111可以通过非对称加密算法构建该组公私钥对,该组公私钥对具有可验证性。
发送单元112根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值并将计算的数值分别发送至符合对应编码的节点。
在本发明的至少一个实施例中,所述发送单元112根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值,并将计算的数值分别发送至符合对应编码的节点包括:
对于每个节点,所述发送单元112构建具有M项的(M-1)阶多项式,所述多项式的系数依次为该节点的M个私钥片段,并将每个节点的编码依次作为所述多项式的变量值输入至所述多项式中,得到该节点的N个数值,进一步地,所述发送单元112确定计算每个数值的编码,并根据确定的编码将每个数值发送至与所述确定的编码相对应的节点。
例如:当有4个节点A、B、C、D时,M=roundup(预设比例*N)=3,四个节点的编号分别为1、2、3、4。对于节点A,所述发送单元112构建一个3项2阶多项式,记作F(x)=r1+r2*x+r3*x2,所述节点A的3个私钥片段分别为bSKA1、bSKA2及bSKA3,则所述节点A的多项式为:FA(x)=bSKA1+bSKA2*x+bSKA3*x2,所述发送单元112将x=1、2、3、4依次作为变量值代入该多项式,分别计算获得FA(1)、FA(2)、FA(3)及FA(4)作为所述节点A的4个数值,FA(1)=bSKA1+bSKA2+bSKA3,FA(2)=bSKA1+2bSKA2+4bSKA3,FA(3)=bSKA1+3bSKA2+9bSKA3;进一步地,所述发送单元112将FA(2)秘密发送给对应于编号2的B节点,将FA(3)秘密发送给对应于编号3的C节点,并将FA(4)秘密发送给对应于编号4的D节点,即所述节点A只保留数值FA(1)。
同理,所述发送单元112对节点B、节点C、节点D执行同样的操作。最后,所述节点A拥有FA(1)=bSKA1+bSKA2+bSKA3、FB(1)=bSKB1+bSKB2+bSKB3、FC(1)=bSKC1+bSKC2+bSKC3及FD(1)=bSKD1+bSKD2+bSKD3,所述节点B拥有FA(2)、FB(2)、FC(2)及FD(2),所述节点C拥有FA(3)、FB(3)、FC(3)及FD(3),且所述节点D拥有FA(4)、FB(4)、FC(4)及FD(4)。
在本发明的至少一个实施例中,在根据每个节点的M个私钥片段计算对应于每个节点的编码的N个数值后,此时如果节点发生变化,则根据新的节点重新构建每个节点的数值。
当有区块需要共识时,所述构建单元111根据每个节点上保存的与自身编码对应的数值合成每个节点的第一签名,并根据每个节点的第一签名构建每个节点对待共识区块的prepare投票。
在本发明的至少一个实施例中,所述构建单元111根据每个节点上保存的与自身编码对应的数值合成每个节点的第一签名包括:
所述构建单元111获取待共识区块的哈希值,进一步将每个节点保存的N个数值累加后对所述待共识区块的哈希值进行签名,得到每个节点的第一签名。
例如:对于所述节点A,所述节点A上的数值的累加和为:FA(1)+FB(1)+FC(1)+FD(1),获取的所述区块的哈希值为BlockHash,则所述节点A的第一签名为:SigF,1=(FA(1)+FB(1)+FC(1)+FD(1))*BlockHash。
在本发明的至少一个实施例中,所述构建单元111根据每个节点的第一签名构建每个节点对待共识区块的prepare投票包括:
所述构建单元111以每个节点的第一签名、所述区块的哈希值及prepare阶段的prepare标识构建每个节点的prepare投票。
其中,所述prepare标识用于表示当前处于prepare阶段。
例如:所述节点A的prepare投票可以表示为(SigF,i,BlockHash,prepare标识)。
所述构建单元111利用每个参与共识的区块链节点的第j段公钥片段构建唯一公钥。
其中,j为小于或等于M的自然数。
具体地,所述构建单元111可以提取每个节点的首个私钥片段及首个公钥片段。
例如:当所述节点A为生成所述区块的节点时,N个私钥片段可以分别为所述节点A的首个私钥片段bSKA1、所述节点B的首个私钥片段bSKB1、所述节点C的首个私钥片段bSKC1、所述节点D的首个私钥片段bSKD1,所述唯一公钥可以表示为:BPK=bPKA1+bPKB1+bPKC1+bPKD1,其中,bPKA1表示所述节点A的首个公钥片段,bPKB1表示所述节点B的首个公钥片段,bPKC1表示所述节点C的首个公钥片段,且bPKD1表示所述节点D的首个公钥片段。
当然,在其他实施例中,也可以提取每个节点的第二段公钥片段、第三段公钥片段来构建唯一公钥,后续步骤中在构建第二签名时采用的私钥片段集合与唯一公钥中包含的公钥片段对应即可。
进一步地,所述构建单元111在构建了每个节点的prepare投票后,利用与每个节点对应的公私钥对pPk/pSK中的私钥pSK对每个prepare投票进行签名,并将每个prepare投票广播至其他节点,后续则以与每个节点对应的公私钥对中的公钥pPk验证每个prepare投票。
在本发明的至少一个实施例中,所构建的公钥或者公钥片段都是被公布的,以供验证使用。
当prepare投票通过验证的节点达到M个时,所述构建单元111利用M个节点的prepare投票构建第二签名。
在本发明的至少一个实施例中,所述构建单元111利用M个节点的prepare投票构建第二签名包括:
所述构建单元111利用M个节点的prepare投票中包括的第一签名构建M个方程组成的方程组,求解得到第二签名,第二签名为每个参与共识的区块链节点的第j段私钥片段累加后对待共识区块的哈希值的签名。
详细构建过程如下:
假设四个节点都通过了prepare投票,区块链节点对SigF,1、SigF,2、SigF,3、SigF,4进行变形:
SigF,1=(FA(1)+FB(1)+FC(1)+FD(1))*BlockHash=((bSKA1+bSKA2+bSKA3)+(bSKB1+bSKB2+bSKB3)+(bSKC1+bSKC2+bSKC3)+(bSKD1+bSKD2+bSKD3))*BlockHash=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
SigF,2=(FA(2)+FB(2)+FC(2)+FD(2))*BlockHash=(bSKA1+2bSKA2+4bSKA3)+(bSKB1+2bSKB2+4bSKB3)+(bSKC1+2bSKC2+4bSKC3)+(bSKD1+2bSKD2+4bSKD3)=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+2(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+4(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
依次类推得到,SigF,3=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+3(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+9(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
SigF,4=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash+4(bSKA2+bSKB2+bSKC2+bSKD2)*BlockHash+16(bSKA3+bSKB3+bSKC3+bSKD3)*BlockHash;
则通过上述方程组可以解出(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash,即为第二签名SIGBSK=(bSKA1+bSKB1+bSKC1+bSKD1)*BlockHash。
当然实际上,利用SigF,1、SigF,2、SigF,3、SigF,4的其中3个即可解出第二签名。
可以理解的是,随机数相当于由部分节点构建的唯一私钥对区块的哈希值进行阈值签名而生成,使得该随机数具有包含区块提议者在内的不可控且不可预测的特性,并且BLS阈值签名算法的使用确保了该随机数可被所有节点验证通过,确保了其公开可验证特性。并且,同时,利用BLS阈值签名算法的信息交互过程被融合至拜占庭容错算法的prepare投票阶段,节省了交互时间。由于在区块链上实现,还具备去中心化的特性。
验证单元114采用所述唯一公钥验证所述第二签名。
在本发明的至少一个实施例中,由于所述第二签名是根据所述唯一私钥生成,因此,所述验证单元114可以采用所述唯一公钥验证所述第二签名。
具体地,所述区块链系统中的每个区块链节点都可以验证所述第二签名,如果所述第二签名是正确的,那么每个区块链节点都可以成功验证所述第二签名。
当所述第二签名通过验证时,执行单元115将所述第二签名确定为随机数。
在本发明的至少一个实施例中,当所述第二签名通过验证时,说明所述第二签名满足可验证性,可以被确定为所述随机数。
在本发明的至少一个实施例中,所述方法还包括:
所述执行单元115执行所述区块,得到执行结果,所述确定单元110确定commit阶段的commit标识,所述构建单元111根据所述执行结果、所述随机数及所述commit标识构建每个节点的commit投票,当commit投票通过验证的节点大于所述预设比例时,提交单元116提交所述区块。
通过上述实施方式,能够在构建了所述随机数后,直接进入下一阶段,确保了所述随机数的实时可用性。
在本发明的至少一个实施例中,所述方法还包括:
当在预设时间内,prepare投票通过验证的节点没有达到M个,及/或commit投票通过验证的节点没有达到M个时,所述确定单元110确定提块失败,进一步地,生成单元117生成新随机数,提块单元118根据所述新随机数进行提块。
通过上述实施方式,当确定提块失败时,可以及时重新提块,避免影响区块链系统正常执行任务。
综上所述,本发明能够在区块链系统上结合可验证密钥共享机制及预设签名算法生成随机数,具备去中心化的特性,该随机数由部分节点构建的唯一私钥对区块的哈希值进行阈值签名而生成,使得该随机数具有包含区块提议者在内的不可控且不可预测的特性,并且预设签名算法的使用确保了该随机数可被所有节点验证通过,确保了其公开可验证特性,同时,利用预设签名算法的信息交互过程被融合至拜占庭容错算法的prepare投票阶段,节省了交互时间,该随机数可以直接被应用于当前所生成的区块,因此也保证了随机数的实时可用性。
在上述实施例中,可以全部或部分地通过软件、硬件设备、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、移动硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态移动硬盘Solid State Disk(SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件设备的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动移动硬盘、只读存储器(ROM,Read-OnlyMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。