エントロピーソースを無効にするにはどうすればよいですか?
これが私がやろうとしていることの背景です。USB経由でPCと通信する小さなRNGデバイスを構築しています。使用されるエントロピーの唯一のソースにしたいと思います。rngd
エントロピーのソースとしてデバイスを追加するために使用します。
簡単な答えは「あなたはしない」です。
エントロピーのソースを削除しないでください。乱数ジェネレーターの設計者は、新しいランダムビットが現在の状態と混ざり合うようにそれを装備しました。
エントロピーの複数のソースを持つことは、乱数ジェネレーターの出力を弱めることはなく、それを強化するだけです。
エントロピーの原因を取り除くと私が考えることができる唯一の理由は、それがあなたが余裕がないCPUまたは実時間の時間を浪費するということです。これは非常にありそうもないと思いますが、そうであれば、唯一の選択肢はカーネルハッキングです。カーネルのハッキングに関する限り、これはかなり単純なはずです。カーネルソースコード全体でadd_* _ randomness()関数へのすべての呼び出しをコメントアウトするだけです(関数自体はdrivers / char / random.cにあります)。関数の内容をコメントアウトすることもできますが、この場合は時間を節約しようとしているため、余分な関数呼び出しにかかる時間は非常に長くなる可能性があります。
1つの解決策は、仮想マシンで個別のLinuxインスタンスを実行することです。
追記、コメントするには大きすぎます:
設定によっては、rngdがカーネルのエントロピープールを支配する可能性があります。これは、非常に多くのデータをフィードするため、他のエントロピーソースがほとんど無視されるか失われることがよくあります。最終的にrngdのランダムデータのソースを信頼しない限り、そうしないでください。
高速なランダムジェネレータが必要かもしれません。
編集 私は質問をもっとよく読むべきだった
とにかく、カーネルモジュール用のfrandom
完全なtarballが付属しているので、USBデバイスを中心に独自のモジュールを構築する方法を学ぶことができるかもしれません。おそらく、/ dev / urandomを置き換え/置換して、/ dev / urandomの代わりに任意のアプリケーションが動作するようにすることもできます(もちろん、十分な権限があれば、デバイスノードの名前を変更してほとんどのアプリケーションを「だます」ことができます)。
あなたはそれを実装しているhttp://billauer.co.il/frandom.htmlを見ることができます。
- / dev / urandomでは不十分ですか?
- 1996年以降、より高速なカーネル乱数ジェネレーターの上昇と下降の必要性についての議論(私が知っていること)。私の意見では、/ dev/frandomは/dev/ zeroと同じくらい必要であり、これは単にゼロのストリームを作成するだけです。一般的な反対意見は通常言う:ユーザースペースでそれをしなさい。
- / dev/frandomと/dev/ erandomの違いは何ですか?
- 最初に私は/dev/frandomを書きました。次に、このスイートの利点の1つは、カーネルエントロピーを節約できることです。ただし、/ dev / frandomは、ランダムジェネレーターをシードするために、デバイスファイルが開かれるたびに256バイトのカーネルランダムデータを消費します(これにより、エントロピーが消費される可能性があります)。そこで、シードに内部ランダムジェネレーターを使用する/ dev/erandomを作成しました。frandomの「F」は「fast」を表し、「E」は「economic」を表します。/dev/erandomはカーネルエントロピーをまったく使用しません。
- どれくらい速いですか?
- コンピュータとカーネルのバージョンによって異なります。テストでは、/ dev / urandomよりも10〜50倍高速であることが一貫して示されています。
- それは私のカーネルで動作しますか?
- 2.6を超える場合は、おそらくそうなるでしょう。
- 安定していますか?
- 2003年秋に初期バージョンをリリースして以来、少なくとも100人がi686システムとx86_64システムで同様に(おそらくもっと多くの)それを試しました。成功したテストレポートが届き、苦情はありません。そうです、それは非常に安定しています。ランダム性についても苦情はありません。
- ランダムデータはどのように生成されますか?
- frandomは、安全であると見なされるRC4暗号化アルゴリズムに基づいており、SSLを含むいくつかのアプリケーションで使用されます。RC4の仕組みから始めましょう。キーを受け取り、疑似ランダムバイトのストリームを生成します。実際の暗号化は、このバイトストリームとクリアテキストデータストリーム間のXOR演算です。
- ここでfrandomに移ります。/dev/frandomが開かれるたびに、2048ビットのキーを使用して個別の疑似ランダムストリームが初期化されます。これは、/ dev/urandomからキーを読み取るのと同じことを行うことで選択されます。疑似ランダムストリームは、/ dev/frandomから読み取るものです。
- frandomは、ランダムキーを持つ単なるRC4であり、最終的にXORはありません。
- frandomは良い乱数を生成しますか?
- その起源のために、乱数はそれほど悪くはありません。もしそうなら、RC4は何の価値もありません。テストに関して:/ dev / frandomから直接「コピー」されたデータは、GeorgeMarsagliaによって開発された一連の「Diehard」テストでテストされました。すべてのテストに合格しました。これは良い兆候と見なされます。
- frandomを使用してワンタイムパッド(暗号化)を作成できますか?
- frandomは暗号化を目的としたものではなく、攻撃に特別な配慮もされていません。ただし、モジュールを攻撃する余地はほとんどなく、モジュールはRC4に基づいているため、次の事実があります。/ dev / frandomからのデータをワンタイムパッドとして使用することは、2048-でRC4アルゴリズムを使用することと同じです。ビットキー、/ dev/urandomから読み取ります。
結論:暗号化の目的でfrandomを使用することはおそらくOKです。しかし、しないでください。それは意図ではありませんでした。