Ubuntuでこのコマンドを実行した場合
Sudo cat /proc/sys/kernel/random/entropy_avail
カーネルが利用できる「エントロピー」の量を示す数値を返しますが、それだけです。このエントロピーはどの単位で測定されますか?何に使うの?その数が「少ない」場合は「悪い」と言われています。 「低い」とはどのくらい低いのか、それが「悪い」となるとどうなるのか。それがあるのに良い範囲は何ですか?どのように決定されますか?
システムは、さまざまなイベントを監視することにより、いくつかの「実際の」乱数を収集します:ネットワークアクティビティ、ハードウェア乱数ジェネレーター(利用可能な場合、たとえば、VIAプロセッサーには通常、「実際の」乱数ジェネレーターがあります) )など。カーネルエントロピープールにそれらをフィードする場合、/ dev/randomによって使用されます。極端なセキュリティを必要とするアプリケーションは、エントロピーソース、つまりランダム性ソースとして/ dev/randomを使用する傾向があります。
/ dev/randomが利用可能なエントロピーを使い果たすと、より多くのランダム性を提供できなくなり、アプリケーションは、より多くのランダムなものが利用可能になるまでランダム性のストールを待機します。私のキャリアの中で見た例は、Cyrus IMAPデーモンがランダム性のために/ dev/randomを使用したかったことと、そのPOPセッションが/ dev/randomからAPOP接続でランダムな文字列を生成したかったことです。忙しい環境では、/ dev/randomを供給するためのトラフィックよりもログインの試行回数が多くなり、すべてが停止しました。その場合、私はrng-toolsをインストールしてそれが持っていたrngdをアクティブにしました-/ dev/randomが「実際の」エントロピーを使い果たした場合に備えて、/ dev/urandomから/ dev/randomへと半乱数をシャベル表示しました。
根本的な問題のより簡単な概要が必要な場合:一部のアプリケーション(暗号化など)では、乱数が必要です。アルゴリズムを使用して乱数を生成できますが、これらはある意味でランダムに見えますが、別の意味では完全に予測可能です。たとえば、58209749445923078164062862089986280348253421170679の数字を与えると、かなりランダムに見えます。しかし、それらが実際にはPIの数字であることを理解すると、次の数字は8になることがわかります。
一部のアプリケーションではこれで問題ありませんが、他のアプリケーション(特にセキュリティ関連のアプリケーション)では、予測不可能な真のランダム性が求められます。これは、定義上予測可能なため、アルゴリズム(つまりプログラム)では生成できません。これは、お使いのコンピュータが本質的にプログラムisであるという問題です。どうすれば本物の乱数を取得できるのでしょうか。答えは、外界からの真にランダムなイベントを測定することです。たとえば、キープレス間のギャップを使用して、そうでなければ予測可能な乱数ジェネレータに真のランダム性を注入します。 「エントロピープール」は、キーストローク(または使用されているもの)によって構築され、乱数の生成によって排出されるこのランダム性のストアと考えることができます。
エントロピーは「ランダム性」の専門用語です。コンピューターは実際にはエントロピーを生成しませんが、ハードドライブの回転速度の変動(摩擦などにより予測が非常に困難な物理現象)のようなものを調べてエントロピーを収集します。コンピューターが疑似ランダムデータを生成しようとすると、マウスクリック、ハードドライブのスピン変動などを測定することで見つけた真のエントロピーを数式にシードします。大まかに言えば、_entropy_avail
_は、_/dev/random
_から現在読み取ることができるビットの測定値です
ノイズの多いダイオードなどのクールなハードウェアがない限り、コンピューターが環境からエントロピーを読み取るには時間がかかります。
利用可能なエントロピーが4096ビットあり、_/dev/random
_を猫にした場合、エントロピーを待つ間、ファイルがブロックする前に512バイトのエントロピー(4096ビット)を読み取ることができると期待できます。
たとえば、「_cat /dev/random
_」の場合、エントロピーはゼロに縮小します。最初は512バイトのランダムなガベージを取得しますが、それは停止し、少しずつランダムデータトリクルトラフが表示されます。
ただし、これは_/dev/random
_の操作方法ではありません。通常、開発者は128ビットなどの少量のデータを読み取り、それを使用してある種のPRNGアルゴリズムをシードします。_/dev/random
_からエントロピーを読み取らないようにしてください。ビルドするのにとても時間がかかり、価値があると考えられるため、上記のようにファイルを不注意にcat
tingしてドレインすると、他のアプリケーションが_/dev/random
_ toブロックから読み取る必要があります。動作中のシステムの1つで、多くの暗号化機能が機能しなくなっていることに気付きました。cronジョブがpythonスクリプトを呼び出して、実行ごとにramdom.random()
を初期化し続けていることを発見しました。これを修正するために、pythonスクリプトを書き直して、1回だけ初期化されるデーモンとして実行し、cronジョブがXMLRPCを介してデータを読み取るようにしました。起動時に_/dev/random
_から読み取ります。
読み取り専用ファイルentropy_availは、利用可能なエントロピーを提供します。通常、これは完全なエントロピープールである4096(ビット)になります。
詳しくは次のサイトをご覧ください http://linux.die.net/man/4/random