TLS Encrypted Client Hello用のSSLKEYLOGFILE拡張の提案仕様

TLS Encrypted Client Hello用のSSLKEYLOGFILE拡張として『SSLKEYLOGFILE Extension for ECH』という提案仕様が提出されています。

背景

提案仕様の説明の前に、簡単にSSLKEYLOGFILEとECHについて補足します。

SSLKEYLOGFILEについて

TLS通信を復号するためには鍵の情報が必要です。トラブルシュートやデバッグのために、多くのTLS実装では"SSLKEYLOGFILE形式"でシークレットをログとして出力できます。例えば、OpenSSLやChromeブラウザなどがオプションを指定することでSSLKEYLOGFILEファイルを出力します。

具体的にはこのように各種シークレットが16進数で表記されます。

# SSL/TLS secrets log file, generated by OpenSSL
SERVER_HANDSHAKE_TRAFFIC_SECRET 24878b76381f03203d3c4772bf51c49c5786c7adcf7d8fdd644460d5deafd6d5 b48d1fdc6b10b6f4765456e8407649b25971f3384e63461bdacab59c2488cacb8bb7dcde0aa1e2c6ede9390b568624f4
EXPORTER_SECRET 24878b76381f03203d3c4772bf51c49c5786c7adcf7d8fdd644460d5deafd6d5 b56d696bd2fc3ef533dea35a6f907586cbbd7d049fd027d9964d3b924435ea157bfc955a55ef1d6ea7d5012ea906dee3
SERVER_TRAFFIC_SECRET_0 24878b76381f03203d3c4772bf51c49c5786c7adcf7d8fdd644460d5deafd6d5 4676aa104c6ac82822f4450c5a8d3990f70b64005bed05e50a9586e4cd2a6c0187fec0220a83ed21e69eb61fd9e9cfaf
CLIENT_HANDSHAKE_TRAFFIC_SECRET 24878b76381f03203d3c4772bf51c49c5786c7adcf7d8fdd644460d5deafd6d5 6ef4d40e4103a2aa00c985a5287314048fdaddd781f7ee90a2b98513efef6fde04a00950721660ba9e5afb184fbafc70
CLIENT_TRAFFIC_SECRET_0 24878b76381f03203d3c4772bf51c49c5786c7adcf7d8fdd644460d5deafd6d5 8408e4b76dfcb3850eea590c8be1a0fb42a5c63f85246b1b6b16661241670f19c0a511b3d683d5bafc650e89efc04890

また、WireSharkにSSLKEYLOGFILEを食わせることで、キャプチャした該当通信を復号することもできます。

SSLKEYLOGFILEは、現在『The SSLKEYLOGFILE Format for TLS』として標準化が進められています。

Encrypted Client Hello

TLSハンドシェイク中にクライアントから送信されるClientHelloは、暗号化されません。特にSNI拡張は通信先のドメインが記載されるため、通信の観測者に情報を与えてしまいます。

そこで、ClientHelloの暗号化『TLS Encrypted Client Hello』という仕様が提案されています。詳しい仕組みについては詳しい解説が幾つか公開されておりますので、そちらに譲ります。

blog.cloudflare.com

SSLKEYLOGFILE Extension for Encrypted Client Hello

SSLKEYLOGFILE Extension for ECH』では、SSLKEYLOGFILEに以下の情報を記載可能に拡張する。

  • ECH_SECRET: ECHで使われる、HPKE キー スケジュールで生成されるシークレット
  • ECH_CONFIG: ECH拡張に使用されたECHConfigの値 (16進数表記)

これらの情報によりEncrypted Client Helloが復号できるようになる。