<?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-rfc2629 version 1.6.6 (Ruby 3.0.4) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-duke-quic-version-aliasing-08" category="exp" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.4 -->
  <front>
    <title abbrev="QUIC Version Aliasing">QUIC Version Aliasing</title>
    <seriesInfo name="Internet-Draft" value="draft-duke-quic-version-aliasing-08"/>
    <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. To be compatible with version aliasing,
there MUST be no more than four long header packet types, and the first client
packet in a standard version MUST encode the token as if it were a QUIC version
1 initial packet. That is:</t>
        <ul spacing="normal">
          <li>The most significant bit MUST be 1.</li>
          <li>The first field after the Source Connection ID MUST be a variable-length
integer including the length of a token.</li>
          <li>The second field after the Destination Connection ID MUST be a field, with
length indicated by the previous field, that contains opaque data generated by
the server.</li>
          <li>There must be a variable-length integer that encodes the packet length,
unprotected in the header.</li>
        </ul>
        <t>An "aliased version" is a version with a number generated in accordance with
this document. Except for the version field in long headers, 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 an initial token extension, for the next connection at
random and securely derive a salt, packet Length Offset, and long header packet
type codepoints from those values using a repeatable process. They communicate
this using a transport parameter extension including the version, initial token
extension, Initial salt, Packet Length Offset, packet type codepoints, and an
expiration time for that value.</t>
      <t>If a client next connects to that server within the indicated expiration time,
it MAY use the provided version number and encrypt its Initial Packets using a
key derived from the provided salt. It uses the provided Initial packet
codepoint. It adds the Packet Length Offset to the true packet length when
encoding it in the long header. If the server provided an Initial Token
Extension, the client puts it in the Initial Packet token field. If there is
another token the client wishes to include, it appends the Initial Token
Extension to that token. The server can reconstruct the salt and Packet Length
Offset from the requested version and token, and proceed with the connection
normally.</t>
      <t>The Packet Length Offset provides a low-cost way for the server to verify it can
derive a valid salt from the inputs without trial decryption. This has important
security implications, as described in <xref target="retry-injection"/>.</t>
      <t>When generating a salt and Packet Length Offset, 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>Long header packets are composed identically to their standard version, except
that they use the provided packet type codepoint, version number, and packet
length offset. Initial packets additionally use any provided token extension and
are encrypted as described below.</t>
      <t>Short header packets are unchanged when using this extension.</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>If ECH is operating in "Split Mode", where a client-facing server is using the
SNI information to route to a backend server, the client-facing server MUST
have the cryptographic context relevant to version aliasing at the backend
server to successfully extract the SNI for routing purposes. Furthermore, either
all backend servers must share this context, or the client-facing server must
trial decrypt the incoming packet with all possible derived salts.</t>
        <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.</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-version-alias-transport-parameter">
      <name>The Version Alias Transport Parameter</name>
      <section anchor="aliased-version-number-generation">
        <name>Aliased Version Number Generation</name>
        <t>Servers MUST use a random process to generate version numbers. This version
number 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 Negotiation Packets.</t>
        <t>Servers MUST NOT use client-controlled information (e.g. the client IP address)
in the random process, see <xref target="salt-polling"/>.</t>
        <t>Servers MUST NOT advertise these versions in QUIC Version Negotiation packets.</t>
      </section>
      <section anchor="initial-token-extension-ite-generation">
        <name>Initial Token Extension (ITE) Generation</name>
        <t>Servers SHOULD generate an Initial Token Extension (ITE) to provide additional
entropy in salt generation. Two clients that receive the same version number but
different extensions will not be able to decode each other's Initial Packets.</t>
        <t>Servers MAY choose any length that will allow client Initial Packets to fit
within the minimum QUIC packet size of 1200 octets. A four-octet extension is
RECOMMENDED. The ITE MUST appear to be random to observers.</t>
        <t>The server MUST be able to distinguish ITEs from Resumption and Retry tokens in
incoming Initial Packets that contain an aliased version number. As the server
controls the lengths and encoding of each, there are many ways to guarantee
this.</t>
      </section>
      <section anchor="salt-and-packet-length-offset-generation">
        <name>Salt and Packet Length Offset Generation</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>The Packet Length Offset is a 64-bit unsigned integer with a maximum value of
2^62 - 1.</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>Servers MUST either generate a random salt and Packet Length Offset and store a
mapping of aliased version and ITE to salt and offset, or generate the salt and
offset using a cryptographic method that uses the version number, ITE, and only
server state that is persistent across connections.</t>
        <t>If the latter, servers MUST implement a method that it can repeat
deterministically at a later time to derive the salt and offset from the
incoming version number and ITE. It MUST NOT use client controlled information
other than the version number and ITE; for example, the client's IP address and
port.</t>
      </section>
      <section anchor="packet-type-generation">
        <name>Packet Type Generation</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.</t>
        <t>Future versions of QUIC with 4 or fewer long header packet types can specify a
mapping of these fields to their types.</t>
        <t>Note that the server needs to derive the type codepoints solely from the version
number. It cannot extract the token, and the token extension, until the packet
is identified as an Initial packet.</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="standard-version-number">
        <name>Standard Version Number</name>
        <t>Servers also specify the Standard version that the client should use to guide
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="I-D.ietf-quic-version-negotiation"/>) or be the standard version of the
current connection.</t>
        <t>Note that servers MUST NOT accept resumption tickets or NEW_TOKEN tokens from
different standard versions. 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 (note that the ITE cannot be extracted until the standard version in
use is known);</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="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.</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>
      </section>
      <section anchor="format">
        <name>Format</name>
        <t>This document defines a new transport parameter extension for QUIC with
provisional identifier 0x5641. The contents of the value field are indicated
below.</t>
        <figure anchor="fig-transport-parameter">
          <name>Version Alias 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 (i)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|INI|0RT|HAN|RET|      Initial Token Extension (variable)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <t>The definition of the fields is described above. Note that the "Expiration"
field is in seconds, and its length is encoded using the Variable Length
Integer encoding from Section 16 of <xref target="RFC9000"/>.</t>
        <t>The Packet Length Offset is also encoded as a Variable Length Integer.</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>Clients can compute the length of the Initial Token Extension by subtracting
known and encoded field lengths from the overall transport parameter length.</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 MAY remember the values in this transport parameter for future
connections. Servers MUST either store the contents of the transport parameter,
or preserve the state to compute the full contents based on what the client
provides.</t>
        <t>A server that receives this transport parameter MUST close the connection with
a TRANSPORT_PARAMETER_ERROR.</t>
      </section>
      <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, all such
servers SHOULD either have a common configuration for encoding standard versions
and computing salts, or share a common database of mappings. They MUST NOT
generate version numbers that any of them would advertise in a Version
Negotiation Packet or Transport Parameter.</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 server that
routes the traffic. This use case makes concealing the contents of the Client
Initial especially attractive, as the IP address reveals less information. There
are several solutions to solve this problem.</t>
        <ul spacing="normal">
          <li>All entities have a common crytographic context for deriving salts and Packet
