web-dev-qa-db-ja.com

TLS-RSAとTLS-ECDHE-RSAと静的DH

私はこの主題を説明する多くの記事があることを理解しています、そして私の質問を投稿する前に、これはそれについての私の現在の理解です:

ECDHE-RSA =証明書にはマスターシークレットを生成するためにクライアントに送信するのに十分な情報がないため、サーバーはDH-keyペアをランダムに生成します。 DH公開鍵は「サーバー鍵交換」パケットで送信されます。シークレットはネットワーク経由で送信されることはありません。暗号スイートの「RSA」は、ランダムなDH公開鍵の署名を指しますが、証明書の署名は指しません。

静的DH =サーバーは証明書に固定DH公開鍵を持ち、共有秘密の生成のためにクライアントによって使用されます。シークレットはネットワーク経由で送信されることはありません。この情報で十分なので、サーバーの鍵交換メッセージは必要ありません。

RSA =クライアントはサーバーの公開鍵を使用してPMSを暗号化し、サーバーに送信します。サーバーはPMSを復号化し、同じPMSを生成します。シークレットはネットワーク経由で送信されます。

静的DHは、インターネットでは一般的に使用されていないため、とりあえず脇に置いておきます。Wiresharkで見つけることはできません。

これは私の質問です:

TLS-RSAとTLS-ECDHE-RSAの間のpcapを比較すると、次のことがわかります。

  • サーバーによって提示された証明書には、両方にRSA公開鍵(サブジェクト公開鍵)が含まれており、証明書にはRSA署名(Sha256withRSAencryption)があります。

  • TLS-ECDHE-RSAの「サーバーキー交換」パケットには、RSA署名付きのDHキーがあります。

「dhキー」と「証明書」のRSA署名は、サーバーが本人であることを証明するための認証目的/サーバーのデジタル署名に使用されます。

TLS-RSAの証明書の「RSA公開鍵」は、PMSを暗号化するためにクライアントによって使用されます。 「クライアントキー交換」パケットで確認できます。次に、TLS-ECDHE-RSAの場合の機能は何ですか?

5
Nelson Gee

TLS、特にTLS暗号のコンテキストでこれらについて話していると想定しています。各コンポーネントの動作については、いくつかの混乱があるようです。全体像を見るとわかりやすいので、こちらをご覧ください。

TLSハンドシェイク中に、認証、キー交換が行われます。これらの詳細は、いわゆる暗号スイートによって異なります。こちらがサンプルです。

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

これは基本的に次のように述べています。

  1. サーバーは、[〜#〜] rsa [〜#〜]公開鍵を含む証明書を提供します。これは認証に使用されます。
  2. キーの交換は[〜#〜] ecdhe [〜#〜]を使用して行われます。
  3. 鍵交換後に使用される対称暗号は、AES-GCM128ビットキー。
  4. 交換中に使用するPRF(疑似ランダム関数)は、SHA256です(古いTLSバージョンのMACを示す場合もあります)。

よく見ると、これらすべてが暗号スイートでどのように表現されているかがわかります。

これらが何を意味するかを見てみましょう:ECDHE-RSAStatic DH[〜#〜] rsa [〜#〜]

ECDHE-RSA =証明書にはマスターシークレットを生成するためにクライアントに送信するのに十分な情報がないため、サーバーはDHキーペアをランダムに生成します。 DH公開鍵は「サーバー鍵交換」パケットで送信されます。シークレットはネットワーク上で送信されることはありません。暗号スイートの「RSA」は、ランダムなDH公開鍵の署名を指しますが、証明書の署名は指しません

あなたはここで正しい道を進んでいます、そして今、全体像に関する知識があれば、これを理解するのは簡単です。 「クラシック」な鍵交換中に、証明書(およびそのプライベートペア)の公開鍵を使用して、対称鍵について合意します。ただし、これにより、サーバーのキーが危険にさらされた場合に問題が発生します。証明書の公開鍵に対応する秘密鍵が盗まれた場合、以前に記録されたトラフィックは簡単に復号化できます。

これは一般的に避けたいことです。 Forward Secrecyと入力します。このプロトコルは、RSAキーペアにそれほど依存しない個別のキー交換を行う可能性をもたらします。これに通常使用されるアルゴリズムはDiffie-Hellmanと呼ばれます。

DHが機能するためには、基本的に素数係数とジェネレーターである、いわゆるDHパラメーターが必要です。これらのパラメーターは公開されています。これらは、サーバーのセットアップ時に事前計算され、キー交換中に各クライアントと共有されます。クライアントはサーバーと連携して、これらのパラメーターを使用して、あなたが言ったように、実際にネットワーク経由で送信することなく、キーに同意します。これは、カーンアカデミーの 素晴らしいビデオ に関するものです。 DHキーのペアの秘密キーは、本質的にはビデオの秘密番号です。一方、公開鍵はネットワーク上で送信されるものです。

まとめると、ECDHEは楕円曲線上のDHである一時楕円曲線Diffie-Hellmanです。一時部分は、各接続がDH-keyペアを使用するという事実を指します。

静的DH =サーバーの証明書には修正DH公開鍵があり、共有秘密の生成のためにクライアントによって使用されます。シークレットはネットワーク上で送信されることはありません。情報で十分なので、サーバーの鍵交換メッセージは必要ありません

静的DHとは、サーバーがすべてのクライアント接続(ビデオ内のプライベート番号)に同じDHキーペアを選択することを指します。または、提案したように、証明書に埋め込むことができます。これにより、TLS接続のパッシブモニタリングが可能になります。これは本質的に転送秘密を無効にします。

RSA =クライアントはサーバーの公開鍵を使用してPMSを暗号化してサーバーに送信し、サーバーはPMSを復号化して同じPMSを生成します。秘密はネットワークで送信されます

そのとおりです。

今、あなたの質問に到着します。

TLS-RSAの証明書の「RSA公開鍵」は、PMSを暗号化するためにクライアントによって使用されます。 「クライアントキー交換」パケットで確認できます。次に、TLS-ECDHE-RSAの場合、その機能は何ですか?

これは簡単に答えられます。明示的な鍵交換アルゴリズムがある場合、証明書の鍵(この場合はRSA公開鍵)は認証にのみ使用されます。証明書チェーンを検証し、サーバーが特定の証明書の公開鍵の秘密鍵を保持していることを確認することにより、目的のホストに接続していることを確認します。また、RSA秘密鍵を使用してクライアントに送信するDH公開鍵に署名します。これは、クライアントがハンドシェイク中に検証します。

11
Daniel Szpisjak

暗号スイートの「RSA」は、ランダムなDH公開鍵の署名を指しますが、証明書の署名は指しません

「RSA」は、DH鍵署名とサーバー証明書の公開鍵の両方を指します。

DH公開鍵の署名/検証に使用される鍵は、証明書交換からのものであるか、サーバーの実際の公開鍵を使用していることを確認できません。

証明書にはRSA署名があります(Sha256withRSAencryption)

証明書の署名アルゴリズム(Sha256withRSAencryption)については、サーバー証明書の発行者次第であり、サーバー証明書の検証に使用されます。実際のデータ交換には関与せず、ここでは関係ありません。

次に、TLS-ECDHE-RSAの場合、その機能は何ですか?

ご指摘のとおり、「ECDHE」は対称秘密鍵がネットワーク上で送信されないようにします。したがって、サーバー証明書の秘密鍵が1日侵害されても、以前に交換された秘密鍵は復号化されず、以前に送信されたデータは安全なままになります。これは「前方秘密」として知られています。

1
DDoSolitary