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


10

次の動画:Linux HOWTO:Secure Your Data with PGP、Part 2では、で鍵ペアを作成する方法が示されていますgpg。について1:50、インストラクターは次のように言います。

鍵が生成されている間は、マウスを少し動かして、鍵ペアを作成するための乱数エントロピーをもう少し大きくすることをお勧めします

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


余談ですが、これは「都市神話」の正しい使用ですか、それとも「コンピューティング内の神話」に類似したフレーズがありますか?
IQAndreas 2014年

1
フレーズは都市伝説だと思います。都会の神話は聞いたことがありません。en.wikipedia.org/wiki/Urban_legendを参照してください。コンピューティングでは、「貨物カルト」というフレーズが適切な場合があります。
derobert 14年

回答:


8

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

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

  • エントロピー非決定論的であるソース、。エントロピーの目的は、予測できないデータで乱数ジェネレータをブートストラップすることです。エントロピーソースは非決定的である必要があります。そうでない場合、敵は同じ計算を再現する可能性があります。
  • 擬似乱数生成器変化内部状態から決定論的な方法で予測不可能な乱数を生成します。

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

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

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

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

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


Linuxの現在のバージョンを除いて、少なくとも私のテストでは、入力デバイスをエントロピー(または少なくとも推定エントロピー)のソースとして使用していません。理論的には攻撃者の制御下に置かれる可能性があるため、彼らがそれを変更したと確信しています。
derobert 2014年

@derobert 3.12の時点でadd_input_randomnessin への呼び出しがありますが、drivers/input/input.c実際にエントロピーを注入する状況はわかりません。
Gilles「SO-邪悪なことをやめよう」

エントロピーを追加すると思いますが、推定値は0です... USBマウスとPS / 2キーボードの両方を試しましたが、どちらもエントロピーの推定値を上回っていないようです。ただし、コードでcredit_entropy_bitsの呼び出しを確認したので、その理由はわかりません。
derobert 2014年

3

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

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

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

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

によって、どれだけのエントロピーが利用できるかがわかりますcat /proc/sys/kernel/random/entropy_avail


またrngd、エントロピープールに人工的に供給するようなツールを使用できることに注意してください。
Patrick

@Patrickは確かに、そしてもしあなたが新しいチップを持っていてNSAを信頼しているなら(ああ、待って、つまりIntel)、RDRANDを使うことができる。
derobert 14年

havegedエントロピープールを人工的に供給するもう1つの優れたツールです。
mavillan 2014年

これは完全な話ではありません。RNGはエントロピーを使い果たすのではなく、エントロピーの内部測定値を使い果たします。また、パズルの重要な部分は、gpgがマウスを気にせず、カーネルが気にするということです。
Gilles「SO-邪悪なことをやめなさい」

@Gilles gpgがLinux RNGを使用していることを明確にしました。そして、エントロピー推定のバグは範囲を超えているようです。
derobert

0

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

sudo apt-get install haveged
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.