/dev/random
と/dev/urandom
ファイルの違いを見つけようとしています。
/dev/random
と/dev/urandom
の違いは何ですか?/dev/random
を使用すると、いわゆるエントロピープールを使用するため、結果を待つ必要があります。この場合、ランダムデータは現時点では利用できません。
/dev/urandom
はユーザーが要求したバイト数を返すため、/dev/random
よりもランダムではありません。
Manページから読むことができます:
ランダム
読み取られると、
/dev/random
デバイスは、エントロピープール内のノイズの推定ビット数内のランダムバイトのみを返します。/dev/random
は、ワンタイムパッドやキー生成など、非常に高品質のランダム性を必要とする用途に適している必要があります。エントロピープールが空の場合、/dev/random
からの読み取りは、追加の環境ノイズが収集されるまでブロックされます。
urandom
/dev/urandom
デバイスからの読み取りは、さらなるエントロピーの待機をブロックしません。その結果、エントロピープールに十分なエントロピーが存在しない場合、返される値は、ドライバーが使用するアルゴリズムに対する暗号攻撃に対して理論的に脆弱です。これを行う方法の知識は、現在の未分類の文献では入手できませんが、そのような攻撃が存在する可能性は理論的には可能です。これがアプリケーションで問題になる場合は、代わりに/dev/random
を使用してください。
暗号化の目的では、返されるデータの性質のため、/dev/random
を実際に使用する必要があります。待機の可能性は、セキュリティのために許容できるトレードオフと見なされる必要があります、IMO。
ランダムデータfastが必要な場合は、もちろん/dev/urandom
を使用する必要があります。
常に/ dev/urandomを使用します。
/ dev/urandomと/ dev/randomは同じ乱数ジェネレーターを使用します。どちらも同じエントロピープールによってシードされます。両方とも、任意のサイズの等しくランダムな数を提供します。どちらも256ビットのシードのみで無限の乱数を生成できます。初期シードに256ビットのエントロピーがある限り、任意の長さの乱数を無限に供給することができます。/dev/randomを使用しても何も得られません。 2つのデバイスがあるという事実は、Linux APIの欠陥です。
エントロピーが心配な場合は、/ dev/randomを使用しても修正されません。ただし、/ dev/urandomよりもランダムに数値を生成しない一方で、アプリケーションの速度が低下します。また、エントロピーに関心がない場合、なぜ/ dev/randomを使用しているのですか?
常に/ dev/urandomを使用する必要がある理由については、次のとおりです。 http://www.2uo.de/myths-about-urandom/
/dev/random
と/dev/urandom
の違いは何ですか?
/dev/random
および/dev/urandom
は、カーネルの乱数ジェネレーターへのインターフェースです。
違いについては、オペレーティングシステムによって異なります。
/dev/random
からの読み取りがブロックされる場合があり、実際の使用はかなり制限されます/dev/urandom
は、/dev/random
への単なるシンボリックリンクです。いつ使うべきですか?いつ使用しないのですか?
/dev/random
ではなく/dev/urandom
を使用する必要があるユースケースを見つけることは非常に困難です。
ブロッキングの危険性:
/dev/random
を使用する場合に直面しなければならない本当の問題です。 ssh-keygen
のような単一の使用法では、数秒間待機しても問題ありませんが、他のほとんどの状況ではオプションではありません。/dev/random
を使用する場合、非ブロックモードで開き、目的のエントロピーがすぐに利用できない場合は、何らかのユーザー通知を提供する必要があります。セキュリティ:
/dev/urandom
はほとんどすべての実用的なケースで安全であると見なされます(たとえば、 ログインキーに対して/ dev/urandomのRandは安全ですか? および / dev/urandomに関する神話 )。
/dev/random
インターフェイスはレガシーインターフェイスと見なされ、/dev/urandom
はすべてのユースケースで優先され、十分です。ただし、初期ブート時にランダム性を必要とするアプリケーションは例外です。これらのアプリケーションでは、代わりにgetrandom(2)を使用する必要があります。これは、エントロピープールが初期化されるまでブロックされるためです。以下に推奨するようにシードファイルが再起動後に保存される場合(少なくともすべての主要なLinuxディストリビューションは2000年以降これを行っています)、出力はブートシーケンスでリロードされるとすぐにローカルルートアクセスなしの攻撃者に対して暗号的に安全であり、完全に適切ですネットワーク暗号化セッションキー用。
/dev/random
からの読み取りはブロックされる可能性があるため、ユーザーは通常、非ブロックモードで開き(またはタイムアウト付きで読み取りを実行)、目的のエントロピーがすぐに利用できない場合に何らかのユーザー通知を提供します。
推奨事項
一般的なルールとして、/dev/urandom
は、長期間有効なGPG/SSL/SSHキーを除くすべてに使用する必要があります。
/dev/urandom
を使用どちらも同じ暗号で保護された擬似乱数ジェネレーター(CSPRNG)から供給されます。 /dev/random
がエントロピーを待つ(または、より具体的には、システムのエントロピーの推定が適切なレベルに達するのを待つ)という事実は、計算とは対照的に、情報理論的に安全なアルゴリズムを使用している場合にのみ違いを生じます安全なアルゴリズム。前者には、ShamirのSecret SharingやOne-timeパッドなど、おそらく使用しないアルゴリズムが含まれます。後者には、AES、RSA、Diffie-Hellman、OpenSSL、GnuTLSなど、実際に使用して注意するアルゴリズムが含まれています。
したがって、/dev/random
の数字を使用しても問題ありません。CSPRNGから出力されるため、とにかく使用している可能性のあるアルゴリズムを「理論的には」破ることができます。
最後に、その「理論的に可能な」ビットはまさにそれを意味します。この場合、それは、アプリケーションをクラックするために宇宙が存在していた期間、世界のすべての計算能力を使用することを意味します。
したがって、/dev/random
を使用してもほとんど意味がありません
だから/dev/urandom
(を使う