定義
隨機數是專門的隨機試驗的結果。
在
統計學的不同技術中需要使用隨機數,比如在從
統計總體中抽取有代表性的樣本的時候,或者在將實驗動物分配到不同的試驗組的過程中,或者在進行蒙特卡羅模擬法計算的時候等等。
產生隨機數有多種不同的方法。這些方法被稱為隨機數生成器。隨機數最重要的特性是它在產生時後面的那個數與前面的那個數毫無關係。
密碼學範疇
根據
密碼學原理,隨機數的隨機性檢驗可以分為三個標準:
統計學偽隨機性。統計學偽隨機性指的是在給定的隨機比特流樣本中,1的數量大致等於0的數量,同理,“10”“01”“00”“11”四者數量大致相等。類似的標準被稱為統計學隨機性。滿足這類要求的數字在人類“一眼看上去”是隨機的。
密碼學安全偽隨機性。其定義為,給定隨機樣本的一部分和隨機算法,不能有效的演算出隨機樣本的剩餘部分。
真隨機性。其定義為隨機樣本不可重現。實際上只要給定邊界條件,真隨機數並不存在,可是如果產生一個真隨機數樣本的邊界條件十分複雜且難以捕捉(比如計算機當地的
本底輻射波動值),可以認為用這個方法演算出來了真隨機數。
相應的,隨機數也分為三類:
偽隨機數:滿足第一個條件的隨機數。
密碼學安全的偽隨機數:同時滿足前兩個條件的隨機數。可以通過密碼學安全偽隨機數生成器計算得出。
真隨機數:同時滿足三個條件的隨機數。
隨機數在密碼學中非常重要,保密通信中大量運用的
會話密鑰的生成即需要真隨機數的參與。如果一個隨機數生成算法是有缺陷的,那么會話密鑰可以直接被推算出來。若果真發生這種事故,那么任何加密算法都失去了意義。
密碼學中大量利用偽隨機數生成器的套用還有
流密碼。流密碼的著名例子是
RC4。流密碼的原理是利用一個密碼學安全的偽隨機數生成器根據密鑰產生一串密碼學安全的偽隨機比特列,再將訊息與上述隨機比特列按位
異或運算。
目前沒有數學證明表示密碼學安全的偽隨機數生成器是確實存在的。其存在性證明涉及到P和NP的數學難題。
運用
真正的隨機數是使用
物理現象產生的:比如擲錢幣、
骰子、轉輪、使用
電子元件的噪音、
核裂變等等,這樣的隨機數發生器叫做物理性隨機數發生器,它們的缺點是技術要求比較高。
使用計算機產生真隨機數的方法是獲取cpu頻率與溫度的不確定性以及統計一段時間的運算次數每次都會產生不同的值,系統時間的誤差以及音效卡的底噪等。
在實際套用中往往使用
偽隨機數就足夠了。這些
數列是“似乎”隨機的數,實際上它們是通過一個固定的、可以重複的計算方法產生的。計算機或計算器產生的隨機數有很長的周期性。它們不真正地隨機,因為它們實際上是可以計算出來的,但是它們具有類似於隨機數的
統計特徵。這樣的發生器叫做
偽隨機數發生器。
在真正關鍵性的套用中,比如在
密碼學中,人們一般使用真正的隨機數。
C語言、C++、C#、Java、Matlab、PHP、C51等程式語言和軟體中都有對應的隨機數生成函式。