/dev/random と /dev/urandom を使用する場合

/dev/random と /dev/urandom を使用する場合

/dev/randomまたはを使用する必要がありますか/dev/urandom

どのような状況で他のものよりも1つを好むか?

ベストアンサー1

長い話を短く

/dev/urandom最も実用的な目的で。

より長い答えは、実行しているUnixの種類によって異なります。

Linux

歴史的に、/dev/random彼らは/dev/urandom同時にリリースされました。

@DavidSchwartzが指摘したようにコメントから/dev/urandomほとんどの場合好ましい。彼と他の人は素晴らしい作品へのリンクも提供しています。に関する神話/dev/urandom追加の読書におすすめの記事です。

簡単に言うと:

  • これマンページ誤解を招く事があります。
  • 両方作った人同じ CSPRNGランダム生成(図2と図3)
  • /dev/randomエントロピーが使い果たされるとブロックされるため、読み取りは/dev/randomプロセスの実行を停止する可能性があります。
  • エントロピーのサイズは保守的に推定されますが、計算には含まれません。
  • /dev/urandom絶対にブロックしないでください。
  • まれなケースですが、開始直後、CSPRNGエントロピーが不十分で、適切に播種できず、高品質/dev/urandomのランダム性が得られない可能性があります。
  • CSPRNGが最初に正しくシードされた場合、エントロピーが低いことは問題になりません。
  • CSPRNG は継続的に再シードされます。
  • Linux 4.8以降では、/dev/urandomエントロピープール(by /dev/random)は枯渇しませんが、アップストリームCSPRNG出力が使用されます。
  • 使用/dev/urandom

ルールの例外

Cryptozoology スタック交換にLinuxで/dev/randomoverを使用する必要がある場合/dev/urandom @otus2つのユースケースが提供されています。:

  1. 低エントロピーデバイスから起動した直後に、適切なシードに十分なエントロピーが生成されない場合/dev/urandom

  2. 情報理論的セキュリティによる使い捨てパッドの作成

(1)が気になると、利用可能なエントロピーの確認/dev/random

(2)をやってみるとご存知ですよ:)

注:次のことができます。/dev/randomブロックから読み取られていることを確認してください。しかし、可能な競争条件に注意してください。

代替案:両方を使用しないでください!

@otusも指摘しました。getrandom()/dev/urandomシステムは、初期シードエントロピーが利用できない場合にのみ読み取りおよびブロックします。

持つ/dev/urandom使用問題の変更getrandom()/dev/xrandomただし、それに基づいて新しいデバイスを作成することも可能ですgetrandom()

アップルシステム

気にしないから ウィキペディアは言う:

macOSは160ビットを使用します。トッププールSHA1に基づいています。 /dev/randomと/dev/urandomの間に違いはありません。どちらも同じように動作します。 AppleのiOSもYarrowを使用しています。

FreeBSD

気にしないからウィキペディアは言う:

/dev/urandomリンクがある/dev/random場合は、正しくシードされるまでブロックされます。

これは、ブート後にFreeBSDが無限の任意の利点ストリームを提供する前に、十分なシードエントロピーが収集されるのを待つのに十分スマートであることを意味します。

ネットワークBSD

適切な初期シーディングを確実にするために、/dev/urandomシステムが少なくとも1回読んだと仮定してを使用してください。/dev/random

これrnd(4) マンページには次の内容があります。:

/dev/urandom絶対にブロックしないでください。

/dev/random時にはブロックされます。システム状態が予測可能であることがわかっている場合、起動時に早期にブロックされます。

/dev/urandomアプリケーションは、シミュレーション用の暗号化キーやシードなど、ランダムに生成されたデータが必要な場合に読み取る必要があります。

システムは、インターネットとの通信や /dev/random予測可能な鍵の生成を避けるために暗号化が必要なサービスを実行する前に、最初から少なくとも一度は賢明に読み取れるように設計する必要があります。

おすすめ記事