随机数


一、伪随机数:便是统计学伪随机性,每一个值的几率出现相同。php

  伪随机是由可肯定的函数(经常使用线性同余),经过一个种子(经常使用时钟),产生的伪随机数。这意味着:若是知道了种子,或者已经产生的随机数,均可能得到接下来随机数序列的信息(可预测性)。linux


二、密码学安全伪随机性:给定随机样本的一本分和随机算法推算不出剩余部分。
三、真随机性:在具有上两条的基础上,还要具有不可重现性,不能经过给定相同的数据计算出相同序列。
  因为计算机算法均具有肯定的特性,因此真随机数没法由算法来生成
  通常都是物理生成如:某一时间点的衰变速度、某一地区的本底辐射值、正确使用设计良好的骰子所得到的输出等算法

 

php中mt_rand()为伪随机数
第一次调用mt_rand()会自动播种,然后不会再播种,知道该进程结束,才会从新播种
这样该进程生成的随机数就都会使用相同的种子,这样就能够根据随机数破解出种子,然后计算出后面的随机数安全

破解原理:穷举全部的种子并根据种子生成随机数序列再跟已知的随机数序列作比对来验证种子是否正确dom

参考:函数

https://xz.aliyun.com/t/31/工具

php_mt_seed 破解工具 https://www.openwall.com/php_mt_seed/README设计

 

linux 下
/dev/random Linux
内核中的是第一个以背景噪声产生真正的随机数产生的实现,它容许程序访问来自设备驱动程序或其它来源的背景噪声。
发生器有一个容纳噪声数据的熵池,在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random的读操做将会被阻塞,直到收集到了足够的环境噪声为止[3]。这样的设计使得/dev/random是真正的随机数发生器,提供了最大可能的随机数据熵,建议在须要生成高强度的密钥时使用。进程

/dev/random的一个副本是/dev/urandom(“unblocked”,非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操做不会产生阻塞,但其输出的熵可能小于/dev/random的。它能够做为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。基础

随机数配置:/proc/sys/kernel/random 

相关文章
相关标签/搜索