CN116610288A - 随机数生成方法及装置 - Google Patents

随机数生成方法及装置 Download PDF

Info

Publication number
CN116610288A
CN116610288A CN202310467086.8A CN202310467086A CN116610288A CN 116610288 A CN116610288 A CN 116610288A CN 202310467086 A CN202310467086 A CN 202310467086A CN 116610288 A CN116610288 A CN 116610288A
Authority
CN
China
Prior art keywords
random number
entropy source
generating
stack
seed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310467086.8A
Other languages
English (en)
Inventor
李爱宏
闫党军
颜荣镇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Construction Bank Corp
CCB Finetech Co Ltd
Original Assignee
China Construction Bank Corp
CCB Finetech Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Construction Bank Corp, CCB Finetech Co Ltd filed Critical China Construction Bank Corp
Priority to CN202310467086.8A priority Critical patent/CN116610288A/zh
Publication of CN116610288A publication Critical patent/CN116610288A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • H04L9/0869Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/588Random number generators, i.e. based on natural stochastic processes

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computational Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)

Abstract

本发明提出了一种随机数生成方法及装置,涉及计算机技术、金融科技领域,该方法包括:根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;根据第一熵源及第二熵源,生成随机数种子;根据随机数种子,利用加密算法确定初始随机数,对初始随机数进行检测,得到随机数。本发明的熵源数据结合了自采集数据及系统随机数,可以极大程度的提高随机性,并且利用多种检测方法检测随机数,确保随机数的随机性符合预设要求,利用该随机数生成的密钥可以有效提升密码系统的安全性,并且可以降低关键参数被预测的可能性,为密码系统提供了有力的技术支持。

Description

