随机数发生器的熵源采集方法、计算机设备及存储介质与流程

文档序号:15346328发布日期:2018-09-04 22:48阅读:374来源:国知局

本申请涉及密码学技术领域,特别是涉及一种移动终端随机数发生器的熵源采集方法、计算机设备和计算机存储介质。



背景技术:

在目前的密码学技术领域,很多密码协议的安全性都要求产生高质量的随机数,因此随机数在身份认证、密钥生成等场合具有举足轻重的作用。手机、平板电脑等移动终端在没有se安全组件的条件下,无法使用专用芯片产生随机数,此时必须利用确定性随机数发生器来产生随机数。

nistsp800系列标准给出了确定性随机数发生器的推荐构造方式,譬如基于hash运算的随机数发生器。在随机数发生器中,在初始化阶段必须输入外部采集的熵源,并且还需要利用该外部熵源执行周期性的补种操作。采集外部熵源的手段,一般从操作系统中具有随机性的外部输入设备进行采集,譬如利用鼠标的移动方向、距离等信息。但移动终端设备一般都是使用触屏输入,pc环境下常用的熵源采集方法并不适用于移动终端设备。



技术实现要素:

基于此,有必要提供一种移动终端随机数发生器的熵源采集方法、计算机设备和计算机存储介质。

一种移动终端随机数发生器的熵源采集方法,所述方法包括步骤:

从移动终端获取随机终端信息串;

从服务端获得服务端来源随机信息;

基于所述随机终端信息串和所述服务端来源随机信息生成外部熵源。

一种计算机设备,包括存储器和处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现如上所述法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。

根据如上所述的实施例的方案,其从移动终端获取随机终端信息串,还从服务端获得服务端来源随机信息,并基于移动终端的随机终端信息串和服务端的服务端来源随机信息生成外部熵源,不仅适用于移动终端,而且基于服务端来源随机信息可使得客户端的随机数发生器获得足够的熵源,提高了移动终端采集的熵源的随机性和安全性。

附图说明

图1为一个实施例中的移动终端随机数发生器的熵源采集方法的流程示意图;

图2是一个实施例中的计算机设备的内部结构示意图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

如图1所示,一个实施例中的移动终端随机数发生器的熵源采集方法,包括步骤s101至步骤s103。

步骤s101:从移动终端获取随机终端信息串。

一个实施例中,从移动终端获取随机终端信息串可以包括:从移动终端的各部件采集终端部件随机信息,并基于采集的各部件的终端部件随机信息构建随机终端信息串。

其中,在从移动终端的各部件采集终端部件随机信息时,可以是任何可能的部件,只要这些部件的信息不会在所有的移动终端上具有相同值。一个实施例中,从移动终端的各部件采集获得的终端部件随机信息,可以包括但不限于下述各类型信息:

移动终端的陀螺仪的坐标值,该坐标值可以是一个三维坐标,包括横坐标值x、纵坐标值y和第三坐标值z,可表示为(x、y、z);

移动终端的加速度传感器输出的加速度参数,对应于上述坐标值,该加速度参数可包括三个值,即横坐标加速度、纵坐标加速度以及第三坐标加速度,可表示为(ax、ay、az)。

移动终端所处的地理位置信息,地理位置信息可以包括:经度lon,纬度lat和高度h。

移动终端磁力计的输出的磁力信息,可记为magnet,其具体可以包括磁北、真北和磁偏角。

移动终端的当前cpu(中央处理器)的cpu使用率信息,可记为ur。

移动终端的摄像设备的摄像设备信息。

移动终端的操作系统的信息。

移动终端的应用软件的软件信息。

移动终端预先生成并存储的相关信息。

可以理解,从移动终端的各部件采集的终端部件随机信息,可以包括但不限于上述列出的各种终端部件随机信息中的随机组合。在基于采集的各部件的终端部件随机信息构建随机终端信息串(下述各实施例中,将随机终端信息串记为hinfo)时,可以采用任何可能的方式进行。

在其中一个实施例中,可以是串接各部件的终端部件随机信息,获得随机终端信息串。以从移动终端的各部件采集的终端部件随机信息包括三维坐标(x、y、z)、加速度参数(ax、ay、az)、磁力信息magnet、cpu使用率信息ur为例,串接后得到的随机终端信息串可以表示为:

