古詩詞大全網 - 成語故事 - 為什麽說計算機(電腦)無法產生真正意義上的隨機數

為什麽說計算機(電腦)無法產生真正意義上的隨機數

首先,「真隨機」也有不同的含義,若想要「真正的真隨機」目測只能靠量子力學了。壹般的所謂真隨機不是指這個,而是指統計意義上的隨機,也就是具備不確定性,可以被安全的用於金融等領域,下面說的也是這種。

答案是,計算機系統可以產生統計意義上的真隨機數。

大部分程序和語言中的隨機數(比如 C 中的,MATLAB 中的),確實都只是偽隨機。是由可確定的函數(常用線性同余),通過壹個種子(常用時鐘),產生的偽隨機數。這意味著:如果知道了種子,或者已經產生的隨機數,都可能獲得接下來隨機數序列的信息(可預測性)。

直觀來想,計算機是壹種可確定,可預測的的設備,想通過壹行壹行的確定的代碼自身產生真隨機,顯然不可能。但是,我們或許可以迂回壹下……

實現方法簡單說就是軟硬結合,或者說,引入系統外的變量(把軟件,代碼,算法想象成壹個封閉的系統)。

壹個典型的例子就是 UNIX 內核中的隨機數發生器(/dev/random),它在理論上能產生真隨機。即這個隨機數的生成,獨立於生成函數,這時我們說這個產生器是非確定的。

具體來講,UNIX 維護了壹個熵池,不斷收集非確定性的設備事件,即機器運行環境中產生的硬件噪音來作為種子。

比如說:時鐘,IO 請求的響應時間,特定硬件中斷的時間間隔,鍵盤敲擊速度,鼠標位置變化,甚至周圍的電磁波等等……直觀地說,妳每按壹次鍵盤,動壹下鼠標,鄰居家 wifi 信號強度變化,磁盤寫入速度,等等信號,都可能被用來生成隨機數。

更具體的,內核提供了向熵池填充數據的接口:

比如鼠標的就是

void add_mouse_randomness(__u32 mouse_data)

內核子系統和驅動調用這個函數,把鼠標的位置和中斷間隔時間作為噪音源填充進熵池。

所以,結論是,程序和算法本身不能產生真隨機,但是計算機系統作為整體可以迂回產生統計意義上的真隨機。