起動時の syslog メッセージ: 初期化されていない urandom 読み取り

起動時の syslog メッセージ: 初期化されていない urandom 読み取り

CPUは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)

これらのメッセージは具体的に何を意味するのでしょうか、また、どうすればいいのでしょうか?

から読み取ろうとしているddが、エントロピーが足りないということでしょうか?cryptsetup/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 内のメッセージは次の 2 つのスクリプトから取得されます。

/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

havegedが動作するには、カーネルと互換性がある必要があります。カーネルバージョン5.x以上ではhavegedが何もしないという問題があります。haveged はまだ有用/関連性がありますか? #57GitHub で。

メンテナーは親切にも機能を再導入してくれましたが、まずそれらのパッチをリリースし、さまざまなディストリビューションに組み込む必要があります...古いバージョンはまったく起動しないか、実行されていても実際には何もしません ( で確認してくださいstrace)。カーネルのエントロピー プールが不足していないようですが、何らかの理由で crng init にはまだ時間がかかります。

また、これは非常に早い段階で実行する必要があるため、initramfs を使用している場合は、ランダム デバイスを使用する前に、initramfs で haveged も開始する必要があります。従来の init システムでは、haveged は/proc /sys /dev利用可能になるとすぐに実行する必要があります。

haveged がカーネルにエントロピーを送信するのに正確にどのくらいの時間がかかるのかはわかりません... まず、haveged 自体でランダム性を収集する必要があり、それに対しても品質テストを実行します。前回のテスト (パッチを適用した haveged を使用) では、haveged の開始とカーネルのレポートの間に約 0.5 秒の遅延がありましたrandom: crng init done

haveged に加えて、ランダム シードの保存/復元も検討できます。また、ネットワークがある場合は、少しのトラフィックでカーネルがエントロピーを収集するのに役立つ場合があります。

関連情報