隨機數


一、僞隨機數:便是統計學僞隨機性,每一個值的機率出現相同。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 

相關文章
相關標籤/搜索