真随机数产生系统及方法

文档序号:6340457阅读:199来源:国知局
专利名称:真随机数产生系统及方法
技术领域
本发明涉及一种利用计算机产生随机数的系统及方法,特别是关于一种真随机数产生系统及方法。
背景技术
随机数在日常应用尤其是信息安全领域有着广泛的应用。目前的随机数产生方法主要有以下两种一种是软件方式,利用系统时间作为随机信号,再用随机数函数产生随机数,但这种方法并不以随机事件作为随机数来源,因此产生的是伪随机数。另一种是硬件方式,通过设计产生随机数的电路单元或增加新的硬件设备,获得随机信号来生成随机数。 虽然硬件方式生成的随机数质量一般要好于软件方式生成的随机数,但是对于普通用户来说,每台计算机都要增加新的硬件设备及相应的成本,并不现实和理想。在密码学中,对于一个随机数序列的定义如下(1)序列看起来是随机的;(2)序列是不可预测的;C3)序列是不能重复产生的。随机数一般有真随机和伪随机之分,真随机数满足以上所有三点要求,而伪随机数只能满足以上前两点要求。软件生成随机数的一般方式如下(1)确定一个数学模型或者算法;(2)设置一些参数值;(3)按照规定的步骤和算法来生成第一个随机数;(4)然后在第一个随机数的基础上,来生成第二个随机数。重复同样的步骤,从而得到一个随机数序列。很明显,这种软件方式生成的随机数序列是伪随机数,只要知道其使用的算法和参数值,就可以重复生成同样的随机数,其随机性不强而使随机数变的可预测。

发明内容
鉴于以上内容,有必要提供一种真随机数产生系统及方法,能够利用计算机在运行过程中产生的任意随机事件作为随机数的种子和来源产生真随机数,其具有较好的随机性。所述的真随机数产生系统,安装并运行于计算机中,该计算机包括内存。该系统包括随机事件获取模块,用于在计算机的内存中初始化一个存储空间作为随机数种子缓冲区,获取计算机产生的随机事件,以及将每一个随机事件转化为用二进制数值表示的随机信号;随机事件混合模块,用于为每一个随机信号分配一个数组,将每一个随机信号的二进制数值存入各自对应分配的数组中,以及将每一个数组中的二进制数值移位混合后依次填入随机数种子缓冲区生成随机数种子源;随机数生成模块,用于从随机数种子缓冲区中截取一段随机种子源作为随机数序列,以及根据截取的随机种子序列产生真随机数。所述的真随机数产生方法包括步骤在计算机的内存中初始化一个存储空间作为随机数种子缓冲区;获取计算机产生的随机事件;将每一个随机事件转化为用二进制数值表示的随机信号;为每一个随机信号分配一个数组,将每一个随机信号的二进制数值存入各自对应分配的数组中;将每一个数组中的二进制数值移位混合后依次填入随机数种子缓冲区生成随机数种子源;从随机数种子缓冲区中截取一段随机种子源作为随机数序列;以及根据截取的随机种子序列产生真随机数。相较于现有技术,本发明所述的真随机数产生系统及方法,能够利用计算机在运行过程中产生的任意随机事件作为随机数的种子和来源来产生真随机数。由于计算机的随机事件是在不断发生的,对应的随机信号也在不断的更新,因此无法预测亦无法重复产生的真随机数。用户需要获取随机数时,只需将这些随机数值进行移位混合,其具有较好的随机性。


