跳到主要内容

7. 加密和传输握手

7. 加密和传输握手 (Cryptographic and Transport Handshake)

QUIC 依赖组合式加密和传输 handshake 来最小化 connection establishment latency. QUIC 使用 CRYPTO frame (第 19.6 节) 传输加密 handshake. QUIC 版本 1 使用 [QUIC-TLS] 中描述的 TLS 1.3; 不同 QUIC version 可以使用不同的加密 handshake 协议.

QUIC 为加密 handshake 数据提供可靠的有序递送. QUIC packet protection 用于尽可能多地加密 handshake 协议. 加密 handshake MUST 提供以下属性:

  • 认证的密钥交换, 其中

    • server 始终被认证,
    • client 可选地被认证,
    • 每个 connection 都产生不同且不相关的密钥,
    • keying material 可用于 0-RTT 和 1-RTT packet 的 packet protection, 并且
    • 1-RTT key 具有 forward secrecy
  • 两个 endpoint 的 transport parameter 值的认证交换, 以及 server transport parameter 的 confidentiality protection (见第 7.4 节)

  • 应用协议的认证协商 (TLS 为此使用 ALPN [ALPN])

CRYPTO frame 可以在不同 packet number space 中发送 (第 12.3 节). CRYPTO frame 为确保加密 handshake 数据有序递送而使用的 offset 在每个 packet number space 中都从零开始.

[QUIC-TLS] 描述了 TLS 1.3 如何与 QUIC 一起使用.

7.1 示例握手流程 (Example Handshake Flows)

[QUIC-TLS] 提供了 TLS 如何与 QUIC 集成的细节, 但这里提供了一些 handshake 使用方式的示例.

7.2 协商 Connection ID (Negotiating Connection IDs)

connection ID 用于确保 packet 路由一致. long header 包含两个 connection ID: Destination Connection ID 由 packet 的接收方选择, 用于提供一致路由; Source Connection ID 用于设置 peer 使用的 Destination Connection ID.

7.3 认证 Connection ID (Authenticating Connection IDs)

每个 endpoint 在 handshake 期间对 connection ID 作出的选择, 通过在 transport parameter 中包含所有已发送值来认证; 见第 7.4 节.

7.4 传输参数 (Transport Parameters)

在 connection establishment 期间, 两个 endpoint 都对其 transport parameter 作出认证声明. endpoint MUST 遵守这些 parameter 隐含的限制; 每个 parameter 的描述都包括其处理规则.

7.5 加密消息缓冲 (Cryptographic Message Buffering)

实现需要维护一个缓冲区, 用于保存乱序收到的 CRYPTO 数据.