web-dev-qa-db-ja.com

TLSエフェメラルDHE暗号はどのDHグループサイズを使用しますか?

SSL/TLSでは、クライアントとサーバーは、エフェメラルDiffie-Hellman交換を使用して、後続のマスターシークレットとセッションキーをシードするための共有シークレットを確立するオプションがあります。

DHEが2者間のキー交換として選択されている場合、どのようにしてDH ModPグループサイズを決定するのですか(その結果、PとGの番号に同意できるようになります)?

11
Eddie

サーバーをDHE用に構成する の場合、Diffie Hellmanパラメーターを生成する必要があります。次に、生成したDHパラメータを使用するようにOpenSSL/Apache/Nginxなどを構成します。

使用するDHパラメータは、ServerKeyExchangeメッセージで送信されます。 ServerHelloおよびCertificateメッセージの後、ServerHelloDone

ServerKeyExchangeメッセージには以下が含まれます。

   struct {
       select (KeyExchangeAlgorithm) {
           case diffie_hellman:
               ServerDHParams params;
               Signature signed_params;
           case rsa:
               ServerRSAParams params;
               Signature signed_params;
       };
   } ServerKeyExchange;

出典: RFC2246 セクション7.4.3

3
RoraΖ

DHE暗号スイートでは、DHのモジュラスサイズはサーバーによって完全に選択され、許容可能なサイズに関するクライアントからの入力はありません(これは、DHE暗号スイートに関するTLSプロトコルの欠陥です)。

一部の履歴クライアント(Javaに同梱されているものを含むJava 7まで)は、1024ビットを超えるDH係数をサポートしていませんでした。 1024ビットのDHモジュラスに固執しますが、そのようなサイズは小さすぎると判断した人もいます。Apache+ OpenSSLは、数年前にその特定のジャンプを行いました。詳細は this を参照してください。

ECDHE(楕円曲線バージョン)では、使用する楕円曲線はサーバーによって選択されますが、クライアントがサポートする曲線を指定できる ClientHello拡張 があり、サーバーを許可します本当に情報に基づいた決定をするために。

7
Tom Leek

サーバーはグループを選択し、クライアントに通知します。クライアントはこのプロセスに入力を提供しません。

ほとんどのサーバーはデフォルトのパラメーターセット(プライムとジェネレーター)で出荷されますが、2つの理由で独自のパラメーターを生成することをお勧めします。

  1. 一部のサーバーは、1024ビットのみのデフォルトの素数で出荷されます。これは現在、小さすぎると見なされています。
  2. Dhをクラッキングする作業の多くは、セッションごとではなく、プライムごとです。したがって、他の人が使用しているのと同じ素数を使用しないことをお勧めします。

残念ながら、サーバーが1024ビットより大きい素数を使用している場合、Java 7以前ではハンドシェイクに失敗します。

Java 6の場合、これに対する適切な解決策はありません。Java 6クライアントをサポートする必要がある場合は、 ECDHEまたは弱い1024ビットDSAパラメータをサポートしません。

Java 7の場合、ECDHE暗号スイートにDHE暗号スイートよりも高い優先順位を与えることにより、この問題を回避できます。

2
Peter Green