要約

  • CRYPTO は、ある暗号化レベルの信頼できる握手バイト列から切り出した連続範囲である。
  • フレームやパケットの境界だけでは、完全な TLS メッセージ、フライト、証明書受理、鍵の利用可能性、アプリ準備完了は示せない。
  • 記録では、QUIC の搬送、レベル別再構成、TLS 解析、鍵、再送、完了状態を分離する必要がある。

観測者が保護を解除した QUIC パケットから CRYPTO フレームを見つけ、すぐに完全な ClientHello や Finished と記録する。これはもっとも起こりやすい読み違いである。QUIC が示すのは、特定の暗号化レベルに属する握手バイト列の offset と length だけだ。その範囲が TLS メッセージの先頭から末尾までを含む、という意味はない。CRYPTO に明示的なメッセージ終端もない。

フレーム自体は一つの QUIC パケットに収まる。しかし握手データが一つのパケットに収まるとは限らない。TLS の一つのメッセージやフライトは複数の CRYPTO フレーム、複数のパケットにまたがる。一つのフレームがメッセージの途中から始まり、途中で終わることもある。失われた暗号ハンドシェイク情報を再送する際は、必要な範囲を新しい CRYPTO フレームに組み直し、元のバイトと同じ暗号化レベルの鍵で保護する。境界が変わっても、二つ目の TLS メッセージや再生の証拠にはならない。

CRYPTO のバイト列は接続全体で一つではない。各暗号化レベルが別々の列を持ち、offset はそれぞれゼロから始まる。Initial、Handshake、1-RTT のパケットには CRYPTO を載せられるが、0-RTT には載せられない。異なるレベルの同じ offset を一つの列に連結してはいけない。受信側の QUIC はレベルごとにデータを配置し、欠落部分を保持し、TLS の準備ができるまで将来レベルのデータを待たせる。連続した範囲だけが順序どおり TLS に渡される。

ここで QUIC と TLS の責任を分ける必要がある。QUIC は offset に基づく順序付けと、順不同データのバッファリングを担う。TLS は順序どおりに渡されたバイトをバッファし、完全なメッセージやフライトとして解析できるかを判断する。TLS は段階的に処理することも、完全な単位を待つこともある。パケット保護の解除は TLS 解析の成功ではない。鍵が利用可能になったという事実も、単一のフレームからは導けず、TLS 入力処理の結果として記録するべきである。鍵がインストール済みであることも、そのフレームだけでは示せない。

運用台帳には、QUIC のバージョン、パケット種別、パケット番号空間、暗号化レベル、パケット保護の結果、パケット番号を記録する。そのうえで CRYPTO の offset、length、プライバシーに配慮したデータダイジェスト、レベルごとの連続受信範囲、QUIC 内に残るギャップ、TLS に渡した範囲と時刻を別々に持つ。TLS が完全なメッセージを解析した後でなければ、メッセージ種別を記録してはいけない。

CRYPTO が運ぶのは TLS ハンドシェイクメッセージだけである。TLS アラートは QUIC の CONNECTION_CLOSE エラーコードに対応付けられ、TLS のアプリケーションデータやその他のコンテンツ種別を CRYPTO フレームで運ぶことはできない。CRYPTO はフロー制御されず、ストリーム ID、FIN、明示的な終了もない。実装は少なくとも 4096 バイトの順不同 CRYPTO データを扱える必要がある。最大 offset が過大なら FRAME_ENCODING_ERROR または CRYPTO_BUFFER_EXCEEDED になり得る。これは搬送と資源保護の情報であり、証明書検証、鍵遷移、握手完了、アプリ準備完了の証明ではない。

TLS が高いレベルへ進んだとき、以前のレベルのデータが TLS に未消費のまま残っていれば、エンドポイントは PROTOCOL_VIOLATION と扱う。対応するパケット番号空間の鍵が破棄されれば Initial や Handshake のデータも破棄されるが、その出来事は個々の TLS メッセージ境界ではない。TLS の握手完了は、Finished の送信と相手の Finished の検証後に TLS スタックが報告したときに成立する。QUIC の確認とアプリ準備完了は、さらに別の状態である。

近い論点との混同も避けたい。TR-048 は握手確認とアプリ準備完了、TR-049 は一つの UDP データグラム内のパケット合体、TR-045 は ACK の証明範囲、TR-056 はパケット番号の再構成、TR-063 は preferred-address への移行を扱う。いずれも CRYPTO フレームの搬送境界を TLS の意味境界には変えない。

結論は、観測した層に応じた強さの主張だけをすることだ。フレームは特定レベルの特定範囲が運ばれたことを示す。再構成は連続性を示す。TLS の完全メッセージ解析、証明書、鍵、TLS 完了、QUIC 確認、アプリ準備完了には、それぞれ固有の受領記録が要る。