/dev/random
十分なエントロピーを提供する方法はありますか?データが完全にランダムである必要はありません。つまり、pidに時間を追加し、ここに27を追加できます。気にしません。より速く実行したいだけです。
私はボールを転がそうとしましたdd if=/dev/zero of=/dev/null
。予測できないブロック電話を受けないように人工的にadd_keystroke_randomness
餌/linux/random.h
をやる方法がないかどうか疑問に思いました。/dev/random
つまり、速度のためにランダム性をある程度犠牲にする意向があります。
PS - 使用を提案しないでください。/dev/urandom
答え1
エントロピーを生成する方法にはさまざまなソリューションがあります。例えばhaveged
(私は自分自身について非常に満足しています)timer_entropyd
などaudio-entropyd
です。彼らは通常、最も頻繁に使用されるアプリケーションに十分なエントロピーを生成します/dev/random
。最大限に活用したい場合は、ハードウェアランダムマイザー(USBスティックとして使用可能)もあります。おそらくあなたが思うよりも少ないエントロピーを生成します...
それにもかかわらず、/dev/urandom
これはデータが即座に必要なときに常に良いオプションです。
大容量データ(ハードドライブの上書きなど)の場合、使用可能なエントロピーに関係なく、任意のデバイスは速度に関しては適していません。このようなPRNGベースのソリューションは、shred
実際にはより良く、より高速です。
答え2
(私の答えはLinuxに適用されます。一般原則は他のUNIXバリアントに適用されますが、random
/urandom
違いには適用されません。)
これはすでにカーネル内で起こっています。
追加のエントロピーを注入することは決して悪くありません。疑似乱数バイトが多い場合は、それを作成すると/dev/random
エントロピープールに混在します。
ハベグ追加エントロピーを収集する人気のあるプログラムです。
dd if=/dev/zero of=/dev/null
ハードウェアI / Oを発生させないため、エントロピーを追加しません。キー入力には少量のエントロピーが含まれています。
Linuxでこの記事を読んでいるのなら、/dev/random
間違っています。 Linuxデザイナー間違っている:彼らはエントロピーが急速に枯渇していると主張しています。しかし、実際にはそうではありません。。 「遮断」に対する解決策は、/dev/random
「エントロピーをさらに注入すること」ではなく、「適切な装備を使用すること」だ。聞きたいかどうか、あなたは読まなければなりません/dev/urandom
。
答え3
カーネルバージョンに応じて、Linuxはadd_disk_randomness()
、add_input_randomness()
およびをadd_interrupt_randomness()
エントロピーソースとして実装します。これらのイベントは、ディスクI / Oイベント、キーボードおよびマウスイベント、割り込み(IRQ)イベントに対応します。正確な実装については、Random.cを参照してください。これらのソースは内部的に調整、混合、保存され、ブロックおよび非/dev/random
ブロック/dev/urandom
ドライバにデータを提供するために使用されます。この場合、非ブロックとは、/dev/urandom
エントロピープールにエントロピーがない場合でも、呼び出しが常に出力を生成することを意味します。可能性はリーンですが、/dev/urandom
使用すると、低いエントロピーシードと予測可能な決定的RNGが発生する可能性があります。これにより暗号化が壊れる可能性があり、RSAは特に低いエントロピー条件に対して脆弱です。したがって、暗号化に使用しないでください/dev/urandom
。ただし、ブートタイム/dev/urandom
エントロピーはヘッドレスシステムで常に問題となり、正しく機能するには追加のエントロピーソースが必要です。
ブートエントロピーの欠如を解決する最も簡単な方法は、経由で有効にするRdRand
(またはRdSeed
)hw_rand
ことですが、これを行うにはIntel(および現在のAMD)ブラックボックスの実装を信頼する必要があります。 QorlQを使用する場合、同じSEC機能があります。
あるいは、ソフトウェアの真の(?)乱数ジェネレータを実装することもできます。私の提案はCPU時間ジッタよく文書化されており、既存のシステムとの統合が容易であるため、Stephan Mullerが設計しました。最大エントロピーの結果を得るには、最適化なしでコンパイルする必要があることに注意してください。