<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 3.1.2) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-duke-quic-version-aliasing-09" category="exp" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.2 -->
  <front>
    <title abbrev="QUIC Version Aliasing">QUIC Version Aliasing</title>
    <seriesInfo name="Internet-Draft" value="draft-duke-quic-version-aliasing-09"/>
    <author initials="M." surname="Duke" fullname="Martin Duke">
      <organization>Google</organization>
      <address>
        <email>martin.h.duke@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <abstract>
      <t>The QUIC transport protocol preserves its future extensibility partly by
specifying its version number. There will be a relatively small number of
published version numbers for the foreseeable future. This document provides a
method for clients and servers to negotiate the use of other version numbers in
subsequent connections and encrypts Initial Packets using secret keys instead of
standard ones. If a sizeable subset of QUIC connections use this mechanism, this
should prevent middlebox ossification around the current set of published
version numbers and the contents of QUIC Initial packets, as well as improving
the protocol's privacy properties.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    mailing list (quic@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/martinduke/quic-version-aliasing"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The QUIC version number is critical to future extensibility of the protocol
(<xref target="RFC9000"/>). Past experience with other protocols, such as TLS1.3
<xref target="RFC8446"/>, shows that middleboxes might attempt to enforce that QUIC packets
use versions known at the time the middlebox was implemented. This deters
deployment of experimental and standard versions on the internet.</t>
      <t>Each version of QUIC has a "salt" <xref target="RFC9001"/> that is used to derive the keys
used to encrypt Initial packets. As each salt is published in a standards
document, any observer can decrypt these packets and inspect the contents,
including a TLS Client Hello. A subsidiary mechanism like Encrypted Client Hello
<xref target="ECHO"/> might protect some of the TLS fields inside a TLS
Client Hello.</t>
      <t>This document proposes "QUIC Version Aliasing," a standard way for servers to
advertise the availability of other versions inside the cryptographic
protection of a QUIC handshake. These versions are syntactically identical to
the QUIC version in which the communication takes place, but use a different
salt. In subsequent communications, the client uses the new version number and
encrypts its Initial packets with a key derived from the provided salt. These
version numbers and salts are unique to the client.</t>
      <t>If a large subset of QUIC traffic adopts his technique, middleboxes will be
unable to enforce particular version numbers or policy based on Client Hello
contents without incurring unacceptable penalties on users. This would
simultaneously protect the protocol against ossification and improve its privacy
properties.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in RFC 2119 <xref target="RFC2119"/>.</t>
        <t>In this document, these words will appear with that interpretation only when in
ALL CAPS.  Lower case uses of these words are not to be interpreted as carrying
significance described in RFC 2119.</t>
        <t>A "standard version" is a QUIC version that would be advertised in a QUIC
version negotiation and conforms to a specification. Any aliased version
corresponds to a standard version in all its formats and behaviors, except for
the version number field in long headers. QUIC versions require certain
properties to support use as a standard version. QUIC version 1 (<xref target="RFC9000"/>)
and version 2 (<xref target="I-D.draft-ietf-quic-v2"/>) both have the necessary properties.
Future QUIC version specifications can specify their suitability for this
purpose.</t>
        <t>An "aliased version" is a version with a number generated in accordance with
this document. Except when specified below, it conforms entirely to the
specification of the standard version.</t>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>When they instantiate a connection, servers select an alternate 32-bit version
number, and optionally a server connection ID, for the next connection at
random and securely derive several parameters from those values using a
repeatable process. Among those is a "salt" that can be used to encrypt Initial
packets instead of the well-known salt provided in the specification. Other
parameters serve to "grease" parts of the QUIC public header that are currently
unencrypted. Servers communicate these parameters using a transport parameter.</t>
      <t>If a client next connects to that server within the indicated expiration time,
it uses the provided version number and connection ID, and encrypt its Initial
Packets using a key derived from the provided salt. It uses the other parameters
to grease certain public header fields. In all other respects, the packet is
identical to an Initial packet from a standard version indicated in the
transport parameter.</t>
      <t>When a server receives a long header packet with an aliased version, it uses the
version number and destination connection ID to recover the parameters, which
allows it to extract the header values and decrypt the packet.</t>
      <t>When generating parameters, servers can choose between doing so randomly and
storing the mapping, or using a cryptographic process to transform the aliased
version number and token extension into the salt. The two options provide a
simple tradeoff between computational complexity and storage requirements.</t>
      <t>All long header packets use the aliased version and apply the greasing
parameters. Short header packets are in every respect unchanged from the
standard version.</t>
      <section anchor="relationship-to-ech-and-quic-protected-initials">
        <name>Relationship to ECH and QUIC Protected Initials</name>
        <t>The TLS Encrypted Client Hello <xref target="ECHO"/> shares some goals with
this document. It encodes an "inner" encrypted Client Hello in a TLS extension
in an "outer" Client Hello. The encryption uses asymmetric keys with the
server's public key distributed via an out-of-band mechanism like DNS. The
inner Client Hello contains any privacy-sensitive information and is only
readable with the server's private key.</t>
        <t>Significantly, unlike QUIC Version Aliasing, ECH can operate on the first
