本发明涉及区块链技术领域,特指一种多输入且可验证的伪随机数的生成方法。
背景技术:
区块链是一个全局共享的事务性的数据库,这意味着参与这个网络的每一个人都可以读取其中的记录。如果想修改这个数据库中的东西,就需要创建一个事务,并得到其他所有人的确认。事务这个词意味着要做的修改只能被完完全全的实施或者一点都没有进行。
现在一般都是由一个中心化服务器去生成,但中心化服务器无法证明自己真正使用伪随机数方法,而不是选择一个对个体有利的“随机数”。区块链出现后,有很多其他方法让随机数具有可验证性,已有的一方法是:多个节点提供随机数种子,每个节点每轮公布下一轮秘密的哈希和这轮秘密,使用当前轮所有秘密合成为当前轮的随机数,这个方案的缺点是节点可以选择不公布当前轮的秘密,从而影响随机数对个体有利,业界也叫做最后一个“出块人作恶”。
技术实现要素:
本发明的目的在于克服现有技术的缺陷,提供一种多输入且可验证的伪随机数的生成方法,解决现有的随机数生成方法存在节点不公布当前轮秘密而影响随机数的问题,即杜绝“最后一个出块人作恶”。
实现上述目的的技术方案是:
本发明提供了一种多输入且可验证的伪随机数的生成方法,包括如下步骤:
设定多个验证人,每一验证人选取一随机数作为验证人主私钥;
每一验证人基于门限方案和自身的验证人主私钥生成验证人子私钥并分发给其他验证人;
每一验证人使用其他验证人子私钥分别对一任意消息进行签名进而获得第一签名信息并广播;
每一验证人使用自身的验证人主私钥分别对一消息信息进行签名进而将获得的签名信息作为种子信息并广播;
每一验证人接收到其他验证人广播的第一签名信息和种子信息并进行验证;
在验证结果为假或者无法获得种子信息时,表明该种子信息所对应验证人不诚实,其他验证人收集该不诚实验证人所分发的验证人子私钥对应的第一签名信息,并基于门限方案恢复该不诚实验证人的种子信息;以及
收集所有验证人的种子信息并合成签名作为本轮的伪随机数。
本发明提供的伪随机数生成方法,在验证人被判定为不诚实时,利用该验证人分发的验证人子私钥对应的第一签名信息和门限方案恢复其种子信息,即帮它公布签名,避免其破坏随机数的可验证性。本发明解决了现有方法中存在的节点不公布当前轮秘密而影响随机数的问题,杜绝了最后一个出块人作恶。
本发明多输入且可验证的伪随机数的生成方法的进一步改进在于,每一验证人生成验证人子私钥分发给其他验证人后,还包括判断其他验证人是否诚实的步骤:
其他验证人接收到所述验证人子私钥后,计算出对应的验证人子公钥,并公布所述验证人子公钥、所述任意消息以及所述第一签名信息;
发布验证人子私钥的验证人利用所述验证人子公钥、所述任意消息以及所述第一签名信息对其他验证人进行诚实判断,若判断验证人为不诚实则取消其验证人资格。
本发明多输入且可验证的伪随机数的生成方法的进一步改进在于,还包括判断发布验证人子私钥的验证人是否诚实的步骤:
每一验证人依据自身的验证人主私钥算出对应的验证人主公钥,利用验证人主私钥对所述任意消息进行签名形成第二签名信息,并公布所述验证人主公钥、所述任意消息以及所述第二签名信息;
基于门限方案通过多份所述第一签名信息恢复对应发布验证人子私钥的验证人的签名信息,并判断所恢复的签名信息与所述第二签名信息是否相一致,若一致则判断结果为诚实,若不一致则判断结果为不诚实并取消该验证人资格。
本发明多输入且可验证的伪随机数的生成方法的进一步改进在于,还包括:
每一验证人收到所述验证人主公钥、所述任意消息以及所述第二签名信息时,进行真伪验证,若验证结果为真则记录所述验证人主公钥,若验证结果为假则判断验证人不诚实。
本发明多输入且可验证的伪随机数的生成方法的进一步改进在于,由发布验证人子私钥的验证人证明其自身是否诚实,在设定时间内若该验证人没有对自身诚实进行证明,则表明该验证人不诚实并取消该验证人资格。
本发明多输入且可验证的伪随机数的生成方法的进一步改进在于,还包括对本轮的伪随机数进行验证:
将所有提供种子信息的验证人的验证人主公钥进行合成以得到系统全局公钥;
检查所述消息信息、所述种子信息和所述系统全局公钥是否匹配,若匹配则输出有效,若不匹配则输出无效。
本发明多输入且可验证的伪随机数的生成方法的进一步改进在于,还包括:
基于哈希算法和本轮的伪随机数生成下一轮的消息信息。
本发明多输入且可验证的伪随机数的生成方法的进一步改进在于,在对所有验证人的种子信息进行合成签名之前,还包括:
验证所述种子信息是否为真,若为真则继续,若为假则基于门限方案重新恢复该种子信息。
本发明多输入且可验证的伪随机数的生成方法的进一步改进在于,还包括加入新验证人的步骤:
提供一新验证人,该新验证人选取一随机数作为验证人主私钥,依据自身的验证人主私钥算出对应的验证人主公钥,利用验证人主公钥对一任意消息进行签名形成新的签名信息,并公布所述验证人主公钥、所述任意消息以及所述新的签名信息;
其他验证人收到所述验证人主公钥、所述任意消息以及所述新的签名信息,进行真伪验证,若验证结果为真则记录所述验证人主公钥并加入到系统全局公钥中,若验证结果为假则判断验证人不诚实而不加入该新验证人。
本发明多输入且可验证的伪随机数的生成方法的进一步改进在于,还包括:
所述新验证人在验证结果为真后,基于门限方案和自身的验证人主私钥生成验证人子私钥并分发给其他验证人;
新验证人也接收其他验证人分发的验证人子私钥;
各验证人基于分发验证人子私钥而对其他验证人是否诚实进行判断。
附图说明
图1为本发明多输入且可验证的伪随机数的生成方法的流程图。
图2为本发明多输入且可验证的伪随机数的生成方中一验证人向其他验证人分发验证人子私钥的结构示意图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明。
参阅图1,本发明提供了多输入且可验证的伪随机数的生成方法,有多个验证人提供种子信息(也即签名信息),利用种子信息合成当前轮的伪随机数,每个验证人将信息通过门限分享方案分享给其他验证人,如果某个验证人拒绝提供种子信息就被判定为不诚实,其他验证人使用门限恢复方案恢复该不诚实验证人的种子信息,杜绝了最后一个出块人作恶。下面结合附图对本发明多输入且可验证的伪随机数的生成方法进行说明。
参阅图1,显示了本发明多输入且可验证的伪随机数的生成方法的流程图。下面结合图1,对本发明多输入且可验证的伪随机数的生成方法进行说明。
如图1所示,本发明的多输入且可验证的伪随机数的生成方法包括如下步骤:
执行步骤s11,设定多个验证人,每一验证人选取一随机数作为验证人主私钥;接着执行步骤s12;
执行步骤s12,每一验证人基于门限方案和自身的验证人主私钥生成验证人子私钥并分发给其他验证人;接着执行步骤s13;
执行步骤s13,每一验证人使用验证人子私钥分别对一任意消息进行签名进而获得第一签名信息并广播;接着执行步骤s14;
执行步骤s14,每一验证人使用自身的验证人主私钥分别对一消息信息进行签名进而将获得的签名信息作为种子信息并广播;接着执行步骤s15;
执行步骤s15,每一验证人接收到其他验证人广播的第一签名信息和种子信息并进行验证;接着执行步骤s16;
执行步骤s16,在验证结果为假或者无法获得种子信息时,表明该种子信息所对应验证人不诚实,其他验证人收集该不诚实验证人所分发的验证人子私钥对应的第一签名信息,并基于门限方案恢复该不诚实验证人的种子信息;接着执行步骤s17;
执行步骤s17,收集所有验证人的种子信息并合成签名作为本轮的伪随机数。
步骤s11中设定多个验证人包括:系统初始设定,参数(t,n),n个节点提供随机数种子,也即n个节点作为验证人,任何大于等t>n/2个节点是诚实的,保证随机数可验证性。通过选举手段或者其他方式确定n个节点具有随机数种子提供权限,如果验证人被判定为不诚实,则被取消资格。该n个节点即为n个验证人。
接着每一验证人wi选取一随机数
本发明的伪随机数的生成方法还包括对各验证人的真伪进行验证:每一验证人依据自身的验证人主私钥算出对应的验证人主公钥,利用验证人主私钥对任意消息进行签名形成第二签名信息,并公布验证人主公钥、任意消息以及第二签名信息;每一验证人收到验证人主公钥、任意消息以及第二签名信息时,进行真伪验证,若验证结果为真则记录验证人主公钥,若验证结果为假则判断验证人不诚实。具体地,每一验证人wi根据主私钥si计算主公钥pi,pi为第i个验证人的主公钥,
步骤s13生成的第一签名信息用于判断各验证人是否诚实,具体的步骤包括:其他验证人接收到验证人子私钥后,计算出对应的验证人子公钥,利用验证人子私钥对一任意消息进行签名获得第一签名信息,并公布验证人子公钥、任意消息以及第一签名信息;发布验证人子私钥的验证人利用验证人子公钥、任意消息以及第一签名信息对其他验证人进行诚实判断,若判断验证人为不诚实则取消其验证人资格。具体地,每一验证人wi根据门限参数(t,n)随机选取
本发明的伪随机数的生成方法还包括判断发布验证人子私钥的验证人是否诚实的步骤:基于门限方案通过多份第一签名信息恢复对应发布验证人子私钥的验证人的签名信息,并判断所恢复的签名信息与第二签名信息是否相一致,若一致则判断结果为诚实,若不一致则判断结果为不诚实并取消该验证人资格。较佳地,由发布验证人子私钥的验证人证明其自身是否诚实,在设定时间内若该验证人没有对自身诚实进行证明,则表明该验证人不诚实并取消该验证人资格。具体地,发布验证人子私钥的验证人通过下面的方法来证明自己是诚实的,
以上步骤为系统的准备工作,在生成随机数之前将不诚实的验证人排除,为后续生成随机数做准备。
步骤s14为验证人生成随机数种子的过程,具体地,每个验证人wi使用自身的验证人主私钥si,分别对消息信息mr-1进行签名获得签名(sigi)r作为种子信息并广播,(sigi)r为种子信息。
步骤s15和步骤s16还用于实现对种子信息进行验证,以判断验证人是否诚实,但此时判定出不诚实也并不重要了,因该验证人已经提供了生成随机数的种子信息,步骤s16将该不诚实验证人提供的种子信息进行恢复,以杜绝其破坏随机数可验证性。具体地,每个验证人wi收到种子信息(sigi)r后,验证签名
本发明的伪随机数的生成方法,在对所有验证人的种子信息进行合成签名之前,还包括:验证种子信息是否为真,若为真则继续,若为假则基于门限方案重新恢复该种子信息。具体地,对于恢复的结果进行再次验证,验证签名bool=verify((sigi)r,mr-1,pi),如果为真,则继续。
步骤s16收集所有种子信息(sigi)r,合成签名sig。sig=|(sigi)r|,其中|(sigi)r|为所有验证人wi对应的si对消息信息mr-1的签名{(sig1)r,(sig2)r…(sign)r}的集合。
进一步地,还包括:基于哈希算法和本轮的伪随机数生成下一轮的消息信息。下一轮的消息信息mr=hash(sig)。并进行下一轮伪随机数的生成,下一轮伪随机数的生成可通过执行步骤s14至步骤s17来实现,其中用于形成种子信息的消息信息为mr。
本发明的伪随机数的生成方法还包括:将所有提供种子信息的验证人的验证人主公钥进行合成以得到系统全局公钥,检查消息信息、伪随机数和系统全局公钥是否匹配,若匹配则输出有效,若不匹配则输出无效。其中的验证人主公钥为区块链合成的系统全局公钥p。该步骤实现了任何个体检查签名sig,消息信息mr-1和公钥p是否匹配,也确定随机数的可验证性。区块链在验证人经过诚实性证明后,将合格的验证人也即提供种子信息的验证人的验证人主公钥收集在一起,区块链将所收集的验证人主公钥合成系统全局公钥p,p=p1+p2+…+pi并记录在区块链上。
本发明的伪随机数的生成方法还包括加入新验证人的步骤:
提供一新验证人,该新验证人选取一随机数作为验证人主私钥,依据自身的验证人主私钥算出对应的验证人主公钥,利用验证人主公钥对一任意消息进行签名形成新的签名信息,并公布验证人主公钥、任意消息以及新的签名信息;
其他验证人收到验证人主公钥、任意消息以及新的签名信息,进行真伪验证,若验证结果为真则记录验证人主公钥,若验证结果为假则判断验证人不诚实而不加入该新验证人。
进一步地,还包括:
新验证人在验证结果为真后,基于门限方案和自身的验证人主私钥生成验证人子私钥并分发给其他验证人;
新验证人也接收其他验证人分发的验证人子私钥;
各验证人基于分发验证人子私钥而对其他验证人是否诚实进行判断。
即新加入验证人时,新加入的验证人执行生成随机数步骤s14之前的步骤,以验证其诚实性。
签名的不可预测性,决定其作为伪随机数种子有了足够的随机性,但为了引入其他显式的随机性,可在n轮间隔下引入其他随机种子,和签名混合作为种子。
以上结合附图实施例对本发明进行了详细说明,本领域中普通技术人员可根据上述说明对本发明做出种种变化例。因而,实施例中的某些细节不应构成对本发明的限定,本发明将以所附权利要求书界定的范围作为本发明的保护范围。