随机数生成方法、装置、电子设备及可读存储介质制造方法及图纸

技术编号:39183738 阅读:13 留言:0更新日期:2023-10-27 08:31
本申请公开了一种随机数生成方法、装置、电子设备及可读存储介质,应用于计算机技术领域。其中,方法包括获取操作系统平台的软件随机数生成器的内核随机数,以作为熵源;通过将不满足预设安全有效条件的内核随机数丢弃,得到多个有效内核随机数;基于各有效内核随机数,调用商用密码国密标准的后处理方式生成随机数序列。本申请可以解决相关技术软件随机数的可靠性和安全性较差的问题,有效提高熵源数据的安全性,进而提高软件随机数的可靠性和安全性。全性。全性。

【技术实现步骤摘要】
随机数生成方法、装置、电子设备及可读存储介质


[0001]本申请涉及计算机
,特别是涉及一种随机数生成方法、装置、电子设备及可读存储介质。

技术介绍

[0002]随机数发生器(Random Number Generator,RNG)在现代密码学中处于基础而核心的地位,其生成的随机数为密码算法和安全协议等众多密码应用提供基本安全保障。随着移动互联网、物联网等技术的快速发展,由于传统纯硬件形式的随机数发生器存在硬件更新困难、开发成本高等问题,导致其适用范围受限,软件随机数发生器(software RNG,SRNG)应用而生,其被广泛应用于计算机、移动终端,例如Linux、Android、iOS以及Windows等典型操作系统平台均具备各自为其提供随机数服务的SRNG。
[0003]以Linux系统为例,Linux内核随机数生成器为Linux操作系统内核的重要组成部分,其从设备驱动获取环境的随机噪声,从理论上返回难于预测的真随机数。其应用场景涵盖于具有较高安全性的协议栈,防止被黑客等进行爆破,如TCP(Transmission Control Protocol,传输控制协议)序列号生成、DNS(Domain Name System,域名系统)报文ID(Identity document,身份标识)生成、TLS(Transport Layer Security,传输层安全协议)/SSL(Secure Sockets Layer,安全套接字层)加密之类需要难以被预测的随机数场景。Linux熵池结构如图1所示,linux内核随机数生成器包括三个熵池,分别是input_pool,blocking_pool和nonblocking_pool。每个熵池均有自己的熵值计数器,以用于保存熵池的随机程度。如果有环境噪音流入,会先直接进入input_pool中,同时会测量该环境噪音的熵值,并更新其计数器。blocking_pool和nonblocking_pool会根据具体需求,向input_pool拉取熵。可以通过内核层输出接口和用户层输出接口从熵池中获取内核随机数,其中内核层输出接口获取内核随机数可基于void get_random_bytes(void*buf,int nbytes);void get_random_bytes_arch(void*buf,int nbytes)来实现,用户层输出接口可以通过/dev/random实现。对于随机数安全性要求比较高场景,为了保证安全,会预先设置熵池的熵值阈值,不可避免地会在等待熵池的熵值达到该阈值的过程中出现文件的读取阻塞的现象。对于随时安全性要求不高的场景,不需要设置熵值阈值,尽管不会因为熵值不够而导致阻塞,但是,随着越来越多的随机数被获取,若熵池的随机源没有被进一步补充,新产生的随机数的安全性就会有一定的下降,这样就极易被攻破。可见,SRNG中的熵源不可控,对后处理算法设计和实现的安全性要求会较高,因此出现了许多针对SRNG设计实现的分析和攻击,如return

to

libc攻击,return

oritented攻击等缓存区溢出攻击,影响熵源数据的安全性,软件随机数的可靠性和安全性较差。

技术实现思路

