本发明专利技术提出了一种随机数生成方法及装置,涉及计算机技术、金融科技领域,该方法包括:根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;根据第一熵源及第二熵源,生成随机数种子;根据随机数种子,利用加密算法确定初始随机数,对初始随机数进行检测,得到随机数。本发明专利技术的熵源数据结合了自采集数据及系统随机数,可以极大程度的提高随机性,并且利用多种检测方法检测随机数,确保随机数的随机性符合预设要求,利用该随机数生成的密钥可以有效提升密码系统的安全性,并且可以降低关键参数被预测的可能性,为密码系统提供了有力的技术支持。技术支持。技术支持。
【技术实现步骤摘要】
随机数生成方法及装置
[0001]本专利技术涉及计算机技术、金融科技领域,尤指一种随机数生成方法及装置。
技术介绍
[0002]本部分旨在为权利要求书中陈述的本专利技术实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
[0003]密码系统高度依赖随机数:密钥生成,密钥派生、公钥加密方案,签名方案,密钥协商等。密钥生成是密钥生命周期的起点,所有密钥应直接或间接地通过随机数生成器生成。如果随机数不随机,则所有的关键参数可以被预测,那么非常容易攻破密码系统;比如SM2签名方案中,如果随机数被攻破,那么私钥就会泄漏。
[0004]因此,亟需一种可以克服上述缺陷,能够增强随机性的随机数生成技术方案。
技术实现思路
[0005]为解决现有技术存在的问题,本专利技术提出了一种随机数生成方法及装置。
[0006]在本专利技术实施例的第一方面,提出了一种随机数生成方法,包括:
[0007]根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;
[0008]调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;
[0009]根据第一熵源及第二熵源,生成随机数种子;
[0010]根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数。
[0011]进一步的,根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源,包括:
[0012]从宿主系统CPU在一定时间内执行一指令的奇偶次数来产生一个比特;
[0013]执行N个时间周期,产生N比特随机数,通过SIGALRM信号软中断进行周期性采样,得到第一熵源。
[0014]进一步的,调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源,包括:
[0015]调用系统的随机数池,得到系统随机数;
[0016]调用堆栈地址接口,得到堆地址、堆地址的内容、栈地址、栈地址的内容及未初始化的堆栈内存数据;
[0017]调用系统数据接口,得到当前时间、进程号及进程资源使用情况。
[0018]进一步的,根据第一熵源及第二熵源,生成随机数种子,包括:
[0019]根据系统随机数、堆地址、堆地址的内容、栈地址、栈地址的内容、未初始化的堆栈内存数据、当前时间、进程号及进程资源使用情况,通过N轮拉伸对随机数种子进行初始化处理。
[0020]进一步的,还包括:
[0021]在生成随机数种子的过程中,采集时间信息、函数栈变量地址及目标随机数长度信息;
[0022]将所述时间信息、函数栈变量地址及目标随机数长度信息作为生成随机数的补充熵源。
[0023]进一步的,还包括:
[0024]在生成随机数种子的过程中,每隔M次进行补种操作,补种数据来源于进行资源使用情况。
[0025]进一步的,根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数,包括:
[0026]根据所述随机数种子,利用SM4及SM3加密算法计算初始随机数;
[0027]采用比特频数检测方法、游程长度检测方法和/或块频数卡方检测方法,对所述初始随机数进行检测,若随机性检测结果不满足预设条件,重新执行得到第一熵源、得到第二熵源、生成随机数种子及确定初始随机数的步骤,直至随机性检测结果符合预设条件,得到随机数。
[0028]在本专利技术实施例的第二方面,提出了一种随机数生成装置,包括:
[0029]第一熵源确定模块,用于根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;
[0030]第二熵源确定模块,用于调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;
[0031]种子生成模块,用于根据第一熵源及第二熵源,生成随机数种子;
[0032]随机数生成模块,用于根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数。
[0033]进一步的,所述第一熵源确定模块具体用于:
[0034]从宿主系统CPU在一定时间内执行一指令的奇偶次数来产生一个比特;
[0035]执行N个时间周期,产生N比特随机数,通过SIGALRM信号软中断进行周期性采样,得到第一熵源。
[0036]进一步的,所述第二熵源确定模块具体用于:
[0037]调用系统的随机数池,得到系统随机数;
[0038]调用堆栈地址接口,得到堆地址、堆地址的内容、栈地址、栈地址的内容及未初始化的堆栈内存数据;
[0039]调用系统数据接口,得到当前时间、进程号及进程资源使用情况。
[0040]进一步的,所述种子生成模块具体用于:
[0041]根据系统随机数、堆地址、堆地址的内容、栈地址、栈地址的内容、未初始化的堆栈内存数据、当前时间、进程号及进程资源使用情况,通过N轮拉伸对随机数种子进行初始化处理。
[0042]进一步的,所述种子生成模块具体用于:
[0043]在生成随机数种子的过程中,采集时间信息、函数栈变量地址及目标随机数长度信息;
[0044]将所述时间信息、函数栈变量地址及目标随机数长度信息作为生成随机数的补充熵源。
[0045]进一步的,所述种子生成模块具体用于:
[0046]在生成随机数种子的过程中,每隔M次进行补种操作,补种数据来源于进行资源使用情况。
[0047]进一步的,所述随机数生成模块具体用于:
[0048]根据所述随机数种子,利用SM4及SM3加密算法计算初始随机数;
[0049]采用比特频数检测方法、游程长度检测方法和/或块频数卡方检测方法,对所述初始随机数进行检测,若随机性检测结果不满足预设条件,重新执行得到第一熵源、得到第二熵源、生成随机数种子及确定初始随机数的步骤,直至随机性检测结果符合预设条件,得到随机数。
[0050]在本专利技术实施例的第三方面,提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现随机数生成方法。
[0051]在本专利技术实施例的第四方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现随机数生成方法。
[0052]在本专利技术实施例的第五方面,提出了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现随机数生成方法。
[0053]本专利技术提出的随机数生成方法及装置根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;根据第一熵源及第二熵源,生成随机数种子;根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数,本专利技术的熵源数据结合了自采集数据及本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种随机数生成方法,其特征在于,包括:根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;根据第一熵源及第二熵源,生成随机数种子;根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数。2.根据权利要求1所述的方法,其特征在于,根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源,包括:从宿主系统CPU在一定时间内执行一指令的奇偶次数来产生一个比特;执行N个时间周期,产生N比特随机数,通过SIGALRM信号软中断进行周期性采样,得到第一熵源。3.根据权利要求1所述的方法,其特征在于,调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源,包括:调用系统的随机数池,得到系统随机数;调用堆栈地址接口,得到堆地址、堆地址的内容、栈地址、栈地址的内容及未初始化的堆栈内存数据;调用系统数据接口,得到当前时间、进程号及进程资源使用情况。4.根据权利要求3所述的方法,其特征在于,根据第一熵源及第二熵源,生成随机数种子,包括:根据系统随机数、堆地址、堆地址的内容、栈地址、栈地址的内容、未初始化的堆栈内存数据、当前时间、进程号及进程资源使用情况,通过N轮拉伸对随机数种子进行初始化处理。5.根据权利要求1所述的方法,其特征在于,还包括:在生成随机数种子的过程中,采集时间信息、函数栈变量地址及目标随机数长度信息;将所述时间信息、函数栈变量地址及目标随机数长度信息作为生成随机数的补充熵源。6.根据权利要求1所述的方法,其特征在于,还包括:在生成随机数种子的过程中,每隔M次进行补种操作,补种数据来源于进行资源使用情况。7.根据权利要求1所述的方法,其特征在于,根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数,包括:根据所述随机数种子,利用SM4及SM3加密算法计算初始随机数;采用比特频数检测方法、游程长度检测方法和/或块频数卡方检测方法,对所述初始随机数进行检测,若随机性检测结果不满足预设条件,重新执行得到第一熵源、得到第二熵源、生成随机数种子及确定初始随机数的步骤,直至随机性检测结果符合预设条件,得到随机数。8.一种随机数生成装置,其特征在于,包括:第一熵源确定模块,用于根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;
第二熵源确定模块,用于调用系统的随机数池、堆栈地址接...
【专利技术属性】
技术研发人员:李爱宏,闫党军,颜荣镇,
申请(专利权)人:建信金融科技有限责任公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。