CN115686437A - 随机数生成方法、装置、计算机设备和存储介质 - Google Patents

随机数生成方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN115686437A
CN115686437A CN202110832377.3A CN202110832377A CN115686437A CN 115686437 A CN115686437 A CN 115686437A CN 202110832377 A CN202110832377 A CN 202110832377A CN 115686437 A CN115686437 A CN 115686437A
Authority
CN
China
Prior art keywords
data
entropy source
source data
entropy
random number
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
CN202110832377.3A
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202110832377.3A priority Critical patent/CN115686437A/zh
Publication of CN115686437A publication Critical patent/CN115686437A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

本申请涉及一种随机数生成方法、装置、计算机设备和存储介质。所述方法包括:迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代;基于目标数量的比特数据,生成第一熵源数据;调用操作系统的随机数接口,获得第二熵源数据;根据第一熵源数据与第二熵源数据,生成随机数。采用本方法能够提升随机数生成的机密性与随机性。

Description

随机数生成方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种随机数生成方法、装置、计算机设备和存储介质。
背景技术
密码安全是现代信息安全的基石,而随机数的安全性对密码安全起着关键作用,例如公钥密码算法的加密、签名,以及密钥的生成都需要用到随机数。而在通用计算机上,如何保证生成的随机数的安全性一直都是业界的难题。
随机数的熵源,是随机数的随机性的来源,为了保证生成的随机数的安全性,找到安全合适的熵源成为生成随机数的关键所在。然而,传统方式生成的随机数,在机密性和安全性上均存在一定的缺陷。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提升生成的随机数的随机性与机密性的随机数生成方法、装置、计算机设备和存储介质。
一种随机数生成方法,所述方法包括:
迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代;
基于所述目标数量的比特数据,生成第一熵源数据;
调用操作系统的随机数接口,获得第二熵源数据;
根据所述第一熵源数据与所述第二熵源数据,生成随机数。
在一个实施例中,所述迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代,包括:
确定待生成的第一熵源数据的目标长度;
迭代在执行延时指令后,获取当前的时间戳,根据所述当前的时间戳生成比特数据的步骤,直至获得的比特数据的目标数量与所述第一熵源数据的目标长度匹配时,停止迭代。
在一个实施例中,所述根据当前的时间戳获得比特数据,包括:
调用操作系统的时间戳接口,获得当前的时间戳;
从所述当前的时间戳中提取预设位数的低位数据,根据所述低位数据生成比特数据。
在一个实施例中,所述从所述当前的时间戳中提取预设位数的低位数据,根据所述低位数据生成比特数据,包括:
提取所述当前的时间戳的末位数据,得到单比特的比特数据;或
提取所述当前的时间戳的次末位数据,得到单比特的比特数据;或
提取所述当前的时间戳的末位数据与次末位数据,对所述末位数据与所述次末位数据进行异或运算,得到单比特的比特数据;或
提取所述当前的时间戳的末位数据与次末位数据,得到双比特的比特数据;或
提取所述当前的时间戳的末尾两位数据与次末尾两位数据,对所述末尾两位数据与次末尾两位数据进行异或运算,得到双比特的比特数据。
在一个实施例中,所述基于所述目标数量的比特数据,生成第一熵源数据,包括:
将所述目标数量的比特数据,按照各自生成的顺序或逆序拼接后,输出目标长度的第一熵源数据。
在一个实施例中,所述调用操作系统的随机数接口,获得第二熵源数据,包括:
确定待生成的第二熵源数据的目标长度;
按照所述目标长度,调用操作系统的随机数接口获得第二熵源数据。
在一个实施例中,所述根据所述第一熵源数据与所述第二熵源数据,生成随机数,包括:
在所述第一熵源数据满足预设随机性条件时,将所述第一熵源数据变换为第一随机序列;
在所述第二熵源数据满足预设随机性条件时,将所述第二熵源数据变换为第二随机序列;
基于所述第一随机序列与所述第二随机序列,生成随机数。
在一个实施例中,所述方法还包括:
根据第一熵源数据的比特位数与待生成的随机数的比特位数,确定熵阈值;
对所述第一熵源数据进行熵估算,得到第一估计熵;
当所述第一估计熵大于所述熵阈值时,确定所述第一熵源数据满足预设随机性条件。
在一个实施例中,所述将所述第一熵源数据变换为第一随机序列,包括:
获取待生成的随机数的目标比特位数;
将所述第一熵源数据与所述目标比特位数输入密钥生成函数,获得所述第一熵源数据对应的目标比特位数的第一随机序列。
在一个实施例中,所述方法还包括:
根据第二熵源数据的比特位数与待生成的随机数的比特位数,确定熵阈值;
对所述第二熵源数据进行熵估算,得到第二估计熵;
当所述第二估计熵大于所述熵阈值时,确定所述第二熵源数据满足预设随机性条件。
在一个实施例中,所述将所述第二熵源数据变换为第二随机序列,包括:
获取待生成的随机数的目标比特位数;
将所述第二熵源数据与所述目标比特位数输入密钥生成函数,获得所述第二熵源数据对应的目标比特位数的第二随机序列。
在一个实施例中,所述方法还包括:
对所述第一随机序列进行随机性检测;
对所述第二随机序列进行随机性检测;
当所述第一随机序列通过随机性检测、且当所述第二随机序列通过随机性检测时,执行所述基于所述第一随机序列与所述第二随机序列,生成随机数的步骤。
在一个实施例中,所述基于所述第一随机序列与所述第二随机序列,生成随机数,包括:
对所述第一随机序列与所述第二随机序列进行异或运算,得到运算结果;
当所述运算结果通过随机性检测时,将所述运算结果作为生成的随机数。
在一个实施例中,所述根据当前的时间戳获得比特数据,包括:
调用操作系统的时间戳接口,获得当前的纳秒级时间戳;
根据所述纳秒级时间戳生成比特数据。
一种随机数生成装置,所述装置包括:
第一熵源采集模块,用于迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代;基于所述目标数量的比特数据,生成第一熵源数据;
第二熵源采集模块,用于调用操作系统的随机数接口,获得第二熵源数据;
随机数生成模块,用于根据所述第一熵源数据与所述第二熵源数据,生成随机数。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代;
基于所述目标数量的比特数据,生成第一熵源数据;
调用操作系统的随机数接口,获得第二熵源数据;
根据所述第一熵源数据与所述第二熵源数据,生成随机数。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代;
基于所述目标数量的比特数据,生成第一熵源数据;
调用操作系统的随机数接口,获得第二熵源数据;
根据所述第一熵源数据与所述第二熵源数据,生成随机数。
一种计算机程序,所述计算机程序包括计算机指令,所述计算机指令存储在计算机可读存储介质中,计算机设备的处理器从所述计算机可读存储介质读取所述计算机指令,所述处理器执行所述计算机指令,使得所述计算机设备执行上述随机数生成方法的步骤。
上述随机数生成方法、装置、计算机设备和存储介质,随机数的熵源来自于两方面,一方面是基于当前时间戳采集的熵源数据,另一方面是基于操作系统自带的随机数接口提供的随机数,结合这两种来源,可以增加熵源的多样性,提升最终生成的随机数的安全性和机密性。其中,第一熵源数据是通过多次迭代,在每次迭代时根据当前的时间戳获得的比特数据生成的,每次迭代时都需要先执行延时指令,以增加在时间维度上的随机扰动,使得每次迭代时基于当前的时间戳所获得的比特数据的随机性更高,从而增加生成的第一熵源数据的随机性与机密性,那么最终基于第一熵源数据与第二熵源数据生成的随机数,其安全性将被大大提升。并且,操作系统提供的随机数接口是任意进程都可访问的,相比于完全依赖操作系统提供的随机数接口去获得随机数的方式而言,本申请提供的方式中,生成随机数所需要的第一熵源数据,是自采集数据,将该自采集数据与从操作系统获得的随机数结合,可以极大程度地避免完全信任操作系统带来的安全隐患。
附图说明
图1为一个实施例中随机数生成方法的应用环境图;
图2为一个实施例中随机数生成方法的流程示意图;
图3为一个实施例中根据当前的时间戳采集第一熵源数据的流程示意图;
图4为一个实施例中基于纳秒级时间戳采集第一熵源数据的流程示意图;
图5为一个实施例中基于第一熵源数据生成第一随机序列的流程示意图;
图6为一个实施例中基于第二熵源数据生成第二随机序列的流程示意图;
图7为一个实施例中结合两种熵源生成随机数的流程示意图;
图8为一个实施例中结合两种熵源生成随机数的流程框图;
图9为一个具体的实施例中随机数生成方法的流程示意图;
图10为一个实施例中随机数生成装置的结构框图;
图11为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
为使本申请实施例更为详尽,下面对一些名词进行解释:
随机数:随机数是满足随机性与不可预测性的数据。随机数的质量可以理解为随机数的随机性与随机数的不可预测性。一般来说,随机数的质量越高,基于该随机数的安全机制就越不容易被破解。
随机性:一个理想的随机二进制比特流,可通过完全公正无偏的抛掷硬币正反面得到,例如,正面记为0,反面记为1,那么每一掷得到0和1的概率都是确切的1/2,而且每一次的结果之间都相互独立,即已产生的结果不会对未来的结果产生影响。像“公正硬币”这样的随机数发生器,是完全理想的随机数发生器,在实际应用中,理想随机数发生器输出的随机数,通常作为测试评估其他随机数发生器的基准。
不可预测性:加密应用的随机数需要不可预测,以保证加密机制的安全性。随机数的不可预测性,是指基于先前已生成的随机数,应当无法预测接下来输出的随机数,也即前向不可预测性。同时,无法通过已生成的随机数,得出种子,也即后向不可预测性。
根据随机数的生成方式,随机数可以分为真随机数与伪随机数。其中,真随机数是通过物理现象(例如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等)生成的随机数,随机数的取值完全无法预测,具有真正的随机性。例如,真随机数发生器通过让用户移动鼠标达到一定的长度,把鼠标的运动轨迹转化为种子,利用该种子生成随机数。又例如,随机数发生器通过电阻和振荡器来生成热噪声,作为熵源数据。又例如,操作系统的随机数接口利用硬件噪音生成随机数,如Unix/Linux的dev/random和/dev/urandom。
伪随机数是通过随机算法生成的随机数。有限状态机不能产生真正的随机数,计算机设备作为有限状态机,生成的随机数,通常是基于算法生成的,虽然也可能具备较高的熵,看上去似乎是真正的随机数,但理论上是可以预测的而不具备真正的随机性,这种方式生成的随机数称作伪随机数。
熵:本申请中的熵,是指随机数的熵,熵是一种衡量随机数的随机性指标。随机数的随机性,也就是随机数的熵,随机数的熵越高,随机数的质量就越高,反之,随机数的熵越低,随机数的质量也就越低。
熵源:随机性的来源数据。
随机性检测:对随机数进行随机性的验证的过程。通常是基于随机性假设设计测试用例进行统计性的验证,每一个测试用例用来验证一个特定的随机性假设,根据测试的统计结果决定是假设成立还是不成立。在随机性假设下,统计量会满足一个参考分布,从这个参考分布上确定一个临界值,比如99%,测试时,将测试结果与该临界值进行比较,从而确定随机数的随机性是否成立。
近似熵:近似熵是用于量化规律性和数据波动的不可预测性的度量,可用于度量随机性。
近似熵估计:用于估计近似熵的统计学算法。通过比较m位比特串与m+1位比特串在待测序列中出现的频度,再与正态分布的序列中的情况相对比,从而确定随机性。
扑克检测:密码学中的一种国密级随机性检测算法,目的是检测待测序列中,子序列是否与太多的非重叠模板相匹配,太多就意味着待测序列是非随机的。
KDF(Key derivation function,密钥导出函数),或称为密钥派生算法,可根据输入数据输出指定长度的二进制数据串。
本申请提供的随机数生成方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。在一个实施例中,服务器104可以迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代;基于目标数量的比特数据,生成第一熵源数据;调用操作系统的随机数接口,获得第二熵源数据;根据第一熵源数据与第二熵源数据,生成随机数。
在一些实施例中,服务器104可以将生成的随机数发送至终端102。或者,上述随机数生成方法也可以由终端102执行,终端102迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代;基于目标数量的比特数据,生成第一熵源数据;调用操作系统的随机数接口,获得第二熵源数据;根据第一熵源数据与第二熵源数据,生成随机数。在终端102生成随机数后,将生成的随机数发送至服务器104。
例如,在一些应用场景中,服务器可以采用本申请实施例提供的随机数生成方法,生成随机数(secret),并采用加密算法,利用该随机数与载体数据(如用户账号、账号密码等)生成一个令牌(token),服务器将该令牌返回至客户端,客户端可在每次向服务器发起请求时,携带该令牌,以表明客户端的身份。
在一些实施例中,服务器104还可以根据生成的随机数,生成用于加密数据的密钥,根据该密钥对数据进行加密后再传输至其它计算机设备。
在一些实施例中,本申请实施例提供的随机数生成方法,可以由区块链网络中的区块链节点执行。例如,该区块链节点采用上述随机数生成方法生成随机数后,可以使用生成的随机数生成密钥,使用该密钥对发送至其它区块链节点的数据进行加密,还可以使用密钥将数据加密后存储在区块链上,以保证数据的安全性。
其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种随机数生成方法,以该方法应用于图1中的计算机设备(终端102或服务器104)为例进行说明,包括以下步骤:
步骤202,迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代。
其中,延时指令是用于增加随机扰动的计算机程序,也称占位指令。本申请实施例中,随机性来源于时间戳,计算机设备在获取当前的时间戳之前,执行延时指令,延时指令占用了一定的执行时间,可以提升获取的时间戳的随机性,并且由于计算机指令有调度的优先级,即便每次迭代时计算机设备执行相同的延时指令,每次增加的执行时间也并非是确定的或相同的,从而进一步提升获取的时间戳的随机性。
由于延时指令是为了增加计算机程序执行的时间,那么延时指令可以是在功能上无意义的计算机程序,也就是说,本申请实施例提供的随机数生成方法,不依赖于该延时指令执行后得到的结果,也不会使用该延时指令执行后得到的结果。例如,该延时指令可以是实现任意数的加减乘除的计算机程序,还可以是实现任意数的移位操作、异或操作的计算机程序,可以理解,该延时指令使用什么数进行计算以及计算得到的结果均不重要,重要的是能够在获取当前的时间戳之前,通过执行该延时指令,增加程序执行的时间。当然,为了保证生成随机数的生成效率,该延时指令的执行时间也不宜过久,比如,若该延时指令可以在纳秒级、微秒级或毫秒级上增加程序的执行时间,那么,该延时指令就既能够保证获取当前的时间戳在纳秒级、微秒级或毫秒级上具有随机性,又能够保证生成随机数的效率。
时间戳是随时间变化的数据,时间戳可以根据当前计算机设备的系统时间转换得到。可选地,计算机设备可以通过操作系统提供的时间戳接口获取当前时间对应的时间戳。可选地,计算机设备也可以通过获取当前的系统时间,将当前的系统时间转换为时间戳后,获得当前的时间戳。
本申请实施例中,计算机设备获取的当前的时间戳,可以是纳秒级时间戳、微秒级时间或毫秒级时间戳。可以理解,纳秒级时间戳由于变化更频繁,计算机设备在多次迭代过程中,每次延时指令所增加的程序执行时间,在纳秒级上存在差异的可能性更高,那么执行延时指令后,获取的纳秒级时间戳也就变化更快,使得纳秒级时间戳的随机性在一定程度上高于微秒级时间戳与毫秒级时间戳。
计算机设备获取的时间戳,可以是二进制序列,也可以是十进制序列。本申请实施例主要以时间戳为二进制序列进行说明。本申请实施例中,比特数据是二进制数据,比特数据的位数可以根据实际需要进行设定,只要能保证每次迭代过程中获得的比特数据具有一定的随机性即可。例如,比特数据可以是一位的单比特数据(1bit),也可以是两位的比特数据(2bits),还可以是三位或四位的比特数据。计算机设备可以在每次迭代过程中,在获取到当前的时间戳后,根据当前的时间戳获取比特数据。计算机设备还可以获取需要生成的随机数的比特位数m,根据随机数的比特位数确定要生成的第一熵源数据的目标长度n,例如n=2m,从而根据该目标长度确定迭代次数。
具体地,本实施例中,为了提高最终生成的随机数的随机性,计算机设备可以通过迭代多次,每次迭代过程中执行延时指令,在执行延时指令后,获取当前的时间戳,并根据当前的时间戳获得当次迭代过程获得的比特数据,这样每次迭代过程都能获得比特数据,迭代多次后,获得目标数量的比特数据。
步骤204,基于目标数量的比特数据,生成第一熵源数据。
本申请实施例中,随机数的熵源,即随机性,来自于两方面,一方面是基于当前时间戳采集的熵源数据,另一方面是基于操作系统自带的随机数接口提供的随机数,结合这两种来源,可以增加熵源的多样性,提升最终生成的随机数的安全性和机密性。比特数据即为基于当前时间戳采集的熵源数据,计算机设备基于迭代多次所获得的目标数量的比特数据,生成第一熵源数据。明显地,第一熵源数据是自采集数据,是通过多次迭代,在每次迭代时根据当前的时间戳获得的比特数据生成的,每次迭代时都需要先执行延时指令,以增加在时间维度上的随机扰动,使得每次迭代时基于当前的时间戳所获得的比特数据的随机性更高,从而增加生成的第一熵源数据的随机性与机密性,那么最终基于第一熵源数据与第二熵源数据生成的随机数,其安全性将被大大提升。
具体地,计算机设备可以将迭代多次获得的目标数量的比特数据,按照迭代的先后顺序,也就是各自生成的顺序,按从低位到高位的顺序拼接后,获得第一熵源数据。当然,计算机设备也可以按照迭代的先后瞬时的逆序,将获得的比特数据从低位到高位进行拼接后,获得第一熵源数据。可选地,计算机设备还可以按照从高位到低位的顺序,依次拼接每次迭代所获得的比特数据,从而得到第一熵源数据。
步骤206,调用操作系统的随机数接口,获得第二熵源数据。
本申请实施例中,计算机设备还通过调用操作系统提供的随机数接口,获得随机数,作为第二熵源数据。为了能产生真正的随机数,操作系统维护了一个专门用于收集噪声的熵池(entropy pool),熵池的信息来自外界的熵信息如:设备驱动的噪音、鼠标点击的声音、设备风扇运作的噪音或其它环境的噪音。将这些噪声收集起来被用于产生真正的随机数。如果熵池中没有足够的噪音资源,就需要等待熵池的收集。只要设备的物理混乱程度越大,熵增就越快,熵池的信息越饱和,随机性的效率就越高。
可选地,计算机设备可以通过调用dev/random获得随机数,也可以通过调用/dev/urandom获得随机数。其中,/dev/random是真正的随机数发生器,因为它是真正以熵池的背景噪音为种子产生随机数,若熵池空了,计算机设备对/dev/random的读操作将会被阻塞,直到收集到了足够的环境噪声为止,这样的设计使得/dev/random是真正的随机数发生器,提供了最大可能的随机数据熵所以,因此,它是阻塞的随机数发生器,在调用时需要等待熵池有足够多的熵信息,生成随机数的效果较低。为了提高生成随机数的效率,操作系统还提供了另一种非阻塞的随机数接口:/dev/urandom,它是非阻塞的随机数发生器,在熵池中重复使用熵池中的信息产生伪随机数。
由上可知,虽然操作系统的随机数接口生成的随机数,可以是基于硬件噪音生成随机数,具备较高的随机性,但由于操作系统提供的随机数接口是任意进程都可访问的,熵池中的随机数存在被破解的可能性,机密性不够。此外,dev/random接口是阻塞接口,生成随机数的性能十分低下,不适用于需要大量生成随机数的场景,dev/urandom接口虽然是非阻塞接口,但它在系统熵池中即使没有随机性可用,也会返回随机数,导致安全性不够。
为此,本申请实施例结合两种不同的熵源,可以增加熵源的多样性,提升最终生成的随机数的安全性和机密性。
在一个实施例中,调用操作系统的随机数接口,获得第二熵源数据,包括:确定待生成的第二熵源数据的目标长度;按照目标长度,调用操作系统的随机数接口获得第二熵源数据。
本实施例中,计算机设备还可以获取需要生成的随机数的比特位数m,根据随机数的比特位数确定要生成的第二熵源数据的目标长度n,例如n=2m,从而按照该目标长度调用操作系统的随机数接口,采集长度为n的随机比特串,作为第二熵源数据。
步骤208,根据第一熵源数据与第二熵源数据,生成随机数。
具体地,在计算机设备通过基于时间戳的采集到第一熵源数据后,以及通过调用操作系统提供的随机数接口获得第二熵源数据后,可以结合这两种不同的熵源数据,生成最终的随机数。
上述随机数生成方法中,随机数的熵源来自于两方面,一方面是基于当前时间戳采集的熵源数据,另一方面是基于操作系统自带的随机数接口提供的随机数,结合这两种来源,可以增加熵源的多样性,提升最终生成的随机数的安全性和机密性。其中,第一熵源数据是通过多次迭代,在每次迭代时根据当前的时间戳获得的比特数据生成的,每次迭代时都需要先执行延时指令,以增加在时间维度上的随机扰动,使得每次迭代时基于当前的时间戳所获得的比特数据的随机性更高,从而增加生成的第一熵源数据的随机性与机密性,那么最终基于第一熵源数据与第二熵源数据生成的随机数,其安全性将被大大提升。并且,操作系统提供的随机数接口是任意进程都可访问的,相比于完全依赖操作系统提供的随机数接口去获得随机数的方式而言,本申请提供的方式中,生成随机数所需要的第一熵源数据,是自采集数据,将该自采集数据与从操作系统获得的随机数结合,可以极大程度地避免完全信任操作系统带来的安全隐患。
在一个实施例中,迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代,包括:确定待生成的第一熵源数据的目标长度;迭代在执行延时指令后,获取当前的时间戳,根据当前的时间戳生成比特数据的步骤,直至获得的比特数据的目标数量与第一熵源数据的目标长度匹配时,停止迭代。
本实施例中,计算机设备需要先确定第一熵源数据的目标长度,目标长度即为位数。此外,计算机设备还需要先确定每次迭代时根据当前的时间戳生成的比特数据的位数,根据目标长度与比特数据的位数,确定迭代次数。
在一些实施例中,计算机设备还需要先确定根据目标数量的比特数据组合生成第一熵源数据的方式,结合第一熵源数据的目标长度、比特数据的位数以及第一熵源数据的组合方式,确定迭代次数。
例如,在第一熵源数据的目标长度为n,根据当前的时间戳生成的比特数据为一位的单比特数据,将单比特数据按生成的顺序依次组合获得第一熵源数据时,那么就需要迭代n次,在第n次时获得第n个单比特数据后,停止迭代。
又例如,在第一熵源数据的目标长度为n(取大于0的偶数),根据当前的时间戳生成的比特数据为两位的双比特数据,将双比特数据按生成的顺序依次组合获得第一熵源数据时,那么就需要迭代n/2次,在第n/2次时获得第n/2个双比特数据后,停止迭代。
再例如,在第一熵源数据的目标长度为n,根据当前的时间戳生成的比特数据为两位的双比特数据,将双比特数据按生成的顺序依次覆盖其中一位后进行组合获得第一熵源数据时,那么就需要迭代n-1次,在第n-1次时获得第n-1个双比特数据后,停止迭代。
如图3所示,为一个实施例中根据当前的时间戳采集第一熵源数据的流程示意图。参照图3,在启动采集后,首先设置需要产生的第一熵源数据的目标长度,即比特位数n。接着,开始当次迭代过程,当次迭代过程中,执行延时指令,执行延时指令之后获取当前的时间戳,再基于当前的时间戳生成1位的单比特数据,再判断当次迭代结束后获得的单比特数据的目标数量是否累计为n,若否则继续循环执行下一次的迭代过程,若是则结束迭代过程,将n次迭代过程获得的n个比特数据依次组合形成长度为n的数据序列,作为第一熵源数据。
在一个实施例中,在执行延时指令后,根据当前的时间戳获得比特数据,包括:在当次迭代过程中,执行延时指令;在执行延时指令后,调用操作系统的时间戳接口,获得当前的时间戳;从当前的时间戳中提取预设位数的低位数据,根据低位数据生成比特数据。
前文提到,每次计算机设备实施本申请实施例提供的随机数生成方法或是执行该方法中的迭代过程时,时间戳都是变化的。时间戳可以是二进制数据也可以是十进制数据,时间戳的低位数据是位于低位比特位置的数据,如对于二进制的2字节的时间戳1100 0010来说,从首位1开始的比特数据的位次依次降低,末位的比特数据0的位次最低。本实施例中,计算机设备在多次迭代过程中,每次延时指令所增加的程序执行时间,在时间戳的低位数据上存在差异的可能性更高,变化程度越大,也就是低位数据的熵增加越快,那么执行延时指令后,获取的时间戳的低位数据的随机性的就越高。
在一个实施例中,从当前的时间戳中提取预设位数的低位数据,根据低位数据生成比特数据,包括:提取当前的时间戳的末位数据,得到单比特的比特数据;或者,提取当前的时间戳的次末位数据,得到单比特的比特数据;或者,提取当前的时间戳的末位数据与次末位数据,对末位数据与次末位数据进行异或运算,得到单比特的比特数据;或者,提取当前的时间戳的末位数据与次末位数据,得到双比特的比特数据;或者,提取当前的时间戳的末尾两位数据与次末尾两位数据,对末尾两位数据与次末尾两位数据进行异或运算,得到双比特的比特数据。
具体地,计算机设备根据当前的时间戳生成比特数据的方式各式各样,生成的比特数据可以是一位的单比特数据,可以是两位、三位或四位的比特数据,可以是从当前的时间戳中截取的原始数据,可以是根据从当前的时间戳中截取的原始数据进行运算得到的数据。
在一个实施例中,计算机设备可以直接提取当前的时间戳的末位数据,得到单比特的比特数据。在一个实施例中,计算机设备可以提取当前的时间戳的次末位数据,得到单比特的比特数据,以此类推,计算机设备还可以提取当前的时间戳的倒数第三位、甚至倒数第四位的数据,作为获得的单比特数据。在一个实施例中,计算机设备可以提取当前的时间戳的末位数据与次末位数据,对末位数据与次末位数据进行异或运算,得到单比特的比特数据。那么,在第一熵源数据的长度为n时,计算机设备需要迭代n次,获得n个单比特数据后,将其组合得到第一熵源数据。
在一个实施例中,计算机设备还可以提取前次迭代过程所获得的时间戳的末位数据与当次迭代过程所获得的末位数据,对该两次获得的末位数据进行异或运算,得到单比特的比特数据。那么,在第一熵源数据的长度为n时,计算机设备需要迭代n+1次,获得n个单比特数据后,将其组合得到第一熵源数据。
在一个实施例中,计算机设备还可以提取当前的时间戳的末位数据与次末位数据,得到双比特的比特数据。那么,在第一熵源数据的长度为n(取偶数)时,计算机设备需要迭代n/2次,获得n/2个两位的比特数据后,将其组合得到第一熵源数据。
在一个实施例中,计算机设备还可以提取前次迭代过程所获得的时间戳的末位数据与次末位数据,提取当次迭代过程所获得的末位数据与次末位数据,对该两次获得的末位数据与次末位数据进行异或运算,得到双比特的比特数据。那么,在第一熵源数据的长度为n(取大于0的偶数)时,计算机设备需要迭代(n+2)/2次,获得n/2个双比特数据后,将其组合得到第一熵源数据。
在一个实施例中,计算机设备还可以提取当前的时间戳的末尾两位数据与次末尾两位数据,对末尾两位数据与次末尾两位数据进行异或运算,得到双比特的比特数据。例如,对于二进制的2字节的时间戳1100 0010来说,提取末尾两位数据“10”,提取次末尾两位数据“00”,对其进行异或运算得到“10”。那么,在第一熵源数据的长度为n(取大于0的偶数)时,计算机设备需要迭代n/2次,获得n/2个双比特数据后,将其依次组合得到第一熵源数据。
在一个实施例中,根据当前的时间戳获得比特数据,包括:调用操作系统的时间戳接口,获得当前的纳秒级时间戳;根据纳秒级时间戳生成比特数据。
如图4所示,为一个实施例中基于纳秒级时间戳采集第一熵源数据的流程示意图。参照图4,在启动采集后,首先设置需要产生的第一熵源数据的目标长度,即比特位数n。接着,开始迭代过程,当次迭代过程中,执行延时指令,执行延时指令之后获取当前的纳秒级时间戳,再截取当前的纳秒级时间戳的末位数据与次末位数据,对末位数据与次末位数据进行异或运算,得到单比特的比特数据。再判断当次迭代结束后获得的单比特数据的目标数量是否累计为n,若否则继续循环执行下一次的迭代过程,若是则结束迭代过程,将n次迭代过程获得的n个比特数据依次组合形成长度为n的数据序列,作为第一熵源数据进行输出。
在一个实施例中,根据第一熵源数据与第二熵源数据,生成随机数,包括:在第一熵源数据满足预设随机性条件时,将第一熵源数据变换为第一随机序列;在第二熵源数据满足预设随机性条件时,将第二熵源数据变换为第二随机序列;基于第一随机序列与第二随机序列,生成随机数。
第一熵源数据是基于时间戳采集得到的,其具有一定的随机性,第二熵源数据是基于系统随机数接口获得的,也具有较高的随机性。为进一步提升最终生成的随机数的质量,计算机设备还可以在第一熵源数据满足预设随机性条件时,将其变换为第一随机序列,在第二熵源数据满足预设随机性条件时,将其变换为第二随机序列,再基于生成的第一随机序列与第二随机序列生成最终的随机数。
其中,预设随机性条件可以是通过随机性验证所需满足的条件,计算机设备可以分别对获得的第一熵源数据与第二熵源数据进行随机性检测,包括但不限于近似熵估计、频数检测、块内频数检测、离散傅里叶变换检测、重叠子序列检测、累加和检测、随机游走检测、自相关检测等等。
在一个实施例中,上述方法还包括:根据第一熵源数据的比特位数与待生成的随机数的比特位数,确定熵阈值;对第一熵源数据进行熵估算,得到第一估计熵;当第一估计熵大于熵阈值时,确定第一熵源数据满足预设随机性条件。
本实施例中,计算机设备获得第一熵源数据后,根据第一熵源数据的比特位数n与待生成的随机数的比特位数m,确定熵阈值,例如熵阈值为m/n,当n=2m时,熵阈值为1/2。计算机设备对第一熵源数据进行熵估算得到对应的第一估计熵e1,当该第一估计熵e1满足e1*n>m时,即e1>m/n时,就确定该第一熵源数据通过了近似熵估计的检测,计算机设备可以确定第一熵源数据满足预设随机性条件。
在一个实施例中,将第一熵源数据变换为第一随机序列,包括:获取待生成的随机数的目标比特位数;将第一熵源数据与目标比特位数输入密钥生成函数,获得第一熵源数据对应的目标比特位数的第一随机序列。
其中,密钥生成函数是用于根据一个密钥派生出一个或多个密钥的过程,可以是采用哈希算法实现。本实施例中,计算机设备获得第一熵源数据后,可以通过密钥生成函数,将第一熵源数据转换成目标比特位数的第一随机序列,例如,根据第一熵源数据S1与待生成的随机数的目标比特位数m,进行KDF(S1,m)运算,运算后输出一个长度为m的随机比特串,称之为第一随机序列K1。本实施例中,计算机设备可使用国内标准文件GM/T 0003《SM2椭圆曲线公钥密码算法》中提及的KDF算法,也可以使用其他国家标准定义的KDF算法,根据第一熵源数据派生出第一随机序列。
在一个实施例中,对于根据第一熵源数据派生出的第一随机序列,计算机设备还可以进一步对其进行随机性检测,在其通过随机性检测时,可将其输出,作为用于生成最终的随机数的数据来源之一,从而进一步提高最终生成的随机数的质量。类似地,对第一随机序列进行随机性检测,包括但不限于采用扑克检测、频数检测、块内频数检测、离散傅里叶变换检测、重叠子序列检测、累加和检测、随机游走检测、自相关检测等等方式。例如,计算机设备可以对其进行扑克检测,当生成的第一随机序列通过扑克检测时,将其输出,当生成的第一随机序列未通过扑克检测时,返回生成第一熵源数据的步骤重新执行,直至重新获得的第一随机序列可以通过扑克检测。
如图5所示,为一个实施例中基于采集的第一熵源数据生成第一随机序列的流程示意图。参照图5,在启动采集后,首先设置需要生成的随机数的目标长度,即比特位数m。接着,使用前文提到的基于时间戳的随机数采集方式,采集长度为n(例如n=2m)的第一熵源数据S1。接着,检测第一熵源数据S1是否满足预设随机性条件,如图5所示的,对第一熵源数据S1进行近似熵估计,得到对应的第一估计熵e1。接着,根据第一估计熵e1判断第一熵源数据S1是否满足预设随机性条件,如图5所示的,判断第一估计熵e1是否满足e1*n>m。若满足,则根据该第一熵源数据S1与待生成的随机数的比特位数m,通过密钥生成函数KDF(S1,m),输出长度为m的随机比特串,即第一随机序列K1。若不满足,则返回使用前文提到的基于时间戳的随机数采集方式,采集长度为n(例如n=2m)的第一熵源数据S1的步骤重新执行。在得到第一随机序列K1之后,再次对其进行随机性检测,如图5所示的,对第一随机序列K1进行扑克检测。若第一随机序列K1通过扑克检测,则将其输出,用于生成最终的随机数。若第一随机序列K1未通过扑克检测,同样也需要返回使用前文提到的基于时间戳的随机数采集方式,采集长度为n(例如n=2m)的第一熵源数据S1的步骤重新执行。
在一个实施例中,上述方法还包括:根据第二熵源数据的比特位数与待生成的随机数的比特位数,确定熵阈值;对第二熵源数据进行熵估算,得到第二估计熵;当第二估计熵大于熵阈值时,确定第二熵源数据满足预设随机性条件。
本实施例中,计算机设备获得第二熵源数据后,根据第二熵源数据的比特位数n与待生成的随机数的比特位数m,确定熵阈值,例如熵阈值为m/n,当n=2m时,熵阈值为1/2。计算机设备对第二熵源数据进行熵估算得到对应的第二估计熵e2,当该第二估计熵e2满足e2*n>m时,即e2>m/n时,就确定该第二熵源数据通过了近似熵估计的检测,计算机设备可以确定第二熵源数据满足预设随机性条件。
在一个实施例中,将第二熵源数据变换为第二随机序列,包括:获取待生成的随机数的目标比特位数;将第二熵源数据与目标比特位数输入密钥生成函数,获得第二熵源数据对应的目标比特位数的第二随机序列。
本实施例中,计算机设备获得第二熵源数据后,可以通过密钥生成函数,将第二熵源数据转换成目标比特位数的第二随机序列,例如,根据第二熵源数据S2与待生成的随机数的目标比特位数m,进行KDF(S2,m)运算,运算后输出一个长度为m的随机比特串,称之为第二随机序列K2。
在一个实施例中,对于根据第二熵源数据派生出的第二随机序列,计算机设备还可以进一步对其进行随机性检测,在其通过随机性检测时,可将其输出,作为用于生成最终的随机数的数据来源之一,从而进一步提高最终生成的随机数的质量。类似地,对第二随机序列进行随机性检测,包括但不限于采用扑克检测、频数检测、块内频数检测、离散傅里叶变换检测、重叠子序列检测、累加和检测、随机游走检测、自相关检测等等方式。例如,计算机设备可以对其进行扑克检测,当生成的第二随机序列通过扑克检测时,将其输出,当生成的第二随机序列未通过扑克检测时,返回生成第二熵源数据的步骤重新执行,直至重新获得的第二随机序列可以通过扑克检测。
在一个实施例中,上述方法还包括:对第一随机序列进行随机性检测;对第二随机序列进行随机性检测;当第一随机序列通过随机性检测、且当第二随机序列通过随机性检测时,执行基于第一随机序列与第二随机序列,生成随机数的步骤。
如图6所示,为一个实施例中基于采集的第二熵源数据生成第二随机序列的流程示意图。参照图6,在启动采集后,首先设置需要生成的随机数的目标长度,即比特位数m。接着,使用前文提到的,通过调用操作系统提供的随机数接口的方式,采集长度为n(例如n=2m)的第二熵源数据S2。接着,检测第二熵源数据S2是否满足预设随机性条件,如图6所示的,对第二熵源数据S2进行近似熵估计,得到对应的第二估计熵e2。接着,根据第二估计熵e2判断第二熵源数据S2是否满足预设随机性条件,如图6所示的,判断第二估计熵e2是否满足e1*n>m。若满足,则根据该第二熵源数据S2与待生成的随机数的比特位数m,通过密钥生成函数KDF(S2,m),输出长度为m的随机比特串,即第二随机序列K2。若不满足,则返回使用前文提到的,通过调用操作系统提供的随机数接口的方式,采集长度为n(例如n=2m)的第二熵源数据S2的步骤重新执行。在得到第二随机序列K2之后,再次对其进行随机性检测,如图6所示的,对第二随机序列K2进行扑克检测。若第二随机序列K2通过了扑克检测,则将其输出,用于生成最终的随机数。若第二随机序列K2未通过扑克检测,同样也需要返回通过调用操作系统提供的随机数接口的方式,采集长度为n(例如n=2m)的第二熵源数据S2的步骤重新执行。
在一个实施例中,基于第一随机序列与第二随机序列,生成随机数,包括:对第一随机序列与第二随机序列进行异或运算,得到运算结果;当运算结果通过随机性检测时,将运算结果作为生成的随机数。
计算机设备对于通过时间戳采集、处理得到的第一随机序列,以及通过随机数接口采集、处理得到的第二随机序列,进行异或运算,得到运算结果,并进一步对该运算结果进行随机性检测,当该运算结果通过随机性该运算结果进行随机性检测,包括但不限于采用扑克检测、频数检测、块内频数检测、离散傅里叶变换检测、重叠子序列检测、累加和检测、随机游走检测、自相关检测等等方式。本实施例中,计算机设备对运算结果进一步进行扑克检测,将通过扑克检测的运算结果作为生成的随机数。
如图7所示,为一个实施例中结合两种熵源生成随机数的流程示意图。参照图7,流程如下:
步骤一:基于时间戳采集比特数据并进行处理、检测,输出m比特位数的第一随机序列,记为K1;
步骤二:基于操作系统提供的随机数接口采集随机数并进行处理、检测,输出m比特位数的第二随机序列,记为K2;
步骤三:将K1与K2按位异或运算,得到K,即
Figure BDA0003175967880000201
步骤四:对K进行扑克检测,扑克检测通过时,将K作为最终的随机数输出,当扑克检测不通过时,返回步骤一重新执行流程。
其中,步骤一与步骤二的执行顺序是可以替换的。
如图8所示,为一个实施例中结合两种熵源生成随机数的流程框图。参照图8,计算机设备获取的第一种熵源是基于纳秒级时间戳的熵源,也即前文提及的第一熵源数据S1,接着依次对其进行熵估计检测,熵估计检测通过后利用KDF函数导出第一随机序列K1,接着对第一随机序列K1进行扑克检测。类似地,计算机设备获取的第二种熵源是操作系统提供的随机数接口获得的随机数,也即前文提到的第二熵源数据S2,接着依次对其进行熵估计检测,熵估计检测通过后利用KDF函数导出第二随机序列K2,接着对第一随机序列K2进行扑克检测。当第一随机序列K1与第二随机序列K2均通过了扑克检测时,对第一随机序列K1与第二随机序列K2进行按位异或运算,得到运算结果K。接着继续对该运算结果K进行扑克检测,通过了扑克检测时,将K作为最终生成的随机数进行输出。其中,熵估计与扑克检测的执行顺序可以相互替换。
在一个实施例中,本申请实施例生成的随机数,可用于其它软件随机数发生器的熵源,也就是作为其它软件随机数发生器的种子,去生成新的随机数。本申请实施例生成的随机数,也可用于其他需要使用随机数的场景,例如,用于公钥密码算法的加密、签名、密钥的生成,等等。
如图9所示,为一个具体的实施例中随机数生成方法的流程示意图。参照图9,包括如下步骤:
步骤902,启动采集第一熵源数据,设置需要产生的第一熵源数据的目标长度n;
接着,开始迭代过程;
步骤904,当次迭代过程中,执行延时指令;
步骤906,获取当前的纳秒级时间戳;
步骤908,截取当前的纳秒级时间戳的末位数据与次末位数据;
步骤910,对末位数据与次末位数据进行异或运算,得到单比特的比特数据;
步骤912,判断当次迭代结束后获得的单比特数据的目标数量是否累计为n;若否,则返回步骤906继续循环执行下一次的迭代过程;若是,则执行步骤914;
步骤914,将获得的n个比特数据依次组合形成长度为n的数据序列,作为第一熵源数据S1进行输出;
步骤916,对第一熵源数据S1进行近似熵估计,得到对应的第一估计熵e1;
步骤918,判断第一估计熵e1是否满足e1*n>m;
其中m是待生成的随机数的长度;
若满足,则执行步骤920;
若不满足,则返回步骤902重新执行;
步骤920,通过密钥生成函数,根据该第一熵源数据S1与待生成的随机数的比特位数m,输出长度为m的第一随机序列K1;
步骤922,判断输出的第一随机序列K1是否通过扑克检测;
若第一随机序列K1通过扑克检测,则继续执行步骤步骤934;
若第一随机序列K1未通过扑克检测,则返回步骤902重新执行;
步骤924,调用操作系统的随机数接口,获得第二熵源数据S2;
步骤926,对第二熵源数据S2进行近似熵估计,得到对应的第二估计熵e2;
步骤928,判断第二估计熵e2是否满足e2*n>m;
若满足,则执行步骤930;
若不满足,则返回步骤924重新执行;
步骤930,通过密钥生成函数,根据该第二熵源数据S2与待生成的随机数的比特位数m,输出长度为m的第二随机序列K2;
步骤932,判断输出的第二随机序列K2是否通过扑克检测;
若第二随机序列K2通过扑克检测,则继续执行步骤934;
若第二随机序列K2未通过扑克检测,则返回步骤924重新执行;
步骤934,对第一随机序列K1与第二随机序列K2进行异或运算,得到运算结果K;
步骤936,判断运算结果K是否通过扑克检测;
若运算结果通过扑克检测,则执行步骤938;
若运算结果未通过扑克检测,则返回步骤902重新执行;
步骤938,将运算结果K作为生成的随机数。
本申请提供的随机数生成方法,能够克服传统的通过系统随机数接口获得随机数的缺陷:第一,不同进程对操作系统提供的随机数接口均有访问权限,导致传统方法机密性不足;第二,随机数接口完全依赖操作系统,没有自采集的数据,意味着需要完全信任操作系统,这对安全性要求极高的项目来说,存在安全隐患。第三,没有引入熵估计、扑克检测等算法行为,随机数质量难以保证。而本申请通过提出一种基于纳秒级时间戳的熵源自采集方式,并结合操作系统提供的随机数接口生成的随机数,同时加入近似熵评估、KDF算法、扑克检测等多种手段,解决了传统方案在机密性和安全性上的缺陷问题,提升随机数的机密性与随机性。
应该理解的是,虽然上述流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图10所示,提供了一种随机数生成装置1000,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:第一熵源采集模块1002、第二熵源采集模块1004和随机数生成模块1006,其中:
第一熵源采集模块1002,用于迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代;基于目标数量的比特数据,生成第一熵源数据;
第二熵源采集模块1004,用于调用操作系统的随机数接口,获得第二熵源数据;
随机数生成模块1006,用于根据第一熵源数据与第二熵源数据,生成随机数。
在一个实施例中,第一熵源采集模块1002,还用于确定待生成的第一熵源数据的目标长度;迭代在执行延时指令后,获取当前的时间戳,根据当前的时间戳生成比特数据的步骤,直至获得的比特数据的目标数量与第一熵源数据的目标长度匹配时,停止迭代。
在一个实施例中,第一熵源采集模块1002,还用于在当次迭代过程中,执行延时指令;在执行延时指令后,调用操作系统的时间戳接口,获得当前的时间戳;从当前的时间戳中提取预设位数的低位数据,根据低位数据生成比特数据。
在一个实施例中,第一熵源采集模块1002,还用于提取当前的时间戳的末位数据,得到单比特的比特数据;或提取当前的时间戳的次末位数据,得到单比特的比特数据;或提取当前的时间戳的末位数据与次末位数据,对末位数据与次末位数据进行异或运算,得到单比特的比特数据;或提取当前的时间戳的末位数据与次末位数据,得到双比特的比特数据;或提取当前的时间戳的末尾两位数据与次末尾两位数据,对末尾两位数据与次末尾两位数据进行异或运算,得到双比特的比特数据。
在一个实施例中,第一熵源采集模块1002,还用于将目标数量的比特数据,按照各自生成的顺序或逆序拼接后,输出目标长度的第一熵源数据。
在一个实施例中,第二熵源采集模块1004,还用于确定待生成的第二熵源数据的目标长度;按照目标长度,调用操作系统的随机数接口获得第二熵源数据。
在一个实施例中,随机数生成模块1006,还用于在第一熵源数据满足预设随机性条件时,将第一熵源数据变换为第一随机序列;在第二熵源数据满足预设随机性条件时,将第二熵源数据变换为第二随机序列;基于第一随机序列与第二随机序列,生成随机数。
在一个实施例中,随机数生成模块1006,还用于根据第一熵源数据的比特位数与待生成的随机数的比特位数,确定熵阈值;对第一熵源数据进行熵估算,得到第一估计熵;当第一估计熵大于熵阈值时,确定第一熵源数据满足预设随机性条件。
在一个实施例中,随机数生成模块1006,还用于获取待生成的随机数的目标比特位数;将第一熵源数据与目标比特位数输入密钥生成函数,获得第一熵源数据对应的目标比特位数的第一随机序列。
在一个实施例中,随机数生成模块1006,还用于根据第二熵源数据的比特位数与待生成的随机数的比特位数,确定熵阈值;对第二熵源数据进行熵估算,得到第二估计熵;当第二估计熵大于熵阈值时,确定第二熵源数据满足预设随机性条件。
在一个实施例中,随机数生成模块1006,还用于获取待生成的随机数的目标比特位数;将第二熵源数据与目标比特位数输入密钥生成函数,获得第二熵源数据对应的目标比特位数的第二随机序列。
在一个实施例中,随机数生成模块1006,还用于对第一随机序列进行随机性检测;对第二随机序列进行随机性检测;当第一随机序列通过随机性检测、且当第二随机序列通过随机性检测时,基于第一随机序列与第二随机序列,生成随机数。
在一个实施例中,随机数生成模块1006,还用于对第一随机序列与第二随机序列进行异或运算,得到运算结果;当运算结果通过随机性检测时,将运算结果作为生成的随机数。
在一个实施例中,第一熵源采集模块1002,还用于调用操作系统的时间戳接口,获得当前的纳秒级时间戳;根据纳秒级时间戳生成比特数据。
上述随机数生成装置1000,随机数的熵源来自于两方面,一方面是基于当前时间戳采集的熵源数据,另一方面是基于操作系统自带的随机数接口提供的随机数,结合这两种来源,可以增加熵源的多样性,提升最终生成的随机数的安全性和机密性。其中,第一熵源数据是通过多次迭代,在每次迭代时根据当前的时间戳获得的比特数据生成的,每次迭代时都需要先执行延时指令,以增加在时间维度上的随机扰动,使得每次迭代时基于当前的时间戳所获得的比特数据的随机性更高,从而增加生成的第一熵源数据的随机性与机密性,那么最终基于第一熵源数据与第二熵源数据生成的随机数,其安全性将被大大提升。并且,操作系统提供的随机数接口是任意进程都可访问的,相比于完全依赖操作系统提供的随机数接口去获得随机数的方式而言,本申请提供的方式中,生成随机数所需要的第一熵源数据,是自采集数据,将该自采集数据与从操作系统获得的随机数结合,可以极大程度地避免完全信任操作系统带来的安全隐患。
关于随机数生成装置1000的具体限定可以参见上文中对于随机数生成方法的限定,在此不再赘述。上述随机数生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是图1中的服务器或终端,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种随机数生成方法。
在该计算机设备为终端时,该计算机设备还可以包括显示屏和输入装置。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (15)

