エントロピーが利用可能であることを平易な英語で説明する


28

Ubuntuでこのコマンドを実行した場合

sudo cat /proc/sys/kernel/random/entropy_avail

カーネルが使用できる「エントロピー」の量を示す数値を返しますが、それは私が知っているすべてです。このエントロピーはどの単位で測定されますか?それは何のために使われますか?その数値が「低い」場合、「悪い」と言われました。「低」はどのくらい低いのか、そうであればどのような「悪い」ことが起こるのか?それがであるための良い範囲は何ですか?どのように決定されますか?

回答:


22

システムは、ネットワークアクティビティ、ハードウェア乱数ジェネレーター(使用可能な場合。たとえば、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に半乱数をシャベルしました。


19

根本的な問題のより簡単な概要が必要な場合:一部のアプリケーション(暗号化など)には乱数が必要です。アルゴリズムを使用して乱数を生成できますが、これらはある意味ではランダムに見えますが、別の意味では完全に予測可能です。たとえば、数字58209749445923078164062862089986280348253421170679を指定すると、かなりランダムに見えます。しかし、実際にそれらがPIの数字であることに気付いた場合、次の数字が8になることがわかります。

一部のアプリケーションではこれで問題ありませんが、他のアプリケーション(特にセキュリティ関連のもの)では、予測不可能なアルゴリズム(プログラムなど)で生成できない真の予測不可能なランダム性が求められます。これは、コンピュータが本質的という問題であるプログラムなので、どのようにそれはおそらく本物の乱数を得ることができますか?答えは、外界からの真にランダムなイベントを測定することです。たとえば、キー入力間のギャップを使用し、それを使用して、予測可能な乱数ジェネレーターに真のランダム性を注入します。「エントロピープール」は、キーストローク(または使用されているもの)によって構築され、乱数の生成によって排出されるこのランダム性のストアと考えることができます。


2
良い説明
...-プラディプタ

しかし、PIは非合理的であり、上記のシーケンスに続いて9(8ではなく)を含むすべてのシーケンスが含まれます。
アジェイブラフマクシャトリヤ

9

エントロピーは「ランダム性」の専門用語です。コンピューターは実際にはエントロピーを生成しませんが、ハードドライブの回転速度の変動(摩擦などにより予測が非常に困難な物理現象)などを調べて収集します。コンピューターが擬似ランダムデータを生成する場合、マウスクリック、ハードドライブのスピン変動などを測定することで見つけた真のエントロピーを数式にシードします。大まかに言うentropy_availと、現在読み取り可能なビットの測定値です/dev/random

ノイズの多いダイオードなどのクールなハードウェアがない限り、コンピューターが環境からエントロピーを読み取るのに時間がかかります。

4096ビットのエントロピーを使用でき、/dev/randomさらにエントロピーを待つ間、ファイルがブロックする前に512バイトのエントロピー(4096ビット)を読み取ることができると期待できます。

たとえば、「cat /dev/random」の場合、エントロピーはゼロに縮小します。最初は512バイトのランダムガベージを取得しますが、停止し、少しずつランダムデータトリクルトラフが表示されます。

/dev/randomしかし、これは人々が操作する方法ではありません。通常、開発者は128ビットなどの少量のデータを読み取り、それを使用して何らかのPRNGアルゴリズムをシードします。/dev/random構築するのに時間がかかり、価値があると考えられているため、必要以上にエントロピーを読み取らないことは丁寧です。したがって、cat上記のようにファイルを不注意にtingすることでそれを排出すると、読み取りが必要な他のアプリケーションが/dev/randomブロックする原因になります。職場のあるシステムで、多くの暗号化機能が停止していることに気付きました。cronジョブが初期化を続けるPythonスクリプトを呼び出していることを発見しましたramdom.random()数秒ごとに実行される各実行で。これを修正するために、Pythonスクリプトを書き直し、1回だけ初期化されたデーモンとして実行され、cronジョブがXMLRPCを介してデータを読み取り、/dev/random起動時に読み取りを継続しないようにしました。


1
「これを修正するために、一度だけ初期化されるデーモンとして実行され、起動時に/ dev / randomから読み取りを続けないようにcronジョブがXMLRPCを介してデータを読み取るようにPythonスクリプトを書き直しました。」---引用した部分を除いて、スクリプトが実際にランダム性を必要としているかどうかが明確ではないため、評価するのは困難ですが、答えは非常に明確で明確です。
クレイグヒックス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.