Linuxはユーザー空間に利用可能な2つの乱数発生器を持っている、/dev/randomと/dev/urandom。
/dev/random「真の」ランダム性のソースです。つまり、擬似乱数ジェネレーターによって生成されません。エントロピーは、関数add_input_randomnessとを介して、入力ドライバーと割り込みハンドラーによってこれに供給されadd_interrupt_randomnessます。このデバイスを読み取るプロセスは、エントロピーが不足するとブロックされます。
/dev/urandom疑似乱数ジェネレータです。と同じエントロピープールによって供給されます/dev/randomが、それがなくなると、暗号的に強力なジェネレーターに切り替わります。
ユーザースペースアプリケーションは、に書き込むことでエントロピープールにフィードできます/dev/{,u}random。
random(4)マニュアルページとdrivers/char/random.cカーネルソースツリーのファイルを読んでください。それはよくコメントされており、あなたが尋ねることのほとんどはそこで説明されています。
FreeBSDの/dev/randomデフォルトは、Yarrowアルゴリズムを使用した疑似乱数ジェネレータです(ただし、ハードウェアRNGが接続されている場合は、それを指すことができます)。ソフトウェアジェネレーターは、イーサネット接続、シリアル接続、およびハードウェア割り込み(を介して変更可能sysctl kern.random)からエントロピーを取得します。Yarrowアルゴリズムは、内部状態が不明である限り安全であると考えられているため、/dev/randomブロックせずに常に高品質のデータを出力する必要があります。random(4)を参照してください。
NetBSDでは、(ディスク、ネットワーク、入力デバイス、テープドライブから収集された、rndctlを使用して調整可能な)エントロピーのみに/dev/random基づいてランダムデータを提供しますが、Linuxと同様に、エントロピープールが空の場合はPRNGにフォールバックします。random(4)、rndctl(8)、rnd(9)を参照してください。/dev/urandom
OpenBSDには4つのジェネレーター/dev/randomがあります。ハードウェアジェネレーターで/dev/srandomあり、安全なランダムデータジェネレーター(エントロピープールでMD5を使用:「ディスクとネットワークデバイスの割り込みなど」)/dev/urandomですが、エントロピープールが空の場合はPRNGにフォールバックします。4番目の/dev/arandomもPRNGですが、RC4を使用しています。random(4)、arc4random(3)を参照してください。
Mac OS XもにYarrowアルゴリズムを使用しますが/dev/random、/dev/urandom互換性のために同様に機能します。「追加のエントロピーは、カーネルのランダムジッター測定からSecurityServerデーモンによって定期的にジェネレーターに供給されます。」random(4)を参照してください。