随机数生成方法及装置
技术领域
本发明涉及计算机技术、金融科技领域,尤指一种随机数生成方法及装置。
背景技术
本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
密码系统高度依赖随机数:密钥生成,密钥派生、公钥加密方案,签名方案,密钥协商等。密钥生成是密钥生命周期的起点,所有密钥应直接或间接地通过随机数生成器生成。如果随机数不随机,则所有的关键参数可以被预测,那么非常容易攻破密码系统;比如SM2签名方案中,如果随机数被攻破,那么私钥就会泄漏。
因此,亟需一种可以克服上述缺陷,能够增强随机性的随机数生成技术方案。
发明内容
为解决现有技术存在的问题,本发明提出了一种随机数生成方法及装置。
在本发明实施例的第一方面,提出了一种随机数生成方法,包括:
根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;
调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;
根据第一熵源及第二熵源,生成随机数种子;
根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数。
进一步的,根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源,包括:
从宿主系统CPU在一定时间内执行一指令的奇偶次数来产生一个比特;
执行N个时间周期,产生N比特随机数,通过SIGALRM信号软中断进行周期性采样,得到第一熵源。
进一步的,调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源,包括:
调用系统的随机数池,得到系统随机数;
调用堆栈地址接口,得到堆地址、堆地址的内容、栈地址、栈地址的内容及未初始化的堆栈内存数据;
调用系统数据接口,得到当前时间、进程号及进程资源使用情况。
进一步的,根据第一熵源及第二熵源,生成随机数种子,包括:
根据系统随机数、堆地址、堆地址的内容、栈地址、栈地址的内容、未初始化的堆栈内存数据、当前时间、进程号及进程资源使用情况,通过N轮拉伸对随机数种子进行初始化处理。
进一步的,还包括:
在生成随机数种子的过程中,采集时间信息、函数栈变量地址及目标随机数长度信息;
将所述时间信息、函数栈变量地址及目标随机数长度信息作为生成随机数的补充熵源。
进一步的,还包括:
在生成随机数种子的过程中,每隔M次进行补种操作,补种数据来源于进行资源使用情况。
进一步的,根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数,包括:
根据所述随机数种子,利用SM4及SM3加密算法计算初始随机数;
采用比特频数检测方法、游程长度检测方法和/或块频数卡方检测方法,对所述初始随机数进行检测,若随机性检测结果不满足预设条件,重新执行得到第一熵源、得到第二熵源、生成随机数种子及确定初始随机数的步骤,直至随机性检测结果符合预设条件,得到随机数。
在本发明实施例的第二方面,提出了一种随机数生成装置,包括:
第一熵源确定模块,用于根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;
第二熵源确定模块,用于调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;
种子生成模块,用于根据第一熵源及第二熵源,生成随机数种子;
随机数生成模块,用于根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数。
进一步的,所述第一熵源确定模块具体用于:
从宿主系统CPU在一定时间内执行一指令的奇偶次数来产生一个比特;
执行N个时间周期,产生N比特随机数,通过SIGALRM信号软中断进行周期性采样,得到第一熵源。
进一步的,所述第二熵源确定模块具体用于:
调用系统的随机数池,得到系统随机数;
调用堆栈地址接口,得到堆地址、堆地址的内容、栈地址、栈地址的内容及未初始化的堆栈内存数据;
调用系统数据接口,得到当前时间、进程号及进程资源使用情况。
进一步的,所述种子生成模块具体用于:
根据系统随机数、堆地址、堆地址的内容、栈地址、栈地址的内容、未初始化的堆栈内存数据、当前时间、进程号及进程资源使用情况,通过N轮拉伸对随机数种子进行初始化处理。
进一步的,所述种子生成模块具体用于:
在生成随机数种子的过程中,采集时间信息、函数栈变量地址及目标随机数长度信息;
将所述时间信息、函数栈变量地址及目标随机数长度信息作为生成随机数的补充熵源。
进一步的,所述种子生成模块具体用于:
在生成随机数种子的过程中,每隔M次进行补种操作,补种数据来源于进行资源使用情况。
进一步的,所述随机数生成模块具体用于:
根据所述随机数种子,利用SM4及SM3加密算法计算初始随机数;
采用比特频数检测方法、游程长度检测方法和/或块频数卡方检测方法,对所述初始随机数进行检测,若随机性检测结果不满足预设条件,重新执行得到第一熵源、得到第二熵源、生成随机数种子及确定初始随机数的步骤,直至随机性检测结果符合预设条件,得到随机数。
在本发明实施例的第三方面,提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现随机数生成方法。
在本发明实施例的第四方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现随机数生成方法。
在本发明实施例的第五方面,提出了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现随机数生成方法。
本发明提出的随机数生成方法及装置根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;根据第一熵源及第二熵源,生成随机数种子;根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数,本发明的熵源数据结合了自采集数据及系统随机数,可以极大程度的提高随机性,并且利用多种检测方法检测随机数,确保随机数的随机性符合预设要求;本发明可以生成高质量随机数,利用该随机数生成的密钥可以有效提升密码系统的安全性,并且可以降低关键参数被预测的可能性,为密码系统提供了有力的技术支持。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明一实施例的随机数生成方法流程示意图。
图2是本发明一具体实施例的得到第一熵源的流程示意图。
图3是本发明一具体实施例的得到第二熵源的流程示意图。
图4是本发明一具体实施例的生成随机数种子的流程示意图。
图5是本发明一具体实施例的生成随机数及检测随机数的流程示意图。
图6A至图6B是本发明一具体实施例的生成随机数的程序代码片段的示意图。
图7A至图7B是本发明一具体实施例的检测随机数的程序代码片段的示意图。
图8是本发明一实施例的随机数生成装置架构示意图。
图9是本发明一实施例的计算机设备结构示意图。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种随机数生成方法及装置,涉及计算机技术、金融科技领域。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
图1是本发明一实施例的随机数生成方法流程示意图。如图1所示,该方法包括:
S101,根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;
S102,调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;
S103,根据第一熵源及第二熵源,生成随机数种子;
S104,根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数。
在一实施例中,随机数生成方法,工作时:根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;根据第一熵源及第二熵源,生成随机数种子;根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数。
在本发明提出的随机数生成方法实施过程中,熵源数据结合了自采集数据及系统随机数,可以极大程度的提高随机性,并且利用多种检测方法检测随机数,确保随机数的随机性符合预设要求;本发明能够生成高质量随机数,利用该随机数生成的密钥可以有效提升密码系统的安全性,并且可以降低关键参数被预测的可能性,为密码系统提供了有力的技术支持。
在实际场景中,密码系统高度依赖随机数,例如,密钥生成,密钥派生,公钥加密方案,签名方案,密钥协商等。密钥生成是密钥生命周期的起点,所有密钥应直接或间接地通过随机数生成器生成。具体的,随机数生成器主要涉及3个部分:
1、一个或多个不可预测的熵源来保证其输出不确定性,产生高质量的随机数种子。
一般选取在一个时间片段中某指令被调度执行次数的奇偶性、操作系统随机数池、堆地址随机性、栈地址随机性、未初始化的堆栈内存数据、当前时间、进程号、进程资源使用情况等作为熵源。在运行一定次数后,还需要进行补种操作。
2、随机数种子产生高质量随机比特的密码算法。
例如,采用SM3和SM4算法进行密码运算。
3、对产生的随机数进行随机性测试。
对于不满足测试条件的随机数直接放弃,重新产生,直到满足检测条件为止。
具体的,对于密码系统所应用随机数生成器可通过以下标准衡量其质量:
1、两次产生相同随机数的概率非常低。
2、符合统计学的特性,比特出现概率应该基本相同,卡方检验应该能通过等。
3、不能从随机数生成器当前的随机数推出下一个随机数或者前一个随机数。
随机数检测技术在密码学中具有重要作用,其目的是判断待测数据在统计上是否是真随机数据。随机数检测应用假设检验,采用概率统计的方法对随机数进行描述,不同的检测算法从不同的角度量化待测数据和真随机数间的差距。如果待测数据是真随机数,则符合某个特定的分布,检测算法就是判断是否符合这个特定的分布,例如待测数据在某一方面是否符合标准正态分布或自由度为N的卡方分布等。
为了对上述随机数生成方法进行更为清楚的解释,下面结合每一步骤来进行详细说明。
在S101中,参考图2,根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源的具体流程为:
S201,从宿主系统CPU在一定时间内执行一指令的奇偶次数来产生一个比特;
S202,执行N个时间周期,产生N比特随机数,通过SIGALRM信号软中断进行周期性采样,得到第一熵源。
具体的,N可以是128,即,执行128个时间周期,产生128比特随机数,通过SIGALRM信号软中断进行周期性采样,得到第一熵源。
在S102中,参考图3,调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源的具体流程为:
S301,调用系统的随机数池,得到系统随机数;
S302,调用堆栈地址接口,得到堆地址、堆地址的内容、栈地址、栈地址的内容及未初始化的堆栈内存数据;
S303,调用系统数据接口,得到当前时间、进程号及进程资源使用情况。
上述三个调用步骤(S301至S303)仅为示例性的顺序,在实际应用场景中可以同时进行,或者按照不同的顺序执行。该些数据主要是为了增强随机数的随机性,在实际应用场景中,还可以采集更多类型的熵源。
在S103中,参考图4,根据第一熵源及第二熵源,生成随机数种子的具体流程为:
S401,根据系统随机数、堆地址、堆地址的内容、栈地址、栈地址的内容、未初始化的堆栈内存数据、当前时间、进程号及进程资源使用情况,通过N轮拉伸对随机数种子进行初始化处理。
具体的,N可以是128,即,通过128轮拉伸完成种子初始化。
进一步的,再参考图4,该方法还包括:
S402,在生成随机数种子的过程中,采集时间信息、函数栈变量地址及目标随机数长度信息;
S403,将所述时间信息、函数栈变量地址及目标随机数长度信息作为生成随机数的补充熵源。
S404,在生成随机数种子的过程中,每隔M次进行补种操作,补种数据来源于进行资源使用情况。
具体的,M可以是256,即,每隔256次进行补种操作。
在S104中,参考图5,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数,具体流程为:
S501,根据所述随机数种子,利用SM4及SM3加密算法计算初始随机数。
SM4算法是商用密码标准,是一个分组加密算法,分组长度和密钥长度均128bit。SM4算法使用32轮的非线性迭代结构。SM4在最后一轮非线性迭代之后加上了一个反序变换,因此SM4中只要解密密钥是加密密钥的逆序,它的解密算法与加密算法就可以保持一致。SM4的主体运算是非平衡Feistel网络,经过32轮变换把明文变换为密文。
SM3加密算法用于商用密码应用中的数字签名和验证,是在[SHA-256]基础上改进实现的一种算法,其安全性和SHA-256相当。SM3和MD5的迭代过程类似,也采用Merkle-Damgard结构。消息分组长度为512位,摘要值长度为256位。整个算法的执行过程可以概括成四个步骤:消息填充、消息扩展、迭代压缩、输出结果。
S502,采用比特频数检测方法、游程长度检测方法和/或块频数卡方检测方法,对所述初始随机数进行检测,若随机性检测结果不满足预设条件,重新执行得到第一熵源、得到第二熵源、生成随机数种子及确定初始随机数的步骤,直至随机性检测结果符合预设条件,得到随机数。
下面结合一具体实施例对本申请提出的随机数生成方法进行说明。
在生成随机数的过程中,需要尽可能多的获取高质量熵源;本文实现主要从宿主系统CPU在一定时间内执行一个简单指令的奇偶次数来产生一个比特;这个过程比较耗时,产生128比特随机数需要128个时间周期,通过应用SIGALRM信号软中断实现周期性采样,时间周期可精确至微秒级;
进一步的,通过采集系统urandom随机数、随机的堆栈地址和内容、进程使用资源、进程号、系统微秒级时间等信息一起,通过128轮拉伸完成种子初始化;并每隔256次进行补种操作;补种来源于进程使用资源信息,充分考虑性能和安全性之间的平衡;在获取随机数时,采集时间信息、函数栈变量地址,目标随机数长度信息来增强随机性。使用SM4和SM3计算随机数,并对随机数进行检测。
生成随机数的程序代码如图6A至图6B所示,仅为示例性的代码片段。
在生成随机数后,需要对随机数进行检测。随机数检测有多重方法,修改一些基本检测方法的参数可以变换出多种检测。
本申请主要介绍并实现其中的3种检测方法:比特频数检测、游程长度检测、块频数卡方检测。
比特频数检测:
比特频数检测通常采用单比特频数检测,单比特频数检测是最基本的检测,用来检测比特序列中0和1的个数是否相近,是否具有较好的0、1平衡性
游程长度检测:
在数据的比特序列中,通常是0和1交替出现,由一个或一个以上0或1组成的连续串称为一个游程,总的游程数为游程长度。如果随机性强,则0和1出现的不会太集中或分散。换言之,如果随机性强,则游程长度不应太小或太大。
块频数卡方检测:
对于一个字节长度为N的待检测数据,如果每个字节都是0x0f或0x33等,或者前面N/2个字节全是0x00,后面N/2个字节全是0xff,那么可以通过单比特频数测试,因为比特0、1完全相等,针对这种情况,需要针对块频数运用卡方检测进行测试。
对于16字节及以上的随机数,先进行单比特频数检测,如果单比特频数检测不通过,其它检测一般很难通过;最终要通过所有测试方能采用,否则需要重新产生。
检测随机数的程序代码如图7A至图7B所示,仅为示例性的代码片段。
本发明提出的随机数生成方法是根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;根据第一熵源及第二熵源,生成随机数种子;根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数,本发明的熵源数据结合了自采集数据及系统随机数,可以极大程度的提高随机性,并且利用多种检测方法检测随机数,确保随机数的随机性符合预设要求;本发明可以生成高质量随机数,利用该随机数生成的密钥可以有效提升密码系统的安全性,并且可以降低关键参数被预测的可能性,为密码系统提供了有力的技术支持。
需要说明的是,尽管在上述实施例及附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
在介绍了本发明示例性实施方式的方法之后,接下来,参考图8对本发明示例性实施方式的随机数生成装置进行介绍。
随机数生成装置的实施可以参见上述方法的实施,重复之处不再赘述。以下所使用的术语“模块”或者“单元”,可以是实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
基于同一发明构思,本发明还提出了一种随机数生成装置,如图8所示,该装置包括:
第一熵源确定模块810,用于根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;
第二熵源确定模块820,用于调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;
种子生成模块830,用于根据第一熵源及第二熵源,生成随机数种子;
随机数生成模块840,用于根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数。
在一实施例中,所述第一熵源确定模块810具体用于:
从宿主系统CPU在一定时间内执行一指令的奇偶次数来产生一个比特;
执行N个时间周期,产生N比特随机数,通过SIGALRM信号软中断进行周期性采样,得到第一熵源。
在一实施例中,所述第二熵源确定模块820具体用于:
调用系统的随机数池,得到系统随机数;
调用堆栈地址接口,得到堆地址、堆地址的内容、栈地址、栈地址的内容及未初始化的堆栈内存数据;
调用系统数据接口,得到当前时间、进程号及进程资源使用情况。
在一实施例中,所述种子生成模块830具体用于:
根据系统随机数、堆地址、堆地址的内容、栈地址、栈地址的内容、未初始化的堆栈内存数据、当前时间、进程号及进程资源使用情况,通过N轮拉伸对随机数种子进行初始化处理。
在一实施例中,所述种子生成模块830具体用于:
在生成随机数种子的过程中,采集时间信息、函数栈变量地址及目标随机数长度信息;
将所述时间信息、函数栈变量地址及目标随机数长度信息作为生成随机数的补充熵源。
在一实施例中,所述种子生成模块830具体用于:
在生成随机数种子的过程中,每隔M次进行补种操作,补种数据来源于进行资源使用情况。
在一实施例中,所述随机数生成模块840具体用于:
根据所述随机数种子,利用SM4及SM3加密算法计算初始随机数;
采用比特频数检测方法、游程长度检测方法和/或块频数卡方检测方法,对所述初始随机数进行检测,若随机性检测结果不满足预设条件,重新执行得到第一熵源、得到第二熵源、生成随机数种子及确定初始随机数的步骤,直至随机性检测结果符合预设条件,得到随机数。
应当注意,尽管在上文详细描述中提及了随机数生成装置的若干模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
基于前述发明构思,如图9所示,本发明还提出了一种计算机设备900,包括存储器910、处理器920及存储在存储器910上并可在处理器920上运行的计算机程序930,所述处理器920执行所述计算机程序930时实现前述随机数生成方法。
基于前述发明构思,本发明提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现前述随机数生成方法。
基于前述发明构思,本发明提出了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现随机数生成方法。
本发明提出的随机数生成方法及装置根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;根据第一熵源及第二熵源,生成随机数种子;根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数,本发明的熵源数据结合了自采集数据及系统随机数,可以极大程度的提高随机性,并且利用多种检测方法检测随机数,确保随机数的随机性符合预设要求;本发明可以生成高质量随机数,利用该随机数生成的密钥可以有效提升密码系统的安全性,并且可以降低关键参数被预测的可能性,为密码系统提供了有力的技术支持。
本申请技术方案中对数据的获取、存储、使用、处理等均符合法律法规的相关规定。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (17)

