随 机 数 算 法

随 机 数 算 法一、随机数概述在password技术中,随机序列是非常重要的,比方密钥产生、数字签名、身份认证和众多的password学协议等都要用到随机序列。所以产生高质量的随机数序列对信息的安全性具有十分关键的数

大家好,又见面了,我是你们的朋友全栈君。

 

一、随机数概述

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

二、软件经常使用的产生随机数的方法

    在软件上计算机经常使用的产生随机数的算法为线性同余算法,即使用以下的公式递推产生不同的随机数.

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

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

通过该公式能够看出,产生的随机数是明显有规律可寻的,每个随机数都是在前一个随机数的基础上通过公式计算得来的,所以通过该方法得来的随机数的随机性非常差。

所以为了提高计算机产生的随机数的随机性,在这里我们通过收集系统随机的物理量来填充随机数缓冲池,比方键盘敲击时间、鼠标点击时间、cpu执行參数等,通过这些方法得到的随机数具有非常高的随机性。可达到真随机数的要求。

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

二、Windows平台下随机数生成算法

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

当程序须要随机数时,从这些缓冲池中读取这些物理信息,由于这些信息大部分均从物理量读取而来,所以有不可预測性,能够满足随机性的要求。

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

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

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

四、随机数统计測试 

每项的測试结果均转换为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(自由变量測试)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154493.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 视频转gif mac_有没有录屏时生成gif的软件

    视频转gif mac_有没有录屏时生成gif的软件Mac自带QuicktimePlayer上次完成word添加好看的格式化代码后,又想着做一个gif图演示功能效果,展示出来会更好。就来摸索摸索了…简单的工具图示如下:1、Launched中搜索2、双击触摸板3、按照工具提示来随意录屏吧~AppStore下载工具PicGIFLite双击图标简单的界面,更深入我心,实测有效,就是gif图片分辨率不高。下图是我做的实测的效果(这个滑动的功能后…

    2025年12月3日
    4
  • 常用Python库_编程代码大全

    常用Python库_编程代码大全环境管理管理Python版本和环境的工具p–非常简单的交互式python版本管理工具。pyenv–简单的Python版本管理工具。Vex–可以在虚拟环境中执行命令。virtualenv–创建独立Python环境的工具。virtualenvwrapper-virtualenv的一组扩展。包管理管理包和依赖的工具。pip–Python包和依赖关系管理工具。pi…

    2022年8月27日
    7
  • html.dropdownlistfor_html按钮样式

    html.dropdownlistfor_html按钮样式//获取直属父级列表varparents=_MemberEditDTOService.GetParents();varparentsItems=parents.Result.Select(s=>newSelectListItem(){Text=s.MemberName,Value=((int)s.Id).ToString()}).ToList();//parents…

    2022年8月31日
    3
  • java logbook_SpringBoot使用Logbook记录HTTP请求响应日志

    java logbook_SpringBoot使用Logbook记录HTTP请求响应日志SpringBoot的httptrace端口能够记录每次访问的请求和响应信息,但是不能记录body,这样在出问题时就不方便排查,而且httptrace不方便在原有的基础上进行扩展,所以只能寻求其他方式进行记录。Logbook是一个可扩展的Java库,可以为不同的客户端和服务端技术提供完整的请求和响应日志记录。它能够满足一些特殊的需求:允许web应用记录程序接收或发送的所有HTTP通信易于保留和进…

    2025年8月13日
    4
  • HTML中空格_如何去掉word中的空格

    HTML中空格_如何去掉word中的空格1. 空格符大  家  好!显示效果为:大家好!2.p标签使用空两格百度地图API功能百度地图API功能效果如下:3.span标签空格百度地图API功能百度地图API功能效果如下:4.word-spacing属性,Happynewyear!效果:![在这里插入图片描述](https://img-blog….

    2022年9月28日
    2
  • ubuntu GPG error 解决办法

    ubuntu GPG error 解决办法下载公钥:添加公钥:key-server: keyserver.Ubuntu.com

    2022年7月3日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号