图1是本发明真随机数产生系统较佳实施例的架构图。图2是本发明真随机数产生方法较佳实施例的流程图。图3是将计算机产生的随机事件进行移位混合的示意图。主要元件符号说明计算机1真随机数产生系统10随机事件获取模块101随机事件混合模块102随机数生成模块103中央处理器20内存30外部存储器40
具体实施例方式如图1所示,是本发明真随机数产生系统10较佳实施例的架构图。在本实施例中, 该真随机数产生系统10安装并运行于计算机1中,能够获得计算机1在运行过程中产生的任意随机事件作为随机数的种子和来源,从而利用这些随机事件产生的数据生成真随机数。所述的随机事件包括,但不仅限于,CPU利用率、系统时间、网络数据包的收发时间、风扇转速、系统电压、键盘按键的ASCII码、键盘按键的间隔时间以及鼠标的屏幕坐标等产生的计算机事件。一般地,随机数包括真随机数以及伪随机数,真随机数具有随机性、不可预测性以及不能重复产生,而伪随机数虽然满足随机性和不可预测性,但是在产生伪随机数时, 如果使用相同的算法和参数值,则可以重复产生同样的随机数。所述的计算机1可以为桌上型计算机、笔记本计算机、服务器或者工作站计算机之一种。该计算机1包括,但不仅限于,中央处理器(CentralftOcessing Unit,CPU) 20、内存30以及外部存储器40。在本实施例中,所述的真随机数产生系统10包括随机事件获取模块101、随机事件混合模块102以及随机数生成模块103。本发明所称的模块是一种能够被计算机1的中央处理器20所执行并且能够完成固定功能的一系列计算机程序段,其存储在计算机1的外部存储器40中。所述的随机事件获取模块101用于在内存30中初始化一个存储空间作为随机数种子缓冲区。在本实施例中,随机事件获取模块101从内存30中划出一个128bits的存储空间作为缓冲区,用于存储计算机1产生随机事件所对应的二进制数值。所述的随机事件获取模块101还用于获取计算机1产生的随机事件,并将每一个随机事件转化为用二进制数值表示的随机信号。如图3所示,若随机事件获取模块101获取到的随机事件为键盘按键事件,则将该键盘按键事件转化为ASCII码的随机信号,例如按下键盘“A”键,其ASCII码为“0x41”的随机信号,其用二进制数值表示为“01000001”。 若随机事件获取模块101获取到的随机事件为计算机1的CPU利用率事件,则将该CPU利用率事件转化为CPU利用率的随机信号,其用二进制数值表示为“00110111”。若随机事件获取模块101获取到的随机事件为数据包收发时间事件,则将该数据包收发时间事件转化为数据包收发时间信号,其用二进制数值表示为“11001111”。若随机事件获取模块101获取到的随机事件为键盘按键间隔时间事件,则将该键盘按键间隔时间事件转化为键盘按键间隔时间信号,其用二进制数值表示为“01011000”。所述的随机事件混合模块102用于为每一个随机信号分配一个数组,并将每一个随机信号的二进制数值存入各自对应分配的数组中。本实施例中,随机事件混合模块102 按照随机事件的发生先后顺序来为每一个随机信号分配一个数组。如图3所示,随机事件混合模块102将键盘按键的随机信号“01000001”存入数组Al中,将CPU利用率的随机信号“00110111”存入数组A2中,将数据包收发时间的随机信号“11001111”存入数组A3中, 以及将键盘按键间隔时间的随机信号“01011000”存入数组A4中。所述的随机事件混合模块102还用于将每一个数组中的二进制数值移位混合后依次填入随机数种子缓冲区,从而构成随机数种子源。在本实施例中,随机事件混合模块 102将每一个数组中的二进制数值依次从右向左移位至随机数种子缓冲区中,亦即,随机事件混合模块102先将所有数组Al至A4的最右位依次移入随机数种子缓冲区,再接着从右向左移后一位,依次类推,直至数组Al至A4的最左位依次移入随机数种子缓冲区中。该缓冲区中的随机数种子源可以任意存放,例如,可以从左至右存放依次进入缓冲区的数值,也可以从右至左存放依次进入缓冲区的数值,从而增加随机数种子源的随机性。如图3所示, 随机事件混合模块102将数组Al中“01000001”的最右位“1”,数组A2中“00110111”的最右位“1”,数组A3中“ 11001111”的最右位“1”,以及数组A4中“ 01011000”的最右位“0” 依次移入随机数种子缓冲区(从左向右存放数组Al至A4移入的数值)中,依次类推,直至数组A1至A4的最左位“0”、“0”、“ 1”和“0”依次移入随机数种子缓冲区中,从而构成随机数种子源“11100110. . . 0110... ”。在其他实施例中,随机事件混合模块102也可以先将数组Al中的数值全部从右向左移入随机数种子缓冲区,再将数组A2中的数值全部从右向左移入随机数种子缓冲区,依次类推,直至数组A4中的数值全部移入随机数种子缓冲区。所述的随机数生成模块103用于从随机数种子缓冲区中截取一段随机种子源作为随机数序列,并根据该随机种子序列产生真随机数。例如,随机数生成模块103从随机数种子源“11100110. . . 0110... ”中截取“11100110”序列作为随机数序列,并将该随机数序列“11100110”转化成对应的十进制数“255”作为真随机数。如图2所示,是本发明真随机数产生方法较佳实施例的流程图。在本实施例中,该方法能够将计算机1在运行过程中产生的任意随机事件作为随机数的种子和来源,从而利用这些随机事件对应的随机信号生成真随机数。由于计算机1的随机事件是在不断发生的,对应的随机信号也在不断的更新,因此无法预测亦无法重复产生的真随机数。用户需要获取随机数时,只需将这些随机数值进行移位混合,具有很好的随机性。步骤S21,随机事件获取模块101在内存30中初始化一个存储空间作为随机数种子缓冲区。在本实施例中,随机事件获取模块101在内存30中划出一个128bits的存储空间作为缓冲区,用于存储计算机1产生随机事件所对应的二进制数值。步骤S22,随机事件获取模块101获取计算机1产生的随机事件。所述的随机事件包括,但不仅限于,CPU利用率、系统时间、网络数据包的收发时间、风扇转速、系统电压、键盘按键的ASCII码、键盘按键的间隔时间以及鼠标的屏幕坐标等产生的计算机事件。步骤S23,随机事件获取模块101将每一个随机事件转化为用二进制数值表示的随机信号。如图3所示,随机事件获取模块101将按下按键盘“A”键事件用二进制数值表示为“01000001”的键盘按键信号,将CPU利用率事件转化为用二进制数值表示为“00110111” 的CPU利用率信号,将数据包收发时间事件转化为用二进制数值表示为“11001111”的数据包收发时间信号,将键盘按键间隔时间事件转化为用二进制数值表示为“01011000”的键盘按键间隔时间信号。步骤S24,随机事件混合模块102为每一个随机信号分配一个数组,并将每一个随机信号的二进制数值存入各自对应分配的数组中。在本实施例中,随机事件混合模块102 按照随机事件的发生先后顺序来为每一个随机信号分配一个数组。例如图3所示,随机事件混合模块102将键盘按键的随机信号“01000001”存入数组Al中,将CPU利用率的随机信号“00110111”存入数组A2中,将数据包收发时间的随机信号“11001111”存入数组A3 中,以及将键盘按键间隔时间的随机信号“01011000”存入数组A4中。步骤S25,随机事件混合模块102将每一个数组中的二进制数值移位混合后依次填入随机数种子缓冲区,从而构成随机数种子源。在本实施例中,随机事件混合模块102将每一个数组中的二进制数值依次从右向左移位至随机数种子缓冲区中。例如图3所示,随机事件混合模块102将数组Al中“01000001”的最右位“1”,数组A2中“00110111”的最右位“ 1 ”,数组A3中“ 11001111”的最右位“ 1 ”,以及数组A4中“01011000”的最右位“0”依次填入随机数种子缓冲区中,依次类推,直至数组Al至A4的最左位“0”、“0”、“1”和“0”依次填入随机数种子缓冲区中,从而构成随机数种子源“11100110. . . 0110... ”。步骤S26,随机事件混合模块102判断是否需要更新随机数种子缓冲区的随机数种子源。若需要更新随机数种子缓冲区的随机数种子源,则流程返回步骤S22 ;若不需要更新随机数种子缓冲区的随机数种子源,则流程执行步骤S27。在本实施例中,随机事件混合模块102根据用户输入的操作指令判断是否更新随机数种子缓冲区的随机数种子源。例如,当用户输入操作更新指令“update command"时,随机事件混合模块102则重新获取计算机1产生的随机事件来更新随机数种子缓冲区的随机数种子源。随机事件获取模块101 也可以实时获取计算机1产生的随机事件来更新随机数种子缓冲区的随机数种子源,以便随机数种子源具有更好的随机性。步骤S27,随机数生成模块103从随机数种子缓冲区中截取一段随机数种子源作为随机数序列,例如,随机数生成模块103从随机数种子源“11100110. . . 0110... ”中截取 “11100110”序列作为随机数序列。步骤S28,随机数生成模块103根据截取的随机数序列产生真随机数,例如,将随机数序列“11100110”转化成对应的十进制数“255”作为真随机数。
以上实施例仅用以说明本发明的技术方案而非限制,尽管参照以上较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换都不应脱离本发明技术方案的精神和范围。
权利要求
1.一种真随机数产生系统,安装并运行于计算机中,其特征在于,所述的真随机数产生系统包括随机事件获取模块,用于在计算机的内存中初始化一个存储空间作为随机数种子缓冲区,获取计算机产生的随机事件,以及将每一个随机事件转化为用二进制数值表示的随机信号;随机事件混合模块,用于为每一个随机信号分配一个数组,将每一个随机信号的二进制数值存入各自对应分配的数组中,以及将每一个数组中的二进制数值移位混合后依次填入随机数种子缓冲区生成随机数种子源;随机数生成模块,用于从随机数种子缓冲区中截取一段随机数种子源作为随机数序列,以及根据截取的随机数序列产生真随机数。
2.如权利要求1所述的真随机数产生系统,其特征在于,所述的二进制数值移位混合是指将每一个数组中的二进制数值依次从右向左移位至随机数种子缓冲区中。
3.如权利要求1所述的真随机数产生系统,其特征在于,所述的随机事件混合模块还用于根据用户输入的操作指令来判断是否需要更新随机数种子缓冲区的随机数种子源。
4.如权利要求1所述的真随机数产生系统,其特征在于,所述的随机事件获取模块还用于实时获取计算机产生的随机事件来更新随机数种子缓冲区的随机数种子源。
5.如权利要求1所述的真随机数产生系统,其特征在于,所述的随机事件包括CPU利用率、系统时间、网络数据包的收发时间、风扇转速、系统电压、键盘按键的ASCII码、键盘按键的间隔时间以及鼠标的屏幕坐标而产生的计算机事件。
6.一种真随机数产生方法,其特征在于,该方法包括步骤(a)在计算机的内存中初始化一个存储空间作为随机数种子缓冲区;(b)获取计算机产生的随机事件;(c)将每一个随机事件转化为用二进制数值表示的随机信号;(d)为每一个随机信号分配一个数组,将每一个随机信号的二进制数值存入各自对应分配的数组中;(e)将每一个数组中的二进制数值移位混合后依次填入随机数种子缓冲区生成随机数种子源;(f)从随机数种子缓冲区中截取一段随机数种子源作为随机数序列;(g)根据截取的随机数序列产生真随机数。
7.如权利要求6所述的真随机数产生方法,其特征在于,该方法还包括步骤判断是否需要更新随机数种子缓冲区的随机数种子源;当需要更新随机数种子缓冲区的随机数种子源时,重复所述的步骤(b)至步骤(e)。
8.如权利要求7所述的真随机数产生方法,其特征在于,所述的随机数种子源通过实时获取计算机产生的随机事件来自动更新,或者根据用户输入的操作指令来更新。
9.如权利要求6所述的真随机数产生方法,其特征在于,所述的二进制数值移位混合是指将每一个数组中的二进制数值依次从右向左移位至随机数种子缓冲区中。
10.如权利要求6所述的真随机数产生方法,其特征在于,所述的随机事件包括CPU利用率、系统时间、网络数据包的收发时间、风扇转速、系统电压、键盘按键的ASCII码、键盘按键的间隔时间以及鼠标的屏幕坐标而产生的计算机事件。
全文摘要
一种真随机数产生系统及方法,该方法包括步骤在计算机的内存中初始化一个存储空间作为随机数种子缓冲区;获取计算机产生的随机事件;将每一个随机事件转化为用二进制数值表示的随机信号;为每一个随机信号分配一个数组,将每一个随机信号的二进制数值存入各自对应分配的数组中;将每一个数组中的二进制数值移位混合后依次填入随机数种子缓冲区生成随机数种子源;从随机数种子缓冲区中截取一段随机种子源作为随机数序列;根据截取的随机种子序列产生真随机数。实施本发明,能够利用计算机在运行过程中产生的任意随机事件作为随机数的种子和来源来产生真随机数,其具有较好的随机性。
文档编号G06F7/58GK102541508SQ20101061287
公开日2012年7月4日 申请日期2010年12月29日 优先权日2010年12月29日
发明者高峰 申请人:鸿富锦精密工业(深圳)有限公司, 鸿海精密工业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1