1.一种随机数生成方法,其特征在于,包括:
根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;
调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;
根据第一熵源及第二熵源,生成随机数种子;
根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数。
2.根据权利要求1所述的方法,其特征在于,根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源,包括:
从宿主系统CPU在一定时间内执行一指令的奇偶次数来产生一个比特;
执行N个时间周期,产生N比特随机数,通过SIGALRM信号软中断进行周期性采样,得到第一熵源。
3.根据权利要求1所述的方法,其特征在于,调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源,包括:
调用系统的随机数池,得到系统随机数;
调用堆栈地址接口,得到堆地址、堆地址的内容、栈地址、栈地址的内容及未初始化的堆栈内存数据;
调用系统数据接口,得到当前时间、进程号及进程资源使用情况。
4.根据权利要求3所述的方法,其特征在于,根据第一熵源及第二熵源,生成随机数种子,包括:
根据系统随机数、堆地址、堆地址的内容、栈地址、栈地址的内容、未初始化的堆栈内存数据、当前时间、进程号及进程资源使用情况,通过N轮拉伸对随机数种子进行初始化处理。
5.根据权利要求1所述的方法,其特征在于,还包括:
在生成随机数种子的过程中,采集时间信息、函数栈变量地址及目标随机数长度信息;
将所述时间信息、函数栈变量地址及目标随机数长度信息作为生成随机数的补充熵源。
6.根据权利要求1所述的方法,其特征在于,还包括:
在生成随机数种子的过程中,每隔M次进行补种操作,补种数据来源于进行资源使用情况。
7.根据权利要求1所述的方法,其特征在于,根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数,包括:
根据所述随机数种子,利用SM4及SM3加密算法计算初始随机数;
采用比特频数检测方法、游程长度检测方法和/或块频数卡方检测方法,对所述初始随机数进行检测,若随机性检测结果不满足预设条件,重新执行得到第一熵源、得到第二熵源、生成随机数种子及确定初始随机数的步骤,直至随机性检测结果符合预设条件,得到随机数。
8.一种随机数生成装置,其特征在于,包括:
第一熵源确定模块,用于根据在一定时间内执行一指令的奇偶次数产生一个比特,通过周期性采样得到第一熵源;
第二熵源确定模块,用于调用系统的随机数池、堆栈地址接口及系统数据接口,得到第二熵源;
种子生成模块,用于根据第一熵源及第二熵源,生成随机数种子;
随机数生成模块,用于根据所述随机数种子,利用加密算法确定初始随机数,对所述初始随机数进行检测,得到随机数。
9.根据权利要求8所述的装置,其特征在于,所述第一熵源确定模块具体用于:
从宿主系统CPU在一定时间内执行一指令的奇偶次数来产生一个比特;
执行N个时间周期,产生N比特随机数,通过SIGALRM信号软中断进行周期性采样,得到第一熵源。
10.根据权利要求8所述的装置,其特征在于,所述第二熵源确定模块具体用于:
调用系统的随机数池,得到系统随机数;
调用堆栈地址接口,得到堆地址、堆地址的内容、栈地址、栈地址的内容及未初始化的堆栈内存数据;
调用系统数据接口,得到当前时间、进程号及进程资源使用情况。
11.根据权利要求10所述的装置,其特征在于,所述种子生成模块具体用于:
根据系统随机数、堆地址、堆地址的内容、栈地址、栈地址的内容、未初始化的堆栈内存数据、当前时间、进程号及进程资源使用情况,通过N轮拉伸对随机数种子进行初始化处理。
12.根据权利要求8所述的装置,其特征在于,所述种子生成模块具体用于:
在生成随机数种子的过程中,采集时间信息、函数栈变量地址及目标随机数长度信息;
将所述时间信息、函数栈变量地址及目标随机数长度信息作为生成随机数的补充熵源。
13.根据权利要求8所述的装置,其特征在于,所述种子生成模块具体用于:
在生成随机数种子的过程中,每隔M次进行补种操作,补种数据来源于进行资源使用情况。
14.根据权利要求8所述的装置,其特征在于,所述随机数生成模块具体用于:
根据所述随机数种子,利用SM4及SM3加密算法计算初始随机数;
采用比特频数检测方法、游程长度检测方法和/或块频数卡方检测方法,对所述初始随机数进行检测,若随机性检测结果不满足预设条件,重新执行得到第一熵源、得到第二熵源、生成随机数种子及确定初始随机数的步骤,直至随机性检测结果符合预设条件,得到随机数。
15.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一所述方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至7任一所述方法。
17.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现权利要求1至7任一所述方法。
CN202310467086.8A 2023-04-26 2023-04-26 随机数生成方法及装置 Pending CN116610288A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310467086.8A CN116610288A (zh) 2023-04-26 2023-04-26 随机数生成方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310467086.8A CN116610288A (zh) 2023-04-26 2023-04-26 随机数生成方法及装置

