web-dev-qa-db-ja.com

OpenVPN dhparam

セットアップの手順の1つ OpenVPN は、コマンドopenssl dhparam -out dh1024.pem 1024を実行しています。 man page は、この1024値がビット数を参照していることを示しています。

  • 例で値1024が提案されるのはなぜですか?
  • 4096などの大きな値を使用する必要がありますか?
    • どの値を使用する必要がありますか、何ビットで十分ですか、なぜですか?
    • RSAの1024ビットキーは現在弱いと見なされており、2048ビット以上を使用することが推奨されています。このタイプの状況は、このdhparamファイルにも適用されますか?
  • このファイルを生成するコマンドは、OpenVPNサーバーとして使用するアプライアンスで約10時間かかるようです。より高速なマシンでこのファイルを生成して転送しても安全ですか、それともほとんどの秘密鍵のように扱い、そのホストのみに保持する必要がありますか?このファイルはどの程度秘密にすべきですか?
18
Zoredache

これの多くは以前に扱われました。 DHとDHパラメーターの詳細については、関連する質問の my answer および Thomas's answer を参照してください。

パラメータは単なる素数であり、キーではありません。それらは一意または秘密である必要はありませんが、攻撃者によって特別に作成されてはなりません。ビット長はprimeのサイズを指し、keyではないため、RSAと直接比較することはできません。 2048ビットのRSA鍵は1024ビットの素数のペアで構成されているため、1024ビットのDH素数を使用した因数分解と2048 RSA鍵の因数分解に関しては同じレベルです。

上記でリンクされたThomasの回答が指摘するように、数値は一意または秘密である必要はありません。実際、暗号ライブラリは、正常に機能するDH素数を提供する場合があります(ライブラリのソースを信頼している場合)。または、自分で生成することもできます。

最近の発見に照らした詳細

まず第一に、素数サイズに関するアドバイスは大部分がまだ正しいです-512は小さすぎ、1024でおそらく十分です(いくつかの警告が適用されます) 2048は間違いなく安全です。

さらに、事前計算攻撃が実証されたため、事前に素数がわかっていれば、所定のDH交換をクラックする作業の大部分を事前に実行できます。これは膨大な計算であり、与えられた素数のセットに対してすべての可能なベクトルを計算するには膨大な時間がかかりますが、素数の単一のセットがどこでも使用されている場合、結果が出るので時間とお金を費やすインセンティブがあります。とても広く役立つ。

これは、事前計算が攻撃者によって行われる可能性が高いため、他のすべての人と同じ素数を使用することは、責任の一部であることを意味します。 したがって、おそらく、独自の素数を生成して、攻撃プールから身を守る必要があります。さらに、あなた自身が非常に魅力的なターゲットであり、攻撃者があなたを攻撃するために毎月数百万ドルを費やすことをいとわない場合(Facebookサイズのターゲットなど)、定期的にプライムをローテーションすることは正当化される可能性があります。

この事前計算を実行するために必要なコストと労力については、512ビットの素数の作業は専任の個人が、国が1024ビットの素数を、2048ビットの素数を多分高度な外国人文明が実行できます。

12
tylerl

DHセキュリティは 離散対数 の硬さに依存しています。ランダムに選択された素数pの場合、既知のアルゴリズムを使用して、硬度はpのサイズとともに増加します。少しおかしな偶然で、離散対数の最もよく知られているアルゴリズムは、整数因数分解の最もよく知られているアルゴリズム( [〜#〜] gnfs [〜#〜] と多くの共通点がある)と同じ漸近的なランニングコスト。したがって、DHの1024ビットプライムモジュラスは、1024ビットRSAキーのセキュリティレベルとほぼ同等のセキュリティレベルを提供します。

詳細を見ると、1024ビット係数は1024ビットRSA鍵よりも少し強いです。なぜなら、GNFSの離散対数とGNFSの因数分解は非常に似ているため、最終ステップ(線形代数DLの場合、巨大な行列)は難しくなります(ボトルネックは行列のサイズです。因数分解の場合、行列要素は単一ビットですが、DLの場合、これらは整数を法とする整数です。 p、つまり1000倍大きい)この日付まで、RSA-1024はまだ壊れておらず、1024ビットDHはさらに壊れていません。

しかし、1024ビットDHを壊すことは完全に非現実的ではありません。それは無視できない額のドル(10億)を要し、専用の特別な目的のマシンの構築と実行時間は数ヶ月または数年で数えられます。しかし、それはSFの概念(役に立つ「非常に進んだ」エイリアン)や神学(役に立つ神々)からの助けを呼ぶことなく実行可能です。その意味では、はい、より大きな係数を使用するように努めるべきです。


使用率のCPUコストはそのサイズとともにかなり急激に上昇するため、特大の係数を使用することは望まない(それは二次的に増加する必要があるが、一部の実装ではかなり立方体、つまり4096- 2048ビットの8倍のコストがかかるビット)。 2048ビットで問題ありません。

追加の非常に厄介な問題は、1024ビットを超えるDHモジュラスをサポートしないSSLのいくつかの広範な実装があることです。 OpenVPNを使用している場合は、クライアントとサーバーの両方がOpenVPNであることがわかっているため、相互運用性の問題はありません。

素数pとジェネレータgは秘密ではありません。共有することもできます。詳細は this answer を参照してください。一部のマシンで完全に生成して、別のマシンで使用できます。すべてのアプライアンスが同じDHパラメータを使用するように設定することもできます。これは、追加のセキュリティ問題を意味しません。


OpenSSLは、いわゆる「安全な素数」、つまり素数pなどの生成に正当な理由がないため、OpenSSLが主張するため、OpenSSLを使用したDHパラメータの生成には時間がかかる場合があります。 (p-1)/ 2も素数です。これはやり過ぎであり、生成時間を非常に大きな係数(数百)で乗算します。 DHに必要なのは、pが素数であり、p = qr + 1が十分に大きいq; 256ビットqはすでに非常に適切です。 「安全な素数」(つまり、1024ビットに対してサイズ1023ビットのqに移動してもp)、物事は安全になりません、名前にもかかわらず(これは、不十分な用語のために神話に変わった古い伝承の一部です)。

「安全な素数」は、生成時にg = 2をジェネレータとして使用できるようにするという点で、(使用時ではなく)使用時に)小さなパフォーマンス上の利点があります。 ;しかし、その利点はわずかです(それはDH鍵交換の半分にのみ問題であり、モジュラー指数のウィンドウベースの最適化によってほとんど無効化されます)。

各アプライアンスでDHパラメーターを生成する必要がある場合(これは役に立たない)、フラグ「-dsaparam」をコマンドラインに追加して、「安全なプライム」を要求せずにDHパラメーターを生成できます。

openssl dhparam -dsaparam -out dh2048.pem 2048

これは非常に速いはずです。しかし、PCでDHパラメータを生成し、すべてのアプライアンスでそれらをハードコーディングするだけの方がさらに簡単で、安全です。

5
Tom Leek