Length Offsets from the version number and ITE. This is straightforward but also
increases the risk that the keys will leak to an attacker which could then
decode Initial packets from point where the packets are observable. This is
therefore NOT RECOMMENDED.</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 ITE, 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>
        </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 anchor="client-behavior">
      <name>Client Behavior</name>
      <t>When a client receives the Version Alias Transport Parameter, it MAY cache the
version number, ITE, salt, Packet Length Offset, packet type codepoints, and the
expiration of these values. It MAY use the version number and ITE in a
subsequent connection and compute the initial keys using the provided salt.</t>
      <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 NOT advertise aliased versions in the Version Negotiation Transport
Parameter unless they support a standard version with the same number. Including
that number signals support for the standard version, not the aliased version.</t>
      <t>Clients SHOULD NOT attempt to use the provided version number and salt after
the provided Expiration time has elapsed.</t>
      <t>Clients MAY decline to use the provided version number or salt in more than one
connection. It SHOULD do so if its IP address has changed between two connection
attempts. Using a consistent version number can link the client across
connection attempts.</t>
      <t>Clients MUST use the same standard version to format the Initial Packet as the
standard version used in the connection that provided the aliased version.</t>
      <t>Clients MUST use the provided codepoints to encode the packet type.</t>
      <t>If the server provided an ITE, the client MUST append it to any Initial Packet
token it is including from a Retry packet or NEW_TOKEN frame, if it is using
the associated aliased version. If there is no such token, it simply includes
the ITE as the entire token.</t>
      <t>When using an aliased version, the client MUST include a aliasing_parameters
transport parameter in its Client Hello.</t>
      <t>The QUIC Token Length field MUST include the length of both any Retry or
NEW_TOKEN token and the ITE.</t>
      <t>The Length fields of all Initial, Handshake, and 0-RTT packets in the
connection are set to the value described in <xref target="RFC9000"/> plus the provided Packet
Length Offset, modulo 2^62.</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 anchor="the-aliasingparameters-transport-parameter">
        <name>The aliasing_parameters Transport Parameter</name>
        <t>This transport parameter has the following format. Its provisional type is
0x4150.</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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Version (32)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Initial Token (variable)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>The Version field matches the one in the packet header.</t>
        <t>The Initial Token field matches the Initial Token in the packet header,
including any Retry token, NEW_TOKEN token, and Initial Token Extension. Its
length is inferred from the specified length of the parameter.</t>
        <t>The purpose of this parameter is to validate the contents of these header
fields by including it in the TLS handshake transcript.</t>
        <t>A client that receives this transport parameter MUST close the connection with
a TRANSPORT_PARAMETER_ERROR.</t>
      </section>
    </section>
    <section anchor="server-actions">
      <name>Server Actions on Aliased Version Numbers</name>
      <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>Otherwise, when a server receives the first long header packet with an
unsupported version number, it hashes that version number to obtain the packet
type mapping. If the packet is Handshake or Retry, there may have been a loss of
relevant server state; the server discards the packet and SHOULD follow the
procedure in <xref target="fallback"/>. If 0RTT, the server MAY either buffer it in
anticipation of a later Initial, or immediately follow the procedure in
<xref target="fallback"/>. If buffering, and an Initial packet never arrives, the server
SHOULD follow the procedure in <xref target="fallback"/> when discarding any 0RTT packets.</t>
      <t>For an Initial packet, it extracts the ITE, if any, and either looks up the
corresponding salt in its database or computes it using the technique originally
used to derive the salt from the version number and ITE.</t>
      <t>The server similarly obtains the Packet Length Offset and subtracts it from the
provided Length field, modulo 2^62. If the resulting value is larger than the
entire UDP datagram, the server discards the packet and SHOULD follow the
procedure in <xref target="fallback"/>. 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>If the server supports multiple standard versions, it uses the standard version
extracted by the ITE or stored in the mapping to parse the decrypted packet.</t>
      <t>In all packets with long headers, the server uses the aliased version number
and adds the Packet Length Offset to the length field.</t>
      <t>In the extremely unlikely event that the Packet Length Offset resulted in a
legal value but the salt is incorrect, the packet may fail authentication. The
server should drop these packets in case this is the result of packet corruption
along the path.</t>
      <t>To reduce linkability for the client, servers SHOULD provide a new Version Alias
transport parameter, with a new version number, ITE, salt, and Packet Length
Offset, 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>
      <t>If there is no aliasing_parameters transport parameter, or the contents do not
match the fields in the Initial header, the server MUST terminate the
connection with a TRANSPORT_PARAMETER_ERROR.</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 ITEs. The fallback
mechanism provides a means of recovering from this state while protecting
against injection of messages by attackers.</t>
      <t>When the packet length computation in <xref target="server-actions"/> 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.</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)                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                                                               +
|                            Salt (160)                         |
+                                                               +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                   Bad Salt Integrity Tag (128)                +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Initial Token (variable)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>The Aliased Version, Salt, and Initial Token fields are taken from the
connection attempt that triggered this fallback. The length of the
Initial Token is inferred from the Transport Parameter's overall length.</t>
        <t>The Bad Salt Integrity Tag comes from 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
ITE 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 with 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 an Initial Packet with a standard version
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="I-D.ietf-quic-version-negotiation"/> or
abandon the connection attempt. If it subsequent 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 ITE 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 ITEs 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 ITE 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 ITE length, and the length of this ITE is likely to
be discoverable to an observer. Therefore, the destination server of a client
Initial packet might be decipherable with an ITE length along with other
observables. A four-octet ITE is RECOMMENDED. Deviations from this value should
be carefully considered in light of this property.</t>
        <t>Servers with acute needs for higher or lower entropy than provided by a four-
octet ITE are RECOMMENDED to converge on common lengths to reduce the
uniqueness of their signatures.</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">aliasing_parameters</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="I-D.ietf-quic-version-negotiation">
          <front>
            <title>Compatible Version Negotiation for QUIC</title>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Eric Rescorla">
              <organization>Mozilla</organization>
            </author>
            <date day="5" month="April" 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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-version-negotiation-07"/>
        </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">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Kazuho Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="13" month="February" 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-14"/>
        </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="QUIC-PI">
          <front>
            <title>Protected QUIC Initial Packets</title>
            <author fullname="Martin Duke">
              <organization>Google LLC</organization>
            </author>
            <author fullname="David 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>
      </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-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:
