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