connection between a client and server. However, from the second connection
QUIC version aliasing provides additional benefits. It:</t>
        <ul spacing="normal">
          <li>greases QUIC header fields and packet formats;</li>
          <li>protects all of the TLS Client Hello and Server Hello;</li>
          <li>mitigates Retry injection attacks;</li>
          <li>does not require a mechanism to distribute the public key;</li>
          <li>uses smaller Client Hello messages, which might allow a larger 0RTT packet
in the same datagram; and</li>
          <li>relies on computationally cheap symmetric encryption.</li>
        </ul>
        <t>Note that in the event of the server losing state, the two approaches have a
similar fallback: ECH uses information in the outer Client Hello, and Version
Aliasing requires a connection using a standard version. In either case,
maintaining privacy requires the outer or standard version Client Hello to
exclude privacy-sensitive information. However, ECH will allow confidential
transmission of data in 1 RTT, while Version Aliasing requires 2 RTTs to resume.
This mechanism is also relevant to mitigation of downgrade attacks (see
<xref target="downgrade"/>).</t>
        <t>Similarly, the QUIC Protected Initial
<xref target="QUIC-PI"/> uses the ECH distribution mechanism
to generate secure initial keys and Retry integrity tags. While still dependent
on a key distribution system, asymmetric encryption, and relatively large Initial
packets, it offers similar protection properties to Version Aliasing while still
not greasing the version field. Note that since QUIC Protected Initials have
their own scheme for protecting Initial packets, that version is not suitable
for use as a standard version. However, these connections can be used to deliver
the version_aliasing transport parameter.</t>
        <t>A maximally privacy-protecting client might use Protected Initials for any
connection attempts for which it does not have an unexpired aliased version, and
QUIC version aliasing otherwise.</t>
        <t>See also section 1.1 of <xref target="QUIC-PI"/> for further discussion of tradeoffs.</t>
      </section>
    </section>
    <section anchor="the-versionaliasing-transport-parameter">
      <name>The version_aliasing Transport Parameter</name>
      <t>To enable version aliasing, servers deliver a version_aliasing transport
parameter in any QUIC connection that supports transport parameters. It has
the following format.</t>
      <figure anchor="fig-transport-parameter">
        <name>version_aliasing Transport Parameter value</name>
        <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Aliased Version (32)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Standard Version (32)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                                                               +
|                            Salt (160)                         |
+                                                               +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Packet Length Offset (i)                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Expiration Time (i)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|INI|0RT|HAN|RET|  CID length  |   Connection ID (variable)     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>These fields are described in the sections below.</t>
      <t>The Packet Length Offset and Expiration Time fields are encoded using the
Variable Length Integer encoding from Section 16 of <xref target="RFC9000"/>. Expiration
Time is measured in seconds.</t>
      <t>INI, 0RT, HAN, and RET are the codepoints for each long header packet type. If
any two packet types have the same codepoint, the transport parameter is
invalid.</t>
      <t>The Connection ID Length (CID Length) is in bytes.</t>
      <t>Note that servers that support version aliasing need not send the transport
parameter on every connection. Therefore, a client MAY attempt to connect with
an unexpired aliased version, even if in its most recent connection it did not
receive the transport parameter.</t>
      <t>Clients remember the values in this transport parameter for a future connection.
Servers MUST either store the contents of the transport parameter, or preserve
the state to compute the full contents based on the Aliased Version and
Connection ID.</t>
      <t>A server that receives this transport parameter MUST close the connection with
a TRANSPORT_PARAMETER_ERROR.</t>
      <t>Servers SHOULD provide a new version_aliasing transport parameter each time a
client connects. However, issuing version numbers to a client SHOULD be rate-
limited to mitigate the salt polling attack<xref target="salt-polling"/> and MAY cease to
clients that are consistently connecting with standard versions.</t>
      <section anchor="aliased-version">
        <name>Aliased Version</name>
        <t>The version MUST appear to be random, although there are certain values that
will not be sent. Specifically, it MUST NOT correspond to a QUIC version the
server advertises in QUIC Version Negotiation packets or transport parameters.
Servers SHOULD also exclude version numbers used in known specifications or
experiments to avoid confusion at clients, whether or not they have plans to
support those specifications.</t>
        <t>Servers MAY use version numbers reserved for grease in Section 15.1 of
<xref target="RFC9000"/>, even though they might be advertised in Version Negotiationi
Packets. Some clients may use these version numbers to probe for Version
Negotiation capability, which would likely result in a fallback procedure (see
<xref target="fallback"/>) instead of a Version Negotiation packet.</t>
        <t>Servers MUST NOT use client-controlled information (e.g. the client IP address)
as in input to generate the version number, see <xref target="salt-polling"/>.</t>
        <t>Servers MUST NOT advertise these versions in QUIC Version Negotiation packets.</t>
      </section>
      <section anchor="standard-version">
        <name>Standard Version</name>
        <t>Servers also identify the Standard version that the client uses to specify
the wire formats and behaviors of the aliased version. This version MUST meet
the criteria to support version aliasing, and MUST either be included as a
supported version in the client's version_information transport parameter (see
<xref target="QUIC-VN"/>) or be the standard version of
the current connection.</t>
        <t>Note that servers MUST NOT accept resumption tickets or NEW_TOKEN tokens from
