/ dev / randomデータは疑似ランダムAES暗号であり、エントロピーはどこから来るのですか?


8

エントロピープールについての私の現在の理解は、本当にランダムなデータのビットを低速で収集することです。UnixとLinuxがエントロピーを収集する方法と、そのエントロピーが/ ​​dev / randomでどのように使用されるかについて知りたいのですが。

「ランダムに」選択されたネットワークパケットが到着したときのビデオカードのCPUのステータス、デジタルアナログコンバーターのヒスファクターと照合されるエントロピー収集方法、およびその他のさらに鈍い方法について(一般的に)聞いたことがあります。

エントロピー「プール」は必要に応じてタップされ、疑似ランダムジェネレーターのシードに使用されると思います。

私は詳細な回答を求めていませんが、これがUnix / Linuxで使用されている一般的なアプローチであるかどうかを知りたいと思います。 ..次に、供給されるエントロピーはですか。AES Rijndael暗号ですか?

上記の私の背景の情報は、Steve GibsonのSecurity Nowからのものです。ポッドキャスト:エピソード#301ランダムに行く、パート 2/2 ...彼は一般的にしか話せませんでした(ただし、彼のスタイルと同様に、私も彼を理解できるように十分な詳細と明快さで話しています。 ...そして、これがUnix / Linuxでどのように行われているかを知りたい...


回答:


14

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)を参照してください。


ありがとう。良い概観、そしてソースから、ツイストの一般化されたフィードバックシフトレジスタ(怖いもの)の手で安全であることがわかります...プールへの鈍い「ランダム」入力に加えて、SHAハッシュは"プール全体で一度に16ワード(512ビット)"が生成され、プールにミックスバックされ、さ​​らにいくつかの旋回がプールで実行されます...スティーブギブソンは彼のポッドキャストでコメントします:SHA-256は/私たちが持っている最強の最先端ハッシュです。... / dev / urandom出力を生成するものは発見できませんでしたが、リードアッププロセスは確かに重要です
Peter.O

+1、良い答え。私はかつてランダムな文字データを生成しようとしたcat /dev/randomが、なぜ多くの文字の後にストリームが停止したのか疑問に思っていた
Mike Pennington
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.