wiki ページで説明されていなくても、理由の答えがどこにも見つかりませんでした。これは、PRNGを使用して別のPRNGをシードするように見えます。最初のものは (/ dev/random) それ自体がPRNGによってシードされる場合があります。
私はできます「理解」なぜthe-Rand
optionをキーの生成に直接使用することはできませんが、主なソースの理由がわかりません。多くの人が言う/dev/random
十分な出力を生成しません。つまり、デーモンによってエントロピーが供給されている場合、wrongになります。
彼らは考慮します/dev/random
高品質のソースではありませんか?
デバイスからのバイトの読み取りは厄介である可能性があり(システムコールの中断など、syscallの特殊性を考慮する必要があります)、潜在的に多くの小さなチャンクを読み取る場合は非効率的です。 (syscallには無視できないオーバーヘッドがあります)。 /dev/urandom
からのバイトを含むカスタムソフトウェアPRNGシードを使用すると、パフォーマンスをより詳細に制御できます。
(また、多少の [〜#〜] nih [〜#〜] シンドロームもここにあるかもしれません。)
一般に、提示されているランダムソースを直接使用しない理由は次のとおりです。
/dev/urandom
特に低エントロピー条件でブロックしないことを保証することで、出力が実際にランダムであることを保証できないため、特に信頼できません。マンページman 4 urandom
これに関する詳細情報があります。一部の政府機関がこの条件に基づいているかどうかにかかわらず、攻撃に対する謎めいた暗示を含みます。このデータに対して適合性テストを実行するか、エントロピーを集中させるために何らかの方法で変更するか、異なるソースを組み合わせることができます。有効な鍵のサイズの概念(鍵で暗号化された既知の項目が与えられた場合に鍵を解読するための最適なアルゴリズムの反復回数の2を底とする対数)も考慮してください。明らかに、有効なキーサイズよりも多くのエントロピーを消費することに目的はありません。そうすることで、エントロピープールが枯渇するだけです。
ファルコンの優れた答えに加えて:
[colin@localhost ~]$ time dd if=/dev/random of=/dev/null iflag=fullblock count=10 bs=32
10+0 records in
10+0 records out
320 bytes (320 B) copied, 32.0067 s, 0.0 kB/s
0.00user 0.00system 0:32.00elapsed 0%CPU (0avgtext+0avgdata 3104maxresident)k
0inputs+0outputs (0major+249minor)pagefaults 0swaps
[colin@localhost ~]$ time dd if=/dev/urandom of=/dev/null iflag=fullblock count=10 bs=32
10+0 records in
10+0 records out
320 bytes (320 B) copied, 0.000289421 s, 1.1 MB/s
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3072maxresident)k
0inputs+0outputs (0major+247minor)pagefaults 0swaps
/ dev/randomは非常にランダムかもしれませんが、非常に遅いです!