a certain standard version in a connection using a different standard version.
Therefore, the choice of standard version might impact the performance of the
connection that uses an aliased version. The standard version that generated
tickets and/or tokens is typically encoded in those tickets or tokens.</t>
        <t>There are several possible techniques for the server securely recovering the
standard version in use for an aliased connection:</t>
        <ul spacing="normal">
          <li>the server could store a mapping of aliased versions to standard version;</li>
          <li>the server could encrypt the standard version in use in the aliased version
number and/or connection ID;</li>
          <li>the server only accepts one standard version for aliased versions; or</li>
          <li>the standard version is included as an input to the parameter generation
algorithm, and the server tries all supported standard versions and tests each
resulting Packet Length Offset for validity.</li>
        </ul>
      </section>
      <section anchor="server-connection-id">
        <name>Server Connection ID</name>
        <t>Servers SHOULD generate a Connection ID to provide additional entropy in salt
generation. Two clients that receive the same version number but different
connection IDs will not be able to decode each other's Initial Packets.</t>
        <t>The connection ID MUST appear to be random to observers, but it might encode
information to route the packet in the server infrastructure, or standard
version information.</t>
        <t>The connection ID MUST NOT be between 1 and 7 bytes long. A zero-length
connection ID signals that the destination connection ID will not be an input
to the server's process, so the client may choose any destination connection ID
compliant with the standard version.</t>
      </section>
      <section anchor="salt">
        <name>Salt</name>
        <t>The salt is an opaque 20-octet field. It is used to generate Initial connection
keys using the process described in <xref target="RFC9001"/>.</t>
        <t>Servers MUST either generate a random salt and store a mapping of aliased
version and connection ID to salt, or generate the salt using a cryptographic
method that uses the version number, connection ID, and server state that is
persistent across connections. It MUST NOT use client controlled information
other than the version number and connection ID; for example, the client's IP
address and port.</t>
      </section>
      <section anchor="packet-length-offset">
        <name>Packet Length Offset</name>
        <t>The Packet Length Offset is a 62-bit unsigned integer. All long headers have a
packet length field; this value is added to all packet lengths, modulo 2^62, to
form the value sent on the wire in all long headers, sent from either endpoint.</t>
        <t>Aside from greasing the packet length field, this parameter provides a low-cost
means for the server to determine if the client and server share a valid version
aliasing context. For example, if the server loses state after sending a
version_aliasing transport parameter, the derived packet length offset is
extremely unlikely to be consistent with the size of the UDP datagram. Due to
possible packet concatenation, a packet is clearly not decryptable if the packet
length is larger than the size of the UDP datagram payload.</t>
        <t>To reduce header overhead, servers MAY consistently use a Packet Length Offset
of zero if and only if it either (1) never sends Retry packets, or (2) can
guarantee, through the use of persistent storage or other means, that it will
never lose the cryptographic state required to generate the salt before the
promised expiration time. <xref target="retry-injection"/> describes the implications if it
uses zero without meeting these conditions.</t>
        <t>Similarly, the server MAY use a smaller Packet Length Offset size
(e.g., 30 bits) to reduce the size of the packet length offset in long headers.
A smaller packet length field increases the chance that the packet length will
accidentally be valid, requiring trial decryption. As the maximum UDP datagram
size is 2^16 bytes, a 62-bit packet length offset means that, at worst, only 1
in every 2^46 packets will be a false positive.</t>
      </section>
      <section anchor="expiration-time">
        <name>Expiration Time</name>
        <t>Servers should select an expiration time in seconds, measured from the instant
the transport parameter is first sent. This time SHOULD be less than the time
until the server expects to support new QUIC versions, rotate the keys used
to encode information in the version number, or rotate the keys used in salt
generation. The expiration need not be derivable from the aliased version and
connection ID; it is a matter of policy.</t>
        <t>Furthermore, the expiration time SHOULD be short enough to frustrate a salt
polling attack (<xref target="salt-polling"/>)</t>
        <t>Conversely, an extremely short expiration time will often force the client to
use standard QUIC version numbers and salts.</t>
        <t>The client SHOULD NOT use an aliased version if the time since the receipt of
the transport parameter exceeds the Expiration Time. Attempting to do so is
likely to result in a fallback procedure (see <xref target="fallback"/>). The server need
not enforce this restriction; the Expiration Time is purely advisory.</t>
      </section>
      <section anchor="packet-type-codepoints">
        <name>Packet Type Codepoints</name>
        <t>The server generates the packet type codepoint for each of the four long header
packet types (Initial, 0RTT, Handshake, and Retry). Each of these codepoints is
two bits. All long headers from both endpoints use these codepoints instead of
those provided in the standard version specification.</t>
        <t>A straightforward implementation might take arbitrary bits from a hash of the
version number. The first two bits it reads are the codepoint for Initial
packets. The next pair of bits that is not a duplicate of the first is the
codepoint for 0RTT packets. The next pair that does not duplicate the first two
is the codepoint for Handshake packets, and the remaining codepoint is the
Retry packet.</t>
      </section>
      <section anchor="operational-considerations-for-multiple-server-architectures">
        <name>Operational Considerations for Multiple-Server Architectures</name>
        <section anchor="multiple-servers-for-one-domain">
          <name>Multiple Servers for One Domain</name>
          <t>If multiple servers serve the same entity behind a load balancer, they MUST NOT
