メインコンテンツまでスキップ

3. プロトコル概要 (Protocol Overview)

QUIC [QUIC-TRANSPORT] は、パケットの機密性と完全性保護を担当します。そのために、TLS ハンドシェイク [TLS13] から導出された鍵を使用しますが、TCP 上の TLS とは異なり、TLS ハンドシェイクメッセージとアラートメッセージは QUIC トランスポート層によって直接伝送されます。QUIC トランスポート層は、図3に示すように、TLS レコード層の役割を引き継ぎます。

+--------------+--------------+ +-------------+
| TLS | TLS | | QUIC |
| ハンド | アラート | | アプリケー |
| シェイク | | | ション |
| | | | (h3, など) |
+--------------+--------------+-+-------------+
| |
| QUIC トランスポート層 |
| (ストリーム、信頼性、輻輳制御など) |
| |
+---------------------------------------------+
| |
| QUIC パケット保護 |
| |
+---------------------------------------------+

図3: QUIC の階層化

QUIC は、認証と、セキュリティとパフォーマンスの両方にとって重要なパラメータのネゴシエーションについても TLS に依存しています。

これら2つのプロトコルは厳密に階層化されているのではなく、協力して動作します:QUIC は TLS ハンドシェイクを使用し、TLS は QUIC が提供する信頼性、順序付き配信、およびレコード層を使用します。

高レベルでは、TLS コンポーネントと QUIC コンポーネント間には主に2つの相互作用があります:

  • TLS コンポーネントは、QUIC コンポーネントを介してメッセージを送受信します。QUIC は TLS に信頼性のあるストリーム抽象化を提供します。

  • TLS コンポーネントは、QUIC コンポーネントに一連の更新を提供します。これには、(a) インストールする新しいパケット保護鍵、および (b) ハンドシェイク完了、サーバー証明書などの状態変更が含まれます。

図4は、これらの相互作用をより詳細に示しており、QUIC パケット保護が特に指摘されています。

+------------+                               +------------+
| |<---- ハンドシェイクメッセージ --->| |
| |<- 0-RTTパラメータの検証 ----->| |
| |<--------- 0-RTT鍵 ----------| |
| QUIC |<------- ハンドシェイク鍵 -----| TLS |
| |<--------- 1-RTT鍵 ----------| |
| |<------- ハンドシェイク完了 ---| |
+------------+ +------------+
| ^
| 保護 | 保護された
v | パケット
+------------+
| QUIC |
| パケット |
| 保護 |
+------------+

図4: QUIC と TLS の相互作用

TCP 上の TLS とは異なり、データの送信を希望する QUIC アプリケーションは、TLS アプリケーションデータレコードを使用してデータを送信しません。代わりに、QUIC STREAM フレームまたは他のフレームタイプとして送信し、その後 QUIC パケットで伝送されます。