エントロピープールの私の現在の理解は、それが本当にランダムに収集されるということです。少しデータ転送速度が非常に遅い。 UnixとLinuxがエントロピーを収集する方法と、/dev/randomがそのエントロピーをどのように使用するかを知りたいです。
私は、「ランダムに」選択されたネットワークパケットが到着したときにグラフィックカードのCPU状態を一致させるなど、(一般的な)エントロピーを収集する方法、デジタル - アナログコンバータのヒース要因を一致させること、および他のより鈍感な方法について聞きました。
私は必要に応じてエントロピー「プール」が採掘され、擬似乱数発生器をシードするために使用されると信じています。
詳細な答えは望んでいませんが、これがUnix / Linuxで使用される一般的なアプローチであることを知りたいです。 ..そして、石炭の表面でエントロピーの収穫が実際にどのように見えるかについていくつかのヒントがあります。 .. その後、何入力のエントロピーですか? AES Rijndaelパスワードですか?
上記のコメントの背景情報は次のようになります。スティーブ・ギブソン今安全です!ポッドキャスト:エピソード301 Shuffle、2部中2部...彼は一般的な話だけです。 (しかし彼のスタイルもそうですが、私も彼を理解するのに十分な詳細と明確です。前の300のエピソードを聞くのが役立ちました。)、...これがUnix / Linuxのやり方なのかと思います。そうですか…
答え1
Linuxには、ユーザースペースに使用できる2つの乱数ジェネレータがあります/dev/random
。/dev/urandom
/dev/random
「真の」ランダム性のソースです。つまり、擬似乱数ジェネレータによって生成されません。入力ドライバと割り込みハンドラは、関数とadd_input_randomness
入力エントロピーを渡しますadd_interrupt_randomness
。エントロピーが使い果たされると、デバイスを読み取るプロセスがブロックされます。
/dev/urandom
擬似乱数ジェネレータです。と同じエントロピープールによって供給されますが、/dev/random
エントロピープールが使い果たされると、暗号化は強力なジェネレータに切り替わります。
ユーザー空間アプリケーションは、エントロピープールへの書き込みを介して入力できます/dev/{,u}random
。
読むランダム(4)マニュアルページとドキュメントdrivers/char/random.c
カーネルソースツリーから。よく見直され、あなたが尋ねるほとんどの質問がそこに説明されています。
FreeBSDは、/dev/random
基本的にYarrowアルゴリズムを使用する擬似乱数ジェネレータです(ただし、接続されている場合はハードウェアRNGを指すことがあります)。ソフトウェアジェネレータは、sysctl kern.random
ハードウェア割り込みだけでなく、イーサネットとシリアル接続からエントロピー(変更可能)を取得します。内部状態がわからない限り、Yarrowアルゴリズムは安全であると見なされるため、/dev/random
常にブロックせずに高品質のデータを出力する必要があります。バラよりランダム(4)。
NetBSD は、/dev/random
以下に基づいてランダムなデータを提供します。ただ収集されたエントロピー(ディスク、ネットワーク、入力デバイス、および/またはテープドライブでは、以下を使用して利用可能)rndctl)、/dev/urandom
Linuxと同様にエントロピープールが空の場合、PRNGに置き換えられます。バラよりランダム(4)、RNDCTL(8)、研究グループ(9)。
OpenBSDには、/dev/random
ハードウェアジェネレータ、セキュリティランダム/dev/srandom
データジェネレータ(エントロピープールでMD5を使用する:「ディスクとネットワークデバイスの中断など」)の4つのジェネレータがあります。/dev/urandom
同様ですが、エントロピープールが空の場合はPRNGに置き換えられます。 4番目のもの/dev/arandom
もPRNGですが、RC4の使用。バラよりランダム(4)、アーク4ランダム(3)。
Mac OS XもYarrowアルゴリズムを使用します/dev/random
が、/dev/urandom
互換性の動作原理は同じです。 SecurityServerデーモンは、カーネルのランダムジッタ測定に基づいて、ジェネレータに定期的に追加のエントロピーを供給します。ランダム(4)。