本文へスキップ
ecdsa.com

ClientHello

TLS ハンドシェイクで最初に平文で送られるメッセージで、クライアントはここに、対応するバージョン、暗号スイート、グループ、署名アルゴリズム、キーシェア(key share)、そしてサーバー名などの拡張を列挙します。
別表記Client HelloClientHello messageGREASE

サーバーがパラメーターを選ぶのに必要な情報は、すべてここに含まれています。supported_versions、cipher_suites、supported_groups(10)、key_share(51)、signature_algorithms(13)、server_name(0)、ALPN(16)、pre_shared_key(41、常に最後)などです。暗号化されていないため、Encrypted Client Hello を使わない限り接続先のホスト名が明らかになり、クライアントソフトウェアのフィンガープリントも読み取れます。

サイズが再び問題になっています。ハイブリッドの X25519MLKEM768 のキーシェアでサイズが約 1.2 KB 増えるため、最新の ClientHello は 2 つの TCP セグメントや QUIC パケットにまたがることがよくあります。ClientHello が 1 つのパケットに収まると想定していた一部のサーバー、ロードバランサー、ファイアウォールは、ブラウザーがポスト量子鍵交換を有効にしたときに障害を起こしました。これは、Chrome がバージョン 124(2024年)でハイブリッドの Kyber キーシェアをデフォルトで有効にしたあと、tldr.fail にまとめられたサーバーのバグの一種です。

GREASE 値(RFC 8701)と、Chrome による拡張のランダムな並び順(2023年初めから)は、サーバーが ClientHello の厳密な内容を前提にして硬直化するのを防ぎます。TLS フィンガープリントツールで、お使いのブラウザーが送る内容を確認できます。

規格と参考文献

すべての用語