/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/random
16バイトが解放され、エントロピープールが設定されるのを待ちます。それから/dev/urandom
。