随 机 数 算 法

随 机 数 算 法一、随机数概述在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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 40篇英语短文搞定高考3500个单词[通俗易懂]

    40篇英语短文搞定高考3500个单词[通俗易懂]40篇英语短文搞定高考3500个单词1.FallinLovewithEnglish爱上英语Hidingbehindtheloosedustycurtain,ateenagerpackeduphisovercoatintothesuitcase.Heplannedtoleavehomeatduskthoughtherewasthun…

    2022年6月28日
    18
  • idea 2021 mac 激活码(JetBrains全家桶)

    (idea 2021 mac 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
    107
  • 调用JQUERY返回顶部功能

    调用JQUERY返回顶部功能

    2021年9月15日
    50
  • 自动化运维平台分析「建议收藏」

    自动化运维平台分析「建议收藏」在项目上线完成后,业务系统或平台自然就转入了运维管控期,而在运维期两个重点,一个就是运维流程的标准化和规范化,另外一个就是运维工作本身的自动化。对于运维自动化将成为后续我重点关注的一个内容,因为本身我们DevOps实践也需要这方面的积累。对于运维自动化,传统我们可能是编写自动化的运维脚本,然后是手工或定时的执行运维脚本完成整个自动化执行过程和运维例行检查。而今天要谈自动化运维平台,里面一个重点就是基于我们面对的运维场景,如何将运维操作或任务进行细粒度分解,然后再对运维操作进行组合和编排。为…

    2022年5月17日
    35
  • java栈内存不足

    java栈内存不足前置条件:使用命令java -Xmx1g-Xms1g-Xmn256m-XX:PermSize=128m-Xss256k-XX:+DisableExplicitGC-XX:+UseConcMarkSweepGC-XX:+CMSParallelRemarkEnabled-XX:+UseCMSCompactAtFullCollection-XX:LargePageSizeInByte

    2022年9月6日
    2
  • ac测评题库_ftb任务指令

    ac测评题库_ftb任务指令有两台机器 A,B 以及 K 个任务。机器 A 有 N 种不同的模式(模式 0∼N−1),机器 B 有 M 种不同的模式(模式 0∼M−1)。两台机器最开始都处于模式 0。每个任务既可以在 A 上执行,也可以在 B 上执行。对于每个任务 i,给定两个整数 a[i] 和 b[i],表示如果该任务在 A 上执行,需要设置模式为 a[i],如果在 B 上执行,需要模式为 b[i]。任务可以以任意顺序被执行,但每台机器转换一次模式就要重启一次。求怎样分配任务并合理安排顺序,能使机器重启次数最少。输入格

    2022年8月9日
    5

发表回复

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

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