本发明涉及区块链技术领域,特别涉及一种联盟链中随机数生成方法及生成端。
背景技术:
目前,大多数语言的library所提供的随机数都是伪随机数。在区块链的应用场景中,如何产生不可预测的随机数是非常重要的研究方向。例如ethereumbeaconchain(poschain)中的validator/attester(产块跟验证的角色)关于随机数的产生,采用randao+vdf的模式,利用经济模式(奖励跟处罚)的方式,促使在公共场域中能产生随机变量。
其中,randao基于区块链技术,提供开源的、去中心化的、社交化的、可证公平的随机数生成,拥有不可控制性及不可预测性。randao通过为每个利益相关的个体提供参与的通道,使个体可以观察到自己对随机数生成的影响。透明、不可逆的随机数生成过程保证了结果可证公平性。利用randao服务,用户可以针对各个使用场景,快速地构建可证公平的应用。这些场景包括但不限于公共管理、娱乐、体育、金融、企业内部管理等。
其中,vdf全称为verifiabledelayfunction(可验证延迟函数),通过引入这种延迟,并使计算的时间要长于验证者可以通过影响某个随机数而获得利益的时间,消除最后一级的随机性偏差,即消除单个验证者可以对randao结果产生的最后一点操控。
在联盟链中没有公有链中的那种经济激励(奖励与处罚)模式,因此在联盟链中采用类似randao+vdf的模式并不能产生不能预测的随机数,因为在随机数产生的过程中,参与随机数产生的参与者可以提供不真实的随机数种子,并可能预测最终产生的随机数。
技术实现要素:
本发明所要解决的技术问题是:提供一种联盟链中随机数生成方法及生成端,以解决联盟链中的随机数生产问题。
为了解决上述技术问题,本发明采用的技术方案为:
一种联盟链中随机数生成方法,包括步骤:
s1、接收至少两个排序节点发送的随机数和对应的数字签名;
s2、验证每一个排序节点所发送的数字签名,若验证通过,则将所述随机数加入至随机数集合中;
s3、从所述随机数集合中选取一个随机数,将所选取的所述随机数发送给请求方。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种联盟链中随机数生成端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
s1、接收至少两个排序节点发送的随机数和对应的数字签名;
s2、验证每一个排序节点所发送的数字签名,若验证通过,则将所述随机数加入至随机数集合中;
s3、从所述随机数集合中选取一个随机数,将所选取的所述随机数发送给请求方。
本发明的有益效果在于:一种联盟链中随机数生成方法及生成端,由多个排序节点发送的随机数和对应的数字签名,并将验证通过的随机数加入至随机数集合中,最后从随机数集合中选取一个随机数作为最终的随机数发送出去,由此,通过多个排序节点产生多个随机数,并从其中选取一个作为最终随机数,使得每一个随机数的参与者都无法预测最终产生的随机数,从而解决联盟链中的随机数生产问题。
附图说明
图1为本发明实施例的一种联盟链中随机数生成方法的主要流程示意图;
图2为本发明实施例的一种联盟链中随机数生成方法的数据生成示意图;
图3为本发明实施例的一种联盟链中随机数生成端的结构示意图。
标号说明:
1、一种联盟链中随机数生成端;2、处理器;3、存储器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
请参照图1和图2,一种联盟链中随机数生成方法,包括步骤:
s1、接收至少两个排序节点发送的随机数和对应的数字签名;
s2、验证每一个排序节点所发送的数字签名,若验证通过,则将所述随机数加入至随机数集合中;
s3、从所述随机数集合中选取一个随机数,将所选取的所述随机数发送给请求方。
从上述描述可知,本发明的有益效果在于:由多个排序节点发送的随机数和对应的数字签名,并将验证通过的随机数加入至随机数集合中,最后从随机数集合中选取一个随机数作为最终的随机数发送出去,由此,通过多个排序节点产生多个随机数,并从其中选取一个作为最终随机数,使得每一个随机数的参与者都无法预测最终产生的随机数,从而解决联盟链中的随机数生产问题。
进一步地,所述步骤s1具体包括以下步骤:
接收排序节点集合{ord1,…,ords}中s个排序节点所发送的随机数{r1,…,rs}和对应的数字签名
所述步骤s2具体包括以下步骤:
对每一个排序节点所发送的数字签名进行如下的等式验证:
所述步骤s3具体包括以下步骤:
计算rand=f(r’1,…,r’m),将所述rand发送给请求方,所述f为对多个随机数运算产生最终的随机数rand的函数。
从上述描述可知,基于不同的应用采用不同的f进行运算,以适应不同应用厂商的不同需求。
进一步地,所述步骤s2和所述步骤s3之间还包括以下步骤:
对所述第一随机数集合{r’1,…,r’m}中每一个随机数所对应的数字签名进行哈希计算,得到二次哈希值的集合为
所述步骤s3具体包括以下步骤:
计算rand=f(r1”,…,rn”),将所述rand发送给请求方,所述f为对多个随机数运算产生最终的随机数rand的函数。
从上述描述可知,只从m个随机数中选取n个随机数来产生随机数集合,使得不是所有的参与者都能产生随机数集合,而通过对数字签名的二次哈希之后进行排序选取,从而产生随机的随机数集合,以解决最后一个参与者有更大权力的问题,其中,每一个随机数对应其参与者,而作为随机数集合的一部分又可称为随机数产生者,因此,产生随机的随机数集合也相当于是产生随机的随机数产生者集合。
进一步地,所述“对所述二次哈希值按照数值大小进行排序”具体包括以下步骤:
对所述二次哈希值按照从小到大进行排序。
从上述描述可知,取前n个二次哈希值最小的随机数,即提供一种产生随机的随机数集合的较佳实施方式。
进一步地,所述步骤s2中“验证每一个排序节点所发送的数字签名”具体包括以下步骤:
经过生产周期t后,分别验证每一个排序节点所发送的数字签名。
从上述描述可知,在需要t时间来产生一个随机数集合,而在产生随机数集合之前还需要对参与者进行合法性的身份验证,以保证随机数的合法性。
请参照图3,一种联盟链中随机数生成端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
s1、接收至少两个排序节点发送的随机数和对应的数字签名;
s2、验证每一个排序节点所发送的数字签名,若验证通过,则将所述随机数加入至随机数集合中;
s3、从所述随机数集合中选取一个随机数,将所选取的所述随机数发送给请求方。
从上述描述可知,本发明的有益效果在于:由多个排序节点发送的随机数和对应的数字签名,并将验证通过的随机数加入至随机数集合中,最后从随机数集合中选取一个随机数作为最终的随机数发送出去,由此,通过多个排序节点产生多个随机数,并从其中选取一个作为最终随机数,使得每一个随机数的参与者都无法预测最终产生的随机数,从而解决联盟链中的随机数生产问题。
进一步地,所述处理器执行所述计算机程序的所述步骤s1时具体实现以下步骤:
接收排序节点集合{ord1,…,ords}中s个排序节点所发送的随机数{r1,…,rs}和对应的数字签名
所述处理器执行所述计算机程序的所述步骤s2时具体实现以下步骤:
对每一个排序节点所发送的数字签名进行如下的等式验证:
所述处理器执行所述计算机程序的所述步骤s3时具体实现以下步骤:
计算rand=f(r’1,…,r’m),将所述rand发送给请求方,所述f为对多个随机数运算产生最终的随机数rand的函数。
从上述描述可知,基于不同的应用采用不同的f进行运算,以适应不同应用厂商的不同需求。
进一步地,所述处理器执行所述计算机程序的所述步骤s2和所述步骤s3之间还包括实现以下步骤:
对所述第一随机数集合{r’1,…,r’m}中每一个随机数所对应的数字签名进行哈希计算,得到二次哈希值的集合为
所述处理器执行所述计算机程序的所述步骤s3时具体实现以下步骤:
计算rand=f(r1”,…,rn”),将所述rand发送给请求方,所述f为对多个随机数运算产生最终的随机数rand的函数。
从上述描述可知,只从m个随机数中选取n个随机数来产生随机数集合,使得不是所有的参与者都能产生随机数集合,而通过对数字签名的二次哈希之后进行排序选取,从而产生随机的随机数集合,以解决最后一个参与者有更大权力的问题,其中,每一个随机数对应其参与者,而作为随机数集合的一部分又可称为随机数产生者,因此,产生随机的随机数集合也相当于是产生随机的随机数产生者集合。
进一步地,所述处理器执行所述计算机程序的所述“对所述二次哈希值按照数值大小进行排序”时具体实现以下步骤:
对所述二次哈希值按照从小到大进行排序。
从上述描述可知,取前n个二次哈希值最小的随机数,即提供一种产生随机的随机数集合的较佳实施方式。
进一步地,所述步骤s2中“验证每一个排序节点所发送的数字签名”具体包括以下步骤:
经过生产周期t后,分别验证每一个排序节点所发送的数字签名。
从上述描述可知,在需要t时间来产生一个随机数集合,而在产生随机数集合之前还需要对参与者进行合法性的身份验证,以保证随机数的合法性。
请参照图1和图2,本发明的实施例一为:
一种联盟链中随机数生成方法,包括步骤:
s1、接收至少两个排序节点发送的随机数和对应的数字签名;
在本实施例中,如图2所示,一种联盟链中随机数生成端即为sc,排序节点集合为{ord1,…,ords},对应的公私钥对分别为{(pk1,sk1),…,(pks,sks)},则步骤s1具体包括以下步骤:
接收排序节点集合{ord1,…,ords}中s个排序节点所发送的随机数{r1,…,rs}和对应的数字签名
s2、验证每一个排序节点所发送的数字签名,若验证通过,则将随机数加入至随机数集合中;
在本实施例中,如图2所示,步骤s2具体包括以下步骤:
经过生产周期t后,对每一个排序节点所发送的数字签名进行如下的等式验证:
在本实施例中,如图2所示,步骤s2和步骤s3之间还包括以下步骤:
对第一随机数集合{r’1,…,r’m}中每一个随机数所对应的数字签名进行哈希计算,得到二次哈希值的集合为
s3、从随机数集合中选取一个随机数,将所选取的随机数发送给请求方。
在本实施例中,如图2所示,步骤s3具体包括以下步骤:
计算rand=f(r1”,…,rn”),将rand发送给请求方,f为对多个随机数运算产生最终的随机数rand的函数。
请参照图3,本发明的实施例二为:
一种联盟链中随机数生成端1,包括存储器3、处理器2及存储在存储器3上并可在处理器2上运行的计算机程序,处理器2执行计算机程序时实现上述实施例一中的步骤,
值得说明的是,本实施例中的一种联盟链中随机数生成端1即为随机数生产链码所在的终端,它接收其他链码的随机数请求,也接收作为参与者的排序节点发送的随机数,以生产出所有参与者都无法预料的最终随机数给请求方。
综上所述,本发明提供的一种联盟链中随机数生成方法及生成端,由s个排序节点发送的随机数和对应的数字签名,并将验证通过的m个随机数进行二次哈希计算后进行排序,以选取n个随机数来产生随机数集合,后从随机数集合中选取一个随机数作为最终的随机数发送出去,由此,通过多个排序节点产生多个随机数,并使得不是所有的参与者都能产生随机数集合,以产生随机的随机数集合,最后从随机的随机数集合选取一个作为最终随机数,使得每一个随机数的参与者都无法预测最终产生的随机数,从而解决联盟链中的随机数生产问题。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。