hinfo=x||y||z||ax||ay||az||lon||lat||h||magnet||ur。

在其中一个实施例中,可以是计算各部件的终端部件随机信息的哈希值,并对获得的各哈希值进行运算,获得随机终端信息串。其中,在对获得的各哈希值进行运算,获得随机终端信息串时,可以采用任何可能的运算方式,例如,对获得的各哈希值进行异或或者相加或者其他运算,获得随机终端信息串。

在其中一个实施例中,可以对各部件的终端部件随机信息进行处理,获得各处理数据,并对获得的各处理数据进行运算,获得随机终端信息串。其中,对各部件的终端部件随机信息进行的处理,可以是任何可能的处理方式,只要能够基于各终端部件随机信息产生较好随机性的输出即可,例如密钥派生。对获得的各处理数据进行运算,获得随机终端信息串时,可以采用任何可能的运算方式,例如,对获得的各密钥派生数据进行异或或者相加或者其他运算,获得随机终端信息串。

步骤s102:从服务端获得服务端来源随机信息。

可以采用各种可能的方式获得服务端来源随机信息。

在其中一个实施例中,可以从服务端获取随机数信息,将该随机数信息作为所述服务端来源随机信息。该从服务端获取的随机数信息,可以是一个随机数,也可以是其他的信息,例如服务端采用对称密钥对随机数加密后获得的随机数密文,只要能够体现出从服务端获得的信息的随机性即可。

在其中一个实施例中,从服务端获得服务端来源随机信息可以包括:从服务端获取随机数信息,基于所述随机数信息执行秘密运算,获得服务端来源随机信息。

从服务端获取的随机数信息,可以是一个随机数,也可以是其他的信息,例如服务端采用共享对称密钥或者非对称密钥(如客户端公钥)对随机数加密后获得的随机数密文,只要能够体现出从服务端获得的信息的随机性即可。

在一个实施例中,从服务端获取随机数信息,基于所述随机数信息执行秘密运算,获得服务端来源随机信息,包括步骤s1121和步骤s1122。

步骤s1121:从服务端获取随机数,其中,该随机数可以是服务端调用密码机生成的随机数,且该随机数可以是真随机数。

步骤s1122:采用对称密钥对随机数进行秘密运算,获得服务端来源随机信息。采用对称密钥对随机数进行运算的方式可以是任何可能的方式,例如加密运算(如sm4加密运算)、解密运算(如sm4解密运算)、或者hmac运算等。

其中,该对称密钥可以采用任何可能的方式获得。

在其中一个方式中,可以通过随机的方式生成该对称密钥。例如随机生成一个随机数作为对称密钥。

在其中一个方式中,可以是通过对上述随机终端信息串进行处理,获得该对称密钥,这里的处理可以是任何可能的处理方式,只要能够基于各终端部件随机信息产生较好随机性的输出即可。以下仅以其中两种方式进行举例说明。

一个实施例中,可以通过对随机终端信息串进行密钥派生,获得该对称密钥,例如以上述硬件信息串hinfo为输入,执行密钥派生函数获得一个128比特的随机数:k=kdf(hinfo,128)。

一个实施例中,可以采用下述方式获得对称密钥。

计算随机终端信息串的摘要值,获得第一熵源信息。计算摘要值的方式可以采用任何的方式进行,例如采用哈希算法计算摘要值。如以随机硬件信息串hinfo作为输入,计算摘要值获得第一熵源信息e1,该第一熵源信息可以是256比特熵源材料,一个实施例中可以采用sm3哈希算法计算获得,如:e1=sm3_hash(hinfo)。

然后,将第一熵源信息输入随机数发生器,获得随机数发生器输出的对称密钥。一个实施例中,从随机数发生器输出的可以是128比特随机数,并将该随机数作为对称密钥。

在一个实施例中,从服务端获取随机数信息,基于所述随机数信息执行秘密运算,获得服务端来源随机信息,包括步骤s1221和步骤s1222。