generate version numbers that any of them would advertise in a Version
Negotiation Packet or Transport Parameter.</t>
          <t>Such servers will either need a common configuration for generating parameters
from the version number and connection ID, maintain a commmon database of
mappings, or the connection ID itself can be used to route the Initial packet to
the server that generated the transport parameter. See
<xref target="QUIC-LB"/> for an example of the last approach.</t>
        </section>
        <section anchor="multiple-entities-with-one-load-balancer">
          <name>Multiple Entities With One Load Balancer</name>
          <t>If mutually mistrustful entities share the same IP address and port, incoming
packets are usually routed by examining the SNI at a load balancer that routes
the traffic. This use case makes concealing the contents of the client Initial
especially attractive, as the IP address reveals less information, but there is
no obvious means for the load balancer to inspect a version aliased packet.
There are several solutions to solve this problem.</t>
          <ul spacing="normal">
            <li>The RECOMMENDED solution is to use routable connection IDs, so that the load
balancer can correctly direct the packet without any knowledge of its version-
dependent syntax. See <xref target="QUIC-LB"/> for an example design.</li>
            <li>Each entity has its own cryptographic context, shared with the load balancer.
This requires the load balancer to trial decrypt each incoming Initial with
each context. As there is no standard algorithm for encoding information in the
version and connection ID, this involves synchronizing the method, not just the
key material.</li>
            <li>Each entity reports its Version Aliasing Transport Parameters to the load
balancer out-of-band.</li>
            <li>Each entity is assigned certain version numbers for use. This assignment
SHOULD NOT follow observable patterns (e.g., assigning ranges to each entity),
as this would allow observers to obtain the target server based on the version.
The scheme SHOULD assign all available version numbers to maximize the entropy
of the encoding.</li>
            <li>All entities have a common crytographic context for deriving salts and Packet
Length Offsets from the version number and connection ID. This isi
straightforward but also increases the risk that the keys will leak to an
attacker which could then decode Initial packets from a point where the packets
are observable. This is therefore NOT RECOMMENDED.</li>
          </ul>
          <t>Note that <xref target="ECHO"/> and <xref target="QUIC-PI"/> solve this problem elegantly by only holding
the private key at the load balancer, which decodes the sensitive information on
behalf of the back-end server.</t>
        </section>
      </section>
    </section>
    <section anchor="client-behavior">
      <name>Additional Client Requirements</name>
      <t>The Client MUST NOT use the contents of a Version Alias transport parameter if
the handshake does not (1) later authenticate the server name or (2)
result in both endpoints computing the same 1-RTT keys. See <xref target="impersonation"/>.
The authenticated server name MAY be a "public name" distributed as described in
<xref target="ECHO"/> rather than the true target domain.</t>
      <t>Clients MUST advertise aliased versions in the chosen version field of the
version_information Transport Parameter (see <xref target="QUIC-VN"/>).</t>
      <t>Clients SHOULD NOT use the provided version number and connection ID in more
than one connection. Using the same connection ID in two connections could
confuse the server demultiplexer. If the client IP has changed, reuse of these
parameters can link the client across connection attempts.</t>
      <t>If a client receives an aliased version number that matches a standard version
that the client supports, it SHOULD assume the server does not support the
standard version and MUST use aliased version behaviors in any connection with
the server using that version number.</t>
      <t>If the response to an Initial packet using the provided version is a Version
Negotiation Packet, the client SHOULD assume that the server no longer supports
version aliasing and attempt to connect with one of the advertised versions
(while observing the considerations in <xref target="downgrade"/>).</t>
      <t>If the response to an Initial packet is a Bad Salt packet, the client follows
the procedures in <xref target="fallback"/>.</t>
    </section>
    <section anchor="fallback">
      <name>Fallback</name>
      <t>If the server has lost its encryption state, it may not be able to generate
the correct salts from previously provided versions and connection IDs. The
fallback mechanism provides a means of recovering from this state while
protecting against injection of messages by attackers.</t>
      <t>When a server receives a packet with an unsupported version number, it SHOULD
send a Version Negotiation Packet if it is configured not to generate that
version number at random.</t>
      <t>If applying the packet length offset to the packet length field results in a
length longer than the UDP datagram that contains it, the packet was not
generated with the proper version aliasing context.</t>
      <t>The server MAY apply further checks (e.g. against the minimum QUIC packet
length) to further reduce the very small probability of a false positive.</t>
      <t>In the extremely unlikely event that the Packet Length Offset resulted in a
legal value but the salt is incorrect, the packet will fail authentication.
Servers MAY also interpret this as a loss of version aliasing state.</t>
      <t>When the packet length computation on the first packet in a connection fails, it
signals either that the packet has been corrupted in transit, or the client is
using a transport parameter issued before a server failure. In either case, the
server sends a Bad Salt packet. The server ignores failures in subsequent
packets for that connection.</t>
      <section anchor="bad-salt-packets">
        <name>Bad Salt Packets</name>
        <t>The Bad Salt packet has a long header and a reserved version number, because it