Publications (1)

Publication Number Publication Date
CN116610288A true CN116610288A (zh) 2023-08-18

Family

ID=87680887

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310467086.8A Pending CN116610288A (zh) 2023-04-26 2023-04-26 随机数生成方法及装置

Country Status (1)

Country Link
CN (1) CN116610288A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117873431A (zh) * 2024-03-13 2024-04-12 杭州金智塔科技有限公司 基于国密sm4算法的随机数生成方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117873431A (zh) * 2024-03-13 2024-04-12 杭州金智塔科技有限公司 基于国密sm4算法的随机数生成方法及装置

Similar Documents

Publication Publication Date Title
US11620109B2 (en) Converting a boolean masked value to an arithmetically masked value for cryptographic operations
Gueron et al. Fast garbling of circuits under standard assumptions
US11546135B2 (en) Key sequence generation for cryptographic operations
EP3200385A1 (en) Encryption method and encryption device
US11822704B2 (en) Constant time secure arithmetic-to-Boolean mask conversion
CN107004084B (zh) 用于加密操作的乘法掩码
US20220085998A1 (en) System and method to generate prime numbers in cryptographic applications
US20220085999A1 (en) System and method to optimize decryption operations in cryptographic applications
Sleem et al. TestU01 and Practrand: Tools for a randomness evaluation for famous multimedia ciphers
Marton et al. Generation and testing of random numbers for cryptographic applications
EP3001401A1 (en) Decoding device, decoding ability providing device, method thereof, and program
AU2021200062A1 (en) Systems and computer-implemented methods for generating pseudo random numbers
CN112054896B (zh) 白盒加密方法、装置、终端及存储介质
Coron et al. Improved gadgets for the high-order masking of dilithium
CN116610288A (zh) 随机数生成方法及装置
JP2014075082A (ja) 乱数生成器および乱数生成方法
CN114697095A (zh) 一种混合加解密方法、系统、装置及介质
US10333699B1 (en) Generating a pseudorandom number based on a portion of shares used in a cryptographic operation
CN112580114A (zh) 一种信息处理方法、装置、设备及存储介质
JP2005134478A (ja) 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
CN102932147A (zh) 基于隐马尔科夫模型的椭圆曲线密码计时攻击方法
Mankar Key updating for leakage resiliency with application to Shannon security OTP and AES modes of operation
JP5440285B2 (ja) 鍵共有方式、鍵共有方法及び鍵共有プログラム
CN111740818A (zh) 一种数据处理方法、装置、设备及存储介质
WO2017036251A1 (zh) 高级加密标准加解密方法和装置、存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination