web-dev-qa-db-ja.com

TLSではどの鍵交換メカニズムを使用する必要がありますか?

TLSで使用できる多くの鍵交換メカニズムがあります。その中には、RSA、ECDH_ECDSA、ECDHE_ECDSA、ECDH_RSA、ECDHE_RSAなどがあります。これらのうち、暗号化により安全で、Webサイトとの接続を保護するために使用できるものはどれですか。

31
Andrei Botalov

サーバーの鍵タイプと証明書が一致する場合にのみ、(暗号スイートの一部として)鍵交換を使用できます。これを詳細に見るために、 TLS 1.2仕様 で定義された暗号スイートを見てみましょう。各暗号スイートは、鍵交換アルゴリズムと、後で使用される対称暗号化および整合性チェックアルゴリズムを定義します。ここでは鍵交換部分に集中します。

  • RSA:鍵交換は、サーバーの公開鍵を使用してランダムな値(クライアントが選択)を暗号化することで機能します。これには、サーバーの公開鍵がRSA鍵である必要がありますおよびサーバー証明書が暗号化を禁止しないこと(主に「Key Usage」証明書拡張機能を使用):その拡張機能が存在する場合、 「keyAgreement」フラグを含める必要があります)。

  • DH_RSA:鍵交換は静的Diffie-Hellmanです。サーバーの公開鍵はDiffie-Hellman鍵でなければなりません。さらに、その証明書は、それ自体がRSAキーを使用していた認証局によって発行されたものである必要があります(CAキーは、サーバー証明書の署名に使用されたキーです)。

  • DH_DSS:CAがDSAキーを使用したことを除いて、DH_RSAに似ています。

  • DHE_RSA:鍵交換ははかないDiffie-Hellmanです。サーバーは動的にDH公開鍵を生成し、それをクライアントに送信します。サーバーは送信するものにもsignsします。 DHE_RSAの場合、サーバーの公開鍵はRSAタイプである必要があり、その証明書はsignaturesに適切である必要があります(Key Usage拡張が存在する場合は、digitalSignatureフラグを含める必要があります)。

  • DHE_DSS:DHE_RSAに似ていますが、サーバーキーのタイプがDSAである点が異なります。

  • DH_anon:サーバー証明書がありません。サーバーは、動的に生成したDiffie-Hellmanキーを使用します。 「anon」暗号スイートは、あらゆる種類のサーバー認証を欠いているため、偽装攻撃( "Man in the Middle" を含むがこれに限定されない)に対して脆弱です。一般的に、「anon」暗号スイートは使用しないでください。

楕円曲線暗号を使用する鍵交換アルゴリズムは another RFC で指定され、次のように提案されています。

  • ECDH_ECDSA:DH_DSAに似ていますが、楕円曲線を使用します。サーバーの公開鍵は、ECDSA公開鍵を使用していたCAによって発行された証明書内のECDH鍵でなければなりません。

  • ECDH_RSA:ECDH_ECDSAに似ていますが、発行CAにはRSAキーがあります。

  • ECDHE_ECDSA:サーバーは動的に生成されたEC Diffie-Hellman鍵を送信し、タイプECDSAである必要がある独自の鍵でそれに署名します。これはDHE_DSSと同等ですが、Diffie-Hellman部分と署名部分の両方に楕円曲線があります。

  • ECDHE_RSA:ECDHE_ECDSAに似ていますが、サーバーの公開鍵はRSA鍵であり、一時的な楕円曲線Diffie-Hellman鍵の署名に使用されます。

  • ECDH_anon:動的な楕円曲線Diffie-Hellmanを備えた「anon」暗号スイート。


それでは、Webサイトの場合、何を選択しますか?主な制約は次のとおりです。

  • ほとんどのクライアントでサポートされている暗号スイートが必要です。実際には、これは楕円曲線暗号法を除外します(楕円曲線は非常にクールですが、フィールドではまだ十分にサポートされていません- gs.statcounter に従って、2011年9月現在、クライアントの40%であることを考慮してくださいシステムは依然としてWindows XPを使用しており、ほぼ5%がIE 7.0)を使用しています。

  • サーバーの鍵のタイプと証明書と互換性のある暗号スイートが必要です。これは、次に、CAが受け入れるもの(証明書を販売したCA)によって異なります。時間の99.9%、これはRSAを意味します。誰もがRSAを行います。証明書のDiffie-Hellman鍵、およびDSA署名は、RSAに特許があったため、NIST(そのような問題を扱う米国連邦機関)によって宣伝されていました。しかし、その特許は2000年に失効しました。Diffie-Hellman(証明書の一部として)は ANSI X9.42 で指定されています。これは無料ではない標準です(したがって、オープンソースの自由時間開発者はそれを実装することに消極的です)。そして、そのすべてが明確ではありません。したがって、証明書でDiffie-Hellmanを実際に使用する人はいません。 DSAはより広くサポートされています(その 定義する標準 は無料で非常に読みやすい)が、RSAと比較した場合、完全に非破壊的ではありません。

  • 「anon」スイートはアクティブな攻撃者に対して安全ではないため、使用しないでください。ほとんどのクライアントブラウザーでは、「anon」スイートがデフォルトで無効になっています。

したがって、基本的には「RSA」と「DHE_RSA」のどちらかを選択します。後者の方が計算コストが若干高くなる可能性がありますが、実際に違いを確認するには1秒あたり少なくとも数百の新しい接続が必要です(「新しい」と主張します:TLSには、以前の接続のキー交換。非対称暗号化を使用した実際のキー交換は、最後の1分間に新しいクライアントブラウザごとに1回だけ行われます)。したがって、実際には、RSAとDHE_RSA間のCPU負荷に測定可能な違いはありません。

DHE_RSAは Perfect Forward Secrecy として知られるものを提供します。これは、次のプロパティの壮大な名前です。サーバーが完全にハッキングされた場合、攻撃者がサーバーの秘密キーのコピーを取得するまで、彼はまた過去TLSセッション(彼が記録したもの)がRSAを使用している場合は復号化できるが、これらのセッションがDHE_RSAを使用している場合は復号化できません。実際には、攻撃者が秘密鍵を盗むことができる場合、おそらくサイトデータベースの10000クレジットカード番号を読み取ることができるため、以前のセッションの記録と復号化を行う必要がある理由はほとんどありません。数かそこら。 PFSは数学的にはエレガントですが、誇張されすぎています。それでも気の利いた頭字語であり、よく考えられた広報キャンペーンの一環として、気の弱い人に大きな印象を与えることができます。


概要:DHE_RSAを使用します。

62
Thomas Pornin