步骤s1221:与服务端执行交换协议,获得共享随机数;其中,这里的交换协议可以是任何可能的交换协议,例如dh交换协议;以dh协议为例,执行交换的过程是:客户端生成随机数r1,服务端生成随机数r2,客户端与服务端执行一个dh交换协议,使得双方获得一个共享的随机数

步骤s1222:获取对称密钥,采用获取的对称密钥对共享随机数进行秘密运算,获得服务端来源随机信息。其中,这里的秘密运算可以是任何可能的方式,例如加密运算(如sm4加密运算)、解密运算(如sm4解密运算)、或者hmac运算等。

其中,该对称密钥可以采用任何可能的方式获得。

在其中一个方式中,可以通过随机的方式生成该对称密钥。例如随机生成一个随机数作为对称密钥。

在其中一个方式中,可以是通过对上述随机终端信息串进行处理,获得该对称密钥,这里的处理可以是任何可能的处理方式,只要能够基于各终端部件随机信息产生较好随机性的输出即可。以下仅以其中两种方式进行举例说明。

一个实施例中,可以通过对随机终端信息串进行密钥派生,获得该对称密钥,例如以上述硬件信息串hinfo为输入,执行密钥派生函数获得一个128比特的随机数:k=kdf(hinfo,128)。

一个实施例中,可以采用下述方式获得对称密钥。

计算随机终端信息串的摘要值,获得第一熵源信息。计算摘要值的方式可以采用任何的方式进行,例如采用哈希算法计算摘要值。如以随机硬件信息串hinfo作为输入,计算摘要值获得第一熵源信息e1,该第一熵源信息可以是256比特熵源材料,一个实施例中可以采用sm3哈希算法计算获得,如:e1=sm3_hash(hinfo)。

然后,将第一熵源信息输入随机数发生器,获得随机数发生器输出的对称密钥。一个实施例中,从随机数发生器输出的可以是128比特随机数,并将该随机数作为对称密钥。

一个实施例中,从服务端获取随机数信息,基于所述随机数信息执行秘密运算,获得服务端来源随机信息,包括步骤s1321至步骤s1323。

步骤s1321:获取服务端对随机数加密得到的第一随机数密文。其中,该随机数可以是服务端调用密码机生成的随机数,且该随机数可以是真随机数。

在该方式中,服务端可以采用各种可能的方式对随机数进行加密。

一个实施例中,客户端生成一个非对称密钥对,该非对称密钥对包括客户端私钥和客户端公钥,客户端私钥把存在客户端本地,并将客户端公钥发送给服务端。服务端在生成一个随机数r(可以是通过调用密码机生成,且可以是真随机数)之后,采用客户端公钥对随机数加密,获得第一随机数密文。

一个实施例中,客户端可以与服务端协商生成共享对称密钥,例如通过执行交换协议获得共享对称密钥,这里的交换协议可以是任何可能的交换协议,例如dh交换协议;以dh协议为例,执行交换的过程是:客户端生成随机数r1,服务端生成随机数r2,客户端与服务端执行一个dh交换协议,使得双方获得一个共享的随机数服务端在生成一个随机数r(可以是通过调用密码机生成,且可以是真随机数)之后,采用上述协商出的共享对称密钥对随机数加密,获得第一随机数密文。

步骤s1322:对第一随机数密文解密,获得随机数。

具体的解密方式可以采用任何可能的方式进行,一个实施例中,服务端采用客户端公钥对随机数加密,获得第一随机数密文时,客户端此时可以采用客户端私钥对第一随机数密文进行解密,获得随机数。一个实施例中,服务端采用共享对称密钥对随机数加密,获得第一随机数密文时,客户端此时可以采用共享对称密钥对第一随机数密文进行解密,获得随机数。据此可以实现随机数的加密传输。

步骤s1323:采用对称密钥对随机数进行运算,获得服务端来源随机信息。采用对称密钥对随机数进行运算的方式可以是任何可能的方式,例如加密运算(如sm4加密运算)、解密运算(如sm4解密运算)、或者hmac运算等。

其中,该对称密钥可以采用任何可能的方式获得。

在其中一个方式中,可以通过随机的方式生成该对称密钥。例如随机生成一个随机数作为对称密钥。

在其中一个方式中,可以是通过对上述随机终端信息串进行处理,获得该对称密钥,这里的处理可以是任何可能的处理方式,只要能够基于各终端部件随机信息产生较好随机性的输出即可。以下仅以其中两种方式进行举例说明。

一个实施例中,可以通过对随机终端信息串进行密钥派生,获得该对称密钥,例如以上述硬件信息串hinfo为输入,执行密钥派生函数获得一个128比特的随机数:k=kdf(hinfo,128)。

一个实施例中,可以采用下述方式获得对称密钥。

计算随机终端信息串的摘要值,获得第一熵源信息。计算摘要值的方式可以采用任何的方式进行,例如采用哈希算法计算摘要值。如以随机硬件信息串hinfo作为输入,计算摘要值获得第一熵源信息e1,该第一熵源信息可以是256比特熵源材料,一个实施例中可以采用sm3哈希算法计算获得,如:e1=sm3_hash(hinfo)。

然后,将第一熵源信息输入随机数发生器,获得随机数发生器输出的对称密钥。一个实施例中,从随机数发生器输出的可以是128比特随机数,并将该随机数作为对称密钥。

步骤s103:基于所述随机终端信息串和所述服务端来源随机信息生成外部熵源。

在生成外部熵源时,可以采用任何可能的方式进行。在其中一个实施例中,基于随机终端信息串和所述服务端来源随机信息生成外部熵源,包括步骤s1131至步骤s1133。

步骤s1131:获取第一熵源信息。该第一熵源信息是随机终端信息串的摘要值。其中,在上述共享密钥是基于第一熵源信息确定的情况下,即上述获取共享密钥时已经计算出第一熵源信息的情况下,可以直接读取已经计算出的第一熵源信息。若上述共享密钥是基于其他的方式获得,如密钥派生等方式,则可通过计算随机终端信息串的摘要值,获得该第一熵源信息。计算摘要值的方式可以采用任何的方式进行,例如采用哈希算法计算摘要值。

一个实施例中,可以随机硬件信息串hinfo作为输入,计算摘要值获得第一熵源信息e1,该第一熵源信息可以是256比特熵源材料:e1=sm3_hash(hinfo)。

步骤s1132:计算服务端来源随机信息的摘要值,获得第二熵源信息。具体计算服务端来源随机信息的摘要值的方式可以采用任何可能的方式进行,例如采用哈希算法计算摘要值。将服务端来源随机信息记为cr,则可计算cr的摘要值获得第二熵源信息e2,该第二熵源信息可以是256比特熵源材料:e2=sm3_hash(cr)。

步骤s1133:对第一熵源信息和第二熵源信息进行运算,获得外部熵源。在进行运算时,可以采用任何可能的运算方式,例如,对第一熵源信息e1和第二熵源信息e2进行异或运算,获得外部熵源entropy,即entropy=(e1)xor(e2)。再例如,对第一熵源信息e1和第二熵源信息e2进行哈希运算,获得外部熵源entropy,即entropy=hash(e1||e2)。再例如,对第一熵源信息e1和第二熵源信息e2进行密钥派生运算,获得外部熵源entropy,即entropy=kdf(e1||e2,256)。再例如,以第二熵源信息e2为对称密钥,对第一熵源信息e1进行运算,获得外部熵源entropy。这里的运算的方式可以是任何可能的方式,例如加密运算(如sm4加密运算)、解密运算(如sm4解密运算)、或者hmac运算等,以加密运算为例,即entropy=加密算法(e1为输入,e2为对称密钥)。在一个实施例中,也可以是以第一熵源信息e1为对称密钥,即entropy=加密算法(e2为输入,e1为对称密钥)。当然,对第一熵源信息和第二熵源信息进行运算获得外部熵源时,不限于上述运算方式。

基于如上所述的示例,在一个实施例中还提供一种计算机设备,该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现如上述各实施例中的任意一个实施例的方法。

图2示出了一个实施例中计算机设备的内部结构图,该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和输入装置。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现移动终端随机数发生器的熵源采集方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行移动终端随机数发生器的熵源采集方法。

本领域技术人员可以理解,图2中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

据此,在一个实施例中还提供一种存储介质,其上存储有计算机程序,其中,该程序被处理器执行时实现如上述各实施例中的任意一个实施例的方法。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1