web-dev-qa-db-ja.com

Linuxカーネルが使用するエントロピーソースは何ですか?

_man 4 random_には、Linuxカーネルエントロピーソースの非常にあいまいな説明があります。

乱数ジェネレーターは、デバイスドライバーやその他のソースからの環境ノイズをエントロピープールに収集します。

論文 Linux Random Number Generatorのエントロピー転送 もそれほど具体的ではありません。それはリストします:

  • add_disk_randomness()
  • add_input_randomness()
  • add_interrupt_randomness()

これらの機能は _random.c_ からのもので、次のコメントが含まれます。

環境からのランダム性のソースには、キーボード間タイミング、一部の割り込みからの割り込み間タイミング、および(a)非決定的であり、(b)外部の観測者が測定するのが難しい他のイベントが含まれます。

さらに下には、ハードウェア乱数発生器のサポートを示す関数add_hwgenerator_randomness(...)があります。

これらの情報はすべてあいまいです(または、ソースコードの場合、理解するにはLinuxカーネルの深い知識が必要です)。 実際に使用されるエントロピーソースは何ですか?また、Linuxカーネルは標準でハードウェア乱数ジェネレーターをサポートしていますか?

14
Jens Erat

最近のほとんどのPCのハードウェアには、乱数ジェネレータが搭載されています。 VIA半導体は長年、それらをプロセッサに組み込んでいます; Linuxカーネルはそのためのvia-rngドライバを持っています。私は drivers/char/hw_random/ IntelおよびAMDハードウェア用のドライバーを含む最新のソースツリー内のディレクトリ、およびTPMデバイスを備えたシステム用のディレクトリ。 rngデーモン(rngd)を実行して、ランダムデータをカーネルエントロピープールにプッシュできます。

4
Chuck E

はい、そのままでハードウェアエントロピージェネレーターをサポートします。これは、1秒あたりに多数の同時接続が開始される高負荷のSSLサーバー(Gmail、Facebook、Microsoftなど)に必要です。これは、ホームサーバーや小規模な組織のサーバーには必要ありません。ハードウェアエントロピージェネレーターは通常PCIインターフェイスを使用することに注意してください。ファンシーは何もないので、簡単にサポートできます。とにかく、それほど難しくなく、(グラフィックスカードとは異なり)非常に収益性の高い業界ではないため、クローズドソースドライバーを必要とする独自のハードウェアエントロピージェネレーターがあるかどうかはわかりません。

http://en.wikipedia.org/wiki/Hardware_random_number_generator