web-dev-qa-db-ja.com

24時間後もDiffie Hellmanパラメータが計算中

RaspberryPiモデルBにArch Linuxを新しくインストールしました。OpenVPNをセットアップしてeasy-rsa OpenSSL 1.0.2dを使用して、初期キーと証明書を生成します。私が走るまですべてうまくいった./build-dh(script here )。 this と書いたのは24時間後のことです。

以前、他のデバイスと同じRaspberryPiでOpenRaspbianの下にOpenVPNを構成しました。そして、このコマンドがそれほど長くかかったことを覚えていません。前回2048ビットのキーを使用したところ、約1時間かかりました。今、私は4096ビットの鍵を試してみましたが、1日以上かかりました。実際、すべての設定を再開し、build-itハードウェア乱数ジェネレーターを有効にして、もう一度試してからさらに12時間になります。しかし、それはまだ進行中です。

cat /proc/sys/kernel/random/entropy_availは、3000〜3100の範囲の値を返します。

誰かこれについてこれまでに経験がありますか?ループで実行されていないかどうかを確認するにはどうすればよいですか?

63
kgizdov

opensslが多くのCPUを使用している場合、「エントロピー」の待機をブロックされません。 OpenSSLは実際にはその点で正気であり、 暗号的に安全なPRNG を使用して、初期シードを必要な数のビットに拡張します。

dhparamを使用すると、OpenSSLはDHパラメータを生成するだけでなく、また、モジュラスにいわゆる「強い素数」を使用することに注意を払い、彼の社会的地位を主張したいと考えています。これは、セキュリティには役に立たないが、非常に多くの計算作業を必要とします。 「強い素数」は、素数pであり、(p- 1)/ 2も素数です。素数生成アルゴリズムは次のようになります。

  • ランダムな奇数の整数pを生成します。
  • pが素数かどうかをテストします。そうでない場合は、ループします。
  • p-1)/ 2が素数かどうかをテストします。そうでない場合は、ループします。

ランダムな奇数の4096ビット整数は、約1/2000が素数になる確率であり、pと(pの両方であるため-1)/ 2は素数でなければなりません。これは、平均で約400万の素数を生成およびテストする必要があります。奇数の素数。これには時間がかかります。

2048ビットから4096ビットに移行する場合、強力な素数の密度は4で除算され、素数性テストも約4倍遅くなります。したがって、2048ビットのDHモジュラスの生成に平均1時間かかる場合、同じ同じソフトウェアを備えたマシンは、4096ビットのDHモジュラスに対して平均16時間を使用します。これは平均のみです;個々の世代は、運に応じて、速くなったり遅くなったりします。


合理的な解決策は、-dsaparamオプションを追加することです。

openssl dhparam -dsaparam -out /etc/ssl/private/dhparam.pem 4096

このオプションは、OpenSSLに「DSAのような」DHパラメータを生成するように指示しますpisp-1は、より小さい素数qの倍数であり、ジェネレーターは乗法順序q)。これは素数性テストを入れ子にする必要がないため、かなり高速であり、数百万ではなく数千の候補のみが生成されてテストされます。

学者の知る限り、DHのDSAのようなパラメーターは同様に安全です。 「強力な素数」を使用することには実際の利点はありません(この用語は従来のものであり、実際には特別な強みを意味するものではありません)。

同様に、2048ビットのモジュラスを使用することもできます。これは、すでに「ゾーンを壊すことはできません」という非常に遠いところにあります。 4096ビットの係数はDHの計算を遅くしますが(これはVPNの実際の問題ではありません。これらは接続の開始時にのみ発生します)、実際にはセキュリティは向上しません。

ある程度、4096ビットのモジュラスは監査人を夢中にさせるかもしれませんが、監査人はとにかくあまりにも安すぎるRaspberry-Piに感銘を受ける可能性はほとんどありません。

106
Tom Leek