真正意義的隨機數生成器存在嗎?

據我目前了解,計算機生成的都是偽隨機數,大多根據系統狀態參數用演算法進行模擬。是否可以模擬出真正的隨機系統呢?


許多偽隨機數是說循環同餘隨機數。這種隨機數實際是一種序列,根據seed可以算出之後所有的隨機數字,而且在一定時間後會出現重複。因此有些編程語言的隨即函數,可以指定一個「種子」,如果種子一樣,出來的隨機序列一定是一樣的。但在分布上,他顯得隨機而平均。所以稱之為偽隨機數。一般編程語言,會是用當前時間戳作為隨機函數的第一個種子,以保證每次啟動程序隨機函數不至於產生一樣的序列。

基於系統外部狀態或物理上被認為隨機的狀態做出的隨機數,這種隨機數被認為是真隨機(實際強度如何還需要檢驗)。linux上,它是通過網路事件,鍵盤敲擊事件等物理上隨機的事件,收集一些隨機bit到熵池來產生隨機數。這個隨機生成函數可能因為熵池為空而等待,所以需要大量隨機數的情況下它會顯得很慢,但諸如產生證書之類的操作需要這種強度的隨機數。

貼幾個參考:

這篇文章的圖顯示了偽隨機的局限性,在局部看起來是隨機的,一旦規律出現就暴露了。

http://boallen.com/random-numbers.html

這裡有一個關於linux的/dev/random的介紹

http://en.wikipedia.org/wiki//dev/random

另一個是windows系統的CryptGenRandom函數

http://en.wikipedia.org/wiki/CryptGenRandom

這個被稱為Cryptographically secure pseudorandom number generator換言之,還是不能認為是個真隨機。不過這個被認為隨機性和不可預測性已經足夠好,可以被用來產生證書之類。

另外還專門有一個從事真隨機生成的公司,他們使用硬體,通過搜集大氣雜訊產生隨機二進位位來產生真隨機數。

http://www.random.org/


這個問題的等價命題是,這個世界存不存在真隨機。


讓初級用戶退出vi能得到真隨機字元


Stm32總有枚晶元中內置了隨機數,根據AD採集到的溫度產生隨機數。因為得到溫度中有熱雜訊,而且這種雜訊是隨機的,因此可以說通過這種硬體產生的隨機數是隨機的


不可能通過演算法實現。


真正意義上的真隨機數發生器,應該是量子真隨機數發生器,提取量子過程中的隨機性,這個是完全隨機的


Hardware random number generator


局部真隨機數應該是可以實現的。

簡單做法是電腦從一開機就記錄你擊鍵的頻率、滑鼠移動的路徑、你打開的網頁數據,甚至是電雜訊採樣,將這些數據揉合再和偽隨機數疊加即可。

更複雜的做法是有外部感應器感知溫度、光線、氣壓、氣流、聲音等變化,甚至內部有一個類似雙色球抽獎裝置的碰撞系統,將採集的數據和偽隨機數揉合即可得到真隨機數。

兩個方法都需要一個足夠大的數據池。簡單做法可以在不需要改變當前的電腦系統即可做到,複雜系統則需要添加複雜的數據採樣系統完成。


如果問的是純軟體的真隨機數,答案是沒有。計算機最大的特點就是狀態空間是固定的,所有的隨機數都是偽隨機數。

如果通過硬體來實現真隨機數,那自然界中有太多的物理規律是完全隨機的。量子熱運動就是一種典型的真隨機行為。一個pn結處於反向偏置的狀態下,內部的載流子會由於隨機的熱運動,穿過pn結的勢壘,導致電路中產生擊穿電流。這種狀態叫齊納擊穿。擊穿產生擊穿電流,這種電流由於載流子數量的隨機性,其頻譜表現為寬頻的白雜訊,通過良好設計的電路,使得可以從0Hz到GHz的區域都是等功率的。

