web-dev-qa-db-ja.com

OpenSSLキー生成のランダム性のソースとしてUSB TRNGを使用する

idquantique TRNG(USB) があります。私のDebianマシンでは、ランダムなコンテンツで満たされたTRNGからディスクにファイルを簡単に作成できます。

OpenSSLとGnuPG(例えばキー生成用)がそのTRNGの出力をランダム性のソースとして使用するようにすることは可能ですか?

さらに良いのは、これらのツールが元のランダム性ソース(/dev/randomと思います)そしてTRNGソース?

このTRNGを完全に信頼することはできません(特に、そのドライバーがオープンソースではないためです)。

最後のアイデアの背後にある目的は、最良の場合(私のTRNGが実際には真のRNGであり、バックドアの種類がない場合)でランダム性をより良くしようとすることです。 TRNGには、出力を予測可能にするいくつかのバックドア(繰り返しパターンなど)があります。

4
daweed

/dev/[u]randomを使用するには、ハードウェア乱数ジェネレーターのエントロピーを供給し、使用したいランダムビットのコンシューマーで使用します(OpenSSLもこれらのインターフェイスに依存します)。簡単な方法は、単純に入力を/ dev/randomにパイプすることですが、これはエントロピーカウンターを増加させません(そのためにはドライバーがエントロピーソースとして登録する必要があります)。

カーネルは、さまざまなソースからのエントロピーを混合します。キーボードとマウスの入力による割り込み、ネットワークとハードドライブのタイミングなど...ハードウェアの乱数ジェネレーターを追加すると、これらすべてのソースからのエントロピーが混合されます。結局、定数が加算された乱数は依然としてランダムなままであるため、ハードウェア乱数ジェネレーターが完全に事前に決定されていても、乱数ジェネレーターが壊れることはありません。

少なくとも、他のソースからの十分なエントロピーが追加されたらすぐに:推測可能な乱数が発生する可能性があるのは、乱数プールが他のソースからの十分なエントロピーを持たない直後のみです。

30分講義をご覧になることを強くお勧めします 単純なエントロピーの単純な現実-またはどのようにして心配をやめ、不思議を愛することを学んだか Chaos Communication Congress 2015で開催されました。数値ジェネレーターは、エントロピーのさまざまなソースを混合します。また、/dev/randomとそのランダムビットカウンターをあまり気にする必要がない理由についても説明し、代わりに/dev/urandomを使用します。

2
Jens Erat

起動エントロピーが不十分な場合、致命的な暗号エラーが発生する可能性があります-読み取り マイニングPs and Qs:Detection of Widespread Weak Keys in Network Devices 。ただし、疑わしい可能性のあるエントロピーソースを信頼することは、不十分なエントロピーをわずかに改善するだけであり、システムを危険にさらす可能性のある一連の人々を減らすだけです。幸いなことに、そこにはオープンソースソフトウェアのみのエントロピージェネレーターがあります。そのうちの1つは、Stephan Mullerによる CPU Time Jitter です。

しかし、SSDを備えたヘッドレスシステムがない場合、なぜ/ dev/[u] randomが適切なエントロピーを生成していないと思いますか?ほとんどの場合、最新のLinuxカーネルで十分です。

0
Kirill Sinitski

@ this.joshおよび 同様の質問に対するこれらの応答 が示唆するように:コマンドrngd -r /dev/deviceIdを使用すると、エントロピープールに供給する新しいソース(多くの場合、ハードウェアデバイス)を追加できます。

エントロピーソースが不十分な場合の/dev/random/dev/urandomの主な違いは、それぞれブロック動作または非ブロック動作であるためrngd makeを使用してデバイスをエントロピープールに追加します/dev/random新しい接続デバイスにバックドアがある場合、安全性が低下しますか?

言い換えると、rngd/dev/randomを完全に信頼して、他のソース(ネットワーク、マウス、キーボードなど)からの十分なエントロピーを待機しないようにブロックしませんしたがって、その出力がコンピューターで使用可能なすべてのエントロピーソースの混合になるのを防ぎますか?その場合、他のすべてのエントロピーソースが十分なエントロピーを作成しなかったときに問題になる可能性がありますたとえば、私のプログラムがキーペアを生成するために/dev/randomを呼び出したちょうどその瞬間に、量子ジェネレーターは(常にランダムな出力を生成するため)実行しました。量子ジェネレーターの繰り返しパターンを知っている攻撃者は、「出力はシステムで利用可能なすべてのエントロピーソースの混合ではなかったため、その時点で使用されているランダムな数値。

0
daweed