TLSの動作 を理解しようとしています。データの暗号化に使用されるマスターシークレットを生成するさまざまな方法があることを理解しています。 DH(Ephemeral DHE)やRSAなど。 RSAを使用すると、クライアントが生成したプレマスターキーがサーバーの公開キーで暗号化され、マスターシークレットの計算のためにサーバーに送り返されることを理解しています。しかし、DHEを使用する場合のプロセスはどうでしょうか?
クライアントとサーバーの両方のDH公開鍵がマスターシークレットの計算に使用されているのがわかりますか?しかし、DH公開鍵はサーバーの公開鍵と同じですか?
レイマンの用語では、RSA公開鍵はサーバーの公開鍵と見なされますか?
短い答え:可能性がありますが複雑であり、サーバーが持つ証明書の種類と、サーバーが使用するように構成されているTLS暗号スイートによって異なります。
この回答は基本的にこの openssl wiki page のコピーです。いくつかの例を見てみましょう。
これらの場合、サーバーの証明書にはRSAキーが含まれ、次のような暗号スイートを使用します
TLS_RSA_WITH _....
セッションキーはクライアント側で生成され、サーバーのRSAキーで暗号化されてサーバーに送信されます。ハンドシェイクの認証部分では、サーバーは同じRSAキーを使用して署名を生成します(私はそう思います)。
これらの場合、サーバーは各接続に同じDHキーを使用しますが、証明書がないため、クライアントがこのキーが実際にはサーバーに属していて中間者に属していないことを確認する方法はありません。次のような暗号スイートを使用します
TLS_DH_anon_WITH _....
注:明らかにこれは安全ではありません。
これらの場合、サーバーは接続ごとに同じDHキーを使用し、公開キーはサーバーの証明書(より一般的なRSA証明書ではなくDH証明書)に配置されます。次のような暗号スイートを使用します
TLS_DH_RSA_WITH _...
前述のように here 、署名アルゴリズム(RSA/DSS)は、CAが証明書の署名に使用した署名アルゴリズムを示し、ハンドシェイクの一部として署名はありません。サーバーが同じセッションキーに到達する場合、サーバーは一致するDH秘密キーを持っている必要があります。
注:これは古く、非推奨です。現在、DHEが好まれています。
これらの場合、サーバーの証明書にはRSAキーが含まれ、次のような暗号スイートを使用します
TLS_DHE_RSA_WITH _...
DHは短命なので、新しい接続ごとに新しいDHキーが生成されるため、証明書に入れる必要はありません。 RSAキーは、チャレンジ応答に署名するために使用され、サーバーが本人であることを証明します。これらは最近の好ましい暗号です。
CloudFlareは、キー交換メカニズムで使用されるDiffie-HellmanとRSAには利点があると説明しています。 Keyless SSL:The Nitty Gritty Technical Details 。
RSAおよびDHハンドシェイクには、それぞれ長所と短所があります。 RSAハンドシェイクは、RSAという1つの公開鍵アルゴリズム操作のみを使用します。 RSA証明書を使用したDHハンドシェイクでは、同じRSA操作が必要ですが、追加のDH操作が必要です。証明書がRSAである場合、RSAハンドシェイクの方が計算が高速です。 RSAやDHのような公開鍵アルゴリズムは多くのCPUを使用し、TLSハンドシェイクの最も遅い部分です。ラップトップは、1秒あたり数百のRSA暗号化しか実行できないのに対し、対称暗号AESは1秒あたり約1000万です。
DHハンドシェイクを実行するには2つのアルゴリズムが必要ですが、DHハンドシェイクがもたらす利点は、サーバーの秘密鍵とは無関係に鍵の確立を可能にすることです。これにより、接続の転送の機密性が確保されます。これは、秘密鍵が何らかの理由で公開された場合でも、会話が解読されないように保護する有用なプロパティです。ハンドシェイクのDHバージョンでは、ECDSAキーなどのパフォーマンスを改善できる非RSA証明書を使用する可能性も開かれます。楕円曲線は同じセキュリティを提供し、計算オーバーヘッドが少なくなります。 DHハンドシェイクと楕円曲線DSA証明書および楕円曲線Diffie-Hellman鍵合意は、1オペレーションのRSAハンドシェイクよりも高速です。
Diffie-HellmanとそのTLS/SSLの使用法 でさらに説明できると思います。
「サーバーの公開鍵」が認証に使用されると想定し、そうでない場合。 DH公開鍵とサーバー公開鍵は同じではありません。しかし、私はこの問題について非常に多くの意見が混じっています。 TLS 1.2は、鍵交換メカニズムにDHおよびRSAを使用しているようです。 DHは、対称アルゴリズムの対称鍵を生成するために使用されます。 DH自体は、必ずしもデータ暗号化アルゴリズムではありませんが、パブリックネットワークを介して秘密鍵について合意する方法です。