啟動時的系統日誌訊息:未初始化的 urandom 讀取

啟動時的系統日誌訊息:未初始化的 urandom 讀取

中央處理器是AMD GX-412TC SOC:

GX-412TC GE412TIYJ44JB 4 6W 2MB 1.0GHz/ 1.4GHz 不適用 DDR-1333 0-90°C

其中沒有rdrand

grep rdrand /proc/cpuinfo
# nothing

syslog我在機器啟動後看到以下訊息:

kernel: random: dd: uninitialized urandom read (512 bytes read)
kernel: random: cryptsetup: uninitialized urandom read (32 bytes read)

這些消息到底意味著什麼?

這是否意味著ddcryptsetup嘗試讀取/dev/urandom,但沒有足夠的熵?

我正在使用haveged守護程序,但它是在引導過程後期啟動的,在出現此訊息之後。

這是我的引導腳本啟動順序:

/etc/rcS.d/S01hostname.sh
/etc/rcS.d/S01mountkernfs.sh
/etc/rcS.d/S02mountdevsubfs.sh
/etc/rcS.d/S03checkroot.sh
/etc/rcS.d/S04checkfs.sh
/etc/rcS.d/S05mountall.sh
/etc/rcS.d/S06bootmisc.sh
/etc/rcS.d/S06procps
/etc/rcS.d/S06urandom
/etc/rcS.d/S07crypto-swap
/etc/rc2.d/S01haveged
/etc/rc2.d/S01networking
/etc/rc2.d/S04rsyslog
/etc/rc2.d/S05cron
/etc/rc2.d/S05ssh

系統日誌中的消息來自這兩個腳本:

/etc/rcS.d/S06urandom  -> dd
/etc/rcS.d/S07crypto-swap -> cryptsetup

應該haveged先開始urandom

我使用的是 Debian 10。

另外,我應該補充一點,這台機器是裸板,沒有鍵盤。唯一的接口是串行控制台。我認為這會對可用熵產生影響,這也是我haveged首先安裝的原因。如果沒有havegedsshd守護程序將在幾分鐘內不會啟動,因為它沒有足夠的熵。

答案1

您的診斷是正確的:嘗試在空熵池上讀取。這是 ”啟動時間熵飢餓」。

如果您有 EFI 系統,您可以利用 systemd-boot,忽略警告(您使用的是可預測的加密貨幣,但是在最多仍然比沒有加密更好的用例),或嘗試從其他來源記入熵 -如果可供使用的話- 將其新增至內核命令列

rng_core.default_quality=X

(從 X=1000 開始,然後從那裡向下)。

還有其他收集熵的技術; SOC 可能有一些可用的引腳,並且有硬體驅動程式模組允許從它們收集熵。然後只需連接一些合適的電晶體和電阻器設定(或在某些情況下,駐極體麥克風)即可收集一些熱雜訊。

或者,5.4+ 系列內核具有更有效的熵收集,這可能就足夠了。

答案2

為了讓 hasged 運作,它必須與你的核心相容——有一個問題,haveged 在 >=5.x 的核心版本中不執行任何操作,請參閱哈格德仍然有用/相關嗎?第57章在 GitHub 上。

維護者很友善地重新引入了功能,但必須發布這些補丁,然後首先將其放入各個發行版中......舊版本要么根本無法啟動,要么實際上不會做任何事情,即使它是正在運行(使用 進行檢查strace),因為內核的熵池似乎不再缺乏 - 但由於某種原因 crng init 仍然需要時間。

它還必須很早就運行,因此如果您正在使用 initramfs,那麼您也必須在使用隨機設備之前一段時間在 initramfs 中開始運行。在傳統的 init 系統中,haveged 應該在/proc /sys /dev可用時立即運作。

我不確定 hasged 到底需要多長時間才能將熵發送到核心......它必須首先自行收穫隨機性,並且還對其運行一些品質測試。在我的上一次測試中(使用已修補的haveged),啟動haveged和核心報告之間有大約半秒的延遲random: crng init done

除了 haged 之外,您還可以考慮保存/恢復隨機種子,如果您有網絡,一點流量也可能有助於內核收集一些熵。

相關內容