為 GPG 密鑰添加“隨機數熵”?
在以下影片中:Linux HOWTO:使用 PGP 保護您的數據,第 2 部分,您將看到如何使用
gpg
. 在大約1:50
,講師說以下內容:在生成密鑰時,最好將滑鼠稍微移動一點,以便為密鑰對的創建提供更多隨機數熵。
在我看來,這似乎是一個神話,特別是因為命令行工具通常不應該受到游標的影響。另一方面,我不知道 Linux 的隨機數生成器是如何工作的,它是由 GUI 共享還是獨立於它。他聲稱的內容中是否有任何庫存,或者這是貨物崇拜程式的一個例子?
這有一定的道理,實際上比神話更真實,但該聲明反映了對正在發生的事情的根本誤解。是的,在使用 GPG 生成密鑰的同時移動滑鼠可能是個好主意。是的,移動滑鼠會產生一些熵,使隨機數隨機化。不,移動滑鼠不會使密鑰更安全。
所有適用於密碼學的優秀隨機生成器,Linux 屬於該類別,都有兩個組件:
熵必須來自電腦外部的來源。使用者是熵的來源之一。使用者所做的大多不是隨機的,但是擊鍵和滑鼠移動的精細時間是如此不可預測,以至於有點隨機——不是很隨機,而是一點一點地累積起來。其他潛在的熵源包括網路數據包的時間和攝像頭或麥克風的白雜訊。不同的核心版本和配置可能使用不同的源集。一些電腦具有基於放射性衰變或不太令人印象深刻的不穩定電子電路的專用硬體 RNG 電路。這些專用資源在嵌入式設備和伺服器中特別有用,它們在首次啟動時可以具有相當可預測的行為,而無需使用者做奇怪的事情。
Linux 通過兩種設備為程序提供隨機數:
/dev/random
和/dev/urandom
. 從任一設備讀取都會返回加密質量。兩個設備都使用相同的內部 RNG 狀態和相同的算法來轉換狀態並產生隨機字節。它們有特殊的局限性,這使得它們都不是正確的:
/dev/urandom
如果系統尚未積累足夠的熵,則可以返回可預測的數據。/dev/random
如果沒有足夠的熵,則計算可用熵和塊的數量。這聽起來不錯,只是計算是基於理論考慮,使得可用熵的數量隨著每個輸出位線性減少。因此/dev/random
往往會很快阻塞。Linux 系統將內部 RNG 狀態保存到磁碟並在引導時恢復。因此,熵從一個引導延續到下一個引導。Linux 系統唯一可能缺少熵的時候是它剛剛安裝的時候。一旦系統中有足夠的熵,熵就不會減少;只有Linux有缺陷的計算減少了。有關此考慮的更多解釋, read適合由專業密碼學家
/dev/urandom
生成密碼密鑰。見 aso你能解釋一下 random.c 中使用的熵估計嗎?移動滑鼠會增加系統的熵。但是gpg 只能從 中讀取
/dev/random
,而不是/dev/urandom
(解決此問題的一種方法是製作/dev/random
與 相同的 1:9 設備/dev/urandom
),因此它永遠不會有接收到不夠隨機的隨機數的風險。如果您不移動滑鼠,則鍵盡可能隨機;但可能發生的是 gpg 可能會在讀取時被阻塞/dev/random
,等待核心的熵計數器上升。