web-dev-qa-db-ja.com

この特定のTLS 1.2接続では、いくつのキーが使用されますか?

HTTPS connection overview

それは接続のメカニズムを示しています。

この接続でいくつのキーが使用されていますか?彼らは何ですか?誰が知っていますか?各キーの目的は何ですか?

7
Sh7ne

少なくとも3つのキーがあります。

  1. X.509公開鍵:接続できるすべての関係者とサーバーに知られています。サーバーの識別に使用され、初期鍵交換(非対称鍵ペアの前半)の一部として使用されます。
  2. X.509秘密鍵:サーバーのみが知っています:サーバーが公開鍵の主体(非対称鍵ペアの後半)としてそれ自体を表す資格があることを証明するために使用されます
  3. セッションキー:接続のサーバーと単一のクライアントの両方に認識されます。キー交換を介してネゴシエートされ、暗号スイートの構成に基づいて置き換えられた対称キー。 TLS接続を介して送信されるデータを暗号化するために使用されます

特定の構成では、セッション中にセッションキーをシームレスに置き換えることができます。これを使用して、PFS(完全転送秘密)をサポートする暗号スイートで提供できます。

単一の接続に使用できるセッションキーの数に固有の制限はありません。

一部の構成では、1つ以上のX.509 CA中間公開鍵(チェーン)もサーバーの公開鍵の署名チェーンに含まれています。これらは、同じチェーンによって署名された任意のサーバーとサーバーに接続するすべての関係者に知られています。サーバーは、TLSハンドシェイク中にこれらのキーを提供する必要があります。 CAで検証されたTLS接続のすべての構成で、チェーンは、クライアントソフトウェアが本質的に信頼するように構成されているルートCAによってルートで署名されます。

CA証明書を含める場合、少なくとも4つのキーがあり、中間CA証明書が使用される場合はさらに多くのキーがあります。

2
Alain O'Dea

全部で16のキーがプレイに必要です。

(a)GeoTrust Global CA署名鍵。GeoTrustの証明書に自己署名し、Google Internet Authority G2の証明書に署名するために使用されます。ジオトラストだけがそれを知っています。

(b)GeoTrust Global CA検証キー。GeoTrustの証明書とGoogle Internet Authority G2の証明書の署名を検証するために使用されます。誰もが知っています。

(c)Google.caの証明書への署名に使用されるGoogle Internet Authority G2の署名鍵。 Google Internet Authority G2だけがそれを認識しています。

(d)Google Internet Authority G2の検証キー。google.caの証明書の署名を検証するために使用されます。誰もが知っています。

(e)Google.caの一時的な楕円曲線Diffie-Hellman(ECDHE)公開鍵に署名するために使用されるGoogle.caの署名鍵。 google.caだけがそれを知っています。

(f)Google.caの検証鍵。google.caのECDHE公開鍵の署名を検証するために使用されます。誰もが知っています。

(g)Google.caのECDHE公開鍵。鍵の合意のためにクライアントに送信されます。誰もが知っています。

(h)Google.caのECDHE秘密鍵。対応する公開鍵を生成し、クライアントの公開鍵に適用して共有シークレットを形成するために使用されます。 Google.caだけがそれを知っています。

(i)クライアントのECDHE公開鍵。鍵の合意のためにgoogle.caに送信されます。誰もが知っています。

(j)対応する公開鍵を生成し、google.caの公開鍵に適用して共有秘密を形成するために使用されるクライアントのECDHE秘密鍵。クライアントだけがそれを知っています。

(k)共有秘密。これはECDHE鍵交換の結果であり、プリマスターシークレットとも呼ばれます。クライアントとサーバーだけがそれを知っています。

(l)マスターシークレット。プレマスターシークレットとクライアント/サーバーのランダム値から派生し、次の対称キーを導出するために使用されます。クライアントとサーバーだけがそれを知っています。

(m)クライアント書き込み対称暗号化キー。クライアントとサーバーだけがそれを知っています。

(n)サーバー書き込み対称暗号化キー。クライアントとサーバーだけがそれを知っています。

(o)クライアント書き込みMACキー。クライアントとサーバーだけがそれを知っています。

(p)サーバー書き込みMACキー。クライアントとサーバーだけがそれを知っています。

2
Sh7ne

HTTPS接続の最初の数ミリ秒 、大量のキーの生成セクションを参照してください。

あなたが持っている:

  • cient_write_MAC_secret [SecurityParameters.hash_size]
  • server_write_MAC_secret [SecurityParameters.hash_size]
  • client_write_key [SecurityParameters.key_material_length]
  • server_write_key [SecurityParameters.key_material_length]
  • client_write_IV [SecurityParameters.IV_size]
  • server_write_IV [SecurityParameters.IV_size]

ただし、IVsキーを呼び出すかどうかは別の問題です(AESストリーム暗号モードなどでは使用されない場合もあります)。

また、証明書には秘密鍵と公開鍵が含まれます。

両方の当事者は、サーバーだけが知っている秘密鍵を除いて、上記のすべての鍵を知っています。 MACは各メッセージの認証に使用され、write_keysはメッセージの暗号化に使用されます。クライアントとサーバーは異なるキーを使用してメッセージを暗号化することに注意してください。

公開鍵と秘密鍵のペアは、サーバーを認証するために使用されます。つまり、クライアントは、正しいサーバーと通信していて、接続が傍受されていないことを認識しています。これは、クライアントが秘密鍵を知っているサーバーのみが解読できるシークレットを暗号化するか、サーバーが秘密鍵で署名された乱数(Diffie-Hellmanの場合)を送信するためです。クライアントは公開鍵を使用して署名を検証できます。

0
SilverlightFox