1.一种随机数生成方法,其特征在于,所述方法包括:
迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代;
基于所述目标数量的比特数据,生成第一熵源数据;
调用操作系统的随机数接口,获得第二熵源数据;
根据所述第一熵源数据与所述第二熵源数据,生成随机数。
2.根据权利要求1所述的方法,其特征在于,所述迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代,包括:
确定待生成的第一熵源数据的目标长度;
迭代在执行延时指令后,获取当前的时间戳,根据所述当前的时间戳生成比特数据的步骤,直至获得的比特数据的目标数量与所述第一熵源数据的目标长度匹配时,停止迭代。
3.根据权利要求1所述的方法,其特征在于,所述在执行延时指令后,根据当前的时间戳获得比特数据,包括:
在当次迭代过程中,执行延时指令;
在执行延时指令后,调用操作系统的时间戳接口,获得当前的时间戳;
从所述当前的时间戳中提取预设位数的低位数据,根据所述低位数据生成比特数据。
4.根据权利要求3所述的方法,其特征在于,所述从所述当前的时间戳中提取预设位数的低位数据,根据所述低位数据生成比特数据,包括:
提取所述当前的时间戳的末位数据,得到单比特的比特数据;或
提取所述当前的时间戳的次末位数据,得到单比特的比特数据;或
提取所述当前的时间戳的末位数据与次末位数据,对所述末位数据与所述次末位数据进行异或运算,得到单比特的比特数据;或
提取所述当前的时间戳的末位数据与次末位数据,得到双比特的比特数据;或
提取所述当前的时间戳的末尾两位数据与次末尾两位数据,对所述末尾两位数据与次末尾两位数据进行异或运算,得到双比特的比特数据。
5.根据权利要求1所述的方法,其特征在于,所述基于所述目标数量的比特数据,生成第一熵源数据,包括:
将所述目标数量的比特数据,按照各自生成的顺序或逆序拼接后,输出目标长度的第一熵源数据。
6.根据权利要求1所述的方法,其特征在于,所述调用操作系统的随机数接口,获得第二熵源数据,包括:
确定待生成的第二熵源数据的目标长度;
按照所述目标长度,调用操作系统的随机数接口获得第二熵源数据。
7.根据权利要求1所述的方法,其特征在于,所述根据所述第一熵源数据与所述第二熵源数据,生成随机数,包括:
在所述第一熵源数据满足预设随机性条件时,将所述第一熵源数据变换为第一随机序列;
在所述第二熵源数据满足预设随机性条件时,将所述第二熵源数据变换为第二随机序列;
基于所述第一随机序列与所述第二随机序列,生成随机数。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
根据第一熵源数据的比特位数与待生成的随机数的比特位数,确定熵阈值;
对所述第一熵源数据进行熵估算,得到第一估计熵;
当所述第一估计熵大于所述熵阈值时,确定所述第一熵源数据满足预设随机性条件。
9.根据权利要求7所述的方法,其特征在于,所述将所述第一熵源数据变换为第一随机序列,包括:
获取待生成的随机数的目标比特位数;
将所述第一熵源数据与所述目标比特位数输入密钥生成函数,获得所述第一熵源数据对应的目标比特位数的第一随机序列。
10.根据权利要求7所述的方法,其特征在于,所述方法还包括:
根据第二熵源数据的比特位数与待生成的随机数的比特位数,确定熵阈值;
对所述第二熵源数据进行熵估算,得到第二估计熵;
当所述第二估计熵大于所述熵阈值时,确定所述第二熵源数据满足预设随机性条件。
11.根据权利要求7所述的方法,其特征在于,所述将所述第二熵源数据变换为第二随机序列,包括:
获取待生成的随机数的目标比特位数;
将所述第二熵源数据与所述目标比特位数输入密钥生成函数,获得所述第二熵源数据对应的目标比特位数的第二随机序列。
12.根据权利要求7所述的方法,其特征在于,所述方法还包括:
对所述第一随机序列进行随机性检测;
对所述第二随机序列进行随机性检测;
当所述第一随机序列通过随机性检测、且当所述第二随机序列通过随机性检测时,执行所述基于所述第一随机序列与所述第二随机序列,生成随机数的步骤。
13.一种随机数生成装置,其特征在于,所述装置包括:
第一熵源采集模块,用于迭代在执行延时指令后,根据当前的时间戳获得比特数据的步骤,直至获得目标数量的比特数据时停止迭代;基于所述目标数量的比特数据,生成第一熵源数据;
第二熵源采集模块,用于调用操作系统的随机数接口,获得第二熵源数据;
随机数生成模块,用于根据所述第一熵源数据与所述第二熵源数据,生成随机数。
14.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至12中任一项所述的方法的步骤。
15.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至12中任一项所述的方法的步骤。
CN202110832377.3A 2021-07-22 2021-07-22 随机数生成方法、装置、计算机设备和存储介质 Pending CN115686437A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110832377.3A CN115686437A (zh) 2021-07-22 2021-07-22 随机数生成方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110832377.3A CN115686437A (zh) 2021-07-22 2021-07-22 随机数生成方法、装置、计算机设备和存储介质