must not be confused with a legitimate packet in any standard version. They are
not encrypted, not authenticated, and have the following format:</t>
        <artwork><![CDATA[
Bad Salt Packet {
    Header Form (1) = 1,
    Unused (7),
    Version (32) = TBD (provisional value = 0x56415641),
    Destination Connection ID Length (8),
    Destination Connection ID (0..2040),
    Source Connection ID Length (8),
    Source Connection ID (0..2040),
    Supported Version (32) ...,
    Integrity Tag (128),
}
]]></artwork>
        <t>Unused: The unused field is filled randomly by the sender and ignored on
receipt.</t>
        <t>Version: The version field is reserved for use by the Bad Salt packet.</t>
        <t>Destination and Source Connection IDs and Lengths: These fields are copied from
the client packet, with the source fields from the client packet written into
the destination fields of the Bad Salt, and vice versa.</t>
        <t>Supported Version: A list of standard QUIC version numbers which the server
supports. The number of versions is inferred from the length of the datagram.</t>
        <t>Integrity Tag: To compute the integrity tag, the server creates a pseudo-packet
by contents of the entire client Initial UDP payload, including any coalesced
packets, with the Bad Salt packet:</t>
        <artwork><![CDATA[
Bad Salt Pseudo-Packet {
    Client UDP Payload (9600..),
    Header Form (1) = 1,
    Unused (7),
    Version (32) = TBD (provisional value = 0x56415641),
    Destination Connection ID Length (8),
    Destination Connection ID (0..2040),
    Source Connection ID Length (8),
    Source Connection ID (0..2040),
    Supported Version (32) ...,
}
]]></artwork>
        <t>In a process similar to the Retry Integrity Tag, the Bad Salt Integrity Tag is
computed as the output of AEAD_AES_128_GCM with the following inputs:</t>
        <ul spacing="normal">
          <li>The secret key, K, is 0xbe0c690b9f66575a1d766b54e368c84e.</li>
          <li>The nonce, N, is 0x461599d35d632bf2239825bb.</li>
          <li>The plaintext, P, is empty.</li>
          <li>The associated data, A, is the Bad Salt pseudo-packet.</li>
        </ul>
        <t>These values are derived using HKDF-Expand-Label from the secret
0x767fedaff519a2aad117d8fd3ce0a04178ed205ab0d43425723e436853c4b3e2 and labels
"quicva key" and "quicva iv".</t>
        <t>The integrity tag serves to validate the integrity of both the Bad Salt packet
itself and the Initial packet that triggered it.</t>
      </section>
      <section anchor="client-response-to-bad-salt">
        <name>Client Response to Bad Salt</name>
        <t>Upon receipt of a Bad Salt packet, the client SHOULD wait for a Probe Timeout
(PTO) to check if the Bad Salt packet was injected by an attacker, and a valid
response arrives from the actual server.</t>
        <t>After waiting, the client checks the Integrity Tag using its record of the
Initial it sent. If this fails, the client SHOULD assume packet corruption and
resend the Initial packet.</t>
        <t>If the verification succeeds, the client SHOULD attempt to connect with one of
the listed standard versions. It SHOULD observe the privacy considerations in
<xref target="first-connection"/>. It MUST include a version_aliasing_fallback Transport
Parameter in the Client Hello.</t>
        <t>Once it sends this transport parameter, the client MUST NOT attempt to connect
with that aliased version again.</t>
        <t>The original Client Initial is not part of the new connection. Therefore, the
Connection IDs can change, and the original client hello is not part of the
transcript for TLS key derivation.</t>
      </section>
      <section anchor="versionaliasingfallback-transport-parameter">
        <name>version_aliasing_fallback Transport Parameter</name>
        <t>The client sends this transport parameter in a TLS Client Hello generated in
response to a Bad Salt packet:</t>
        <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Aliased Version (32)                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   CID length  |           Connection ID (variable)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                                                               +
|                            Salt (160)                         |
+                                                               +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                   Bad Salt Integrity Tag (128)                +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>The Aliased Version, Connection ID, and Salt fields are taken from the
connection attempt that triggered this fallback.</t>
        <t>The Bad Salt Integrity Tag is taken from the Bad Salt packet that
triggered this fallback. Its purpose is to include the Bad Salt packet contents
in the TLS handshake hash.</t>
      </section>
      <section anchor="server-response-to-versionaliasingfallback-transport-parameter">
        <name>Server Response to version_aliasing_fallback Transport Parameter</name>
        <t>A client version_aliasing_fallback transport parameter tells the server that the
client received a Bad Salt packet. The server checks if using the version and
connection ID as inputs results in the same salt.</t>
        <t>If the salt does not match, the server SHOULD continue with the connection and
SHOULD issue a new version_aliasing transport parameter.</t>
        <t>If the salt and Packet Length Offset are valid, the server MUST terminate the
connection with the error code INVALID_BAD_SALT.</t>
        <t>Note that the client never sends this transport parameter in a connection that
uses an aliased version. A server that receives such a packet MUST terminate the
connection with a TRANSPORT_PARAMETER_ERROR.</t>
      </section>
    </section>
    <section anchor="considerations-for-retry-packets">
      <name>Considerations for Retry Packets</name>
      <t>QUIC Retry packets reduce the load on servers during periods of stress by
