/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/random
overを使用する必要がある場合/dev/urandom
@otus2つのユースケースが提供されています。:
低エントロピーデバイスから起動した直後に、適切なシードに十分なエントロピーが生成されない場合
/dev/urandom
。
(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
/dev/urandom
絶対にブロックしないでください。
/dev/random
時にはブロックされます。システム状態が予測可能であることがわかっている場合、起動時に早期にブロックされます。
/dev/urandom
アプリケーションは、シミュレーション用の暗号化キーやシードなど、ランダムに生成されたデータが必要な場合に読み取る必要があります。システムは、インターネットとの通信や
/dev/random
予測可能な鍵の生成を避けるために暗号化が必要なサービスを実行する前に、最初から少なくとも一度は賢明に読み取れるように設計する必要があります。