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

7. 暗号化とトランスポートのハンドシェイク

7. 暗号化とトランスポートのハンドシェイク

QUICは、接続確立のレイテンシを最小化するために、暗号化とトランスポートのハンドシェイクを組み合わせたものに依存しています。QUICは、CRYPTOフレーム (セクション 19.6) を使用して暗号化ハンドシェイクを送信します。QUICのバージョン1は、[QUIC-TLS] で説明されているようにTLS 1.3を使用します; 異なるQUICバージョンは異なる暗号化ハンドシェイクプロトコルを使用できます。

QUICは、暗号化ハンドシェイクデータの信頼性のある順序付けられた配信を提供します。QUICパケット保護は、ハンドシェイクプロトコルの可能な限り多くを暗号化するために使用されます。暗号化ハンドシェイクは次のプロパティを提供しなければなりません (MUST):

  • 認証された鍵交換、ここで

    • サーバーは常に認証され、
    • クライアントはオプションで認証され、
    • すべての接続は異なる関連性のない鍵を生成し、
    • 鍵材料は0-RTTと1-RTTの両方のパケットのパケット保護に使用可能であり、
    • 1-RTT鍵は前方秘匿性を持つ
  • 両エンドポイントのトランスポートパラメータの値の認証された交換、およびサーバートランスポートパラメータの機密性保護 (セクション 7.4 を参照)

  • アプリケーションプロトコルの認証されたネゴシエーション (TLSはこの目的でALPN [ALPN] を使用します)

CRYPTOフレームは、異なるパケット番号スペースで送信できます (セクション 12.3)。暗号化ハンドシェイクデータの順序付けられた配信を保証するためにCRYPTOフレームで使用されるオフセットは、各パケット番号スペースでゼロから始まります。

[QUIC-TLS] は、TLS 1.3がQUICでどのように使用されるかを説明しています。

7.1 ハンドシェイクフローの例

TLSがQUICとどのように統合されるかの詳細は [QUIC-TLS] で提供されていますが、ハンドシェイクがどのように使用されるかの例がここに提供されています。

7.2 接続IDのネゴシエーション

接続IDは、パケットの一貫したルーティングを保証するために使用されます。ロングヘッダーには2つの接続IDが含まれています: 宛先接続IDはパケットの受信者によって選択され、一貫したルーティングを提供するために使用されます; ソース接続IDは、ピアによって使用される宛先接続IDを設定するために使用されます。

7.3 接続IDの認証

ハンドシェイク中に各エンドポイントが接続IDについて行う選択は、トランスポートパラメータに送信されたすべての値を含めることで認証されます; セクション 7.4 を参照してください。

7.4 トランスポートパラメータ

接続確立中、両エンドポイントはトランスポートパラメータの認証された宣言を行います。エンドポイントは、これらのパラメータによって示される制限に従わなければなりません (MUST); 各パラメータの説明には、その処理のルールが含まれています。

7.5 暗号化メッセージのバッファリング

実装は、順序外で受信したCRYPTOデータのバッファを維持する必要があります。