web-dev-qa-db-ja.com

/ dev / randomのエントロピーが低いのは悪いことですか?

/ dev/randomにエントロピーが残っていないか、ほとんど残っていないことは、平均的なLinuxユーザーにとって、セキュリティまたはその他の関連する観点から見て、悪いと見なされているのでしょうか。

編集:乱数を生成する必要はありません(そのために/ dev/urandomを使用し、パスワードの生成とディスクの暗号化にも使用します)。ただの楽しみのために、/ dev/randomからランダムな文字列を生成するbashスクリプトがあります。もちろん、少し遊んだ後、/ dev/randomにエントロピーがなく、ブロックされます。 IRC私はそうすることは「悪い」と言われましたが、理由は何も与えられませんでした。平均的なLinuxユーザーが/ dev/randomを使用してランダムなものを自動的に生成するので悪いのですか?それで、どのプログラムが関与していますか?

/ dev/randomにエントロピーが残っていないため、数値の生成が確定的であることも理解しています。しかし、繰り返しになりますが、私のコンピューター(平均的なLinuxユーザー)は本当に乱数を必要としていますか?

編集2:約3分間、毎秒/ dev/randomでエントロピーレベルを監視しました。監視の開始時にランダムな文字列を生成するためにエントロピーを使用するbashスクリプトを起動しました。私は計画を立てました。確かに、エントロピーレベルが何らかの形で変動していることがわかります。そのため、私のコンピューター上の一部のプログラムは、/ dev/randomを使用してデータを生成しています。/dev/randomファイルを使用してすべてのプログラムを一覧表示する方法はありますか? Entropy level vs time(s)

エントロピープールが空になると、エントロピーの「許容レベル」が生成されるのに1分もかからないこともわかります。

エントロピーはかなり遅い速度で/dev/randomに供給されるため、/dev/randomを使用するプログラムを使用する場合、エントロピーが低くなるのはよくあることです。

Linuxのエントロピーの定義を信じていても、低いエントロピーはセキュリティの問題ではありません。 /dev/randomは、十分なエントロピーがあると確信するまでブロックします。エントロピーが低いと、マウスが小刻みに動くのを待っているアプリケーションが表示されますが、ランダム性は失われません。

実際、エントロピーのLinuxの定義には欠陥があります。それは、実際には役に立たない理論的なレベルのランダム性を達成しようとする非常に保守的な定義です。実際、エントロピーは使い果たされません。十分な量になったら、十分に使用できます。残念ながら、Linuxには乱数を取得するための2つのインターフェイスしかありません。ブロックするべきでないときにブロックする/dev/randomと、ブロックしないことのある/dev/urandomです。幸い、実際には /dev/urandomはほとんど常に正しい です。これは、システムが十分なエントロピーをすばやく収集するためです。その後、 /dev/urandomはいつまでも問題ありません(たとえば、暗号化キーの生成)

/dev/urandomに問題があるのは、システムがまだ十分なエントロピーを持っていないときだけです。たとえば、新規インストールの最初の起動時、ライブCDの起動後、または仮想マシンのクローン作成後などです。このような場合は、/proc/sys/kernel/random/entropy_availが200程度になるまで待ちます。その後は、/dev/urandomを好きなだけ使用できます。

エントロピーが残っておらず、それを知っていると、/dev/randomが確定的になります。これにより、他のプロセス(悪意のあるユーザーによって開始されたプロセスを含む)が/dev/randomからの将来の出力(つまり、読み取られたバイト)を「予測」できるようになります。

一方では、「真の」ランダム性を必要とする優れたLinuxプログラマーは random(4) を注意深く読んだでしょう read(2) from /dev/random whichエントロピーが利用できない場合はブロックされます。これは、そこからの読み取りプロセスを煩わしくする可能性があります。 (OPによるコメント付き) urandomに関する神話 ページも参照してください。

一方、一部のプログラマは/dev/urandomから読み取ることを好むため、ほとんどの場合十分であり、ブロックしません。 [〜#〜] gcc [〜#〜] のC++ 11標準ライブラリであるAFAIKは std :: random_device に対してそれを行っています。

明らかに、ランダム性は通常のデスクトップよりもサーバーでわずかに重要です。

あなたの質問が「これらの問題に気づくのに十分な[/dev/randomを使用しているLinuxプログラマーですか?」]になっている場合、それは意見の問題または投票になりつつあり、そのため、ここではトピックから外れる可能性があります。

私の意見では、プログラマは random(4) を読んでおく必要があります。

最近のIntelプロセッサには [〜#〜] rdrand [〜#〜] マシン命令があり、/dev/randomはそれをランダムソースとして使用しています。ですから、/dev/randomのエントロピーの欠如はそれらに影響を与えません(つまり、決して起こりません)。

つまり、/dev/randomのエントロピーの低さは気にしません。しかし、私はソフトウェア(たとえば、ポーカーサイト、一部の銀行システム)をコーディングしていません。そのようなシステムは、より良いランダムソース(IIRC、メガビット/秒の帯域幅を持つハードウェアランダムジェネレーターは数百ユーロの費用がかかります)を手に入れる余裕があり、ランダム性と確率に関する専門知識を持っている(またはコンサルタントを購入する)必要があると思います。

おそらく、READMEyourソフトウェアのドキュメントで、/dev/randomを使用していることを簡単に説明する必要があります。 /または/dev/urandom、目的、および独自のコードのランダム性の重要性を明示的に文書化します。