在 Linux 上將 /dev/random 連結到 /dev/urandom 是錯誤的嗎?

在 Linux 上將 /dev/random 連結到 /dev/urandom 是錯誤的嗎?

我目前正在gpg --genkeyLinux 虛擬機器上進行測試。不幸的是,這個軟體似乎依賴於/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/urandomFreeBSD 系統預設是否有任何已知的、實際的和錯誤的副作用?或者是否可以設想永久設定此設定(例如在啟動過程結束時的腳本中),以防由於/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)。

相關內容