で/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バイトを読み取ると、エントロピーは0に減少しますが、ブロックせずにさらに5バイトを読み取ることができます。次にdd
、エントロピーが64に達するまで再びブロックします。
entropy_availの正確な意味は何ですか?また、使用可能なランダムビットの実数を検出するにはどうすればよいですか?
entropy_avail
で使用可能なビット数を示すものではありません/dev/random
。これは、電力を供給するRNG状態でのカーネルのエントロピー推定を示します/dev/random
。そのエントロピー推定は、数学的に言えば、かなり無意味な量です。しかし/dev/random
、エントロピー推定が低すぎる場合、Linuxはブロックします。
/dev/random
の値/proc/sys/kernel/random/entropy_avail
が/proc/sys/kernel/random/read_wakeup_threshold
。より大きくなるまでブロックから読み取るプログラム。からの読み取りは、/dev/random
1バイトあたり8ビットの割合でエントロピーを消費します。
しかし、とにかくあなたはを使うべきではありません/dev/random
。/dev/urandom
暗号化キーの生成を含め、同様に安全で、ブロックされないを使用する必要があります。乱数の生成はエントロピーを消費しません。システムに十分なエントロピーがあれば、それは宇宙の寿命にとって良いことです。OSはRNGシードをファイルに保存するため、システムが一度十分なエントロピーを取得すると、再起動後も十分なエントロピーを取得します。
/dev/urandom
安全でない唯一のケースは、初めて起動する新しくインストールされたシステム、起動したばかりのライブシステム(ライブシステムから暗号化キーを生成することはお勧めできません!)、または新しく起動したシステムです。ハードウェアRNGまたは永続メモリのいずれも持たない起動された組み込みデバイス。このようなシステムで/dev/random
は、エントロピープールが構築されていることを確認するために、16バイトを出力することに同意するまで待ちます。次に、を使用します/dev/urandom
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加