forcing the client to prove it possesses the IP address before the server
decrypts any Initial Packets or establishes any connection state. Version
aliasing substantially complicates the process.</t>
      <t>If a server has to send a Retry packet, the required format is ambiguous without
understanding which standard version to use. If all supported standard versions
use the same Retry format, it simply uses that format with the client-provided
version number.</t>
      <t>If the supported standard versions use different Retry formats, the server
obtains the standard version via lookup or decoding and formats a Retry
containing the aliased version number accordingly.</t>
      <t>Servers generate the Retry Integrity Tag of a Retry Packet using the procedure
in Section 5.8 of <xref target="RFC9001"/>. However, for aliased versions, the secret key K
uses the first 16 octets of the aliased salt instead of the key provided in the
specification.</t>
      <t>Clients MUST ignore Retry packets that contain a QUIC version other than the
version it used in its Initial Packet.</t>
      <t>Servers MUST NOT reply to a packet with an incorrect Length field in its long
header with a Retry packet; it SHOULD reply with Bad Salt as described above.</t>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>This document intends to improve the existing security and privacy properties of
QUIC by dramatically improving the secrecy of QUIC Initial Packets. However,
there are new attacks against this mechanism.</t>
      <section anchor="impersonation">
        <name>Endpoint Impersonation</name>
        <t>An on-path attacker might respond to a standard version Initial packet with a
Version Aliasing Transport Parameter that then caused the client to reveal
sensitive information in a subsequent Initial.</t>
        <t>As described in <xref target="client-behavior"/>, clients cannot use the contents of a
Version Aliasing transport parameter until they have authenticated the source
as a trusted domain, and have verified that the 1RTT key derivation is
identical at both endpoints.</t>
      </section>
      <section anchor="first-connection">
        <name>First-Connection Privacy</name>
        <t>As version aliasing requires one connection over a standard QUIC version to
acquire initial state, this initial connection leaks some information about
the true target.</t>
        <t>The client MAY alter its Initial Packet to sanitize sensitive information and
obtain another aliased version before proceeding with its true request. However,
the client Initial must lead to the authentication of a domain name the client
trusts to provide accurate Version Aliasing information (possibly the
public_name from an Encrypted Client Hello configuration from <xref target="ECHO"/>). Advice
for the Outer ClientHello in Section 10.5 of <xref target="ECHO"/> applies here.</t>
        <t>Endpoints are encouraged to instead use <xref target="ECHO"/> or <xref target="QUIC-PI"/> to increase
privacy on the first connection between a client and server.</t>
      </section>
      <section anchor="downgrade">
        <name>Forcing Downgrade</name>
        <t>An attacker can attempt to force a client to send an Initial that uses a
standard version by injecting a Version Negotiation packet (which implies the
server no longer supports aliasing) or a Bad Salt packet (which implies the
server has a new cryptographic context).</t>
        <t>The weak form of this attack observes the Initial and injects the Version
Negotiation or Bad Salt packet, but cannot drop the Initial. To counteract this,
a client SHOULD NOT respond to these packets until they have waited for Probe
Timeout (PTO) for a valid server Initial to arrive.</t>
        <t>The strong form features an attacker that can drop Initial packets. In this
case, the client can either abandon the connection attempt or connect with an
standard version.</t>
        <t>If it connects with a standard version, it should consider the privacy advice
in <xref target="first-connection"/>.</t>
        <t>Furthermore, if it received a Bad Salt packet, the client sends a Version
Aliasing transport parameter to detect the downgrade attack, and the server will
terminate the connection if the Bad Salt packet was an attack.</t>
        <t>If the client received a Version Negotiation packet, it MUST implement a
downgrade detection mechanism such as <xref target="QUIC-VN"/> or abandon the connection
attempt. If it subsequently detects a downgrade detection, or discovers that the
server does not support the same mechanism, it terminates the connection
attempt.</t>
      </section>
      <section anchor="initial-packet-injection">
        <name>Initial Packet Injection</name>
        <t>QUIC version 1 handshakes are vulnerable to DoS from observers for the short
interval that endpoints keep Initial keys (usually ~1.5 RTTS), since Initial
Packets are not authenticated. With version aliasing, attackers do not have
the necessary keys to launch such an attack.</t>
      </section>
      <section anchor="retry-injection">
        <name>Retry Injection</name>
        <t>QUIC Version 1 Retry packets are spoofable, as they follow a fixed format, are
sent in plaintext, and the integrity protection uses a widely known key. As a
result, QUIC Version 1 has verification mechanisms in subsequent packets of the
connection to validate the origin of the Retry.</t>
        <t>Version aliasing largely frustrates this attack. As the integrity check key is
derived from the secret salt, packets from attackers will fail their integrity
check and the client will ignore them.</t>
        <t>The Packet Length Offset is important in this framework. Without this
mechanism, servers would have to perform trial decryption to verify the client
was using the correct salt. As this does not occur before sending Retry
Packets, servers would not detect disagreement on the salt beforehand and would
send a Retry packet signed with a different salt than the client expects.
Therefore, a client that received a Retry packet with an invalid integrity
check would not be able to distinguish between the following possibilities:</t>
        <ul spacing="normal">
          <li>a Retry packet corrupted in the network, which should be ignored;</li>
          <li>a Retry packet generated by an attacker, which should be ignored; or</li>
          <li>a Retry packet from a server that lost its cryptographic state, meaning that
