Boot

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

  • December 31, 2021

CPU 為AMD GX-412TC SOC

GX-412TC GE412TIYJ44JB 4 6W 2MB 1.0GHz/ 1.4GHz N/AN/A 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

syslog 中的消息來自以下兩個腳本:

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

應該haveged在開始之前urandom

我正在使用 Debian 10。

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

要讓 haveged 工作,它必須與您的核心兼容——在核心版本 >=5.x 中,haveged 沒有做任何事情是有問題的,看看haveged 是否仍然有用/相關?#57在 GitHub 上。

維護者很友好地重新引入了功能,但是必鬚髮布這些更新檔,然後首先將其放入各種發行版中……舊版本要麼根本無法啟動,要麼實際上不會做任何事情,即使它是執行(檢查strace),因為核心的熵池似乎不再缺少 - 但 crng init 由於某種原因仍然需要時間。

它還必須在很早的時候執行,所以如果您使用的是 initramfs,那麼您還必須在使用隨機設備之前的一段時間內開始使用 initramfs。在傳統的 init 系統中,haveged 應該在/proc /sys /dev可用時立即執行。

我不確定 hasged 需要多長時間才能將熵發送到核心……它必須首先自己收集隨機性,並且它也會對此進行一些質量測試。在我的最後一次測試中(使用已修補的 haveged),在啟動 haveged 和 kernel reporting 之間有大約半秒的延遲random: crng init done

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

您的診斷是正確的:嘗試對空熵池進行讀取。這是“啟動時熵飢餓”。

如果您有 EFI 系統,您可以利用 systemd-boot,忽略警告(您使用的是可預測的加密,但在大多數案例中,這仍然比沒有加密要好),或者嘗試從其他來源記入熵 -如果可用- 將其添加到核心命令行

rng_core.default_quality=X

(從 X=1000 開始,從那裡往下走)。

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

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

引用自:https://unix.stackexchange.com/questions/674569