これには一片の真実があり、実際には神話よりも多くの真実がありますが、それにもかかわらず、この声明は何が起こっているのかについての根本的な誤解を反映しています.はい、GPG でキーを生成しながらマウスを動かすのは良い考えです。はい、マウスを動かすと、乱数がランダムになるエントロピーが発生します。いいえ、マウスを動かしてもキーがより安全になるわけではありません。
暗号化に適したすべての優れた乱数発生器 (Linux もそのカテゴリに含まれます) には、次の 2 つのコンポーネントがあります。
- 非決定論的なエントロピー ソース。エントロピーの目的は、乱数ジェネレーターを予測不可能なデータでブートストラップすることです。エントロピー ソースは非決定論的でなければなりません。そうしないと、敵対者が同じ計算を再現する可能性があります。
- 変化する内部状態から決定論的な方法で予測不可能な乱数を生成する疑似乱数ジェネレーター
エントロピーは、コンピューターの外部にあるソースから取得する必要があります。ユーザーはエントロピーの 1 つのソースです。ユーザーが行うことはほとんどランダムではありませんが、キーストロークとマウスの動きの微妙なタイミングは予測できないため、わずかにランダムです — それほどランダムではありませんが、少しずつ蓄積されます。エントロピーの他の潜在的な原因には、ネットワーク パケットのタイミングや、カメラまたはマイクのホワイト ノイズが含まれます。カーネルのバージョンと構成が異なると、異なるソースのセットが使用される場合があります。一部のコンピューターには、放射性崩壊に基づく専用のハードウェア RNG 回路、またはそれほど印象的ではありませんが不安定な電子回路があります。これらの専用ソースは、ユーザーが奇妙なことをしなくても、最初の起動時にかなり予測可能な動作をする組み込みデバイスやサーバーで特に役立ちます。
Linux は 2 つのデバイスを介してプログラムに乱数を提供します:/dev/random
そして /dev/urandom
.いずれかのデバイスから読み取ると、暗号品質が返されます。どちらのデバイスも、同じ内部 RNG 状態と同じアルゴリズムを使用して状態を変換し、ランダムなバイトを生成します。これらには特有の制限があり、どちらも正しくありません:
/dev/urandom
システムがまだ十分なエントロピーを蓄積していない場合、予測可能なデータを返すことができます。/dev/random
十分でない場合は、利用可能なエントロピーとブロックの量を計算します。これは良いことのように思えますが、計算が理論上の考慮事項に基づいており、利用可能なエントロピーの量が出力ビットごとに直線的に減少するという点が異なります。したがって、/dev/random
すぐにブロックする傾向があります。
Linux システムは、内部の RNG 状態をディスクに保存し、起動時に復元します。したがって、エントロピーはブートごとに引き継がれます。 Linux システムにエントロピーがないのは、Linux システムを新しくインストールしたときだけです。システムに十分なエントロピーがあると、エントロピーは減少しません。 Linux の欠陥のある計算のみが減少します。この考慮事項の詳細については、/dev/urandom
を参照してください。 プロの暗号学者による暗号化キーの生成に適しています。 aso を参照してください。random.c で使用されるエントロピーの推定について説明できますか。
マウスを動かすと、システムにエントロピーが追加されます。しかし、gpg は /dev/random
からしか読み取ることができません 、 /dev/urandom
ではありません (この問題を解決する方法は /dev/random
にすることです /dev/urandom
と同じ 1:9 デバイス )、そのため、乱数が十分でない乱数を受け取るリスクはありません。 マウスを動かさない場合、キーは可能な限りランダムになります。ただし、gpg がブロックされる可能性があります /dev/random
からの読み取りで 、カーネルのエントロピー カウンターが上がるのを待っています。
GPG は Linux (カーネル) 乱数ジェネレーターを使用しています。カーネル ジェネレーターは、あらゆる種類の場所からエントロピー (ランダム性) を取得します。その中には、特定の割り込みの割り込みタイミングがあります。マウスの移動 (および入力、ディスク アクティビティなど) はすべて割り込みを生成します。
したがって、マウスを動かすと、実際に乱数ジェネレーターにフィードされる可能性があります。しかし、それができるかどうかは、使用中の正確なカーネル バージョンによって異なります。新しいバージョンは (少なくとも私のテストでは) エントロピーにキーボードまたはマウスの割り込みを使用しません。ただし、ディスク アクティビティは実行されます (例:sync
の実行など)。 フラッシュされる量に応じて、大量のエントロピーが追加される可能性があります)。
要するに、これは現在の Linux バージョンには当てはまりません。
ただし、ジェネレーターがエントロピーを使い果たした場合、ジェネレーターは停止するはずです。そのため、エントロピーが生成されるまで鍵の生成は停止します。したがって、これは永遠に続く問題であり、セキュリティの問題ではありません.
cat /proc/sys/kernel/random/entropy_avail
で利用可能なエントロピーの量を確認できます .