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 数据.