Publications (1)

Publication Number Publication Date
CN115686437A true CN115686437A (zh) 2023-02-03

Family

ID=85044098

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110832377.3A Pending CN115686437A (zh) 2021-07-22 2021-07-22 随机数生成方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN115686437A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116560617A (zh) * 2023-07-12 2023-08-08 杭州星锐网讯科技有限公司 一种随机数生成方法、装置和系统
CN117093983A (zh) * 2023-10-19 2023-11-21 紫光同芯微电子有限公司 一种随机数验证方法及装置、存储介质及电子设备
CN117827148A (zh) * 2023-12-30 2024-04-05 北京海泰方圆科技股份有限公司 一种随机数生成方法、装置及电子设备

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116560617A (zh) * 2023-07-12 2023-08-08 杭州星锐网讯科技有限公司 一种随机数生成方法、装置和系统
CN117093983A (zh) * 2023-10-19 2023-11-21 紫光同芯微电子有限公司 一种随机数验证方法及装置、存储介质及电子设备
CN117093983B (zh) * 2023-10-19 2024-02-02 紫光同芯微电子有限公司 一种随机数验证方法及装置、存储介质及电子设备
CN117827148A (zh) * 2023-12-30 2024-04-05 北京海泰方圆科技股份有限公司 一种随机数生成方法、装置及电子设备