further communication with aliased versions is impossible and the client should
revert to using a standard version.</li>
        </ul>
        <t>The Packet Length Offset introduces sufficient entropy to make the third
possibility exceedingly unlikely.</t>
      </section>
      <section anchor="increased-linkability">
        <name>Increased Linkability</name>
        <t>As each version number and connection ID is unique to each client, if a client
uses one twice, those two connections are extremely likely to be from the same
host. If the client has changed IP address, this is a significant increase in
linkability relative to QUIC with a standard version numbers.</t>
      </section>
      <section anchor="salt-polling">
        <name>Salt Polling</name>
        <t>Observers that wish to decode Initial Packets might open a large number of
connections to the server in an effort to obtain part of the mapping of version
numbers and connection IDs to salts for a server. While storage-intensive, this
attack could increase the probability that at least some version-aliased
connections are observable. There are three mitigations servers can execute
against this attack:</t>
        <ul spacing="normal">
          <li>use a longer connection ID to increase the entropy of the salt,</li>
          <li>rate-limit transport parameters sent to a particular client, and/or</li>
          <li>set a low expiration time to reduce the lifetime of the attacker's database.</li>
        </ul>
        <t>Segmenting the version number space based on client information, i.e. using only
a subset of version numbers for a certain IP address range, would significantly
amplify an attack. Observers will generally be on the path to the client and be
able to mimic having an identical IP address. Segmentation in this way would
dramatically reduce the search space for attackers. Thus, servers are prohibited
from using this mechanism.</t>
      </section>
      <section anchor="server-fingerprinting">
        <name>Server Fingerprinting</name>
        <t>The server chooses its own connection ID length. Therefore, the destination
server of a version-aliased packet might become clear based on the chosen
length.</t>
      </section>
      <section anchor="increased-processing-of-garbage-udp-packets">
        <name>Increased Processing of Garbage UDP Packets</name>
        <t>As QUIC shares the UDP protocol number with other UDP applications, in some
deployments it may be possible for traffic intended for other UDP applications
to arrive at a QUIC server endpoint. When servers support a finite set of
version numbers, a valid version number field is a strong indicator the packet
is, in fact, QUIC. If the version number is invalid, a QUIC Version Negotiation
is a low-cost response that triggers very early in packet processing.</t>
        <t>However, a server that provides version aliasing is prepared to accept almost
any version number. As a result, many more sufficiently sized UDP payloads with
the first bit set to '1' are potential QUIC Initial Packets that require
computation of a salt and Packet Length Offset.</t>
        <t>Note that a nonzero Packet Length Offset will allow the server to drop all but
approximately 1 in every 2^49 packets, so trial decryption is unnecessary.</t>
        <t>While not a more potent attack then simply sending valid Initial Packets,
servers may have to provision additional resources to address this possibility.</t>
      </section>
      <section anchor="increased-retry-overhead">
        <name>Increased Retry Overhead</name>
        <t>This document requires two small cryptographic operations to build a Retry
packet instead of one, placing more load on servers when already under load.</t>
      </section>
      <section anchor="request-forgery">
        <name>Request Forgery</name>
        <t>Section 21.4 of <xref target="RFC9000"/> describes the request forgery attack, where a QUIC
endpoint can cause its peer to deliver packets to a victim with specific content.</t>
        <t>Version aliasing allows the server to specify the contents of the version field
and part of the token field in Initial packets sent by the client, potentially
increasing the potency of this attack.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="quic-version-registry">
        <name>QUIC Version Registry</name>
        <t>This document request that IANA add the following entry to the QUIC version
registry:</t>
        <t>Value: TBD</t>
        <t>Status: permanent</t>
        <t>Specification: This document</t>
        <t>Change Controller: IETF</t>
        <t>Contact: QUIC WG</t>
      </section>
      <section anchor="quic-transport-parameter-registry">
        <name>QUIC Transport Parameter Registry</name>
        <t>This document requests that IANA add the following entries to the QUIC
Transport Parameters Registry:</t>
        <table>
          <thead>
            <tr>
              <th align="center">Value</th>
              <th align="center">Parameter Name</th>
              <th align="center">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">TBD</td>
              <td align="center">version_aliasing</td>
              <td align="center">This Document</td>
            </tr>
            <tr>
              <td align="center">TBD</td>
              <td align="center">version_aliasing_fallback</td>
              <td align="center">This Document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="quic-transport-error-codes-registry">
        <name>QUIC Transport Error Codes Registry</name>
        <t>This document requests that IANA add the following entry to the QUIC Transport
