亂數
隨機數這一概念在不同領域有着不同的含義。
密碼學範疇的隨機數
根據密碼學原理,隨機數的隨機性檢驗可以分爲三個標準:
- 統計學偽隨機性。統計學偽隨機性指的是在給定的隨機位元流樣本中,1的數量大致等於0的數量,同理,「10」「01」「00」「11」四者數量大致相等。類似的標準被稱為統計學隨機性。滿足這類要求的數字在人類「一眼看上去」是隨機的。
- 密碼學安全偽隨機性。其定義為,給定隨機樣本的一部分和隨機演算法,不能有效的演算出隨機樣本的剩餘部分。
- 真隨機性。其定義為隨機樣本不可重現。實際上只要給定邊界條件,真隨機數並不存在,可是如果產生一個真隨機數樣本的邊界條件十分複雜且難以捕捉(比如當地的本底輻射波動值),可以認為用這個方法演算出來了真隨機數。但實際上,這也只是非常接近真隨機數的偽隨機數,一般認為,無論是本底輻射、物理噪音、拋硬幣等等都是可被觀察了解的,任何基於經典力學產生的隨機數,都只是偽隨機數。
相應的,隨機數也分爲三類:
- 偽隨機數:滿足第一個條件的隨機數。
- 密碼學安全的偽隨機數:同時滿足前兩個條件的隨機數。可以通過密碼學安全偽亂數生成器計算得出。
- 真隨機數:同時滿足三個條件的隨機數。
隨機數在密碼學中非常重要,保密通訊中大量運用的會話金鑰的生成即需要真隨機數的參與。如果一個隨機數生成演算法是有缺陷的,那麽會話金鑰可以直接被推算出來。若果真發生這種事故,那麽任何加密演算法都失去了意義。
密碼學中大量利用偽隨機數生成器的應用還有流密碼。流密碼的著名例子是RC4和ChaCha20。流密碼的原理是利用一個密碼學安全的偽隨機數生成器根據金鑰產生一串密碼學安全的偽隨機位元列,再將訊息與上述隨機位元列按位元異或運算。
密碼學以外的隨機數
亂數是專門的隨機試驗的結果。
在統計學的不同技術中需要使用亂數,比如在從統計總體中抽取有代表性的樣本的時候,或者在將實驗動物分配到不同的試驗組的過程中,或者在進行蒙特卡羅模擬法計算的時候等等。
產生亂數有多種不同的方法。這些方法被稱為亂數生成器。亂數最重要的特性是它在產生時後面的那個數與前面的那個數毫無關係。
真正的亂數是使用物理現象產生的:比如擲錢幣、骰子、轉輪、使用電子元件的噪音、核裂變等等。這樣的亂數生成器叫做物理性亂數生成器,它們的缺點是技術要求比較高。
在實際應用中往往使用偽亂數就足夠了。這些數列是「似乎」隨機的數,實際上它們是通過一個固定的、可以重複的計算方法產生的[2]。它們不真正地隨機,因為它們實際上是可以計算出來的,但是它們具有類似於亂數的統計特徵。這樣的生成器叫做偽亂數生成器[3]。
在真正關鍵性的應用中,比如在密碼學中,人們一般使用真正的亂數。
參考文獻
- ^ Jonathan Katz; Yehuda Lindell. Introduction to Modern Cryptography: Principles and Protocols [現代密碼學——原理與協定]. ISBN 9787118070651 (英語).[頁碼請求]
- ^ Pseudorandom number generators (video). Khan Academy. [2023-12-25]. (原始內容存檔於2020-11-26) (英語).
- ^ Barker, Elaine; Barker, William; Burr, William; Polk, William; Smid, Miles. Recommendation for Key Management (PDF). NIST Special Publication 800-57 (NIST). July 2012 [19 August 2013]. doi:10.6028/NIST.SP.800-57p1r3. (原始內容存檔 (PDF)於2013-06-26) (英語).