下のビデオから:Linux HOWTO:PGPによるデータ保護、パート2、を使用してキーペアを生成する方法を見てみましょうgpg
。そのころ1:50
講師は次のように語った。
キーを生成するときは、次のことをお勧めします。マウスの移動キーペアを生成するには、乱数エントロピーをもう少し与えます。
特にコマンドラインツールは通常カーソルの影響を受けてはいけませんので、これは私にとって神話のようです。一方、Linuxの乱数ジェネレータがGUIで共有されているのか、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
暗号鍵の生成に適しています、プロの暗号学者によって書かれました。阿蘇を見るRandom.cで使用されるエントロピー推定を説明できますか?。
マウスを動かすと、システムにエントロピーが追加されます。しかし、gpgは読むことができ、読み取る/dev/random
ことはできません。/dev/urandom
/dev/random
(この問題を解決する1つの方法はで作成することです/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