/dev/random ブロックから読み取るかどうかを確認する方法

/dev/random ブロックから読み取るかどうかを確認する方法

/proc/sys/kernel/random/entropy_avail手順で使用できる桁数に関する情報が見つかりました/dev/random。次の読み取りがブロックされていることを確認したいと思います/dev/random。私の素朴なアプローチは必要なビット数を比較するだけですが、うまく機能entropy_availしません。簡単で愚かな実験をしてエントロピーが緩衝されるという事実に気づきました。 64ビットエントロピーバッファは6バイトのランダムデータを提供します。

entropy_avail次の簡単なコマンドで監視します。

while true; do
    cat /proc/sys/kernel/random/entropy_avail
    sleep 1
done

コマンドを介してランダムなバイトを取得しようとしています。

dd if=/dev/random bs=1 count=1 > /dev/null

ddエントロピーが63以下の場合、コマンドはブロックされます。エントロピーが64に達して1バイトを読み取ると、エントロピーはゼロに減少しますが、ブロックせずに5バイトをさらに読み取ることができます。次にddエントロピーが64に達するまで再度ブロックします。

entropy_avail使用可能なランダムビットの実際の数を検出する方法と正確な意味は何ですか?

ベストアンサー1

entropy_availで利用可能な桁数は表示されません/dev/random。これは、電源RNG状態のカーネルのエントロピー推定値として表されます/dev/random。数学的に言えば、エントロピー推定値はやや意味のない量です。しかし、/dev/randomエントロピー推定が低すぎると、Linuxはブロックされます。

プログラムは、inの値が大きくなる/dev/randomまでブロックからデータを読み取ります。読み取りはバイトあたり8ビットの速度でエントロピーを消費します。/proc/sys/kernel/random/entropy_avail/proc/sys/kernel/random/read_wakeup_threshold/dev/random

しかし、とにかく使用してはいけません/dev/random/dev/urandom、暗号鍵の生成を含む等しく安全、ブロックされません。乱数生成はエントロピーを消費しません。システムに十分なエントロピーがある場合は、宇宙の寿命の間に良いです。オペレーティングシステムはRNGシードをファイルに保存するため、システムに一度に十分なエントロピーがあると、再起動後も十分なエントロピーが得られます。

安全でない唯一の/dev/urandomケースは、新しくインストールされたシステム、起動したばかりのライブシステム(したがってライブシステムで暗号化キーを生成するのは良い考えではありません!)、または新しくブートされたシステムから初めて起動するときです。ハードウェアRNGまたは永久メモリを持たない電源投入された内蔵デバイス。これらのシステムでは、/dev/random16バイトが解放され、エントロピープールが設定されるのを待ちます。それから/dev/urandom

おすすめ記事