Error Codes registry:</t>
        <t>Value: TBD (provisional: 0x4942)</t>
        <t>Code: INVALID_BAD_SALT</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
        <reference anchor="QUIC-VN">
          <front>
            <title>Compatible Version Negotiation for QUIC</title>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Mozilla</organization>
            </author>
            <date day="6" month="November" year="2022"/>
            <abstract>
              <t>   QUIC does not provide a complete version negotiation mechanism but
   instead only provides a way for the server to indicate that the
   version the client chose is unacceptable.  This document describes a
   version negotiation mechanism that allows a client and server to
   select a mutually supported version.  Optionally, if the client's
   chosen version and the negotiated version share a compatible first
   flight format, the negotiation can take place without incurring an
   extra round trip.  This document updates RFC 8999.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-version-negotiation-13"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="ECHO">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="3" month="October" year="2022"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-15"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="I-D.draft-ietf-quic-v2">
          <front>
            <title>QUIC Version 2</title>
            <author fullname="Martin Duke" initials="M." surname="Duke">
              <organization>Google LLC</organization>
            </author>
            <date day="6" month="November" year="2022"/>
            <abstract>
              <t>   This document specifies QUIC version 2, which is identical to QUIC
   version 1 except for some trivial details.  Its purpose is to combat
   various ossification vectors and exercise the version negotiation
   framework.  It also serves as a template for the minimum changes in
   any future version of QUIC.

   Note that "version 2" is an informal name for this proposal that
   indicates it is the second standards-track QUIC version.  The
   protocol specified here uses a version number other than 2 in the
   wire image, in order to minimize ossification risk.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-v2-07"/>
        </reference>
        <reference anchor="QUIC-PI">
          <front>
            <title>Protected QUIC Initial Packets</title>
            <author fullname="Martin Duke" initials="M." surname="Duke">
              <organization>Google LLC</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <date day="27" month="April" year="2022"/>
            <abstract>
              <t>   QUIC encrypts its Initial Packets using keys derived from well-known
   constants, meaning that observers can inspect the contents of these
   packets and successfully spoof them.  This document proposes a new
   version of QUIC that encrypts Initial Packets more securely by
   leveraging a Public Key distributed via the Domain Name System (DNS)
   or other out-of-band system.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-duke-quic-protected-initial-04"/>
        </reference>
        <reference anchor="QUIC-LB">
          <front>
            <title>QUIC-LB: Generating Routable QUIC Connection IDs</title>
            <author fullname="Martin Duke" initials="M." surname="Duke">
              <organization>Google</organization>
            </author>
            <author fullname="Nick Banks" initials="N." surname="Banks">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="24" month="October" year="2022"/>
            <abstract>
              <t>   QUIC address migration allows clients to change their IP address
   while maintaining connection state.  To reduce the ability of an
   observer to link two IP addresses, clients and servers use new
   connection IDs when they communicate via different client addresses.
   This poses a problem for traditional "layer-4" load balancers that
   route packets via the IP address and port 4-tuple.  This
   specification provides a standardized means of securely encoding
   routing information in the server's connection IDs so that a properly
   configured load balancer can route packets with migrated addresses
   correctly.  As it proposes a structured connection ID format, it also
   provides a means of connection IDs self-encoding their length to aid
   some hardware offloads.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-load-balancers-15"/>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Marten Seemann was the original creator of the version aliasing approach.</t>
    </section>
    <section anchor="change-log">
      <name>Change Log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section prior to
publication of a final version of this document.</t>
        </li>
      </ul>
      <section anchor="since-draft-duke-quic-version-aliasing-08">
        <name>since draft-duke-quic-version-aliasing-08</name>
        <ul spacing="normal">
          <li>Replaced Initial Token Extension with Server connection ID</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-version-aliasing-07">
        <name>since draft-duke-quic-version-aliasing-07</name>
        <ul spacing="normal">
          <li>Added the Bad Salt Integrity Tag to the transport parameter</li>
          <li>Greased packet types</li>
          <li>Allowed the server to specify the standard version to connect with</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-version-aliasing-05">
        <name>since draft-duke-quic-version-aliasing-05</name>
        <ul spacing="normal">
          <li>Revised security considerations</li>
          <li>Discussed multiple SNIs behind one load balancer</li>
          <li>Removed VN from the fallback mechanism</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-version-aliasing-04">
        <name>since draft-duke-quic-version-aliasing-04</name>
        <ul spacing="normal">
          <li>Relationship with Encrypted Client Hello (ECH) and QUIC Protected Initials</li>
          <li>Corrected statement about version negotiation</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-version-aliasing-03">
        <name>since draft-duke-quic-version-aliasing-03</name>
        <ul spacing="normal">
          <li>Discussed request forgery attacks</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-version-aliasing-02">
        <name>since draft-duke-quic-version-aliasing-02</name>
        <ul spacing="normal">
          <li>Specified 0RTT status of the transport parameter</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-version-aliasing-01">
        <name>since draft-duke-quic-version-aliasing-01</name>
        <ul spacing="normal">
          <li>Fixed all references to "seed" where I meant "salt."</li>
          <li>Added the Packet Length Offset, which eliminates Retry Injection Attacks</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-version-aliasing-00">
        <name>since draft-duke-quic-version-aliasing-00</name>
        <ul spacing="normal">
          <li>Added "Initial Token Extensions" to increase salt entropy and make salt
polling attacks impractical.</li>
          <li>Allowed servers to store a mapping of version number and ITE to salt instead.</li>
          <li>Made standard version encoding mandatory. This dramatically simplifies the new
Retry logic and changes the security model.</li>
          <li>Added references to Version Negotiation Transport Parameters.</li>
          <li>Extensive readability edit.</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
