PGPキーのエントロピーを生成する


12

私はVMにリモートでログオンし、4096ビットのPGPキーを生成しようとしていますが、エントロピーがないために永久にハングします。リモートデスクトップで作業しているため、おそらくマウスの動きをエントロピーとして検出しません。

どうすれば生成できますか?

試しましたcat /dev/urandom > /dev/nullが、それは役に立ちません。

回答:


13

データの取得から/dev/random/dev/urandom明確にされていない問題がさらに悪化すること、それがどうなるすべてはあなたのエントロピープールを枯渇、助けに行きます。これら2つのファイルの主な違いは、カーネルがエントロピーを使い果たした場合でも、urandom品質の低いランダムデータを生成し続け、random新しい高品質のランダムデータを収集できるようになるまでブロックすることです。PGPは、安全なキーを生成するために、可能な限り最高のランダムデータを必要とするため、常にを使用します/dev/random

あなたの周りの良いランダムなデータを持っている、または別のサーバのからいくつかをエクスポートする場合/dev/random、次のことができcat、それサーバーの/dev/randomより多くのエントロピーを取得します。あなたはいけcat二回に同じファイル/dev/randomけれども。

エントロピーが不足していることがよくある場合は、havegedのようなものをインストールすることも検討できます。これは、バックグラウンドでエントロピーを再生成し、/dev/random必要に応じて再充填するデーモンです。

また、へのシンボリックリンク/dev/random/dev/urandom作成することもできますが、これを使用して生成されたキーは本来よりも安全性が低い可能性があるため、これはセキュリティリスクと見なされます。重要度の低いアプリケーションには役立つかもしれませんが/dev/random、他のユーザーが独自のキーやCSRなどを生成するなど、他のすべての可能な使用を考慮する必要があります。


FreeBSDでは/dev/random高品質のPRNGであり、通常はブロックしないことに注意してください。
ケビン

@Kevin /dev/randomは、最新のBSDおよびLinuxでの高品質PRNGです。ただし、十分なエントロピーが利用できない場合はブロックされます。反対に、/dev/urandom十分な空きがない場合はブロックしませんが、この場合、ランダム性の品質が低下する可能性があります。詳細には、LinuxとさまざまなBSDの間のランダム実装とurandom実装の間に多くの微妙な点がありますが、上記はすべてのAFAIKに当てはまるはずです。
ホイヘンス

Linuxでは、ping 8.8.8.8別のネットワークホストを所有している場合(たとえば、RTTが100ミリ秒未満の場合)、ホストにpingを実行するだけで、エントロピーをさらに生成できます。および/またはを使用findして、ハードディスク上のファイルを検索し、各ファイル検索の間にRAMキャッシュをフラッシュします。
ホイヘンス

@Huygens:リンクしたマニュアルページを開き、Ctrl + F "kern.random.sys.seeded"; デフォルトで/dev/randomは、FreeBSDではブロックしません。
ケビン

1
@Kevinはい、そうです、エントロピープーリングまたはハーベストは、PRNGを「シード」する2つの異なる方法です。そして、私のBSDボックスでのいくつかのテストの後、randomとurandomは同じように動作し、十分なPRNGを生成できない場合にブロックすることを発見しました。dd if=/dev/random of=/tmp/rndtest bs=64M count=1新たに起動してから実行してみてください。64MBのファイルを生成する時間を確認するために2回連続して実行しました。urandomを入力としてこの効果を見ることはないと思っていましたが、Linuxとは異なり、FreeBSDも同様にブロックしているようです。
ホイヘンス


4

ローカルマシンでgpgキーを生成することをお勧めします。これは、リモートマシンよりもランダム性がはるかに優れています。次に、SSHを使用してリモートマシンにキーを移行します。

ローカルでの生成はより高速(エントロピーのソースがより多く)で、より安全です(マシンが感染していない場合、誰もプロセスをスパイできず、ランダム性が向上します)。

それでもリモートでそれらを生成したい場合:Linuxでは、ping 8.8.8.8別のネットワークホストを所有している場合、ホストにpingを実行するだけでエントロピーを生成できます(RTTが100ミリ秒未満の場合)。および/またはを使用findして、ハードディスク上のファイルを検索し、各ファイル検索の間にRAMキャッシュをフラッシュします。

インストールすることもできhavegedますが、仮想環境で実行している場合は制限事項をお読みくださいhttps : //wiki.archlinux.org/index.php/Haveged#Virtual_machines


私の考えでは、これは正しい解決策です-私からの+1。
マッドハッター

3

Debianベースのシステムでは、rng-toolsatp-getを使用してパッケージをインストールし、デーモンを起動してエントロピーを生成できます。

echo HRNGDEVICE=/dev/urandom >> /etc/default/rng-tools && service rng-tools restart

CentOS-6サーバーでは、rngデーモンはベースツールの1つとしてインストールされ(少なくとも私が取り組んできたほとんどのシステムでは)、エントロピーを生成するために次のコマンドを実行して起動できます。

sed -i \'s|EXTRAOPTIONS=\"\"|EXTRAOPTIONS=\"-r /dev/urandom\"|g\' /etc/sysconfig/rngd && service rngd restart

urandomをrngdのソースとして使用することは賢いとは思いません。利用可能なエントロピーをより速く枯渇させるのに役立ち、枯渇するとエントロピーの偏りのあるソースになります。だから私はこの解決策を避けるでしょう。
ホイヘンス

1
sudo yum install haveged && sudo systemctl start haveged

CentOS 7.2 VMで確実に動作します。束を作成していて、キーリングをそのままにしたい場合、vmでGPGキーを作成したい場合があります。

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