解決策 1:
システムは、ネットワーク アクティビティ、ハードウェア乱数発生器 (利用可能な場合。たとえば、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 に半乱数をシャベルします。
解決策 2:
根本的な問題の簡単な概要が必要な場合:一部のアプリケーション (暗号化など) には乱数が必要です。アルゴリズムを使用して乱数を生成できますが、乱数はある意味ではランダムに見えますが、別の意味では完全に予測可能です。たとえば、数字 58209749445923078164062862089986280348253421170679 を指定すると、かなりランダムに見えます。しかし、これらが実際には PI の数字であることがわかっている場合、次の数字は 8 になることがわかります。
一部のアプリケーションではこれで問題ありませんが、他のアプリケーション (特にセキュリティ関連のアプリケーション) では、真の予測不可能なランダム性が必要です。これはアルゴリズム (つまりプログラム) によって生成することはできません。これは定義上予測可能であるためです。これは、お使いのコンピュータが本質的にあるという点で問題です では、どうすれば本物の乱数を取得できるのでしょうか?答えは、外界からの真にランダムなイベントを測定することです。たとえば、キープレス間のギャップを測定し、これらを使用して、予測可能な乱数ジェネレーターに真のランダム性を注入します。 「エントロピー プール」は、キーストローク (または使用されているもの) によって構築され、乱数の生成によって排出されるこのランダム性のストアと考えることができます。
解決策 3:
エントロピーは「ランダム性」の専門用語です。コンピュータは実際にはエントロピーを生成しませんが、ハード ドライブの回転速度の変化などを調べて収集します (摩擦などにより予測が非常に困難な物理現象)。コンピュータが疑似乱数データを生成する場合、マウスクリックやハードドライブのスピン変動などを測定することで発見された真のエントロピーを使用した数式。大まかに言えば entropy_avail
/dev/random
から現在読み取れるビット数です。
ノイズの多いダイオードなどのクールなハードウェアがない限り、コンピューターが環境からエントロピーを読み取るには時間がかかります。
4096 ビットのエントロピーが利用可能で、cat /dev/random
を実行した場合 ファイルがさらにエントロピーを待機している間にブロックされる前に、512 バイトのエントロピー (4096 ビット) を読み取ることができると期待できます。
たとえば、「cat /dev/random
」の場合 」 エントロピーはゼロに縮小します。最初は 512 バイトのランダムなガベージが得られますが、それが止まり、少しずつランダムなデータが少しずつ流れていくのがわかります。
これは /dev/random
を操作する方法ではありません けれど。通常、開発者は 128 ビットなどの少量のデータを読み取り、それを使用してある種の PRNG アルゴリズムをシードします。 /dev/random
からこれ以上エントロピーを読まないのは礼儀正しい 構築するのに非常に時間がかかり、価値があると見なされるため、必要以上に。したがって、うっかり cat
で排出してしまうと 上記のようにファイルを ting すると、他のアプリケーションが /dev/random
から読み取る必要があります。 封鎖する。作業中の 1 つのシステムで、多くの暗号化機能が停止していることに気付きました。 ramdom.random()
の初期化を続ける Python スクリプトを cron ジョブが呼び出していることがわかりました。 数秒ごとに実行される各実行で。これを修正するために、Python スクリプトを書き直して、一度だけ初期化するデーモンとして実行し、cron ジョブが XMLRPC 経由でデータを読み取って、/dev/random
から読み取り続けないようにしました。
解決策 4:
<ブロック引用>読み取り専用ファイル entropy_avail は、利用可能なエントロピーを提供します。通常、これは完全なエントロピープールである 4096 (ビット) になります。
詳細については、http://linux.die.net/man/4/random
を参照してください。