Similar Documents

Publication Publication Date Title
CN115686437A (zh) 随机数生成方法、装置、计算机设备和存储介质
US10333710B2 (en) Method and system for determining desired size of private randomness using Tsallis entropy
KR20170098733A (ko) 2차 이상의 부채널 분석에 대한 회로의 저항력을 테스트하는 방법
CN109417466B (zh) 机密密钥估算方法与装置
Palacios-Luengas et al. PRNG based on skew tent map
Vassilev et al. The importance of entropy to information security
CN101473298A (zh) 随机数发生器系统、产生随机数的方法
Hussain et al. A built-in-self-test scheme for online evaluation of physical unclonable functions and true random number generators
Teh et al. GPUs and chaos: a new true random number generator
Alcover et al. A new randomness test for bit sequences
Hurley-Smith et al. Quantum leap and crash: Searching and finding bias in quantum random number generators
Mengdi et al. Overview of randomness test on cryptographic algorithms
Liu et al. Methods for estimating the convergence of inter-chip min-entropy of SRAM PUFs
Batina et al. Poster: Recovering the input of neural networks via single shot side-channel attacks
AL-khatib et al. Acoustic lightweight pseudo random number generator based on cryptographically secure LFSR
Jallouli Chaos-based security under real-time and energy constraints for the Internet of Things
Liu et al. A novel security key generation method for SRAM PUF based on Fourier analysis
Abutaha et al. Design of a pseudo-chaotic number generator as a random number generator
Karimovich et al. Computer's source based (Pseudo) random number generation
Luengo et al. Further analysis of the statistical independence of the NIST SP 800-22 randomness tests
Loutfi et al. Smartphone sensors as random bit generators
Lee et al. Analysis of random number generated by quantum noise source and software entropy source
CN113268745B (zh) 基于Camellia加密算法的软PUF
Danger et al. High-order timing attacks
Hamadeh et al. Physical unclonable functions (pufs) entangled trusted computing base

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40081520

Country of ref document: HK