Pseudo-Random-Generator

偽隨機性的簡單定義

  • January 23, 2017

我試圖對偽隨機數生成器的維基百科定義有所了解。

有人可以解釋這個定義背後的直覺(這是如何描述“多項式時間的看似隨機性”)?

隨機序列是不可預測的(根據香農的“驚喜”想法)。可以通過什麼技術、什麼程序、什麼算法來預測?沒有答案,我們正處於泥濘的地面上。香農的方法是應用熵的概念(從熱學中竊取???)作為一種度量,儘管不完全是隨機的,因為隨機序列(如果我們可以確定我們有一個)可能具有低熵,因為它幾乎沒有他的驚喜因素。但是,存在隨機性的物理來源(如果我們可以毫無偏見地收集、測量、累積它們;實驗者應該確認測量錯誤/偏見/未能按照設計預期在現實中採取行動的令人發狂的現實)。並且有些數學對象具有高隨機性(因為下一個數字並不比偶然更可預測),但熵低。

我們可以測試隨機性(或者更確切地說,測試一些預期的模式——例如,Diehard 測試),但它們只是暗示性的,只排除了某些類型的模式(以及非隨機性),但不排除所有可能的模式。在實踐中,我們盡我們所能。例如,蒙特卡羅方法在某些情況下可能不需要絕對隨機性。作為確定性設備的電腦不能產生真正的隨機輸出,但它們可能能夠產生對於某些目的而言“足夠隨機”的輸出。這些被稱為偽隨機序列,並且記錄參差不齊。在 IBM 社區中廣泛使用多年的 RANDU 被證明是令人尷尬的模式。如果有人看過,它不可能持續使用這麼長時間。

一些應用程序需要更接近實際隨機性的東西(如何測量這是一個難題,一個真正的難題),特別是密碼學,其基本假設嚴重依賴於這個或那個選擇中固有的隨機性。因此,加密安全的偽隨機生成器是更高級別的性能要求。在確定性設備上成功執行是一項非常了不起的成就。

因此,可以理解地定義偽隨機性有點棘手。通過所有 Diehard 測試(經過修改和更新)可能足以滿足某人或某些要求,但不是另一個。Knuth 在《電腦程式藝術》(第 2 卷,如果我沒記錯的話)中詳細討論了這項業務,他的治療將是有益的。

偽隨機實際上不是隨機的,需要對各種特定情況下的差異進行一些討論和理解,這並不容易。有哲學、數學基礎(考慮任何各種數學常數,從 e、pi、phi、Chaitin 的 Omega 到 …)、電腦設計和操作現實(例如 Intel 的隨機數發生器設計)和電腦經濟現實(例如,具有無限記憶體的電腦是否能夠比有限記憶體機器更令人滿意的偽隨機性能?),等等。對於大多數需求,我認為不容易。

生成隨機數是一項昂貴(即緩慢)的操作。它可以使用大氣雜訊 (random.org)、比較兩個時鐘計數的滴答數(在一定時間內)的奇偶性或洗牌一副牌來完成。

由於我們需要更高效的實現,我們可以滿足於偽隨機數生成器,它們更快並確保一些重要屬性,例如輸出均勻分佈。PRNG 是一種確定性算法,它產生的數字序列具有與隨機過程大致相同的統計特性。

為了開始這個過程,我們需要一個初始值(如果我們正在處理的系統是初始條件),種子。該種子是以上述方式產生的實數隨機數。為了改進 PRNG 產生的序列,我們可以使用更多的種子值:每次添加種子時,我們都會為 PRNG 添加一些真正的隨機性。這顯然使計算更加昂貴;考慮 PRNG 的目的(效率是一個基本屬性)對於確保它不比直接選擇真正的隨機數更昂貴是很重要的。

引用自:https://crypto.stackexchange.com/questions/42484