web-dev-qa-db-ja.com

カーネルエントロピープールはどのように機能しますか?

私は、プログラムのランダムデータを生成するために_/dev/urandom_を使用しています。 _/dev/random_は、生成された十分なバイトがない場合、_/dev/urandom_とは異なり、SHAを使用しないため、空にできることを学びました。_/dev/random_は " カーネルエントロピープール "。どうやら、キーボードのタイミング、マウスの動き、およびIDEタイミングに依存しています。

しかし、これは実際にはどのように機能するのでしょうか。
そして/ dev/random出力を予測可能にするためにエントロピープールに「フィード」することは可能ではないでしょうか?

32
Antoninarto

あなたが言っているのはその場です。はい、理論的には/dev/randomにエントロピーを与えることは可能ですが、カーネルの「ノイズ」ソースの多くを制御して、それを重要にする必要があります。 random.c のソースを見て、/dev/randomがノイズを拾う場所を確認できます。基本的に、かなりの数のノイズソースを制御している場合は、他のソースがエントロピープールに寄与しているものを推測できます。

/dev/urandom/dev/randomからシードされた ハッシュチェーン なので、シードを知っていれば、実際に次の数値を予測できます。エントロピープールを十分に制御できる場合は、/dev/urandomの出力からこのシードを推測できる可能性があります。これにより、/dev/urandomからのすべての次の数値を予測できますが、 /dev/randomを使い切ってください。そうしないと、/dev/urandomが再シードされます。

とはいえ、管理された環境でさえ、実際にそれを行う人は見たことがありません。もちろんこれは保証ではありませんが、私は心配していません。

したがって、/dev/urandomを使用して、エントロピーの待機中にプログラムがブロックしないことを保証します。代わりに、/dev/randomを使用して、マウスを動かしたり、キーボード。

LWNの エントロピーとランダム性について を読んでみてください。うまくいけば、心配が落ち着くでしょう:-)。

それでも心配する必要がある場合は、 [〜#〜] hrng [〜#〜] を取得してください。

Editこれはエントロピーに関する小さなメモです:

エントロピーの概念は一般に理解するのが難しいと思います。 Wikipedia に関する詳細な記事があります。しかし、基本的に、この場合、エントロピーをランダム性として読み取ることができます。

だから私がそれを見ると、あなたは色のついたボールの大きな袋を持っていて、この袋のエントロピーが高いほど、袋から引き出される次の色を予測することが難しくなります。

このコンテキストでは、エントロピープールはランダムなバイトの集まりであり、1つを前のバイトから、または他のバイトから派生させることはできません。つまり、エントロピーが高いということです。

24
jbr

Jbrの回答の深さに感謝します。

空のエントロピープールでipsec pkiコマンドまたは同様のブロックを現在見ている人のための実用的な更新を追加します。

別のウィンドウにrng-toolsをインストールし、pkiコマンドを完了しました。

apt-get install rng-tools
3
jorfus

私は factorable で論文を読んでいる最中で、それが言っているセクションを書き留めました:

「ライブラリ開発者向け:デフォルトで最も安全な構成。OpenSSLDropbearはどちらもデフォルトで/dev/urandomの代わりに/dev/randomを使用し、Dropbearデフォルトより安全な手法がオプションとして利用可能であるとしても、安全性の低いDSA署名のランダム性手法を使用することは不可能です。」

著者は、エントロピーが/dev/randomを構築するためにエントロピーを待機している間にハングするアプリケーションのトレードオフに対処し、/dev/urandomによる迅速で安全性の低い結果よりも優れたセキュリティを取得します。

1
Mike