web-dev-qa-db-ja.com

GPGキーに「乱数エントロピー」を追加しますか?

次のビデオ: Linux HOWTO:Secure Your Data with PGP、Part 2 では、gpg。約 1:50、講師は次のように言います。

キーが生成されている間、マウスを少し動かして、作成のためにもう少しランダムなエントロピーを与えることをお勧めしますキーペアの。

これは神話のように思えます。特に、コマンドラインツールは通常、カーソルの影響を受けないはずです。一方、Linuxの乱数ジェネレーターがGUIで共有されているかどうかに関係なく、どのように機能するかはわかりません。彼が主張するものに在庫はありますか、これは 貨物カルトプログラミング の例ですか?

10
IQAndreas

これには真実があり、実際には神話よりも真実ですが、それでもなお、ステートメントは何が起こっているかについての根本的な誤解を反映しています。はい、GPGでキーを生成しながらマウスを動かすのは良い考えです。はい、マウスを動かすと、乱数がランダムになるエントロピーが発生します。いいえ、マウスを動かしてもキーの安全性は向上しません。

暗号化に適したすべての優れたランダムジェネレーター、およびLinuxはそのカテゴリーにあり、2つのコンポーネントがあります。

  • エントロピー ソース。これは非決定的です。エントロピーの目的は、bootstrap予測不能なデータを含む乱数ジェネレータです。エントロピーソースは非決定的でなければなりません。それ以外の場合、攻撃者は同じ計算を再現できます。
  • 疑似乱数ジェネレーター 。これは、変化する内部状態から予測できない方法で予測不可能な乱数を生成します。

エントロピーは、コンピューターの外部にあるソースから取得する必要があります。ユーザーはエントロピーの1つのソースです。ユーザーが行うことはほとんどランダムではありませんが、キーストロークやマウスの動きの細かいタイミングは予測不可能であり、わずかにランダムです。非常にランダムではありませんが、少しずつ蓄積されていきます。エントロピーの他の潜在的なソースには、ネットワークパケットのタイミングやカメラまたはマイクのホワイトノイズが含まれます。カーネルのバージョンと構成が異なると、使用するソースのセットが異なる場合があります。一部のコンピューターには、放射性崩壊に基づく専用ハードウェアRNG回路、またはそれほど印象的ではないが、不安定な電子回路があります。これらの専用ソースは、ユーザーが奇妙なことをしなくても、最初の起動時にかなり予測可能な動作をすることができる組み込みデバイスおよびサーバーで特に役立ちます。

Linuxは、2つのデバイスを介してプログラムに乱数を提供します: /dev/randomおよび/dev/urandom 。どちらかのデバイスから読み取ると、暗号品質になります。両方のデバイスは、同じ内部RNG状態と同じアルゴリズムを使用して状態を変換し、ランダムバイトを生成します。それらには特有の制限があり、どちらも正しいことではありません。

  • システムが十分なエントロピーをまだ蓄積していない場合、/dev/urandomは予測可能なデータを返すことができます。
  • /dev/randomは、利用可能なエントロピーの量を計算し、十分でない場合はブロックします。計算は、利用可能なエントロピーの量を各出力ビットで線形的に減少させる理論的な考慮に基づいていることを除いて、これは良いように聞こえます。したがって、/dev/randomは非常に速くブロックする傾向があります。

Linuxシステムは内部RNG状態をディスクに保存し、ブート時に復元します。したがって、エントロピーは1つのブートから次のブートに引き継がれます。 Linuxシステムにエントロピーが不足するのは、新しくインストールされたときだけです。システムに十分なエントロピーがあると、エントロピーは減少しません。 Linuxの欠陥のある計算のみが減少します。この考慮事項の詳細については、専門の暗号技術者による /dev/urandomは暗号鍵の生成に適しています を参照してください。 asoを参照 random.cで使用されるエントロピー推定を説明できますか

マウスを動かすと、システムにエントロピーが追加されます。しかし gpgは/dev/randomからのみ読み取ることができ、/dev/urandomではありません (この問題を解決する方法は/dev/random/dev/urandomと同じ1:9デバイスにすることです)したがって、ランダムでないことを受け取るリスクはありません-十分な乱数。 マウスを動かさない場合、キーはできる限りランダムになります。しかし、起こり得ることは、/dev/randomからの読み取りでgpgがブロックされて、カーネルのエントロピーカウンターが上昇するのを待つことです。

GPGはLinux(カーネル)乱数ジェネレーターを使用しています。カーネルジェネレーターは、特定の割り込みの割り込みタイミングなど、あらゆる種類の場所からエントロピー(ランダム性)を取得します。マウスの移動(および入力、ディスクアクティビティなど)はすべて割り込みを生成します。

したがって、マウスを動かすと、実際に乱数ジェネレータにフィードされる可能性があります。しかし、それが可能かどうかは、使用している正確なカーネルバージョンによって異なります。新しいバージョンでは(少なくとも私のテストでは)エントロピーにキーボードまたはマウスの割り込みを使用していません。ただし、ディスクアクティビティは実行します(つまり、syncを実行すると、フラッシュされる量に応じて、潜在的に大量のエントロピーが追加されます)。

つまり、これは現在のLinuxバージョンでは当てはまりません。それは古いものでした。

ただし、ジェネレーターがエントロピーを使い果たした場合、それは単に停止するはずです。そのため、何らかのエントロピーが生成されるまで、キー生成はハングします。したがって、セキュリティの問題ではなく、いつまでも続く問題です。

cat /proc/sys/kernel/random/entropy_availを使用すると、利用可能なエントロピーの量を確認できます。

3
derobert

havegedがインストールされているため、Tailsのキー生成は非常に高速です。

Sudo apt-get install haveged
0
user123456