下圖中VT2的發射極-基極就處於反向偏置,經過寬頻帶放大器,可以在數百MHZ的帶寬內產生功率密度為平坦直線的白雜訊。

把上述電路的輸出進行AD轉換就可得到真隨機數。


從某種角度來說,如果傳入的系統狀態參數是個「真正」的隨機值,我覺得演算法產生的結果應該也可以認為是隨機的。例如通過感知周圍環境濕度和噪音,當前CPU的精確頻率和溫度等。


儘管世界上還有很多東西的變化,科學還不能研究透其規律(比如原子的運動)。但是對於大多數東西,都是有規律可言的,都是特定的外力綜合作用的結果。

「隨機」這個概念的提出,本身就是為了解決外力來源還未知,或者不方便研究其外力的問題。

既然「隨機」不是實際存在的,自然也沒有實際存在的「隨機」。


對於隨機數這個問題,千萬不能過於追究,因為目前為止,我們並不知道這個世界是否是隨機的,有一種假設是,這個世界上任何一件事情的發生都是由外部參數導致的結果

拿扔硬幣來說,誰能說,扔硬幣的結果不是由力度,風速,地面形狀,硬幣形狀,甚至空氣溫度,濕度這些造成的呢?然後,力度,風速這些條件又是隨機的嗎?當然不是,這些也是由其他的參數值導致的結果,那麼最終,這個世界所發生的一切都是由一些值產生的結果

如果真的是這樣,那麼這個世界就並非隨機的,至於可不可以預測,那只是要看預測者的運算能力是否足夠強大到可以把一切參數考慮進去

如果運算能力足夠強大,那麼它可能在地球誕生之初就能計算出樓主今天發的這個帖子,以及發帖子前所做的所有測試產生的隨機數

包括在量子力學領域在內,沒有任何事件的發生跟外部參數完全無關,那麼,世界怎麼可能是隨機的?


量子計算


最近在研究 nRF51822 這款低功耗藍牙晶元,裡面就有隨機數生成器。

The Random Number Generator (RNG) generates true non-deterministic random numbers based on internal thermal noise.

按照描述,它是根據內部熱雜訊生成的真隨機數。


如果想生成1024以內的隨機數,就找九個薛定諤的盒子排成一排,放九隻貓進去,貓死了記為0,活著記為1,然後用二進位算一下。。

畢竟是量子級別的隨機,應該是真的隨機吧。。。


RANDOM.ORG - True Random Number Service

Random.org - Wikipedia

它聲稱它使用大氣雜訊作為隨機數的種子,以實現生成真隨機數的效果。


我看了上面的回答。提點自己的想法,我覺得真的隨機數應該是自我實現的隨機。它本身就可以就是真的隨機的。任何種子的隨機都不是隨機。因為它的開始不是隨機的,只要有人掌握控制了這個種子,其結果就不隨機了。真實的隨機必須是無法控制的。超出人類的能力範圍的,必須從根上無法被人控制影響。


存在,但很難說服願意相信決定論的人們。

希望以後不要邀請我回答這種已經被充分回答過的問題,已經有很好答案的情況下再重複一樣的內容沒有什麼建設性,謝謝。


無窮的計算力下,宇宙能積分嗎?


隨機數分為真隨機數和偽隨機數。我們計算機用演算法產生的都是偽隨機數,真隨機數一般以物理過程產生。

例如利用熱雜訊產生的隨機數發生器。如果你認可量子力學,那量子隨機數發生器(Quantum Random Number Generator)是真正的隨機的。

還有最近比較熱的利用星體(尤其是類星體)產生的光源作為隨機源產生的隨機數。


推薦閱讀:

最小二乘、極大似然、梯度下降有何區別?
人工智慧(AI)是如何處理數據的?
如何通俗理解beta分布?
從[0,1]區間內任取一點,取到任意一點的概率都是0嗎?
從所有有理數中隨機抽取一個,抽中是整數的概率是多少?為什麼呢?

TAG:數學 | 統計學 | 計算機科學 |