
我目前正在gpg --genkey
Linux 虛擬機器上進行測試。不幸的是,這個軟體似乎依賴於/dev/random
收集熵,並禮貌地要求用戶在加密隨機輸入屏幕後手動鍵入屏幕,因此它最終可能會生成密鑰,而且我發現沒有命令行參數可以告訴它使用另一個文件作為熵源(那傢伙在此影片中遇到同樣的問題...)。
但是,用戶應該可以自由選擇使用,/dev/urandom
因為沒有什麼問題。它主要是作為對較舊的 PRNG 演算法的回憶,從密碼學的角度來看,這些演算法較弱。例如,雖然NetBSD 線上說明頁承認這種差異在很早的啟動階段仍然有用,它描述了這樣的區別:“民俗學”和“僅防禦幻想威脅模型的想像理論”。沒有人同意該命令所需的熵量也沒有事實證明熵是實際消耗的東西,如GPG 線上說明頁(“請不要使用此命令,除非您知道自己在做什麼,它可能會從系統中刪除寶貴的熵!”)。
我讀過關於人們安裝rngd
守護程式並將其配置為用作/dev/urandom
供給的熵源/dev/random
,但我發現這種做法非常骯髒。
我嘗試以 FreeBSD 方式解決該問題,將/dev/random
其刪除並連結到/dev/urandom
:
rm /dev/random
ln -s /dev/urandom /dev/random
我認為這是一個設定“我相信/dev/urandom
作為熵源”。
我擔心我會遇到某種錯誤,但這似乎提供了預期的結果,因為命令現在立即成功返回。
我的問題是:/dev/random
在 Linux 系統上連結到/dev/urandom
FreeBSD 系統預設是否有任何已知的、實際的和錯誤的副作用?或者是否可以設想永久設定此設定(例如在啟動過程結束時的腳本中),以防由於/dev/random
鎖定某些服務而出現重複問題?
答案1
看關於烏蘭多姆的神話,沒有已知的對 /dev/urandom 的攻擊不會也是對 /dev/random 的攻擊。 Linux 系統的主要問題是當它克隆並作為多個虛擬機器運行時,克隆後沒有重置已儲存的熵池。這是一個與你想要的相切的極端情況。
答案2
有一件事不同的是,/dev/random
它在使用熵池後停止輸出。嘗試這個:
$ cat /dev/random
(a few short lines of gibberish)^C
$
/dev/urandom
但是將重複使用同一個池來繼續輸出。如圖所示:
$ cat /dev/urandom
(tons of gibberish fills the screen)^C
$
(當您嘗試捕獲這些特殊設備時,您的提示可能會混亂。只需鍵入reset
並輸入,您的終端就會恢復正常)
/dev/urandom
當您只需要用恆定的“隨機”位元流填充某些內容時使用。用於/dev/random
需要絕對隨機的密鑰。
答案3
在 Linux 中,/dev/random
提供高品質的隨機位元。它們的來源是不是可預測和不是可重複,在機器外部。相反,/dev/urandom
使用與(如果可用)相同的隨機數據/dev/random
,如果沒有,則使用偽隨機數產生器,即確定性的。對於大多數目的來說,它是足夠不可預測的,但是不是對於要求非常高的應用程式(如密碼學),更不用說用於創建長期有效的金鑰(如 GPG)。