RFC 9287 | Greasing the QUIC Bit | August 2022 |
Thomson | Standards Track | [Page] |
This document describes a method for negotiating the ability to send anarbitrary value for the second-most significant bit in QUIC packets.¶
This is an Internet Standards Track document.¶
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.¶
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained athttps://www.rfc-editor.org/info/rfc9287.¶
Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
The version-independent definition of QUIC[QUIC-INVARIANTS]intentionally describes a very narrow set of fields that are visibleto entities other than endpoints. Beyond those characteristics thatare invariant, very little about the "wire image"[RFC8546] of QUICis visible.¶
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]. The purpose of having a fixed value is to allow endpoints to efficiently distinguish QUIC from other protocols; see[DEMUX] for a description of asystem that might use this property. As this bit can identify a packet as QUIC,it is sometimes referred to as the "QUIC Bit".¶
Where endpoints and the intermediaries that support them do not depend on theQUIC Bit having a fixed value, sending the same value in every packet is more of a liability than an asset. If systems come to depend on a fixed value, then itmight become infeasible to define a version of QUIC that attributes semantics tothis bit.¶
In order to safeguard future use of this bit, this document defines a QUICtransport parameter that indicates that an endpoint is willing to receive QUICpackets containing any value for this bit. By sending different values for thisbit, the hope is that the value will remain available for future use[USE-IT].¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14[RFC2119][RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This document uses terms and notational conventions from[QUIC].¶
The grease_quic_bit transport parameter (0x2ab2) is defined for QUICversion 1[QUIC]. This transport parameter can be sent by both client andserver. The transport parameter is sent with an empty value; an endpoint thatunderstands this transport parameterMUST treat receipt of a non-empty value ofthe transport parameter as a connection error of type TRANSPORT_PARAMETER_ERROR.¶
An endpoint that advertises the grease_quic_bit transport parameterMUST acceptpackets with the QUIC Bit set to a value of 0. The QUIC Bit is defined as thesecond-most significant bit of the first byte of QUIC packets (that is, thevalue 0x40).¶
Endpoints that receive the grease_quic_bit transport parameter from a peerSHOULD set the QUIC Bit to an unpredictable value unless another extensionassigns specific meaning to the value of the bit.¶
Endpoints can set the QUIC Bit to 0 on all packets that are sent after receivingand processing transport parameters. This could include Initial, Handshake, andRetry packets.¶
A clientMAY also set the QUIC Bit to 0 in Initial, Handshake, or 0-RTT packetsthat are sent prior to receiving transport parameters from the server. However,a clientMUST NOT set the QUIC Bit to 0 unless the Initial packets it sendsinclude a token provided by the server in a NEW_TOKEN frame (Section 19.7 of [QUIC]), received less than 604800 seconds (7 days) prior on a connection wherethe server also included the grease_quic_bit transport parameter.¶
This 7-day limit allows for changes in server configuration. If serverconfiguration changes and a client does not set the QUIC Bit, then it ispossible that a server will drop packets, resulting in connection failures.¶
A serverMUST set the QUIC Bit to 0 only after processing transport parametersfrom a client. A serverMUST NOT remember that a client negotiated theextension in a previous connection and set the QUIC Bit to 0 based on thatinformation.¶
An endpointMUST NOT set the QUIC Bit to 0 without knowing whether the peersupports the extension. As Stateless Reset packets (Section 10.3 of [QUIC])are only used after a loss of connection state, endpoints are unlikely to beable to set the QUIC Bit to 0 on Stateless Reset packets.¶
The purpose of this extension is to allow for the use of the QUIC Bit by laterextensions.¶
Extensions to QUIC that define semantics for the QUIC Bit can be negotiated atthe same time as the grease_quic_bit transport parameter. In this case, arecipient needs to be able to distinguish a randomized value from a valuecarrying information according to the extension. Extensions that use the QUICBitMUST negotiate their use prior to acting on any semantic.¶
For example, an extension might define a transport parameter that is sent inaddition to the grease_quic_bit transport parameter. Though the value of theQUIC Bit in packets received by a peer might be set according to rules definedby the extension, they might also be randomized as specified in this document.¶
The receipt of a transport parameter for an extension that uses the QUIC Bit could beused to confirm that a peer supports the semantic defined in the extension. Toavoid acting on a randomized signal, the extension can require that endpointsset the QUIC Bit according to the rules of the extension but defer acting onthe information conveyed until the transport parameter for the extension isreceived.¶
Extensions that define semantics for the QUIC Bit can be negotiated withoutusing the grease_quic_bit transport parameter. However, including bothextensions allows for the QUIC Bit to be greased even if the alternative use isnot supported.¶
This document introduces no new security considerations for endpoints orentities that can rely on endpoint cooperation. However, this change makes thetask of identifying QUIC more difficult without cooperation of endpoints. Thissometimes works counter to the security goals of network operators who rely onnetwork classification to identify threats; seeSection 3.1 of [MANAGEABILITY] for a more comprehensive treatment of this topic.¶
This document registers the grease_quic_bit transport parameter in the "QUICTransport Parameters" registry established inSection 22.3 of [QUIC]. Thefollowing fields are registered:¶