一种随机数生成方法、装置和系统与流程
未命名
08-13
阅读:63
评论:0

1.本说明书涉及信息技术领域,特别涉及一种随机数生成方法、装置和系统。
背景技术:
2.现有的一些随机数生成方法依靠固定的、可以重复的算法和种子生成伪随机数,而伪随机数无法满足某些场景(例如,金融交易场景)下对于随机数质量(或称作可预测性/随机性)的需求。硬件随机数发生器可以生成高质量(理论上不可预测)的真随机数,然而现有的大部分客户端由于种种原因(例如,成本、体积的考量)无法集成这种专业硬件,提供全新设备或改造旧设备的成本很高,难以推广。
3.有鉴于此,希望提供能够生成高质量随机数且易于推广的客户端随机数生成方案。
技术实现要素:
4.本说明书实施例之一提供一种随机数生成方法,所述方法由客户端执行,包括:创建熵池;从服务端获取第一随机数,所述第一随机数由所述服务端的硬件随机数发生器生成;生成第二随机数,所述第二随机数由所述客户端生成;融合所述第一随机数和所述第二随机数,得到目标随机数;将所述目标随机数加入所述熵池。
5.本说明书实施例之一提供一种随机数生成装置,包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现所述随机数生成方法。
6.本说明书实施例之一提供一种随机数生成系统,所述系统在客户端上实现,包括熵池创建模块、随机数生成模块和随机数添加模块;所述熵池创建模块用于创建熵池;所述随机数生成模块用于:从服务端获取第一随机数,所述第一随机数由所述服务端的硬件随机数发生器生成;生成第二随机数,所述第二随机数由所述客户端生成;融合所述第一随机数和所述第二随机数,得到目标随机数;所述随机数添加模块用于将所述目标随机数加入所述熵池。
附图说明
7.本说明书将以示例性实施例的方式进一步说明,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:图1是根据本说明书一些实施例所示的随机数系统的组成示意图;图2是根据本说明书一些实施例所示的随机数生成系统的示例性模块图;图3是根据本说明书一些实施例所示的随机数生成方法的示例性流程图;图4是根据本说明书一些实施例所示的调用和补充随机数的方法的示意图;图5是根据本说明书一些实施例所示的生成、调用和补充随机数的方法的示例性示意图。
具体实施方式
8.为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本说明书的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。
9.应当理解,本文使用的“系统”、“装置”、“单元”和/或“模组”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。
10.如本说明书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。
11.本说明书中使用了流程图用来说明根据本说明书的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
12.图1是根据本说明书一些实施例所示的随机数系统的组成示意图。
13.如图1所示,随机数系统100包括客户端110和服务端120,其中,服务端120集成有硬件随机数发生器122。
14.客户端110可以为用户提供需要使用随机数的各类服务。随机数在信息安全领域有着广泛的应用,随机数可以用于生成密钥(通常是加密密钥),相关服务包括但不限于金融服务(如金融产品的交易服务)、支付服务、订单服务、通讯服务(如邮件服务、聊天服务)、租赁服务(如租车服务)、运输服务(如网约车服务、搬家服务)。
15.客户端110可以生成并调用随机数,以提供服务。在一些实施例中,客户端110可以在本地生成随机数,例如,客户端110可以在本地生成软件随机数。在一些实施例中,客户端110可以从服务端120获取由硬件随机数发生器122生成的硬件随机数。例如,客户端110可以向服务端120发送随机数获取请求,并接收服务端120返回的硬件随机数。通过在服务端120集成硬件随机数发生器122,可以提供一种能够生成高质量随机数且易于推广的客户端随机数生成方案。
16.示例性的客户端110可以包括个人电脑110-1、智能手机110-2等。可以理解,客户端110还可以包括任何可能的未在图中示出的电子设备,例如,智能车机、智能家居设备(如智能冰箱、智能音箱、智能电视)、智能穿戴设备(如智能眼镜、智能手表、vr设备)、智能解锁设备(如智能门禁设备)等。
17.在一些实施例中,客户端110可以内置随机数sdk(software development kit,软件开发工具包)112。随机数sdk 112可以集成与随机数相关的功能,例如,随机数的生成和/或调用功能。
18.服务端120可以通过硬件随机数发生器122生成硬件随机数,并将生成的硬件随机数发送给客户端110。例如,响应于客户端110发送的随机数获取请求,服务端120可以通过
硬件随机数发生器122生成硬件随机数,并将生成的硬件随机数返回给客户端110。在一些实施例中,服务端120可以是单个服务器或服务器组。
19.硬件随机数发生器122也称作真随机数发生器(true random number generator,trng),是依靠物理过程而不是计算机程序生成随机数的装置。这种装置通常利用产生低水平且统计随机的噪声信号的现象来生成随机数,例如,基于热噪声、涉及分束器的光电效应和其他量子现象来生成随机数。理论上,这些现象是不可预测的。因此,硬件随机数也被认为是真随机数。
20.硬件随机数发生器122是伪随机数生成器(pseudo-random number generator,prng)的更安全的替代方案。prng是计算机中用于生成伪随机数(也称作软件随机数)的软件程序。prng使用确定的算法来生成伪随机数。一旦算法和用于初始化它的条件(称为“种子”)暴露,攻击者可以预测算法输出(伪随机数)。由于prng生成的伪随机数是可预测的,因此使用伪随机数加密的数据容易受到密码分析的影响。硬件随机数发生器122能够生成理论上不可预测的真随机数(硬件随机数),因此能够提高数据加密的安全性。
21.在一些实施例中,硬件随机数发生器122可以包括硬件噪声芯片,例如,密码卡124、智能密码钥匙等。硬件噪声芯片可以产生前文提到的噪声信号,进而生成硬件随机数。在一些实施例中,硬件随机数发生器122可以通过合适的接口,例如,pcie(peripheral component interconnect express,外围组件快速互连)接口集成于服务端120。
22.在一些实施例中,客户端110和服务端120中的任一方可以验证对方的身份,以确认消息来源。例如,客户端110可以通过验证服务端120的数字签名,确认接收到的硬件随机数是否由服务端120提供。又如,服务端120可以在验证客户端110的身份且验证成功后,向客户端110提供硬件随机数。
23.在一些实施例中,客户端110与服务端120之间可以建立安全通道(如加密通道),以保证消息传输的安全性,尤其是硬件随机数的安全传输。在一些实施例中,所述安全通道可以包括防火墙115。
24.在一些实施例中,所述安全通道可以基于加密协议建立。仅作为示例,客户端110与服务端120之间可以建立ssl(secure sockets layer,安全套接字层)连接,以实现身份验证和加密通信。
25.需要注意的是,尽管本说明书主要以随机数在信息安全领域的应用为例进行说明,但本说明书实施例提供的随机数生成方法和系统同样适用于其他领域,例如,通过该方法生成的随机数还可以用于图像处理(例如,在原始图像中添加随机噪声)、软件(如棋牌游戏)开发等。
26.图2是根据本说明书一些实施例所示的随机数生成系统的示例性模块图。系统200可以在客户端110上实现。
27.如图2所示,系统200可以包括熵池创建模块210、随机数生成模块220和随机数添加模块230。
28.熵池创建模块210可以用于创建熵池。
29.随机数生成模块220可以用于从服务端获取第一随机数,所述第一随机数由所述服务端的硬件随机数发生器生成;生成第二随机数,所述第二随机数由所述客户端生成;融合所述第一随机数和所述第二随机数,得到目标随机数。
30.随机数添加模块230可以用于将所述目标随机数加入所述熵池。
31.在一些实施例中,系统200还可以包括随机数调用模块240,随机数调用模块240可以用于从熵池中调用随机数。
32.关于系统200及其模块的更多细节,可以参考图3及其相关描述。
33.应当理解,图2所示的系统及其模块可以利用各种方式来实现。例如,在一些实施例中,系统及其模块可以通过硬件、软件或者软件和硬件的结合来实现。其中,硬件部分可以利用专用逻辑来实现;软件部分则可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域技术人员可以理解上述的方法和系统可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、cd或dvd-rom的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本说明书的系统及其模块不仅可以有诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合(例如,固件)来实现。
34.需要注意的是,以上对于系统及其模块的描述,仅为描述方便,并不能把本说明书限制在所举实施例范围之内。可以理解,对于本领域的技术人员来说,在了解系统的原理后,可能在不背离这一原理的情况下,对各个模块进行任意组合,或者构成子系统与其他模块连接。例如,在一些实施例中,随机数生成模块220和随机数添加模块230可以是两个模块,也可以合并为一个模块。诸如此类的变形,均在本说明书的保护范围之内。
35.图3是根据本说明书一些实施例所示的随机数生成方法的示例性流程图。流程300可以由客户端110执行。在一些实施例中,流程300可以由图2所示的在客户端110上实现的系统200执行。如图3所示,流程300可以包括以下步骤。
36.步骤310,创建熵池。在一些实施例中,步骤310可以由熵池创建模块210执行。
37.熵池可以用于存储随机数。在一些实施例中,熵池可以是预定义大小(如256mb)的随机数缓存区。可以理解,为了保证随机性,熵池中的随机数不会重复使用,即,熵池中的随机数会随着使用次数的增加越来越少。
38.在一些实施例中,熵池可以具有最大容量,熵池的最大容量可以由用户设置。例如,用户可以根据自身需求,通过客户端110创建最大容量为128mb/256mb/512mb的熵池。在一些实施例中,熵池的最大容量可以是系统默认值。可以理解的是,熵池的最大容量可以根据实际需求来确定,熵池的最大容量过大,会导致过度采集随机数,造成随机数资源的浪费;熵池的最大容量过小,无法跟上甚至无法满足随机数的消耗,需要频繁采集随机数,导致系统性能受到影响。
39.在一些实施例中,客户端110可以创建多个熵池。对于不同的熵池,系统200可以按照相同流程(流程300)生成随机数加入其中。
40.步骤320,从服务端获取第一随机数。在一些实施例中,步骤320可以由随机数生成模块220执行。
41.第一随机数由服务端120的硬件随机数发生器122生成,即,第一随机数为硬件随机数。客户端110可以一次性或分批次从服务端获取第一随机数。在一些实施例中,客户端110可以从服务端120获取指定数量的、具有指定长度的第一随机数。例如,客户端110可以
请求获取100个长度为32字节的第一随机数。
42.在一些实施例中,客户端110可以从服务端120获取第一随机数的随机性检测结果,并存储所述随机性检测结果。所述随机性检测结果可以由服务端120或可信第三方生成,并由服务端120提供给客户端110。所述随机性检测结果可以通过随机性检测方法得到,示例性的随机性检测方法包括但不限于单比特频数检测法、块内频数检测法、扑克检测法、重叠子序列检测法、游程总数检测法、游程分布检测法、块内最大游程检测法、二元推导检测法、自相关检测法、矩阵秩检测法、累加和检测法、近似熵检测法、线性复杂度检测法、maurer通用统计检测法、离散傅里叶检测法。
43.在一些实施例中,所述随机性检测结果可以是针对多个第一随机数组成的样本集的判定结果。当样本集中的第一随机数(即样本)满足预设条件,例如,样本通过率达到设定比例时,可以认为样本集通过随机性检测。
44.本说明书实施例中,通过保存随机性检测结果,可以保留证据,以便发生争议时能够追溯。
45.在一些实施例中,第一随机数可以通过加密通道传输,以免第一随机数泄露。例如,第一随机数可以通过客户端110和服务端120之间的ssl加密通道传输。
46.步骤330,生成第二随机数。在一些实施例中,步骤330可以由随机数生成模块220执行。
47.第二随机数由客户端110生成。在一些实施例中,第二随机数可以包括硬件随机数和/或软件随机数。
48.在一些实施例中,随机数生成模块220可以以客户端110的系统时间为随机数因子,通过随机数生成函数生成第二随机数。通过重复采样系统时间,可以生成多个第二随机数。例如,随机数生成模块220可以通过输入为空值的time(null)函数获取当前时间,将当前时间time(null)作为随机数因子(或称作种子)输入随机数生成函数srand(),得到第二随机数srand(time(null))。以系统时间作为随机数因子得到的第二随机数为软件随机数。
49.在一些实施例中,随机数生成模块220可以基于客户端110的硬件信息,通过哈希函数(或称作散列算法)生成第二随机数。所述硬件信息可以是具有一定随机性的动态信息。例如,所述硬件信息可以包括内存利用率,cpu利用率、gpu利用率、磁盘利用率、网络吞吐量、外设输入值(如键盘输入值、鼠标点击位置)等或其任意组合。哈希函数可以将任意长度的输入转换成固定长度的输出,且具有不可反推的特性,因此,采用哈希函数可以灵活生成随机数且不易暴露涉及用户隐私的硬件信息。通过选取不同的哈希函数,可以生成不同长度的第二随机数。例如,通过sha(secure hash algorithm,安全散列算法)-256生成256位(即32字节)的第二随机数。又如,通过sha(secure hash algorithm,安全散列算法)-512生成512位(即64字节)的第二随机数。
50.可以理解,尽管客户端110的硬件信息(如内存占用)可以用于生成硬件随机数,但通常情况下客户端110的硬件信息的随机性不如专门用途的硬件随机数发生器122中产生的物理性噪声,且客户端110的硬件规格(如内存大小)的保密性通常较差,例如,厂商会公开客户端110的硬件规格,导致硬件信息被预测的风险提高。因此,服务端120的硬件随机数发生器122生成的第一随机数的质量通常要优于客户端110基于自身硬件信息生成的第二随机数。
51.通过重复采样所述硬件信息,可以生成多个第二随机数。在一些实施例中,随机数生成模块220可以通过派生的方式获得更多随机数,但需要严格控制派生随机数的比例,以免全体随机数的随机性损失过大。例如,随机数生成模块220可以重复采样所述硬件信息,得到k个样本。然后,随机数生成模块220可以将所述k个样本分别输入所述哈希函数,得到k个初始第二随机数。进而,随机数生成模块220可以从所述k个初始第二随机数中抽取p个初始第二随机数,将所述p个初始第二随机数分别输入所述哈希函数,得到p个派生第二随机数。为了控制派生随机数的比例,可以约束p小于或等于0.1k,更严格地,可以约束p小于或等于0.01k。应当理解,此处的0.1k和0.01k仅为示例性的阈值,其可以用其他任何阈值替代。
52.在一些实施例中,随机数生成模块220可以基于单个初始第二随机数,通过多次迭代运算生成多个派生第二随机数,即,基于该初始第二随机数执行第1次哈希运算,得到第1个派生第二随机数,基于第1个派生第二随机数进行第2次哈希运算,得到第2个派生第二随机数,基于第2个派生第二随机数进行第3次哈希运算,得到第3个派生第二随机数,以此类推,直至得到第p个派生第二随机数。通过多次执行哈希运算,以基于单个初始第二随机数生成多个派生第二随机数。
53.步骤340,融合第一随机数和第二随机数,得到目标随机数。在一些实施例中,步骤340可以由随机数生成模块220执行。
54.随机数的融合可指通过某种运算基于至少两个随机数确定一个随机数。在一些实施例中,所述融合可以包括拼接、四则运算(加减乘除)、逻辑运算(例如,与、或、非)等或其任意组合。
55.在一些实施例中,第一随机数和第二随机数可以具有相同长度,所述融合可以包括异或运算。异或运算具有不可反推和(硬件上)易于实现的特性,采用异或运算可以高效生成高质量的目标随机数。以三元异或运算为例,所述融合可以通过以下公式(1)实现:(1)。
56.其中,为目标随机数;r1可以是以客户端110的系统时间为随机数因子生成的第二随机数(可称作本地软件随机数);r2可以是基于客户端110硬件信息生成的第二随机数(可称作本地硬件随机数);r3可以是由服务端120的硬件随机数发生器122生成的第一随机数(可称作硬件随机数)。为异或符号。可以理解,参与异或运算的r1、r2、r3和r具有相同的长度。
57.在一些实施例中,随机数生成模块220可以对多个第一随机数进行拼接,得到第一拼接随机数。同样地,随机数生成模块220可以对多个第二随机数进行拼接,得到多个第二拼接随机数。进而,随机数生成模块220可以融合所述第一拼接随机数和所述第二拼接随机数,得到至少部分目标随机数。
58.仅作为示例,参考公式(2)、公式(3)以及公式(4),r1可以是m个长度为l(例如,l=32字节)的第二随机数拼接而成的第二拼接随机数,r2可以是m个长度为l的第二随机数拼接而成的第二拼接随机数,r3可以是m个长度为l的第一随机数拼接而成的第一拼接随机数,这里的拼接可以表示为:(2)
(3)(4)。
59.其中,为编号为i的本地软件随机数,为编号为i的本地硬件随机数,为编号为i的硬件随机数(即第一随机数)。对第二拼接随机数r1、第二拼接随机数r2和第一拼接随机数r3进行异或运算,可以得到长度为m*l的目标随机数r。
60.在一些实施例中,通过改变随机数的拼接顺序,可以派生出更多目标随机数。具体地,随机数生成模块220可以改变多个第一随机数的拼接顺序,得到第三拼接随机数。同样地,随机数生成模块220可以改变多个第二随机数的拼接顺序,得到第四拼接随机数。进而,随机数生成模块220可以融合所述第三拼接随机数和所述第四拼接随机数,得到至少部分目标随机数。其中,可以约束基于所述第三拼接随机数和所述第四拼接随机数生成的目标随机数的数量小于或等于基于所述第一拼接随机数和所述第二拼接随机数生成的目标随机数的数量的十分之一,更严格地,可以约束基于所述第三拼接随机数和所述第四拼接随机数生成的目标随机数的数量小于或等于基于所述第一拼接随机数和所述第二拼接随机数生成的目标随机数的数量的百分之一。应当理解,此处的十分之一和百分之一仅为示例性的比例阈值,其可以用其他任何合适的阈值替代。
61.在替代性的实施例中,随机数生成模块220可以仅改变多个第一随机数的拼接顺序,并融合所述第三拼接随机数和所述第二拼接随机数。当然,随机数生成模块220也可以仅改变多个第二随机数的拼接顺序,并融合所述第一拼接随机数和所述第四拼接随机数。
62.无论采用哪种(些)派生方式,可以约束通过派生方式生成的目标随机数的数量小于或等于通过非派生方式生成的目标随机数的数量的预设比例(例如,1%、5%、10%等)。
63.仅作为示例,参考公式(2),随机数生成模块220可以:打乱本地软件随机数的拼接顺序,得到派生的第二拼接随机数r1;打乱本地硬件随机数的拼接顺序,得到派生的第二拼接随机数r2;打乱第一随机数的拼接顺序,得到派生的第一拼接随机数r3。进而,随机数生成模块220可以融合这些派生的拼接随机数,得到派生的目标随机数。
64.步骤350,将目标随机数加入熵池。在一些实施例中,步骤350可以由随机数添加模块230执行。
65.在一些实施例中,随机数生成模块220可以一次性或分多次生成达到熵池最大容量的目标随机数,以便随机数添加模块230将熵池填充至最大容量。例如,当熵池的最大容量为256mb(兆字节)时,随机数生成模块220可以一次性生成长度为256mb的目标随机数,或者随机数生成模块220可以生成2
13
个长度为32字节的目标随机数。
66.在一些实施例中,流程300还可以包括随机数的调用步骤360。
67.步骤360,从熵池中调用随机数。在一些实施例中,步骤360可以由随机数调用模块240执行。
68.参考前述内容,随着随机数的调用次数的增加,熵池的剩余容量越来越小。为了满足新的随机数调用需求,有必要在合适的时机向熵池中补充新的目标随机数。即,系统200可以在合适的时机重新执行步骤320~350。在一些实施例中,每当随机数调用模块240需要调用随机数时,可以判断熵池是否需要补充目标随机数。
69.在一些实施例中,如图4所示,随机数调用模块240可以确定预设的随机数补充条
件是否被满足。响应于随机数调用模块240确定所述随机数补充条件被满足,随机数生成模块220可以生成新的目标随机数,随机数添加模块230可以将新的目标随机数加入熵池,即,系统200可以重新执行步骤320~350,直至所述随机数补充条件不被满足。所述随机数补充条件可以包括要调用的随机数的长度小于熵池的剩余容量和/或熵池的剩余容量小于熵池的最大容量的预设比例,即,随机数生成模块220可以基于要调用的随机数的长度和/或熵池的剩余容量确定所述随机数补充条件是否被满足。
70.仅作为示例,假设要调用的随机数的长度为l,熵池的最大容量为n,熵池的剩余容量为n(初始值为n),当l小于n或n小于0.5n时,随机数生成模块220可以生成新的目标随机数,直至所述随机数补充条件不被满足随机数补充条件是否被满足。响应于确定随机数补充条件不被满足,随机数调用模块240可以从熵池中调用随机数。值得说明的是,要调用的随机数的长度不必与目标随机数的长度一致,例如,目标随机数的长度为32字节时,要调用的随机数的长度可以是32字节,也可以是其他长度,如64字节、16字节等等。
71.图5是根据本说明书一些实施例所示的生成、调用和补充随机数的方法的示例性示意图。
72.如图5所示,交易客户端启动后会执行初始化流程,随机数服务端会启动加密通信,交易客户端与随机数服务端基于ssl协议进行ssl握手。若ssl握手成功,则双方成功建立ssl连接。与随机数服务端建立ssl连接后,交易客户端可以创建熵池。进而,交易客户端可以通过多种方式获取随机数,例如,(本地)生成软件随机数,通过系统驱动采集硬件随机数(即基于自身硬件信息生成硬件随机数),向随机数服务端请求硬件随机数。响应于客户端请求(硬件)随机数,服务端可以通过硬件密码卡生成(硬件)随机数。若随机数服务端返回(硬件)随机数成功,则流程继续。若随机数服务端返回随机数失败,则流程结束。若ssl握手失败,则流程结束。交易客户端可以基于通过多种方式(例如,上述三种方式)获取的随机数(例如,通过异或运算)合成目标随机数,并将其加入熵池。熵池达到一定容量(例如,达到最大容量)后,交易客户端可以从熵池中调用随机数,进而流程结束。
73.应当注意的是,上述有关流程的描述仅仅是为了示例和说明,而不限定本说明书的适用范围。对于本领域技术人员来说,在本说明书的指导下可以对流程进行各种修正和改变。然而,这些修正和改变仍在本说明书的范围之内。
74.本说明书实施例可能带来的有益效果包括但不限于:(1)采用客户端-服务端架构,客户端可以通过请求服务端的方式获取高质量的硬件随机数,提供了能够生成高质量随机数且易于推广的随机数生成方案;(2)通过哈希函数、随机数融合(如异或运算)等不易反推的操作,能够进一步提高随机数的质量;(3)通过派生方式提高随机数生成效率,且通过控制派生随机数的比例保证全体随机数的随机性;(4)通过保存随机性检测结果,可以保留证据,以便发生争议时能够追溯。需要说明的是,不同实施例可能产生的有益效果不同,在不同的实施例里,可能产生的有益效果可以是以上任意一种或几种的组合,也可以是其他任何可能获得的有益效果。
75.上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书实施例的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书实施例进行各种修改、改进和修正。该类修改、改进和修正在本说明书实施例中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。
76.同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
77.此外,本领域技术人员可以理解,本说明书实施例的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本说明书实施例的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本说明书实施例的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
78.计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、rf、或类似介质,或任何上述介质的组合。
79.本说明书实施例各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如java、scala、smalltalk、eiffel、jade、emerald、c++、c#、vb.net、python等,常规程序化编程语言如c语言、visualbasic、fortran2003、perl、cobol2002、php、abap,动态编程语言如python、ruby和groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或处理设备上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(lan)或广域网(wan),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(saas)。
80.此外,除非权利要求中明确说明,本说明书实施例所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书实施例流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的处理设备或移动设备上安装所描述的系统。
81.同理,应当注意的是,为了简化本说明书实施例披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书实施例对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
82.针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本技术权利要求最广范围有限制的文件(当前或之后附加于本技术中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。
83.最后,应当理解的是,本说明书中所述实施例仅用以说明本说明书实施例的原则。其他的变形也可能属于本说明书实施例的范围。因此,作为示例而非限制,本说明书实施例的替代配置可视为与本说明书的教导一致。相应地,本说明书的实施例不仅限于本说明书明确介绍和描述的实施例。
技术特征:
1.一种随机数生成方法,其特征在于,所述方法由客户端执行,其包括:创建熵池;从服务端获取第一随机数,所述第一随机数由所述服务端的硬件随机数发生器生成;生成第二随机数,所述第二随机数由所述客户端生成;融合所述第一随机数和所述第二随机数,得到目标随机数;将所述目标随机数加入所述熵池。2.如权利要求1所述的方法,其特征在于,所述第一随机数和所述第二随机数具有相同长度,所述融合包括异或运算。3.如权利要求1或2所述的方法,其特征在于,所述生成第二随机数包括:以所述客户端的系统时间为随机数因子,通过随机数生成函数生成所述第二随机数;和/或,基于所述客户端的硬件信息,通过哈希函数生成所述第二随机数。4.如权利要求3所述的方法,其特征在于,所述基于所述客户端的硬件信息,通过哈希函数生成所述第二随机数包括:重复采样所述硬件信息,得到k个样本;将所述k个样本中分别输入所述哈希函数,得到k个初始第二随机数;从所述k个初始第二随机数中抽取p个初始第二随机数,将所述p个初始第二随机数分别输入所述哈希函数,得到p个派生第二随机数;其中,p小于或等于0.1k,所述第二随机数包括所述k个初始第二随机数和p个派生第二随机数。5.如权利要求1或2所述的方法,其特征在于,所述第一随机数包括多个第一随机数,所述第二随机数包括多个第二随机数,所述融合所述第一随机数和所述第二随机数,得到目标随机数,包括:对所述多个第一随机数进行拼接,得到第一拼接随机数;对所述多个第二随机数进行拼接,得到第二拼接随机数,所述第二拼接随机数与所述第一拼接随机数具有相同的长度;融合所述第一拼接随机数和所述第二拼接随机数,得到至少部分所述目标随机数。6.如权利要求1所述的方法,其特征在于,还包括:基于要调用的随机数的长度和/或所述熵池的剩余容量,确定预设的随机数补充条件是否被满足;响应于确定所述随机数补充条件被满足,生成新的目标随机数并将其加入所述熵池,直至所述随机数补充条件不被满足;所述随机数补充条件包括要调用的随机数的长度小于所述剩余容量和/或所述剩余容量小于所述熵池的最大容量的预设比例。7.如权利要求1所述的方法,其特征在于,还包括:从所述服务端获取所述第一随机数的随机性检测结果,并存储所述随机性检测结果。8.如权利要求1所述的方法,其特征在于,所述第一随机数通过加密通道传输。9.一种随机数生成装置,其特征在于,包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如权利要求1~8中任一项所述的随机数生成方法。10.一种随机数生成系统,其特征在于,所述系统在客户端上实现,包括熵池创建模块、随机数生成模块和随机数添加模块;
所述熵池创建模块用于创建熵池;所述随机数生成模块用于:从服务端获取第一随机数,所述第一随机数由所述服务端的硬件随机数发生器生成;生成第二随机数,所述第二随机数由所述客户端生成;融合所述第一随机数和所述第二随机数,得到目标随机数;所述随机数添加模块用于将所述目标随机数加入所述熵池。
技术总结
本说明书实施例公开了一种随机数生成方法、装置和系统。所述方法由客户端执行,包括:创建熵池;从服务端获取第一随机数,第一随机数由服务端的硬件随机数发生器生成;生成第二随机数,第二随机数由客户端生成;融合第一随机数和第二随机数,得到目标随机数;将目标随机数加入熵池。机数加入熵池。机数加入熵池。
技术研发人员:何瑞 石吉东 谌明 鲍荣善
受保护的技术使用者:杭州星锐网讯科技有限公司
技术研发日:2023.07.12
技术公布日:2023/8/9
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/