[0004]本申请提供了一种随机数生成方法、装置、电子设备及可读存储介质,有效提高熵源数据的安全性,提高软件随机数的可靠性和安全性。
[0005]为解决上述技术问题,本申请提供以下技术方案:
[0006]本申请一方面提供了一种随机数生成方法,包括:
[0007]获取操作系统平台的软件随机数生成器的内核随机数,以作为熵源;
[0008]通过将不满足预设安全有效条件的内核随机数丢弃,得到多个有效内核随机数;
[0009]基于各有效内核随机数,调用商用密码国密标准的后处理方式生成随机数序列。
[0010]可选的,所述通过将不满足预设安全有效条件的内核随机数丢弃,得到多个有效内核随机数,包括:
[0011]计算各内核随机数的最小熵估计值;
[0012]将不满足预先设置的熵源阈值条件的内核随机数丢弃,得到初始有效内核随机数;
[0013]基于随机性检测规范标准,对各初始有效随机数进行熵健康测试,并将不满足熵健康测试结果的有效随机数丢弃,得到多个有效内核随机数。
[0014]可选的,所述对各初始有效随机数进行熵健康测试,包括:
[0015]对各初始有效随机数分别进行上电健康测试、连续健康测试和按需健康测试。
[0016]可选的,所述通过将不满足预设安全有效条件的内核随机数丢弃,得到多个有效内核随机数之后,还包括:
[0017]预先构建有效熵源池;
[0018]将各有效内核随机数存储至所述有效熵源池。
[0019]可选的,所述基于各有效内核随机数,调用中国商用密码国密标准的后处理方式生成随机数序列,包括:
[0020]当所述软件随机数生成器上电或重启,且通过各内核随机数通过上电健康测试之后,运行初始化函数;所述初始化函数基于各有效内核随机数,调用SM3杂凑算法计算生成种子,同时将种子、重播种子计算器、重播定时器初始化至内部状态;
[0021]利用各有效内核随机数和额外输入内容,调用重播函数对所述内部状态进行更新;
[0022]基于所述内部状态和所述额外输入内容,调用所述输出函数计算得到随机数序列。
[0023]可选的,所述基于各有效内核随机数,调用SM3杂凑算法计算生成种子,还包括:
[0024]若基于各有效内核随机数,调用SM3杂凑算法无法成功生成种子,则获取nonce参数和个性化字符串作为熵源;
[0025]基于所述nonce参数和所述个性化字符串,调用SM3杂凑算法计算生成种子。
[0026]可选的,所述基于所述内部状态和所述额外输入内容,调用所述输出函数计算得到随机数序列,包括:
[0027]基于所述内部状态和所述额外输入内容,调用所述输出函数通过SM4算法计算得到128比特的随机数序列,或调用所述输出函数通过SM3算法计算得到256比特的随机数序列。
[0028]本申请另一方面提供了一种随机数生成装置,包括:
[0029]熵源采集模块,用于获取操作系统平台的软件随机数生成器的内核随机数,以作为熵源;
[0030]熵监控模块,用于通过将不满足预设安全有效条件的内核随机数丢弃,得到多个有效内核随机数;
[0031]随机数生成模块,用于基于各有效内核随机数,调用商用密码国密标准的后处理方式生成随机数序列。
[0032]本申请还提供了一种电子设备,包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如前任一项所述随机数生成方法的步骤。
[0033]本申请最后还提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前任一项所述随机数生成方法的步骤。
[0034]本本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种随机数生成方法,其特征在于,包括:获取操作系统平台的软件随机数生成器的内核随机数,以作为熵源;通过将不满足预设安全有效条件的内核随机数丢弃,得到多个有效内核随机数;基于各有效内核随机数,调用商用密码国密标准的后处理方式生成随机数序列。2.根据权利要求1所述的随机数生成方法,其特征在于,所述通过将不满足预设安全有效条件的内核随机数丢弃,得到多个有效内核随机数,包括:计算各内核随机数的最小熵估计值;将不满足预先设置的熵源阈值条件的内核随机数丢弃,得到初始有效内核随机数;基于随机性检测规范标准,对各初始有效随机数进行熵健康测试,并将不满足熵健康测试结果的有效随机数丢弃,得到多个有效内核随机数。3.根据权利要求2所述的随机数生成方法,其特征在于,所述对各初始有效随机数进行熵健康测试,包括:对各初始有效随机数分别进行上电健康测试、连续健康测试和按需健康测试。4.根据权利要求2所述的随机数生成方法,其特征在于,所述通过将不满足预设安全有效条件的内核随机数丢弃,得到多个有效内核随机数之后,还包括:预先构建有效熵源池;将各有效内核随机数存储至所述有效熵源池。5.根据权利要求1至4任意一项所述的随机数生成方法,其特征在于,所述基于各有效内核随机数,调用中国商用密码国密标准的后处理方式生成随机数序列,包括:当所述软件随机数生成器上电或重启,且通过各内核随机数通过上电健康测试之后,运行初始化函数;所述初始化函数基于各有效内核随机数,调用SM3杂凑算法计算生成种子,同时将种子、重播种子计算器、重播定时器初始化至内部状态;利用各有效内核随机...

【专利技术属性】
技术研发人员:林旭亮李卫明陈久威
申请(专利权)人:杭州弗兰科信息安全科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1