H4sIAAAAAAAAA+19+XPbWJLm7++vwMg/lNxLaiX5qLIqenfVtqqsaF9rqapi
YmPHAZKPJMYkwAFAyWzb/bdvfpn5LgCU7eljZida3RWWSOCd+fL48njj8di0
RbuyZ9nB//7l8mn2q62boiqz81WRN0W5ODD5ZFLbm/3fz6ppma+pgVmdz9vx
bPvejv9tW0zHN/LoONdHx8c/mFne0pMfn51fX3w2U/pjUdW7s8x+2JhiU59l
bb1t2tPj4yfHpyavbX6WXdd52WyqujW3Vf1+UVfbzVmGoRjTtHk5e5evqpLa
3NnGbIqz7P+01XSUNfRCbecN/bZbyy80znW+2dBA/q8x+bZdVvWZybIx/Zdl
RdmcZS+Psmc0ev5ApvQyr9uiDJ9W9eIs+7mqFiv5267zYnWWrfmxo+URJv+/
FvjwaFqtjSmrep23xY09M6Yo59Ff4/E4yydNW+fT1pjrpeU50fx1ttmmrmgm
1Yp+sY2tb2yTFW2Tzbfttra0YK0tm2JSrIp2l22o/9Uum+xMs7HTYr6jSfLT
ugVZuV1PbH2UUT/08m2xWmUTm+VZbVc8IHq5Wef0qTyYVXOz2U5WRbO0s04j
NISqzloaMP1LI7P5ZGV1WOigaLDS27UteQ43xYxGnpu1pQWf8bvTVUFf0ofl
LOOZUZttlZVEC21BJMGNbxtLo8gq+r3ujaAoTbOdNPbftuhlWpWlnbb0gLRp
y2m921AHl2VBDa6yN/n0vaW/t6BC6nJa2zZ7b3doqGltPsN8mZjymn4vbXOU
Xc5peZriTzI97q3FgHiX4h4x0BazXtvpMi+LZj3iv02zrLarGbbvBqNcF7PZ
yk6qD1nVNMW8IOLHlHIiaBozpjzd1jWe1J78Bpju9HP3QlW2vJJuXG7CG5nw
KMub7NbSttK/xZp3o1wYvOqo67uGfi1u8ukOH20s0THNXshTRmzMPWq3ravZ
lmccEWs6rozWYFrTAKY0AtrPQUqlkcbdm8OPH//p7U9PnxwfH3/+fP+Itqpp
wQ1sTTQyBam2SyUC9w7O9Ha6xJyuX1ydHD0wHz/+T2rjh4cPH3/+TF8uq1si
qGUerTmR4LpYLNssb1u73rQYn8V5nFp5kuejy2awpTq3JntfVre0TS2Puy3W
Qp5hN29lbVcWFG9n7gjYlhowM7tZVTs+CzRzmRf+ohVi6nc053uj1UTzBTVV
l7alnbjIaa5upd1GL6nTPDto8lV7kPklPPn8WWZTMFnOMMsZ9XgjYwbFG/e5
HpIuyRxl501m0SXaRkOBDxAjzP2QG+NOOVFZSRs7kaOcTfOSOpXGqVdaSm2a
Z0wHjjhUm5DviFjjdLWd4XDm2NPsKXOI7DmRbkUj4uNXzIq83oVTlq2K9za7
kGnQ6OJ3QBEXT5+//v3l+NlRYdv5uF01Y9uUBa2QEAKoCQNpqrV1VImu54Vd
zZgxEOOS4ZhkOKD/Do/bVA0R2LB8HB1Ei0bEsmMWGNieyWc3OHWN7FF+Q7Ij
D4cl4X9+WLx6mHe1qPPNspganY7SSO6opJw1y/w982UbEzWJVhKMRIdTPq7E
/qnZ0h1d5hDJCaetv6Vulrpv6/W2dAyspfaJSlb51I6yybZlhphns2I+t2Bn
BoRE/LTMEpYdNdGMpFlZ5S3WEn+X9rbLYWg+xnP3IuLwjsSYXeSgdCV8kjh1
tXY8B8JolsmAeEUGWSu+lyWiIdJ4cVzCAIkAWDas8nrREwwkvufE2rN8VmGI
IBTaliU3M0rYkcpgsy1ZwET8CMK8mG6p/Z7cI8rZVKuCmPUkxzmmrxKy9wIB
61DRXtDBIqGCg0X9TKd203JvG1vSHInTowVa8LpRtnULkWWaYr1dEcnaatus
dv6oxIw7yxc5hGdHmOGEs5yxvD0qWkwiWu7dy65tvS7KalUtdiJOsGGk3tHB
O3j5y9X1wUj+zV695t/fXtDqvr14ht+vnp+/eOF/cU9cPX/9ywv63uhv4c2n
r1++vHj1TF5+ef7PByMe5sHrN9eXr1+dvzgAcbfJkcbW04bQ7jAfJgkOBpOD
qzck4SbCC4nnZqcnJ08yET/49fNnUEenuZGyQZkf7zupoZa2l6lVGLbrR9ax
KmnZb5cWB89glk/P31wdZdmL6pY5bGPlmAjf8m1j3GXVytizztineV1DL6Td
XZS8ZZCvgzOiSZyTcOkIpwNIgzzlCzx4JhrWJx0rU1nBWrqnYVXvHJ0QrUIf
ZtWPOCTrrUpHxPJJorDZENRPIm5Sj0g3Jp6m73QGyJ3S6rKazKq2nOeJXeY3
RVUTn7EfcAbwLfO4Dnth3o9WyKJYZEtSDOVk8HISy9rQ6HB8eN/cu866GaFF
2gCm2wk2IltXNasXJXW4reNWlWFl7W5jm5FX6OZFTUdK+IzRRxKp63vlXogV
VioN2uo9UQtUkTnNn5S+2nb2ypxQUzG3xJFnXYGskd+BHdJ4qfdAHm02oabc
fE6O3GMySlkssvisWANXNEUiqKdeNc4un/mX8+wmrwvwnvHKlot2ySdrAaXR
i340Il+KCOMp+U5Ja6ed7/X6zDZkeQlV7eua3xnxrhntoChnoDWirslO+Zol
Etk27mEmbLBTcLms2uSQA2S85tnClrbWV5mIRJa7gdK6r8mEHZx05ibNrcvu
iazTvZbHRiQUlOfKScITQjc4mWV20DkaejIdbagQVKIO4wUlTekUzXKnWZuE
UR1lF/54ZPHxGDwXI9CZO8QGykMNM1JlZXKenX7VpWIIg+yNkyiv6dObwt4a
8xs4H72wY/uMCJGtwjwyu0Zeg2rsCrIpx0GEzownH5yOQbmO8GUh5JSRWKaP
WOPJS38g5PSopYLW3QqU9FnULZkBhgz0GWkUYrySdMWkVcnOWXUYud18IZv+
ej4nFUG677MAAxaQgRI2VQHRrfpKBXUtX22tM1thrJPUUAFeV1PbsNSmVQra
lJUddW9EaEJe52vYJGGWnaOnqzVKF8VEi+KULZnkm8FJRnwtmpRMPkdrm6JW
vRGmlKwzHQaeqlOtVBOMF78Rwspb3Xgm38IZS+4wd5onw4L41/k/q40eqYB9
vdIbRMVe4CA3X6NXXkYqrP8q1VONXxl+PJ/N5PGhJXUHqq23HTbBCoJhLiJw
j2MVEZExjhGYVBgQEb8b0zXv80XY50gZ32xZ0XYtp+uix4a5g+uI2F/RmLwU
u0UeiNq7hSXJeynEZ5mLQB0qdQ32jMpvv0gFFQne4KwhHRpaI1VT2XjFriZL
anRJ/dbVMEeaNiIIlsToQkiWzxl9rZqajXiBYHvESI5EhR3cvACA0a7cjqcQ
sM4GjLaFJkf/FPMd81Q6J56h0LkohLLCqIuSt8Xp+G2N9VKTm7UnVuWXgkvQ
4c9hhIFVwaYEVBHsrq5O+/Ej6Yv1blyU/yqzZI2W+bHKEWEsw+vruYBjztia
6bICL5vY9tbSjs4qxuCqTPgo82EAIVXtGJGCtCNYO46RJcau435sqYLDQQSJ
9ZzKxfh4d1g8RHHlSUXoqb2tjMiHxm0cY4AAd8BKZ7aaz91EWB/cir5Oy4+/
VvYDVtjNJ19YAwIjuQjpCtPnRY/9i9KOtytWm50V7iVpUffEplNjjRwISIAe
gxvkw6POwiiNC0/yqhe28KhnWROTKrzoZBO/3IXuuqsLQx0Tsx6eSShtYuk0
0HpcLSGbBhZkWwLlWeDkgfaEDFi0+T7EknzLADbt2LLYYMUunj7nSbHm+8Yr
UTqbRo4qcJ5h4IgOAHCjz5+zZknjaAQeWlT06qDCdBnUOCL1g4KYQ30QzTpp
mzV59O3nYPARvUfHGO+lsBdGqi0VYqZTJ81uTWK8pkPA+LXjS0ZO3HcK100F
ASmIIxaTLfO3IkdP1NG4mo8nWKIOkvbs1RX3aXgS6ci9Iiybzkb9uMEc4DzI
vGfDQQANW7BE/fks9wZT4HcOdG7Z8AcdBJtjtRvR7vOIhvE03mIwFkAKaEIh
U7ZKTKSruYPq9YngbzjKnpMlfYMT4LmqGhgRg08sXWfmRSzdnwjqqrTzAujp
ZcvW1IKmjv0SGE7oW5HFcOSckfoj3lCFv2ELNsIjk33Au1ciMvgDfnNNo1jQ
QjR0GIh3Z553A+ymjqT9WUUPABxQlkTLEggAOLEnFmEknoz4bSY+9hB1SWNN
jJg4HckSAQgVZqevbh1IVmfHb6+vHZ9RVaIhdZQNKmLq6x+ZYVA/pE0rKpWw
V2I5U1rFTRbIP5wM0RpBFaC7jRNS1M/BFck60gDpfB5gfGIUCzWM5/lUvEG8
nF5pxmG6enWZ0DQtT13xygB2mGAenpRidanTJixQs8xvBvBawb4/YDdW9gam
tqgAKamp00E7NEFZaLZTCMD5FitDzcCJKEY4jRy6BYbLxLqtGZw+yn7a1lDJ
AEmQ/CjwuwGppbNpxHhl5if8VgfK0njvTPGSSfQQVVRoF3kYQu9imFKnG6CG
YAxOmWbIlTbyVdVah4hxE+I7qxIldlWJH4+ow8ryk+SGEllX+RTqJa95Dhiz
AIo6py4xzTMmEibleHe1J+bBCW2LeFQGZBwDcgeoSQxSr6n0bFwg37LeDNyN
zJo4KbipMBPxvfk2w0iqvuBPTx5pP6QHQIm+myVHzA7zFwCSzyesd9E48pVo
UuuicX4mBjtobU4yOrx8umm/utw4DPwUj7FmT3+RdDwSN0ngMYAoVtD7IopX
1uV6rG7LBdQsx7iyw8Za8/Gj/wIuQkgL3ldICu+o6Il6uIDwzfjNJXuBQliC
h1bGaumStPcWG1bIs0KMy0/A0HgdlqKWvzeVWRaDWBwHbu2CtW1ib3T2fuO1
a1qsPKlidNyA7+Gkp3Ia/TU7skfWo1jSB1YnFBk57cUJ4abs3b4Fjsyc4RE9
A5F/KIDx2ILejt6GwRrICxZlHZBAbT7AxOv8Q8FmkCdC1xW9ooJXZAKUxr5G
xuyK1AqToCzspJXvRKzQjLwEk+NNR65kex/KZar38zLtEd9smJIZCrDhylqh
yUY7Pjk6ASF+/KiUQ5SBIcyFd2Kjplt/QJxFwD4N1taStQyBK2QkKfjCKuu5
DtY9/UqMlJ/VvoKH/UqZMWOY4k9T2CmYPoEYO14itf9S9Ctz7pQswOgizjp4
vueyHswHtxQo3484gvKd1g7x0EebaDBuLuqXwXp7vtX1b23VdSA+9wRD5B6C
A11cADdVMQPhzLeyyQ47Z23E8p7RW+wSgZXEhLNZ0ShFiG54sIy1mbSzo2gP
FD/qjlWjciSkRfQ9DP3KkdIjpiViQz68YcTSDP1tF0sZkZyMnutkaKEVizrq
UAe2FMNTuQxxXVekps0SGXdojxZHMRBz+Qb6K82hue80spTCYMRbOgmQzOMN
tUiHh8GAXu+JAzt2MivZDM5m42dz716K+WQB8zm8vL64P3gwlJj8EejCWb1G
aL+9Se/1dqDWxAzBsAXRWPiu6BCRTuEilVgjqe3UulAK1l47KAMxcOO93sHG
U5cfiBD7rM5eUpPguuFIC2ZJ3/VQxw4NKo4CC0xNdXG+ReJct7YDXiIUp2hN
BJiSTlast+s46IVDncDVTk6Pj7OKWDTHgrDjasx/xthJYyK/qliqtMpCEurb
FB+k0hT94eJDGoXLIh05WZcC/pzFtmiWaFLh8LdQKTbevhQpy5gDx4J5PbM3
9ciLIy6CIXyIY14C5zN6hprII+UDywRrRSwP7dxIEU8oy2tszG2+E9a8JQZI
SoDA8ULkV3dBZgmRXzsAs2BUQZ1Pp8e6Dw5vTcJ8/ElwSxDZsaydeOvGi5AO
8OdDiO7CM9nP9Pghu1e2JVyF/Lp4tdTvxBoBURdD+mCBp//y+DQbswPxGvrf
bDt1/qysogXHrwEzZFqnY0OEYAEHqPwbGo6hffiTrSs4Pdm5A7e5OEBV4z48
uZ+V0H2peSDMQjleTyLOfXh6nxFXv2XY1NpxaBeGuAHB8IActId3BeRe21xC
WGC1yIE00ueqaoZsPzZcnOac7p7Hrid2Ls5ji+CJNQuGjnfjaAit9bsq1Buj
vbIyhlVdXjUHIK+tbZU4Gka4hT/2RI2uaWC67njfiQZ7PBQmmWK77ODtnEU8
BiYCyezaqxRPruqBJYKOJw/sgYk15JQ3xiv4XQSUuhx54nEmtuyQC6WLNj+f
1mS6xvGfgj4wp4DaWkeEjDXzkYGMt4TxCM6vLj3D0YLgyo0Df/OW0RN2c3PM
YRLJ11kgD2IFTjiAgNNMmWsMqA3ZsNpg1IuDCIaBcAlt9EfWgOyHHFON4RCI
NK9m8HZB3xJuqJRyDXy6x/tkE9yOJx7yFNCWnlmGyh504yxM9BqZk8ocRwxI
jbLnLj5uFMTK/aPsIjTYJK5ZkntAGiYFC+efJL41hG5qDBizwYeg2bm9tfvD
PpgANF47PRrSseKF3g3ALyUYSaStl9bKsxGVdD3LTbWCzegRz9RCYNqgIUFR
iSGlyBsWAk0ir/C2JFMx2iJDJ0ZABZoA4/6RcqaRJzAcEfoO7Ze28BYYhz8p
wuFEM0ZwIYlXWvEawZ+TwjnIc/i33C6ZrjwPUSpuv3DgAEeLe0E8eTERdUxo
aYId0Ju8QDy8tOJYAhYpz2Zb4a4+gFT6LJhiTdpBBIH2WudWvXkbWm3jaRhp
tjNuT8JRzLfuVI3kBEaZwis6tFgMqnbioKbUKg0SQOxkpVaGGrvglCdJ5Ska
/86uKahERBQcL3ML9HkwPsstY0c0pAat8C/ILCOitSAmWeSxRdcLzeJuYhnG
4XFsgwqFGn3VJsFkCSvTz98lwPBAfIViVv/kQ4+TXJgoCu7z5/tgEhM7GBvj
SNslBQSRk7CApmeNcZSngHAb1RW8hf7q4rd316//ePHKKc84S5HR0otH14yR
OaPGvBzLqpgyvfcGzCfW0DF2nIPkJi9VOfUHJAJ5gljuK+biiOr1wK+EeCY3
MXrqv1e1twcaMD4Vo+Kcg1AzElITLYY8L9quKvEN1LY8wqd98G7Tddn72B+E
HsB5r76DoaBEHAGBufxEw0KwvyhqeMqnRhWmbL/CJBhGp7cfBxtzoS2DdKbj
U3LvBl2qqD8sE6EDPU1FxcQ6aUFvBVkw0A2nVRSaUHG/O1LW3YV44f8ZaIFX
sLMGP9JG+oZ6XTbpIS8lcsJF1IQjG8x+k68WFXGU5TrwUed2qYGYwnsReEU/
f4Nfsk0rSRQGx3DFyvWgaowpcYRH0e6ED18EHf+a9L7Af5WbhnC3bigVMAx2
YZIIIJOk2dZxkJIG0jHLHOJaRaOSpmG/NjNcblaRlgks4aYJuiC+NNF+yyIB
oNNgLceMEcYfY4w0vLpqnXhT29TOjOSkABQZcM50tXZ2cfUbcUCOiYAcKGqR
64udSp2lC3NsOCDBlmL/VbR+W+gprYvtM4qEqYciO+wCZPeNeVqVGK6Ff4L3
qUUACDLspPFO5wzgVPPWMoVPbSxC24oPjSezgayrKGVBKOgnXrtulsrMzouS
fVbYj7vjAkGVXpM1DJs14uf2eh3pMx8ePX54IppMnIfGu8WWv4bq1lGAnnGB
H3/+859Ndpz1f04GPjsd+OwBXj+hrx6Qqv0oe5x9n/2QPfmWz8x/G/+F/zOf
BgZGP12A//DB6f3BBz/9zcbQU+f+A8bw9T80hr+whf8PxsD43+HJ4+Phffi7
jOErfv6TjOFvRJODUviwGNiSv+25iMT8YO9/xTFcvrr8RMbnp+fnrz69vbjW
Me31lriUhft/xTGA2388y+7Ni8XYi55xED1cgOD3B190n4pgOfgsMBGLtCLO
L3C5mzG2nU9IOz/KUtDkIKz/gdHshibRoDiMjSSaS9xovCkRgPRfdalcdPGl
4uDeTcDal3cIPhbXsncHfglnh8HtOuV0305/mfYHBPLVJWNao4x2WcGsi+s+
1NEEwGwPKoU4bgNXBoCTBK3ygUzs+4piSverlKYoWbulET5VTxpHBHNol43c
K24D91HlZIdES7YykMGmKdnOI2NdWpDz1Xitt2JzbjU4PHl40JiWP/aACQy1
MVADl0I6exOapzdgTO5iwz02pn1UIvwdUVa6Pi66191BDuxNBqhfMqly9hac
lAlawJETBQ/YxB7MgSWJtgmDgtbKxp9X6RqfKjm0oBIpAUzUxPh4NuRDEPO2
HdAdB1oeGeS9qr/dmXoSjReTEqLhQnM+QfY2haWMi98UEFJtu8i/2+yfIc9g
Grw6YZFlt7Lrt+evrt68fnv97s352/OXF9cXb99dvH37+q2o5i9hCyKY3C0J
luw12brPKkB17ElYu2dCglMdHzwo4O0OmFmBlBo6x/mMJrsCyoKAbrZPyfJs
Uk+5rruEznDCEMdYlsSStyqImDU41tWzbI3kbGK5+XsYHGyHSaygbxNhY1h7
7KeCFy5NyWFUZl/kiuwDVxNgYlhrammIMOAQaheR14+OwHgG5EZn9S+whDDm
fwNSj/V/gUX8gy6ibkO7ZQRpjeAsMgKJumTt8aKLj9Q9Sb0cGTof+eBHBylL
XHsjrXI4KScfwm8iKG2r8Zvi+om3NSZTw6827qwg21zNdXbnYOXXnJFPmzu1
+cq13D1nctKN47iWoV11PQmjvbGcH8J8OUwQ1UwQtsVoQBJlyMzNxDBaU622
rYeqqtWNxpTSESQxtuaUyfNVtK4d8qx3/YBZUCn7ODwVRp5Hk0jRpufq6LnD
eOHo/11nBOoYcKQS7aKGcjOkXjTvgxahEfg0gZXN33NAkou5ti5uTQC4Fpla
GvLRTazgMQo6LxHKwZUiNCORExD8frySasweYmC+cTAG1pQdWMooOA0I235b
Docgj4SaoxynhPY0jjMJUE2JE3BaEvrL+kUvJoNZJH+lHbuwC04ZQ7q05zke
hEt5Uh8X8hFpuqFSeYe+vAGxNShxMV3WVVn8yScXsQ92xPL7XxHqrBtp1jm7
EVa9BawtzrMsYi9YcoDZOI8dr5LxqxRlXvS6gLbXaDAFPcvRKl3WOOdsKEcC
8jiQHRPqHdAzHAcUCIboCD5pOoAcADbS9zhwF+k1PFYbRnJ/ZHKVf8p5owZ1
atWEx8f8B9GnPiPTS9zowB2JQ3dKvNzDbDIGllRa7WQ1IAkqiSNBVBJDdhKp
ZZR7OZpI1DefuwNqiGM4+6wnsyu74GwT8GDGnpfVahaqI/nsFBeE35Gzcrrl
SLvgoaF0GBJTcG+t5o7vIhB9HALuOXZUw7r/oH6w7OM9jeZznrHPmoPnlcZI
V/mKsFMOCOa4GsTHD3hMNQzi35vYiwYjWNN7sEVplKCDKAt3mBmzbB8u65UF
3cMqmh3FXSeRTVEmrphXurZJ0ENXHuadJRy0ZuZMGb6kTvDXIsZIIjVQVE7y
91ycijrnoSRIrJF6BDDZSdXi3M3UMgu6ldcrTsZwGmOS0KIRjVmsEYxSlbnL
zcQU425nSZ9YdS5EcKD5PPj0IEkM62SAGn+IaDOT4A9OQNYTP2N9NbYX+sGg
PXeVMo2haNBQ4y/Y+ttSHQ52522xgUIYIbUME/ahDC61XXIkldLAd6C7uOa8
S6+XYKkhwz2/ZJhxxHYj6+1rEs0leAcVLEzy6EXHMQDJbVf5hvrvWGbEdkiv
s1/TIRT0XOgtVCOpythE4/Op05lBT5NAsSR4B2NxGZkurw4IQRRl6IL2j7Jf
XDSWj+LrjgooAM3gfezrkNCqoTSALp25OfOO953ElQYXJIiCMjXRZ/tOWuc8
GvJRhyTXOwkiGZp/J4JegoMraHiCufgQsqEsfdFq/DL5GFsGqETp3HWmaSRI
p2iDC9TDUXkSA5kGBcxx9kYaQeky4phISWZX04L5S89VHyX+sxaH2nwaNFS0
kj69c45Y1lyZ26tlIXVDfK2X30K2bz8qoL8O2ipNyqEz70LqgRlk44KV9Cq6
aRqRAE8q+gRUSjpKISvm4Fh+WdKqNp0AC+9DhrEh3cRti/AhPcjHpXUi0o7H
UdSQ03njE8LGlvdoi99tMK73mDj6ZrXtlKUYsppGxChm21WVIWy3U5HDqx17
Y6nlyNDp40S8Pr82vSgh4cWStBQ0xO06kaBe2IakjYFT7KN8tn35E0UZcSz4
rgffRN05lSLvcq5wVCWHRmKbegFuQzpJFJVwF4SREHl3PToxfxWjuBBsuohe
rQsppACJhtFFjrJwEVch/cQDPoeSCSbKfwQjoAJh7UKKQWGd9LyvWiBehT+Q
Ss1usU1/6mLLNE5ETu1sW1vt0CV0MoZ+T3KvBhjAcAbW9T50b6ksSXpmhsly
BPJRC0KoG5yVYLLCjz88PHl0/F/dnc0/X/Qj/7XcVcNNp46BnpPqrzsG7Cbz
ajdpEQSOqbFjofQRU0rQvj7Xdc+P0X89/X6ooaQmqpcwKlY7UkZkxR7fCVOv
CW4sMk5tnYQGaeabnXWcMbFfAJPSXHL5GqZ0HDyE9HW4epzl04EbG5fwYVTw
TXaRYhIKDKHiQTCx+JSSLNtIxLALivl7gPWuzMK5Vnl2tmEvb7Mha1348TiX
Z4Oxrnw6SM00ER7OnX7cqbPIvTg07GfK70gKDBqbQ/TVQ5WmluSt6ZojraZw
0JRft5oYO5KaK/3hM3PkILEB56FOyXxhSojats2QaO1gS3F1NPUj+GJWQYaE
8GdSZPmMuJysda75nhOpAbJC3kY1Nz79PE71+DHRNYpmigLHcVdceEOEsYJs
rWTmiFzqiSWMVHIMooZhurn44y1CboXwDQrcTYuNB09c4ofXCmluxXptZ1DA
EcDvR5DFIzC9EUgvPgC6L4UlTSmvkTLQxGM1vclmeycr5KKr5vhVEu5uzE8S
/Zp2zwShwaONU5NHksy1kyHrcq2q6j2ZIxvVf10Cs3MBOK0++J5qBxdx4H/Q
xnw8Lz1SLAouLeJLYncTbL7kPUiyVRpXlECJ+I6KbgwCqDubx+fTd7yyGFsJ
qUKeBfVKI0tF66fDoMVWHGKjNRmzX5698YVWRn91Qr9O6ZtOKihUE+ZJ4HEZ
B84+dhWD0eBQBqpIn/tSOl7e11xB3QN3RwEw3KhEdm5oPCgzXgn+2jOnnXYc
+Va73s2RkImDcrtGS4hw1nKhsGArdWN74MDFaiPXOK9V7qhTxJfkkgLBPI24
ZnVaWTMxRXRQw/YWu2W/qoDgKiIpV6XYRtGpUnQJMfM3XsrubVOoT2uKGmDp
K6VDeM78CRL4Aed1qtq97jW48zwvVjF2GeL+ddsk4nlWVxtVISJDmB2drXrv
wnngXE3pAt1uNxrUXTlrLOeQj5CGChTK0ZKDA0XPCIl8eh5CSTiE0CaI8RDU
MPJ1WHt1zBO4fV+VwpE4ZhgKzKM8Pa6GGdV0Kcg47Gf8SX0Ek9qRnJDd2vGK
eFUrPM8Vjwp7lkY4m26AsxjZ8CVwxYO2kyQv1eyi7F2nd6GyCPSufoqJO64e
QRoy5QYX2O2X0zVnFYe5sKat2ooW80+0btWwE9EMZVFyMHUxTEdhzL6kMP6k
TJH0Qc8fu5wIJuYKYTqQVlFtNy1lVMjB6JQKcBqcpDvJYVLPt/iOtXTxatcD
GxonqzTlzA3MhLI8UYVKTmTGCYpSWlQ0sYscKyOYQCjxYhxXD1XHEPihRcHA
Lp1DvDkKhX07hUyjWl8iYDoK9WfmFY3iiYzhG9UMPJty1hOt8ETKM/LxV+4M
6im6RaxC0a98GCukk8V491xycXQTMRa+66ZT2ClWnyTbvIdwCFzhP9QyBaJH
dB7VKz5iTZtZfag70uUpEzvNOcWGTgA820pGUh7F+fepRbugYwB3t9ejBQ/r
V666hu+FTjTXAfJFDcU7kjidhIv5CMEugnImCEln3tlHvkLpuUwOaQvsSvt9
djLiL34pediH39+XvxMI4vfZ9R+eZYcxKiPy5/eamYD/9MX9NcJVqB3+8MUn
D4+Pjk6PHx7rg4PFzrutDT7UbcgbS8n0jo6O5PtLX0rqOl/Q+pyi8c8CUcgC
nfHJ3spi+VjWecHJ3L7IquotoEulJDpHrLyQfGQLj41sHYS0eZPAH0Wn5A1I
TVvtU3m8kKxSDiyFMCdZtOZMbyhxRRJZjGwKxSlMdGid7RAcf9K2vumV9uTx
7JbWsLVS9tWIXhZGGMD4eDZC1DdId8RK5CiH0N2ts+ycVIimTRIiB7N0wvUp
jkWoVqrJwO7erchfOgTWpBCNU+tZn4sI5Qx3FqQO86giWSL5EN7UCjbR2O2s
GqvhPdn1QsbUnuiUmYF5scl3iI8YZSloNa3ylW3IcgiVyfyudWimxyJkMAmn
UKcNOnwjHWaHTx4f04HSw/QPVrKPlSjHgOXh67+40nBqHwjCmJDRKN2plBcV
8NUyhc2cM6/atsivJHI5vzh/9u784uodMax3Pz99GfY9yAYpY30WXfCg17KN
sj9CraXVn9jj6eMnx5Mn88ePH33/KD+Zff/48eTRQ/vg8Q/THx5afztEiWDH
UfZK33v4+OTRkyezB49mjx+cTuanpw+e/HD6aDLxz29WKMLI0W9v+B04SHb+
68jdiSM2ys5Hzs4IdBsfF8ECQsl+8C9X21JUjOd/fPbT+OLDhnjE+EU+sauk
8izN3Bx/+P7x93M7y+fzRydP8tM8n52cfD/7YT57MLXH+fHDk+9/sLPT40f5
5Hj28MHD00ffnz6wD2kpHj2YPpw8sKdyxQAab8wB0s5vuMDggVx4ox8UNweK
XCRMIdM7BrtAbnjIOTwHTq8hfdau5sHdmcJMoqTVxWJh2VxWPUjP89vIUeTa
JeFGn2UqmAQUu8tbpAbObV5IVEeOSoOk/CCHlqjSHL65fs3IAiMSgJgGZiFX
ubEeK5Z+FM6pCJqsjfG+LYXOwl6SyrpF5KsL7jrnm0owLobhoiErNiLLFR8s
oRdYCNDDcSGhVAJwi1q4JN1LBeJVOe4vh/oNewYx12KBMB/croCfwAbwd3hw
zVk7G+7oTg8jy1tIyaGM6Tj6ROMMFW6Uyqg9hyNgToDQ42CgMdzZCwnQHt55
c9JZP4PhRmojdgIDXqN2gSz4bL+voR+Y0AkL0qGacOFTr/rRQgKqcC4dNOkG
4zdeXOC4H8yJZGALexJMQDIdfUvK8SOKJ2S3+850+EspVd7rygRnDJ8weGr8
dRgu05oO9VeseuqNDZEAd65xqJ6eFMGNb7cxict5j4bxX9VN+9VJx//I+P17
jeEfGb/fMoZ/0OTeMezRwBkN+HuN4Vt+/lPTw39MKEmHPY8ihGEgWESrlOX8
gXMO9iNju4q1aoMibwVXSPAC04k7GQIYBqT0d41PpPVJswlimZIlWYVOI4Yo
TybRU7k5KmHvDDjwSsNOivjaqMG2HF5hBoNJEHlAA+diZwJ9xIbHN6otPhhl
/3tDOkxLOktcatbD1yYNsJwNQMfJlVdiO5AZs+2VZodurwG2elGUuMa8G0TC
piVDwrkn0I+PsWT/SQISqX6OBS7KbXSfS5qj4aIGGDhPPV9+gfYkHscD2V9J
tLZigH2r74bRq7rmsACk4L369fzF5bN3fzh/9u7q/MV1r6iiv4DuxleO3auX
ulge1eiNR8/3ZBfL3eWOZvuD/+ZIpaephTR3kTDBvcCAZFL6NvasM5AGA0/d
nbMte35Qab0SVLRpOQlgsjOoUORDQV2Nosxd+Mt102zjPNZR/kAoZ+vgT/WL
NwPh61LqvcFNh3JdXCdalz1RRz6G1lMWcofktki+MKbS2rfhLj6+MlEjmiOP
HJJTJcQqXqORupW1Sq/mFCBudT0pFlvcFaoFdM0WoDpbtnqBAq5PH8hL4Py9
y/mXioiZJMFBxiTdxxH1GhiQu2uEokMpyWPOGditjhkO2x11zDCEUBcwHkMa
JxQHu/SmjEunELqz3WSctat5nDjfvv6jtG20SLejrX0XufH1pfQQ37rnsuiT
0sADMKbAR/GZ6FbDRmiLiYr3Pzr6IS7WgaLY0Y1RA3Xo3Jo4CDP7o/GBGxIy
h/IfXFW9W+RSA5ia1uYO6uEWvC9Xw/7TG5I7eSfizOmc8bT6eeqWSCv7ehKR
KJiZC6hKz+VQ8f/abuSqul5sow/8SNMptGX4NY36NdUxGQ/+xygbQLrgh7xM
zPslXiRoU285ZBGiCFLKH7uF0YBv6o3S7uZyiYuRQvRZEzfpQKnoCpVqLux1
sstmJBJyV8BZGvPpfKCM6c7XCO6W+vfUpZdI803eJD3dRTghdiq+U0dLBmoK
YXYZJwdmH++lyYJ8c3BVjhECE7LUpcxufCFI2Rmc255eUJR+ngTC7MmJ9pIV
gTsSbhcLECNFBfak0MoF2CEvVIcHcLVXxL6bN/t55MNTtF7lYP6n6U1iSNL7
aocaWZrmXQZXpGHPPVeNgAOBcyUjD7mgqnYW1I0TTfOMwDSunuMug0Scbpot
qqX+GAeNQD5H8h/v9SBSXq1eeohP6wdSG4nYiuNC97g0acPyqVwi5xJx/V1c
bFN0byDg+gh6l2JyV+AE0hMrECWXHiWgIMcUrhj/6/EjKRWPj/60L/2aa8RP
9PoH4Xn9vCBWTfSmVxenxN3xqPSO2PSIdp2gHHCxAgdXb1oa1yYSSChBMnND
G4YJpUluKJlOtyzQemSZ3OmiVWrZB28kwfcdNy6JfuW+Oy47ZV/wsMv6vU9q
6wwub+OC4V5H16L5ayx9Tavjo0ciKF3m/WbDF/iBidFGXvjsZr0MlM5HvpDI
MyfycCD9+0h+jxL3xeDjAhzG8d4quu4xprG7rnt0hTFZd33mrxn7eC+kLjF7
9Gxxmpcxfi+FOfNI5RWFMfDKqJpxPy9t4i9l5LzYoUB+FZ6HetvVWpaxDdGQ
/WQvf4q5jHTPYLyjLQktYt/BUEWQ+3oEb1HVhO/WdSkfWvVU/TRpLgvHlPAs
k6oESYobjbPnxUPAqPJmF+rpWbyEMRDftVqOvmhGJu84n0QN8QKsTUJFuzwb
njgNYGEPoVEPYSYeQvEd6qXLslh+hyv19rm477auNMIpm9u85fS0uACMqF/0
CU+rU/aFo8cwHxNix5xjMPdxZTnKhVS9tGRHmWzPRu62vOzRnmj7RXSP+h5x
LqaFhNw6n1viiMuFL0gAeN8B1ymzKxkp++GMZMYuWs6RzJ1SmAP1EX0oETCd
OwN7ZZv5Opa9BvYdjmC/lcFg6oM0+4+y1NzoXAFiwnBlDng+xGIKNNBkX1c9
HvnGdxMIG5vY1qA8SbcNS6PeULjQGrICqhtfjStayqEkXLFR/RR41n61G7Nn
XMmtXyrML10AqUlv7jsJGJ6IkZvtCvaeRsc+q65EhIUiNb6sA+otGyj49Y1j
0aHexntrw6nkQiKHrjrXn09IrJFOdnV/RNY2XMDueggHULB+3o2CPJKCYl0l
axRCYDVCmVmREf8tMAlcbcEjoPmsctx9raQQkSDfdS2mrQu0/Xive/2PLt2v
fulSg5DTxTdVNcfiueJePp8oJ5n6wSMdIw78bMREiuNl3PkKgSHR3ZIiAenQ
zZBJIHUaccUzSj3lWvtklHUGCXGUhBp4cpKanIF6/WWD8y7M1w1bEbe2s6d5
GUJ4Y9B/OWWG70TROt9NLOj8xWBhrhI/Al2dWLeL8OlE8mhgf1LgK5AAFwzj
3IeWr3XxbRtp262vMht+XM17+nj9haqhxGyI6POy9aUauajDbVW/F/KstiJH
TXRm3cGRmk8Sxlu56xvS4l5urbFdu1iLBcsMqEocpq6ryEa3MpAKCq7TvMH9
8Z4AQW9cpGA6KFYPhO0Tg8oXtRWWWjlM29+ZtZRUt5m8aAaQvUxLbakkjK6/
QCu+4I1ugJa0PzLXA8U7Y2i3101AQkSh6O50mNmeC/B8pZUkbk7UfqSskFrH
4XOdftPQd+YyLQjAVa1SKY87UCQG+Md+GyGuohsHta8NiKNeM1pyJAbCff7D
wKVofHNB6WovGJ9GVq3X29JxB71FultdSGhf7+3oHCIZLcMMtdbp2XNb812n
CyXIgJoDw0fdRSEPvUKSC5a919qqy6LGZVdun1DlUY3LKNHKSUGxb2bZi5CK
xMY6p/8Mpx5y5oLkMboCbi5pqYjKdTA3RrGf9raYspLJ2dBJ3R41zXwamCaB
yfWNgbFBytPbrFLEBnBcGCjg/Q4J4AogKDgH1s48aeovSo0yr4y70Rjdhju0
Bqo9uStuw42KbzRd6eO9JE/JmNehaJ3ck9kso4s3ux4HwcGqjeQK863KPiQ7
Lmfr7Ht3bTxfK2nn80roSrGGOEQrusHFIWfxzQ18yaXeeaeXITur1d8bzRcO
jhmpbLgsZySjjFSY9CurmLZPkJRoMwYncLtHFe4tHffvomlMv+CkgyPbJfHc
6MbuxnNoNlg+2CmCzWOg0sgImUXJJY5qweo1f8mY3TmqgiNwRO+FfLXB64U5
EtLBzzXpYVtENLuzIBcDUSvsPMyg5HRv32irxBVWzC1/7DB65XrfhdxiBsEX
kD1dx6srMkasz4ZiiC7VKAA3dEaPaGWFBfGtgwpvthGNJHUfc18VMi7EKnF8
IkSiQ4b2YPLPI759lIXTwAqFsHfouhPrZCgDw0reEYRCNrKTTWvahyn0A63P
FADKMC5UqluEa9ycFnKb71QgJyh5tPaNzWsIFl4+nrVPHCMq3EYaQS5w3ZKY
K+4UYSblVI8+PK7O/p8KkB4Zs7xxSeq23KwbyqSCPCXQIWi7cRwF9aE82DNL
M7HecHKrhUJrE3eUr9NrtOLsE3cBUmDcphM/7W+JJuZVbJbahVMvwnAzSXSV
0FtIThOOcvc2X51Bco/vM3tTOC+yz/uTXAiVoMgno+VHqe0QmiuKxko4qCsO
Ih6S2E0n42UuIbcVYpOX9JaUqaPTybXzVZxCC/MuMOggMngTRg8yiIavcbbU
1YJJWosIu5rwyUE3IjxL2zhbotDqgAzjdCXzG3EdKxf/Oa8nuABW8lDUxU7y
mgUX19IVo4ETY8g0qqbVyjGHsDX8NcOlej3riG0d4s9kVmxW1U5uOdeU0IkN
d5LN5ap1aCDqvVJAa7hd44ErqSwtw9TrmtQahqixIQIglFvkGxakxhjJwQ5v
GnmorMMCfcJY7lAyvQFIDXN/USTPeZ5P1Sb0xQ067UlJXwn8yPfeKW4KSZi8
HU+lEr6L7omCpBqpI2C5UEPhYdeN32Daeu/oTfVWnyjbc6IwudtNrpf56g18
+QoF+fkuhY4Dno3hzBnDfHE012YMWiUuiyr+RM1FyVVNqFIm2PeE49JZ+n13
8p1wxQo+LXCOIS+js1bYdWPipFvmPXfG3iQhMjnybfgK4UFFObqSPFKVoHsB
CEXwA65KJxqtqw+ciErTPcFuyIUJp//y8Em4zbKp+gYoa78eOuG8YihKcikn
L6UshMOr2fGoYRPO2hTC7azQyJfN9+VjnFtGttxfHY/tY2efJNqrTBbWF/T+
LiMR2+j1jdx53XVFhxrbpKFLqYvURgJLzb0aOtkWK29zuotuo0ACUvxHAG7Y
6cGr0o30kTo/K9yLCrNkxpVW8plDm9jvBbcJHZwd+LhALacnRw87V5l0bp1W
lxmYEl710KzUN5cTbBzvkawEzVzGZcsO410VN768kKwykjFJPRMu6uIhnCd3
CN5hImw6VBhfYtq7uSxOeeXaGrEq30blvIpuNRvVRScxKjIKJ5LUMtV3feQJ
vpruOs4VjmO4PH913otboD1JWN9bu0Ad390QGdlGsQluicizgyFAzO6cshfD
rWSKSauktf8KyX+G7EjafOIU2+YMoBAxLOgo5ioOSDnLkkEY85SNQkxCLpau
z7LLi+uf+Ho8mmd7Jt3+9nOY2FDgwBcm2XxxloVt4nmawYrtb8OkP2U87exT
NIhXsH4/ZcmEs0/06Nl4PD7Lev/SN0gp/dQPfvwky/TMTSM8OlT0Yv/T+8NO
++8MrO8Fx0I+5drlf/EKp3QUcqviTgapKsm5PUPa5pOHp3yB4owe6AZpGkOL
y+XTcULOpwCXV3bGtgadjpd0Ti0805bos2QPTsCBEY2APOeq7h70wCogjvLp
UkIqhXhfVGQo/I/sd78jRpddEOuvYAlCDp797nfZmxUbr7VdV666fKMskswM
vmCWXha/fCRm5zwcH4c1d9CoLLvwXnE6kKU0b8ez7XubeoHcmMfH3/MNGjNX
nHhPQLZuz4D9TG//rKIpvutJruUgNWh2B+scCnBMLi/6lok8wkTekvnBEXEu
5CrN/aMnnpGJtW3wjC/ldPXqsnG34SCIJanTz41ie2bZr68CmuUPizcVv2mw
D2WwKxnWstiIQNoTbXF48fT5fdar+Hy8EWeJ9boH5vVU4HKJxGzVWYjgmKA6
Rnrut4z1gUmWbVgyN9/U5CmavPJFI7nSW8Pi4Y47nL6phxP08BM7o6AEkb0J
fF51rYOGjMcD1SUuGTBu6UM4Gg6S0zB8j4HA1xaQErsoe16183/HkhyHc3iw
pw5nc5BAXqxsO2MXxMHg8cAVswxr8308U8S8hZMZXckxcFn0HtxYgUanJqK9
l3AB9w6zv3RljS+o/Z3ePJLAN6xTgwwa9TPc6tXyq2pBmhlf27DUi0bEPSYH
e00cXibDa5Zu8JBPfUhq431d3huw4XzmME87Q4r5/wNZR8LT27AAAA==

-->

</rfc>
