rfc9287.original | rfc9287.txt | |||
---|---|---|---|---|
quic M. Thomson | Internet Engineering Task Force (IETF) M. Thomson | |||
Internet-Draft Mozilla | Request for Comments: 9287 Mozilla | |||
Intended status: Standards Track 9 June 2022 | Category: Standards Track July 2022 | |||
Expires: 11 December 2022 | ISSN: 2070-1721 | |||
Greasing the QUIC Bit | Greasing the QUIC Bit | |||
draft-ietf-quic-bit-grease-04 | ||||
Abstract | Abstract | |||
This document describes a method for negotiating the ability to send | This document describes a method for negotiating the ability to send | |||
an arbitrary value for the second-to-most significant bit in QUIC | an arbitrary value for the second-most significant bit in QUIC | |||
packets. | packets. | |||
Discussion Venues | ||||
This note is to be removed before publishing as an RFC. | ||||
Discussion of this document takes place on the QUIC Working Group | ||||
mailing list (quic@ietf.org), which is archived at | ||||
https://mailarchive.ietf.org/arch/browse/quic/ | ||||
(https://mailarchive.ietf.org/arch/browse/quic/). | ||||
Source for this draft and an issue tracker can be found at | ||||
https://github.com/quicwg/quic-bit-grease (https://github.com/quicwg/ | ||||
quic-bit-grease). | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 11 December 2022. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9287. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
2. Conventions and Definitions . . . . . . . . . . . . . . . . . 3 | 2. Conventions and Definitions | |||
3. The Grease QUIC Bit Transport Parameter . . . . . . . . . . . 3 | 3. The Grease QUIC Bit Transport Parameter | |||
3.1. Clearing the QUIC Bit . . . . . . . . . . . . . . . . . . 3 | 3.1. Clearing the QUIC Bit | |||
3.2. Using the QUIC Bit . . . . . . . . . . . . . . . . . . . 4 | 3.2. Using the QUIC Bit | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 5 | 4. Security Considerations | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 | 5. IANA Considerations | |||
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 6. References | |||
6.1. Normative References . . . . . . . . . . . . . . . . . . 5 | 6.1. Normative References | |||
6.2. Informative References . . . . . . . . . . . . . . . . . 6 | 6.2. Informative References | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6 | Author's Address | |||
1. Introduction | 1. Introduction | |||
QUIC [QUIC] intentionally describes a very narrow set of fields that | The version-independent definition of QUIC [QUIC-INVARIANTS] | |||
are visible to entities other than endpoints. Beyond those | intentionally describes a very narrow set of fields that are visible | |||
characteristics that are defined as invariant [QUIC-INVARIANTS], very | to entities other than endpoints. Beyond those characteristics that | |||
little about the "wire image" [RFC8546] of QUIC is visible. | are invariant, very little about the "wire image" [RFC8546] of QUIC | |||
is visible. | ||||
The second-to-most significant bit of the first byte in every QUIC | The second-most significant bit of the first byte in every QUIC | |||
packet is defined as having a fixed value in QUIC version 1 [QUIC]. | packet is defined as having a fixed value in QUIC version 1 [QUIC]. | |||
The purpose of having a fixed value is to allow QUIC to be | The purpose of having a fixed value is to allow endpoints to | |||
efficiently distinguished from other protocols; see [DEMUX] for a | efficiently distinguish QUIC from other protocols; see [DEMUX] for a | |||
description of a system that might use this property. As this bit | description of a system that might use this property. As this bit | |||
can identify a packet as QUIC, it is sometimes referred to as the | can identify a packet as QUIC, it is sometimes referred to as the | |||
"QUIC Bit". | "QUIC Bit". | |||
Where endpoints and the intermediaries that support them do not | Where endpoints and the intermediaries that support them do not | |||
depend on the QUIC Bit having a fixed value, sending the same value | depend on the QUIC Bit having a fixed value, sending the same value | |||
in every packet is more of liability than an asset. If systems come | in every packet is more of a liability than an asset. If systems | |||
to depend on a fixed value, then it might become infeasible to define | come to depend on a fixed value, then it might become infeasible to | |||
a version of QUIC that attributes semantics to this bit. | define a version of QUIC that attributes semantics to this bit. | |||
In order to safeguard future use of this bit, this document defines a | In order to safeguard future use of this bit, this document defines a | |||
QUIC transport parameter that indicates that an endpoint is willing | QUIC transport parameter that indicates that an endpoint is willing | |||
to receive QUIC packets containing any value for this bit. By | to receive QUIC packets containing any value for this bit. By | |||
sending different values for this bit, the hope is that the value | sending different values for this bit, the hope is that the value | |||
will remain available for future use [USE-IT]. | will remain available for future use [USE-IT]. | |||
2. Conventions and Definitions | 2. Conventions and Definitions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
This document uses terms and notational conventions from [QUIC]. | This document uses terms and notational conventions from [QUIC]. | |||
3. The Grease QUIC Bit Transport Parameter | 3. The Grease QUIC Bit Transport Parameter | |||
The grease_quic_bit transport parameter (0x2ab2) can be sent by both | The grease_quic_bit transport parameter (0x2ab2) is defined for QUIC | |||
version 1 [QUIC]. This transport parameter can be sent by both | ||||
client and server. The transport parameter is sent with an empty | client and server. The transport parameter is sent with an empty | |||
value; an endpoint that understands this transport parameter MUST | value; an endpoint that understands this transport parameter MUST | |||
treat receipt of a non-empty value of the transport parameter as a | treat receipt of a non-empty value of the transport parameter as a | |||
connection error of type TRANSPORT_PARAMETER_ERROR. | connection error of type TRANSPORT_PARAMETER_ERROR. | |||
An endpoint that advertises the grease_quic_bit transport parameter | An endpoint that advertises the grease_quic_bit transport parameter | |||
MUST accept packets with the QUIC Bit set to a value of 0. The QUIC | MUST accept packets with the QUIC Bit set to a value of 0. The QUIC | |||
Bit is defined as the second-to-most significant bit of the first | Bit is defined as the second-most significant bit of the first byte | |||
byte of QUIC packets (that is, the value 0x40). | of QUIC packets (that is, the value 0x40). | |||
3.1. Clearing the QUIC Bit | 3.1. Clearing the QUIC Bit | |||
Endpoints that receive the grease_quic_bit transport parameter from a | Endpoints that receive the grease_quic_bit transport parameter from a | |||
peer SHOULD set the QUIC Bit to an unpredictable value unless another | peer SHOULD set the QUIC Bit to an unpredictable value unless another | |||
extension assigns specific meaning to the value of the bit. | extension assigns specific meaning to the value of the bit. | |||
Endpoints can set the QUIC Bit to 0 on all packets that are sent | Endpoints can set the QUIC Bit to 0 on all packets that are sent | |||
after receiving and processing transport parameters. This could | after receiving and processing transport parameters. This could | |||
include Initial, Handshake, and Retry packets. | include Initial, Handshake, and Retry packets. | |||
A client MAY also set the QUIC Bit to 0 in Initial, Handshake, or | A client MAY also set the QUIC Bit to 0 in Initial, Handshake, or | |||
0-RTT packets that are sent prior to receiving transport parameters | 0-RTT packets that are sent prior to receiving transport parameters | |||
from the server. However, a client MUST NOT set the QUIC Bit to 0 | from the server. However, a client MUST NOT set the QUIC Bit to 0 | |||
unless the Initial packets it sends include a token provided by the | unless the Initial packets it sends include a token provided by the | |||
server in a NEW_TOKEN frame (Section 19.7 of [QUIC]), received less | server in a NEW_TOKEN frame (Section 19.7 of [QUIC]), received less | |||
than 604800 seconds (7 days) prior on a connection where the server | than 604800 seconds (7 days) prior on a connection where the server | |||
also included the grease_quic_bit transport parameter. | also included the grease_quic_bit transport parameter. | |||
| This 7 day limit allows for changes in server configuration. | | This 7-day limit allows for changes in server configuration. | |||
| If server configuration changes and a client does not set the | | If server configuration changes and a client does not set the | |||
| QUIC Bit, then it is possible that a server will drop packets, | | QUIC Bit, then it is possible that a server will drop packets, | |||
| resulting in connection failures. | | resulting in connection failures. | |||
A server MUST set the QUIC bit to 0 only after processing transport | A server MUST set the QUIC Bit to 0 only after processing transport | |||
parameters from a client. A server MUST NOT remember that a client | parameters from a client. A server MUST NOT remember that a client | |||
negotiated the extension in a previous connection and set the QUIC | negotiated the extension in a previous connection and set the QUIC | |||
Bit to 0 based on that information. | Bit to 0 based on that information. | |||
An endpoint MUST NOT set the QUIC Bit to 0 without knowing whether | An endpoint MUST NOT set the QUIC Bit to 0 without knowing whether | |||
the peer supports the extension. As Stateless Reset packets | the peer supports the extension. As Stateless Reset packets | |||
(Section 10.3 of [QUIC]) are only used after a loss of connection | (Section 10.3 of [QUIC]) are only used after a loss of connection | |||
state, endpoints are unlikely to be able to set the QUIC Bit to 0 on | state, endpoints are unlikely to be able to set the QUIC Bit to 0 on | |||
Stateless Reset packets. | Stateless Reset packets. | |||
skipping to change at page 4, line 39 ¶ | skipping to change at line 162 ¶ | |||
a randomized value from a value carrying information according to the | a randomized value from a value carrying information according to the | |||
extension. Extensions that use the QUIC Bit MUST negotiate their use | extension. Extensions that use the QUIC Bit MUST negotiate their use | |||
prior to acting on any semantic. | prior to acting on any semantic. | |||
For example, an extension might define a transport parameter that is | For example, an extension might define a transport parameter that is | |||
sent in addition to the grease_quic_bit transport parameter. Though | sent in addition to the grease_quic_bit transport parameter. Though | |||
the value of the QUIC Bit in packets received by a peer might be set | the value of the QUIC Bit in packets received by a peer might be set | |||
according to rules defined by the extension, they might also be | according to rules defined by the extension, they might also be | |||
randomized as specified in this document. | randomized as specified in this document. | |||
Receiving a transport parameter for an extension that uses the QUIC | The receipt of a transport parameter for an extension that uses the | |||
Bit could be used to confirm that a peer supports the semantic | QUIC Bit could be used to confirm that a peer supports the semantic | |||
defined in the extension. To avoid acting on a randomized signal, | defined in the extension. To avoid acting on a randomized signal, | |||
the extension can require that endpoints set the QUIC Bit according | the extension can require that endpoints set the QUIC Bit according | |||
to the rules of the extension, but defer acting on the information | to the rules of the extension but defer acting on the information | |||
conveyed until the transport parameter for the extension is received. | conveyed until the transport parameter for the extension is received. | |||
Extensions that define semantics for the QUIC Bit can be negotiated | Extensions that define semantics for the QUIC Bit can be negotiated | |||
without using the grease_quic_bit transport parameter. However, | without using the grease_quic_bit transport parameter. However, | |||
including both extensions allows for the QUIC Bit to be greased even | including both extensions allows for the QUIC Bit to be greased even | |||
if the alternative use is not supported. | if the alternative use is not supported. | |||
4. Security Considerations | 4. Security Considerations | |||
This document introduces no new security considerations for endpoints | This document introduces no new security considerations for endpoints | |||
or entities that can rely on endpoint cooperation. However, this | or entities that can rely on endpoint cooperation. However, this | |||
change makes the task of identifying QUIC more difficult without | change makes the task of identifying QUIC more difficult without | |||
cooperation of endpoints. This sometimes works counter to the | cooperation of endpoints. This sometimes works counter to the | |||
security goals of network operators who rely on network | security goals of network operators who rely on network | |||
classification to identify threats. | classification to identify threats; see Section 3.1 of | |||
[MANAGEABILITY] for a more comprehensive treatment of this topic. | ||||
5. IANA Considerations | 5. IANA Considerations | |||
This document registers the grease_quic_bit transport parameter in | This document registers the grease_quic_bit transport parameter in | |||
the "QUIC Transport Parameters" registry established in Section 22.3 | the "QUIC Transport Parameters" registry established in Section 22.3 | |||
of [QUIC]. The following fields are registered: | of [QUIC]. The following fields are registered: | |||
Value: 0x2ab2 | Value: 0x2ab2 | |||
Parameter Name: grease_quic_bit | Parameter Name: grease_quic_bit | |||
Status: Permanent | Status: Permanent | |||
Specification: This document. | Specification: RFC 9287 | |||
Date: Date of registration. | ||||
Contact: QUIC Working Group (quic@ietf.org) | Date: 2022-07-13 | |||
Change Controller: IETF (iesg@ietf.org) | Change Controller: IETF (iesg@ietf.org) | |||
Contact: QUIC Working Group (quic@ietf.org) | ||||
Notes: (none) | Notes: (none) | |||
6. References | 6. References | |||
6.1. Normative References | 6.1. Normative References | |||
[QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
<https://www.rfc-editor.org/rfc/rfc9000>. | <https://www.rfc-editor.org/info/rfc9000>. | |||
[QUIC-INVARIANTS] | ||||
Thomson, M., "Version-Independent Properties of QUIC", | ||||
RFC 8999, DOI 10.17487/RFC8999, May 2021, | ||||
<https://www.rfc-editor.org/info/rfc8999>. | ||||
[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/rfc/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/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
6.2. Informative References | 6.2. Informative References | |||
[DEMUX] Aboba, B., Salgueiro, G., and C. Perkins, "Multiplexing | [DEMUX] Aboba, B., Salgueiro, G., and C. Perkins, "Multiplexing | |||
Scheme Updates for QUIC", Work in Progress, Internet- | Scheme Updates for QUIC", Work in Progress, Internet- | |||
Draft, draft-ietf-avtcore-rfc7983bis-04, 12 May 2022, | Draft, draft-ietf-avtcore-rfc7983bis-06, 5 August 2022, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-avtcore- | <https://datatracker.ietf.org/doc/html/draft-ietf-avtcore- | |||
rfc7983bis-04>. | rfc7983bis-06>. | |||
[QUIC-INVARIANTS] | [MANAGEABILITY] | |||
Thomson, M., "Version-Independent Properties of QUIC", | Kuehlewind, M. and B. Trammell, "Manageability of the QUIC | |||
RFC 8999, DOI 10.17487/RFC8999, May 2021, | Transport Protocol", Work in Progress, Internet-Draft, | |||
<https://www.rfc-editor.org/rfc/rfc8999>. | draft-ietf-quic-manageability-18, 15 July 2022, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-quic- | ||||
manageability-18>. | ||||
[RFC8546] Trammell, B. and M. Kuehlewind, "The Wire Image of a | [RFC8546] Trammell, B. and M. Kuehlewind, "The Wire Image of a | |||
Network Protocol", RFC 8546, DOI 10.17487/RFC8546, April | Network Protocol", RFC 8546, DOI 10.17487/RFC8546, April | |||
2019, <https://www.rfc-editor.org/rfc/rfc8546>. | 2019, <https://www.rfc-editor.org/info/rfc8546>. | |||
[USE-IT] Thomson, M. and T. Pauly, "Long-Term Viability of Protocol | [USE-IT] Thomson, M. and T. Pauly, "Long-Term Viability of Protocol | |||
Extension Mechanisms", RFC 9170, DOI 10.17487/RFC9170, | Extension Mechanisms", RFC 9170, DOI 10.17487/RFC9170, | |||
December 2021, <https://www.rfc-editor.org/rfc/rfc9170>. | December 2021, <https://www.rfc-editor.org/info/rfc9170>. | |||
Author's Address | Author's Address | |||
Martin Thomson | Martin Thomson | |||
Mozilla | Mozilla | |||
Email: mt@lowentropy.net | Email: mt@lowentropy.net | |||
End of changes. 31 change blocks. | ||||
83 lines changed or deleted | 77 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |