web-dev-qa-db-ja.com

鍵交換にRSAではなくDiffie-Hellmanを使用する特別な理由はありますか?

鍵交換の方法としてRSAが推奨されることがよくあります。ただし、Diffie-Hellman鍵交換方式も安全であるようです。

あるアルゴリズムを他のアルゴリズムよりも使用することにつながる考慮事項はありますか?

121
user10211

状況は混乱する可能性があるため、正しく設定しましょう。

[〜#〜] rsa [〜#〜]2アルゴリズムであり、1つは非対称暗号化用、もう1つは デジタル署名 用です。これらは2つの異なる獣です。これらはキーの数学演算とフォーマットは同じですが、方法は異なります。 Diffie-Hellmanは 鍵交換 アルゴリズムであり、さらに別の種類のアルゴリズムです。アルゴリズムは同じことをしないため、使用状況に応じて、どちらか一方を優先することができます。

非対称暗号化とキー交換は多少同等です。非対称暗号化では、ランダム対称キー(ランダムバイトの束)を生成し、それを受信者の公開キーで暗号化することにより、キー交換を行うことができます。逆に、鍵交換から得られた鍵を使用して対称アルゴリズムでデータを暗号化することにより、鍵交換を使用して非対称暗号化を行うことができます。 [〜#〜] aes [〜#〜] 。さらに、Diffie-Hellmanは1往復の鍵交換アルゴリズムです。受信者が半分を送信し(「DH公開鍵」)、送信者が半分を計算し、鍵を取得し、暗号化し、ロット全体を受信者に送信し、受信者が鍵を計算します、復号化します。これは、公開鍵の事前配布を前提とするワンショットコミュニケーションシステムと互換性があります。つまり、電子メールで機能します。

したがって、この回答の残りの部分では、RSA 暗号化について話していると想定します。


Perfect Forward Secrecy は、次のように要約できる気の利いた特性です。実際の暗号化は、私たちが保持しないキーを使用して行われるため、盗難の影響を受けません。これは、データを暗号化したくない設定でのみ機能します。つまり、メール(メールボックスでメールを暗号化したままにする必要はありません)ではなく、 SSL/TLS のようなデータ転送の場合です。

その場合、PFSを取得するには、実際の暗号化のための一時的な鍵ペア(非対称暗号化または鍵交換)を生成する必要があります。通常はまたが何らかの認証を必要とするため、少なくとも片側に別の非一時的なキーペアが必要になる場合があります。これは、「DHE」暗号スイートを使用したSSLで何が起こるかです。クライアントとサーバーは、鍵交換にDHを使用し、新しく生成されたDHキー(保存されていない)を使用しますが、サーバーには署名(RSAタイプの)の永続的なキーペアも必要です。 DSA、ECDSA ...)。

一時的なRSAキーペアの生成を本質的に禁止するものはありません。実際、これは古いバージョンのSSLでサポートされていましたwasTLS 1. 、セクション7.4.3を参照してください。その場合、一時的なRSA鍵の使用はPFSではなく、まったく逆に義務付けられました。そのため、暗号化鍵は、サーバーに保存されていない場合でも、サーバーの永続鍵が大きすぎて残忍にできない場合でも、後で破損する可能性があります。

ただし、一時鍵を生成するためのRSAに対するDHの利点があります。新しいDH鍵ペアの生成は非常に高速です(いくつかの「DHパラメータ」、つまり、どのDHが計算され、再利用されるかは、私たちが知る限り、余分なリスクを伴いません)。非常にビジーなSSLサーバーは、計算能力のごく一部に対して10秒ごとに新しい「一時的な」RSAキーペアを生成し、RAMのみで、10秒間だけで十分です。

それにもかかわらず、短命なRSAは時代遅れになり、さらに重要なことに、標準化から外れました。 SSLのコンテキストでは、PFSが必要な場合は、一時的なDH(別名 "DHE")を使用する必要があります。これは、既存の実装で定義およびサポートされているためです。


ではない PFSが必要な場合、特に自分の接続またはワードの接続を盗聴できるようにする場合(システム管理者のコンテキストで、いくつかのフィルターを使用して、またはデバッグアクティビティ)、非一時的なキーが必要です。ここでも、RSAとDHを使用できます。ただし、SSLのコンテキストでは、非一時的なDHではサーバーのキーX.509証明書内にDH公開キーが含まれている必要があります。

証明書のDH公開鍵は、RSAの特許が付与された当時、米国連邦政府によってプッシュされていました。しかし、最近は過ぎ去っています。さらに、DHサポートはRSAサポートほど広くありませんでした。これは確かに興味深い例です。DHは政府によって承認され、組織団体によって標準化されました( ANSI X9.42 )。一方、RSAは、いかなる方法でも標準を作成する資格がなかった民間企業によって標準化されました。しかしRSA標準( PKCS#1 )はだれでも自由に読むことができ、特許がありましたが、それは米国でのみ有効で、他の国では無効でした;そしてアメリカでは、RSA(会社)がアルゴリズムの無料の実装を配布しました(非営利目的である限り無料です)。したがって、PGPのPhil Zimmermanを含むアマチュア開発者は、DHではなくRSAを使用しました。標準の価格は企業にとっては何の意味もありませんが、個人にとっては大きな意味を持つ場合があります。これは、ソフトウェア業界でアマチュアに起因する可能性のある推進力を示しています。

つまり、RSAがDHより優れている利点の1つです:標準は自由に利用できます。


セキュリティのために、RSAは(多かれ少なかれ) 整数分解 の難易度に依存していますが、DHは(多かれ少なかれ) 離散対数 の難易度に依存しています=。それらは明確な問題です。どちらかを破るための最もよく知られている破砕アルゴリズムは General Number Field Sieve のバリアントであるため、どちらも同じ漸近的複雑度を持っています。大まかに見ると、1024ビットのDHキーは、1024ビットのRSAキーと同様に暗号解読に対して堅牢です。

ただし、詳細を見ると、GNFSの最後の部分である「線形代数」の部分(大きな鍵の場合のボトルネック)は、RSAの場合の方が簡単であることに気付くでしょう。その部分は恐ろしく大きなマトリックスを減らすことについてです。 RSAの場合、行列要素は単なるビット(GF(2)で動作します)ですが、DHの場合、行列要素は大きな素数pを法とする整数です。これは、RSAよりもDHの方がマトリックスが1000倍大きいことを意味します。マトリックスのサイズがボトルネックであるため、DH-1024はRSA-1024よりもstrongと言えるでしょう。

これがDHのもう1つの利点です。RSAキー同じサイズよりも堅牢性が高いと言えます。

セキュリティを確保するために、DHは 楕円曲線 などの他のグループよりも一般化しています。楕円曲線上の離散対数は、大きな素数を法とする離散対数と同じ問題ではありません。 GNFSは適用されません。したがって、1つ Diffie-Hellmanではなく、複数アルゴリズムがあります。 「暗号の多様性」は、一部の研究者が一部のアルゴリズムを簡単に破る方法を見つけた場合にアルゴリズムを切り替えることができるので、持っているのが良いものです。


パフォーマンスについて

  • RSA 暗号化(公開鍵を使用)は、DH演算(楕円曲線を使用した場合でも)よりも大幅に安価です(したがって高速です)。
  • RSA 復号化(秘密鍵を使用)は、DH鍵交換とほぼ同じ量の処理を、同様の抵抗で行います。 DHは、永続的なキーペアを使用する場合は少し安くなりますが、一時的なキーペアを構築するためのコストを含めると、少し高くなります。
  • SSLおよびDHE_RSAの場合、サーバーはDH鍵ペアおよびに署名する必要があり、署名にはクライアントとサーバーのランダムな値が含まれるため、これは接続ごとに行う必要があります。したがって、「RSA」ではなく「DHE_RSA」を選択すると、サーバーのSSLに対するCPU使用量が倍になります。ただし、実際にはそれほど重要ではありません。違いに気付くには非常にビジーなサーバーが必要です。
  • DH公開鍵はRSA公開鍵よりもエンコードが大きく、if DH鍵にはDHパラメータが含まれます。それ以外の場合は小さくなります。 SSLの場合、RSAの代わりにDHE_RSAを使用することは、追加の1キロバイトまたは2キロバイトのデータを交換することを意味します-ここでも、クライアントごとに1回だけ(SSLセッションの再利用のため)、それはほとんど重要なポイントではありません。一部の特殊なプロトコルでは、パブリック要素が非常に小さいため、ECDH(楕円曲線を含む)は重要なエッジを取得します。

制約された状況でプロトコルを設計している場合(たとえば、スマートカードや赤外線または同様に低電力でのI/Oを含む)、 [〜#〜] ecdh [〜#〜] はおそらくRSAよりも魅力的です。


要約:相互運用性の制約に基づいて、通常、DHよりもRSA、またはRSAよりもDHを優先します。コンテキストに応じて、一方が他方よりサポートされます。パフォーマンスが重要になることはめったにありません(少なくとも、通常想定されるほどではありません)。 SSLの場合、実際にはDHEであるため、DHが必要です。PFSのため、「E」(一時的なもの)は便利です。

140
Thomas Pornin

DH一時鍵交換は、RSA単独では提供されない 完全転送秘密 を提供します。これは、長期間のキーが後で漏洩した場合でも、完全なデータストリームがキャプチャされた場合でも、個々の接続のセッションキーが危険にさらされることはないことを意味します。

19
Polynomial

SSLのコンテキストでは、多項式は正しいです。(EC)DHEスイートは、Diffie-Hellmanを使用した一時的な鍵交換を使用します。サーバーは、使用後にすぐに交換に使用された秘密鍵を忘れるので、サーバーの長期鍵が侵害されても、攻撃者は過去のすべての通信を解読できません。つまり、 Perfect forward secrecy を提供します。

SSLではECDHE_RSAスイートを使用することをお勧めします。完全な転送機密性、機密性の高いセキュリティレベル(P256を使用する場合は128ビット)を提供し、レガシーRSA接続と強力なECDHE_RSA接続の両方に同じ証明書を使用できるようにします。


プロトコル設計者が一時的な鍵交換にDHを使用する理由はパフォーマンスです。

  • DH鍵の生成は比較的安価です。これは、固定されたベースを使用したスカラー乗算(または、乗法表記を使用する場合は指数)です。

    ECDHを使用した一時鍵交換の総コストは、固定ベース(key-gen)を使用した1つのスカラー乗算と、変数(実際の鍵交換)を使用した1つのスカラー乗算、および長期鍵署名を使用したRSA秘密鍵演算です。はかない公開鍵。

  • 2つの大きな素数を見つける必要があるため、RSA鍵の生成ははるかにコストがかかります。接続ごとに新しいRSAキーペアを生成するのは非常にコストがかかります。

    RSA秘密鍵の操作は、同じセキュリティレベルのDH鍵交換よりも少しコストがかかりますが、長期鍵でのRSAの使用を妨げるものではありません。

ECCを使用すると、特に高いセキュリティレベルでパフォーマンスギャップがさらに広がります。 256ビットのECCはかなり一般的です(128ビットのセキュリティ)。RSAを使用した同等のセキュリティには、3000ビットのキーが必要です。

9
CodesInChaos

逆に、RSA鍵交換にはサーバーの秘密RSA鍵が含まれますが、(EC)DHでは行われません。

つまり、攻撃者がRSAキーをクラックする手段を入手したとしても、サーバー/キーごとにクラックの労力を費やす必要があります。 (EC)DHでは、logjamのような攻撃を使用して、クラッキングの努力のほとんどは、いわゆる代数的/楕円的グループ全体の破壊に費やされます。その後、個々の接続を切断するのは簡単です。

したがって、RSA鍵交換は攻撃者に興味のあるサーバーの鍵のみをクラックするよう動機付けしますが、(EC)DH鍵交換は可能な限り多くの接続を攻撃して最高のコスト/攻撃率を得るよう動機付けます。

不思議に思うかもしれませんが、(Im)perfectForwardSecrecyのこのプロパティがほとんど知られていないのは、おそらく楕円曲線Diffie-Hellman鍵交換に対するlogjamのような攻撃が現在知られていないためです。

これはフォローアップ/投稿のコメントになるはずです https://security.stackexchange.com/a/35472/18595

0
user185953