随 机 数 算 法

 

1、随机数概述算法

在password技术中,随机序列是很是重要的,比方密钥产生、数字签名、身份认证和众多的password学协议等都要用到随机序列。因此产生高质量的随机数序列对信息的安全性具备十分关键的数据。随机数分为真随机数和伪随机数,计算机经过算法产生的随机数并不上真正意义上的随机数,很是easy被破解,仅仅能称为伪随机数。若要产生真正的随机数,必须经过硬件来实现,比方使用离子辐射事件的脉冲检測器、气体放电管和带泄露的电容等,但是为每台计算机配备这种装置上不可能。因此在此咱们经过改进咱们的算法,使生成的伪随机数达到真随机数的标准。windows

2、软件常常使用的产生随机数的方法缓存

    在软件上计算机常常使用的产生随机数的算法为线性同余算法,即便用如下的公式递推产生不一样的随机数.安全

ni+1=(a*ni+b)mod M          当中i=0,1,…,M-1 app

c语言中的rand()函数便是经过该公式递推产生随机数的,常常使用当前的系统时间为种子。dom

经过该公式可以看出,产生的随机数是明显有规律可寻的,每一个随机数都是在前一个随机数的基础上经过公式计算得来的,因此经过该方法得来的随机数的随机性很是差。函数

因此为了提升计算机产生的随机数的随机性,在这里咱们经过收集系统随机的物理量来填充随机数缓冲池,比方键盘敲击时间、鼠标点击时间、cpu执行參数等,经过这些方法获得的随机数具备很是高的随机性。可达到真随机数的要求。性能

在WAPI系统中,均需要产生32位的随机数,在这里区分不一样的平台,编写随机数产生程序,并依据美国NIST(美国标准与技术研究院)提供的最新随机数測试标准进行測试。spa

2、Windows平台下随机数生成算法操作系统

首先创建一个动态数据缓冲池,缓冲池被释放以前,会不停的收集windows平台下众多的物理随机信息,包含:①当前进程的ID;②当前线程的ID;③系统引导以来的时钟数;④各类高精度的性能计数器;⑤用户环境模块的MD4(Message Digest 4,信息摘要4)散列,包含username,计算机名和搜索路径等;⑥高精度的内部CPU计算器,如RDISC,ROMSR,RDPM等;⑦底层系统信息,如空暇时间,内检时刻,中断时间,提交限定,页面计数,缓存计数,操做系统外部计数、键盘、鼠标信息等。

当程序需要随机数时,从这些缓冲池中读取这些物理信息,因为这些信息大部分均从物理量读取而来,因此有不可预測性,可以知足随机性的要求。

3、Linux平台下随机数生成算法

Linux平台下也首先创建一个缓冲池用来收集来自设备驱动程序和其余来源的环境噪音,包含两次中断的时间间隔、键的扫描码、两次按键之间的时间间隔、鼠标位置和连续两次鼠标中断时间间隔、连续两次磁盘操做之间的间隔。

需要随机数的时,就从这些缓冲池中读取这些物理信息,这些信息具备不可预測性,知足随机性的要求。

4、随机数统计測试 

每项的測试结果均转换为p-value值进行推断,若p-value>=0.01,则说明该随机数序列具备随机性,不然不具备随机性。下面对这15项測试进行简单的介绍。

这15项測试分别为:

1. Frequency (Monobit) Test(频率測试)

   2. Frequency Test within a Block(块内频率測试)

3. Runs Test(流程測试)

 

4.Test for the Longest Run of Ones in a Block(块内最长游程測试)

 

5. Binary Matrix Rank Test(二进制矩阵測试)

6. Discrete Fourier Transform (Spectral) Test(离散付利叶測试)

 

7. Non-overlapping Template Matching Test(非重叠模板匹配測试)

8. overlapping Template Matching Test(重叠模板匹配測试)

 

9. Maurer’s “Universal Statistical” Test(Maurer's普通统计測试)

10. Linear Complexity Test(线性复杂性測试)

11. Serial Test(连续測试)

12. Approximate Entropy Test(近似熵測试)

13. Cumulative Sums (Cusum) Test(累积和測试)

14. Random Excursions Test(自由游程測试)

15. Random Excursions Variant Test(自由变量測试)

相关文章
相关标签/搜索