/dev/random にディスク読み取りなどを入力する

/dev/random にディスク読み取りなどを入力する

十分なエントロピーでフィードする方法はありますか/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遅延なくデータを利用する必要がある場合には、常に良い選択となります。

膨大な量のデータ(ハードディスクの上書きなど)の場合、利用可能なエントロピーに関係なく、どのランダム デバイスも速度の点で適していません。does のような 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 による、十分に文書化された設計であり、既存のシステムと簡単に統合できるという理由から推奨されています。ただし、エントロピーの結果を最大化するには、最適化なしでコンパイルする必要があることに注意してください。

関連情報