rfc9369v2.txt | rfc9369.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) M. Duke | Internet Engineering Task Force (IETF) M. Duke | |||
Request for Comments: 9369 Google LLC | Request for Comments: 9369 Google LLC | |||
Category: Standards Track February 2023 | Category: Standards Track May 2023 | |||
ISSN: 2070-1721 | ISSN: 2070-1721 | |||
QUIC Version 2 | QUIC Version 2 | |||
Abstract | Abstract | |||
This document specifies QUIC version 2, which is identical to QUIC | This document specifies QUIC version 2, which is identical to QUIC | |||
version 1 except for some trivial details. Its purpose is to combat | version 1 except for some trivial details. Its purpose is to combat | |||
various ossification vectors and exercise the version negotiation | various ossification vectors and exercise the version negotiation | |||
framework. It also serves as a template for the minimum changes in | framework. It also serves as a template for the minimum changes in | |||
any future version of QUIC. | any future version of QUIC. | |||
Note that "version 2" is an informal name for this proposal that | Note that "version 2" is an informal name for this proposal that | |||
indicates it is the second standards-track QUIC version. The | indicates it is the second version of QUIC to be published as a | |||
protocol specified here uses a version number other than 2 in the | Standards Track document. The protocol specified here uses a version | |||
wire image, in order to minimize ossification risks. | number other than 2 in the wire image, in order to minimize | |||
ossification risks. | ||||
Status of This Memo | Status of This Memo | |||
This is an Internet Standards Track document. | This is an Internet Standards Track document. | |||
This document is a product of the Internet Engineering Task Force | This document is a product of the Internet Engineering Task Force | |||
(IETF). It represents the consensus of the IETF community. It has | (IETF). It represents the consensus of the IETF community. It has | |||
received public review and has been approved for publication by the | received public review and has been approved for publication by the | |||
Internet Engineering Steering Group (IESG). Further information on | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | Internet Standards is available in Section 2 of RFC 7841. | |||
skipping to change at line 88 ¶ | skipping to change at line 89 ¶ | |||
Acknowledgments | Acknowledgments | |||
Author's Address | Author's Address | |||
1. Introduction | 1. Introduction | |||
QUIC version 1 [QUIC] has numerous extension points, including the | QUIC version 1 [QUIC] has numerous extension points, including the | |||
version number that occupies the second through fifth bytes of every | version number that occupies the second through fifth bytes of every | |||
long header (see [QUIC-INVARIANTS]). If experimental versions are | long header (see [QUIC-INVARIANTS]). If experimental versions are | |||
rare, and QUIC version 1 constitutes the vast majority of QUIC | rare, and QUIC version 1 constitutes the vast majority of QUIC | |||
traffic, there is the potential for middleboxes to ossify on the | traffic, there is the potential for middleboxes to ossify on the | |||
version bytes always being 0x00000001. | version bytes that are usually 0x00000001. | |||
In QUIC version 1, Initial packets are encrypted with the version- | In QUIC version 1, Initial packets are encrypted with the version- | |||
specific salt, as described in Section 5.2 of [QUIC-TLS]. Protecting | specific salt, as described in Section 5.2 of [QUIC-TLS]. Protecting | |||
Initial packets in this way allows observers to inspect their | Initial packets in this way allows observers to inspect their | |||
contents, which includes the TLS Client Hello or Server Hello | contents, which includes the TLS Client Hello or Server Hello | |||
messages. Again, there is the potential for middleboxes to ossify on | messages. Again, there is the potential for middleboxes to ossify on | |||
the version 1 key derivation and packet formats. | the version 1 key derivation and packet formats. | |||
Finally, [QUIC-VN] describes two mechanisms endpoints can use to | Finally, [QUIC-VN] describes two mechanisms endpoints can use to | |||
negotiate which QUIC version to select. The "incompatible" version | negotiate which QUIC version to select. The "incompatible" version | |||
skipping to change at line 153 ¶ | skipping to change at line 154 ¶ | |||
* Initial: 0b01 | * Initial: 0b01 | |||
* 0-RTT: 0b10 | * 0-RTT: 0b10 | |||
* Handshake: 0b11 | * Handshake: 0b11 | |||
* Retry: 0b00 | * Retry: 0b00 | |||
3.3. Cryptography Changes | 3.3. Cryptography Changes | |||
The values below were chosen randomly. | ||||
3.3.1. Initial Salt | 3.3.1. Initial Salt | |||
The salt used to derive Initial keys in Section 5.2 of [QUIC-TLS] | The salt used to derive Initial keys in Section 5.2 of [QUIC-TLS] | |||
changes to: | changes to: | |||
initial_salt = 0x0dede3def700a6db819381be6e269dcbf9bd2ed9 | initial_salt = 0x0dede3def700a6db819381be6e269dcbf9bd2ed9 | |||
This is the first 20 bytes of the sha256sum of "QUICv2 salt". | This is the first 20 bytes of the sha256sum of "QUICv2 salt". | |||
3.3.2. HMAC-based Key Derivation Function (HKDF) Labels | 3.3.2. HMAC-based Key Derivation Function (HKDF) Labels | |||
skipping to change at line 268 ¶ | skipping to change at line 267 ¶ | |||
The client MUST NOT send 0-RTT packets using the negotiated version, | The client MUST NOT send 0-RTT packets using the negotiated version, | |||
even after processing a packet of that version from the server. | even after processing a packet of that version from the server. | |||
Servers can accept 0-RTT and then process 0-RTT packets from the | Servers can accept 0-RTT and then process 0-RTT packets from the | |||
original version. | original version. | |||
5. TLS Resumption and NEW_TOKEN Tokens | 5. TLS Resumption and NEW_TOKEN Tokens | |||
TLS session tickets and NEW_TOKEN tokens are specific to the QUIC | TLS session tickets and NEW_TOKEN tokens are specific to the QUIC | |||
version of the connection that provided them. Clients MUST NOT use a | version of the connection that provided them. Clients MUST NOT use a | |||
session ticket or token from a QUIC version 1 connection to initiate | session ticket or token from a QUIC version 1 connection to initiate | |||
a QUIC version 2 connection, and vice versa. | a QUIC version 2 connection, and vice versa. When a connection | |||
includes compatible version negotiation, any issued server tokens are | ||||
considered to originate from the negotiated version, not the original | ||||
one. | ||||
Servers MUST validate the originating version of any session ticket | Servers MUST validate the originating version of any session ticket | |||
or token and not accept one issued from a different version. A | or token and not accept one issued from a different version. A | |||
rejected ticket results in falling back to a full TLS handshake, | rejected ticket results in falling back to a full TLS handshake, | |||
without 0-RTT. A rejected token results in the client address | without 0-RTT. A rejected token results in the client address | |||
remaining unverified, which limits the amount of data the server can | remaining unverified, which limits the amount of data the server can | |||
send. | send. | |||
After compatible version negotiation, any resulting session ticket | After compatible version negotiation, any resulting session ticket | |||
maps to the negotiated version rather than the original one. | maps to the negotiated version rather than the original one. | |||
skipping to change at line 302 ¶ | skipping to change at line 304 ¶ | |||
Clients interested in combating middlebox ossification can initiate a | Clients interested in combating middlebox ossification can initiate a | |||
connection using version 2 if they are reasonably certain the server | connection using version 2 if they are reasonably certain the server | |||
supports it and if they are willing to suffer a round-trip penalty if | supports it and if they are willing to suffer a round-trip penalty if | |||
they are incorrect. In particular, a server that issues a session | they are incorrect. In particular, a server that issues a session | |||
ticket for version 2 indicates an intent to maintain version 2 | ticket for version 2 indicates an intent to maintain version 2 | |||
support while the ticket remains valid, even if support cannot be | support while the ticket remains valid, even if support cannot be | |||
guaranteed. | guaranteed. | |||
7. Applicability | 7. Applicability | |||
This version of QUIC provides no change from QUIC version 1 relating | QUIC version 2 provides no change from QUIC version 1 for the | |||
to the capabilities available to applications. Therefore, all | capabilities available to applications. Therefore, all Application- | |||
Application-Layer Protocol Negotiation (ALPN) [RFC7301] codepoints | Layer Protocol Negotiation (ALPN) [RFC7301] codepoints specified to | |||
specified to operate over QUIC version 1 can also operate over this | operate over QUIC version 1 can also operate over this version of | |||
version of QUIC. In particular, both the "h3" [HTTP/3] and "doq" | QUIC. In particular, both the "h3" [HTTP/3] and "doq" [RFC9250] | |||
[RFC9250] ALPNs can operate over QUIC version 2. | ALPNs can operate over QUIC version 2. | |||
Unless otherwise stated, all QUIC extensions defined to work with | Unless otherwise stated, all QUIC extensions defined to work with | |||
version 1 also work with version 2. | version 1 also work with version 2. | |||
8. Security Considerations | 8. Security Considerations | |||
QUIC version 2 introduces no changes to the security or privacy | QUIC version 2 introduces no changes to the security or privacy | |||
properties of QUIC version 1. | properties of QUIC version 1. | |||
The mandatory version negotiation mechanism guards against downgrade | The mandatory version negotiation mechanism guards against downgrade | |||
skipping to change at line 361 ¶ | skipping to change at line 363 ¶ | |||
[QUIC-RECOVERY] | [QUIC-RECOVERY] | |||
Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection | Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection | |||
and Congestion Control", RFC 9002, DOI 10.17487/RFC9002, | and Congestion Control", RFC 9002, DOI 10.17487/RFC9002, | |||
May 2021, <https://www.rfc-editor.org/info/rfc9002>. | May 2021, <https://www.rfc-editor.org/info/rfc9002>. | |||
[QUIC-TLS] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | [QUIC-TLS] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | |||
QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021, | QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021, | |||
<https://www.rfc-editor.org/info/rfc9001>. | <https://www.rfc-editor.org/info/rfc9001>. | |||
[QUIC-VN] Schinazi, D. and E. Rescorla, "Compatible Version | [QUIC-VN] Schinazi, D. and E. Rescorla, "Compatible Version | |||
Negotiation for QUIC", RFC 9368, DOI 10.17487/RFC9368, | Negotiation for QUIC", RFC 9368, DOI 10.17487/RFC9368, May | |||
February 2023, <https://www.rfc-editor.org/info/rfc9368>. | 2023, <https://www.rfc-editor.org/info/rfc9368>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
End of changes. 7 change blocks. | ||||
16 lines changed or deleted | 18 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |