<?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.5.17 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-duke-quic-retry-offload-00" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.11.1 -->
  <front>
    <title abbrev="QUIC Retry Offload">QUIC Retry Offload</title>
    <seriesInfo name="Internet-Draft" value="draft-duke-quic-retry-offload-00"/>
    <author initials="M." surname="Duke" fullname="Martin Duke">
      <organization>Google</organization>
      <address>
        <email>martin.h.duke@gmail.com</email>
      </address>
    </author>
    <author initials="N." surname="Banks" fullname="Nick Banks">
      <organization>Microsoft</organization>
      <address>
        <email>nibanks@microsoft.com</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <abstract>
      <t>QUIC uses Retry packets to reduce load on stressed servers, by forcing the
client to prove ownership of its address before the server commits state.
QUIC also has an anti-tampering mechanism to prevent the unauthorized injection
of Retry packets into a connection. However, a server operator may want to
offload production of Retry packets to an anti-Denial-of-Service agent or
hardware accelerator. "Retry Offload" is a mechanism for coordination between
a server and an external generator of Retry packets that can succeed despite
the anti-tampering mechanism.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <t>Discussion of this document takes place on the
  QUIC Working Group mailing list (quic@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/">https://mailarchive.ietf.org/arch/browse/quic/</eref>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/quicwg/load-balancers">https://github.com/quicwg/load-balancers</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>QUIC <xref target="RFC9000" format="default"/> servers send Retry packets to avoid prematurely allocating
resources when under stress, such as during a Denial of Service (DoS) attack.
Because both Initial packets and Retry packets have weak authentication
properties, the Retry packet contains an encrypted token that helps the client
and server to validate, via transport parameters, that an attacker did not
inject or modify a packet of either type for this connection attempt.</t>
      <t>However, a server under stress is less inclined to process incoming Initial
packets and compute the Retry token in the first place. An analogous mechanism
for TCP is syncookies <xref target="RFC4987" format="default"/>. As TCP has weaker authentication properties
to QUIC, syncookie generation can often be offloaded to a hardware device, or
to a anti-Denial-of-Service provider that is topologically far from the
protected server. As such an offload would behave exactly like an attacker,
QUIC's authentication methods make such a capability impossible.</t>
      <t>This document seeks to enable offloading of Retry generation to QUIC via
explicit coordination between servers and the hardware or provider offload,
which this document refers to as a "Retry Offload." It has two different
modes, to conform to two different use cases.</t>
      <t>The no-shared-state mode has minimal coordination and does not require key
sharing. While operationally easier to configure and manage, it places severe
constraints on the operational profile of the offload. In particular, the
offload must control all ingress to the server and fail closed.</t>
      <t>The shared-state mode removes the operational constraints, but also requires
more sophisticated key management.</t>
      <t>Both modes specify a common format for encoding information in the Retry token,
so that the server can correctly populate the relevant transport parameter
fields.</t>
      <section anchor="terminology" numbered="true" toc="default">
        <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" format="default"/>.</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>For brevity, "Connection ID" will often be abbreviated as "CID".</t>
        <t>A "Retry Offload" is a hardware or software device that is conceptually separate
from a QUIC server that terminates QUIC connections. This document assumes that
the Retry Offload and the server have an administrative relationship that allows
them to accept common configuation.</t>
        <t>A "configuration agent" is some entity that determines the common configuration
to be distributed to the servers and the Retry Offload.</t>
        <t>This document uses "QUIC" to refer to the protocol in QUIC version 1
<xref target="RFC9000" format="default"/>. Retry offloads can be applied to other versions of QUIC that use
Retry packets and have identical information requirements for Retry validation.
However, note that source and destination connection IDs are the only relevant
data fields that are invariant across QUIC versions <xref target="RFC8999" format="default"/>.</t>
      </section>
      <section anchor="notation" numbered="true" toc="default">
        <name>Notation</name>
        <t>All wire formats will be depicted using the notation defined in Section 1.3 of
<xref target="RFC9000" format="default"/>.</t>
        <t>The example below illustrates the basic framework:</t>
        <figure anchor="fig-ex-format">
          <name>Example Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
Example Structure {
  One-bit Field (1),
  7-bit Field with Fixed Value (7) = 61,
  Field with Variable-Length Integer (i),
  Arbitrary-Length Field (..),
  Variable-Length Field (8..24),
  Variable-Length Field with Dynamic Limit (8..24-len(Variable-Length Field)),
  Field With Minimum Length (16..),
  Field With Maximum Length (..128),
  [Optional Field (64)],
  Repeated Field (8) ...,
}
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="common-requirements" numbered="true" toc="default">
      <name>Common Requirements</name>
      <t>Regardless of mechanism, a Retry Offload has an active mode, where it is
generating Retry packets, and an inactive mode, where it is not, based on its
assessment of server load and the likelihood an attack is underway. The choice
of mode MAY be made on a per-packet or per-connection basis, through a
stochastic process or based on client address.</t>
      <t>A configuration agent MUST distribute a list of QUIC versions the Retry Offload
supports. It MAY also distribute either an "Allow-List" or a "Deny-List" of
other QUIC versions. It MUST NOT distribute both an Allow-List and a Deny-List.</t>
      <t>The Allow-List or Deny-List MUST NOT include any versions included for Retry
Offload support.</t>
      <t>The Configuration Agent MUST provide a means for the entity that controls the
Retry Offload to report its supported version(s) to the configuration Agent. If
the entity has not reported this information, it MUST NOT activate the Retry
Offload and the configuration agent MUST NOT distribute configuration that
activates it.</t>
      <t>The configuration agent MAY delete versions from the final supported version
list if policy does not require the Retry Offload to operate on those versions.</t>
      <t>The configuration Agent MUST provide a means for the entities that control
servers behind the Retry Offload to report either an Allow-List or a Deny-List.</t>
      <t>If all entities supply Allow-Lists, the consolidated list MUST be the union of
these sets. If all entities supply Deny-Lists, the consolidated list MUST be
the intersection of these sets.</t>
      <t>If entities provide a mixture of Allow-Lists and Deny-Lists, the consolidated
list MUST be a Deny-List that is the intersection of all provided Deny-Lists and
the inverses of all Allow-Lists.</t>
      <t>If no entities that control servers have reported Allow-Lists or Deny-Lists,
the default is a Deny-List with the null set (i.e., all unsupported versions
will be admitted). This preserves the future extensibilty of QUIC.</t>
      <t>A Retry Offload MUST forward all packets for a QUIC version it does not
support that are not on a Deny-List or absent from an Allow-List. Note that if
servers support versions the Retry Offload does not, this may increase load on
the servers.</t>
      <t>Note that future versions of QUIC might not have Retry packets, require
different information in Retry, or use different packet type indicators.</t>
      <section anchor="considerations-for-non-initial-packets" numbered="true" toc="default">
        <name>Considerations for Non-Initial Packets</name>
        <t>Initial Packets are especially effective at consuming server resources
because they cause the server to create connection state. Even when mitigating
this load with Retry Packets, the act of validating an Initial Token and sending
a Retry Packet is more expensive than the response to a non-Initial packet with
an unknown Connection ID: simply dropping it and/or sending a Stateless Reset.</t>
        <t>Nevertheless, a Retry Offload in Active Mode might desire to shield servers
from non-Initial packets that do not correspond to a previously admitted
Initial Packet. This has a number of considerations.</t>
        <ul spacing="normal">
          <li>If a Retry Offload maintains no per-flow state, it cannot distinguish between
valid and invalid non-Initial packets and MUST forward all non-Initial Packets
to the server.</li>
          <li>For QUIC versions the Retry Offload does not support and are present on the
Allow-List (or absent from the Deny-List), the Retry Offload cannot distinguish
Initial Packets from other long headers and therefore MUST admit all long
headers.</li>
          <li>If a Retry Offload keeps per-flow state, it can identify 4-tuples that have
been previously approved, admit non-Initial packets from those flows, and
drop all others. However, dropping short headers will effectively break Address
Migration and NAT Rebinding when in Active Mode, as post-migration packets will
arrive with a previously unknown 4-tuple. This policy will also break connection
attempts using any new QUIC versions that begin connections with a short header.</li>
          <li>If a Retry Offload is integrated with a QUIC-LB routable load balancer
<xref target="I-D.ietf-quic-load-balancers" format="default"/>, it can verify that the Destination Connection
ID is routable, and only admit non-Initial packets with routable DCIDs. As the
Connection ID encoding is invariant across QUIC versions, the Retry Offload can
do this for all short headers.</li>
        </ul>
        <t>Nothing in this section prevents Retry Offloads from making basic syntax
correctness checks on packets with QUIC versions that it understands (e.g.,
enforcing the Initial Packet datagram size minimum in version 1).</t>
      </section>
    </section>
    <section anchor="no-shared-state-retry-offload" numbered="true" toc="default">
      <name>No-Shared-State Retry Offload</name>
      <t>The no-shared-state Retry Offload requires no coordination, except that the
server must be configured to accept this offload and know which QUIC versions
the Retry Offload supports. The scheme uses the first bit of the token to
distinguish between tokens from Retry packets (codepoint '0') and tokens from
NEW_TOKEN frames (codepoint '1').</t>
      <section anchor="configuration-agent-actions" numbered="true" toc="default">
        <name>Configuration Agent Actions</name>
        <t>See <xref target="common-requirements" format="default"/>.</t>
      </section>
      <section anchor="nss-offload-requirements" numbered="true" toc="default">
        <name>Offload Requirements</name>
        <t>A no-shared-state Retry Offload MUST be present on all paths from potential
clients to the server. These paths MUST fail to pass QUIC traffic should the
offload fail for any reason. That is, if the offload is not operational, the
server MUST NOT be exposed to client traffic. Otherwise, servers that have
already disabled their Retry capability would be vulnerable to attack.</t>
        <t>The path between offload and server MUST be free of any potential attackers.
Note that this and other requirements above severely restrict the operational
conditions in which a no-shared-state Retry Offload can safely operate.</t>
        <t>Retry tokens generated by the offload MUST have the format below.</t>
        <figure anchor="nss-retry-offload-token-format">
          <name>Format of non-shared-state Retry Offload tokens</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
No-Shared-State Retry Offload Token {
  Token Type (1) = 0,
  ODCIL (7) = 8..20,
  Original Destination Connection ID (64..160),
  Opaque Data (..),
}
]]></artwork>
        </figure>
        <t>The first bit of retry tokens generated by the offload MUST be zero. The token
has the following additional fields:</t>
        <t>ODCIL: The length of the original destination connection ID from the triggering
Initial packet. This is in cleartext to be readable for the server, but
authenticated later in the token. The Retry Offload SHOULD reject any token
in which the value is less than 8.</t>
        <t>Original Destination Connection ID: This also in cleartext and authenticated
later.</t>
        <t>Opaque Data: This data contains the information necessary to authenticate the
Retry token in accordance with the QUIC specification. A straightforward
implementation would encode the Retry Source Connection ID, client IP address,
and a timestamp in the Opaque Data. A more space-efficient implementation would
use the Retry Source Connection ID and Client IP as associated data in an
encryption operation, and encode only the timestamp and the authentication tag
in the Opaque Data. If the Initial Packet has altered the Connection ID or
source IP address, authentication of the token will fail.</t>
        <t>Upon receipt of an Initial packet with a token that begins with '0', the Retry
Offload MUST validate the token in accordance with the QUIC specification.</t>
        <t>In active mode, the offload MUST issue Retry packets for all Client initial
packets that contain no token, or a token that has the first bit set to '1'. It
MUST NOT forward the packet to the server. The offload MUST validate all tokens
with the first bit set to '0'. If successful, the offload MUST forward the
packet with the token intact. If unsuccessful, it MUST drop the packet. The
Retry Offload MAY send an Initial Packet containing a CONNECTION_CLOSE frame
with the INVALID_TOKEN error code when dropping the packet.</t>
        <t>Note that this scheme has a performance drawback. When the Retry Offload is in
active mode, clients with a token from a NEW_TOKEN frame will suffer a 1-RTT
penalty even though its token provides proof of address.</t>
        <t>In inactive mode, the offload MUST forward all packets that have no token or a
token with the first bit set to '1'. It MUST validate all tokens with the first
bit set to '0'. If successful, the offload MUST forward the packet with the
token intact. If unsuccessful, it MUST either drop the packet or forward it
with the token removed. The latter requires decryption and re-encryption of the
entire Initial packet to avoid authentication failure. Forwarding the packet
causes the server to respond without the original_destination_connection_id
transport parameter, which preserves the normal QUIC signal to the client that
there is an on-path attacker.</t>
      </section>
      <section anchor="server-requirements" numbered="true" toc="default">
        <name>Server Requirements</name>
        <t>A server behind a non-shared-state Retry Offload MUST NOT send Retry packets
for a QUIC version the Retry Offload understands. It MAY send Retry for QUIC
versions the Retry Offload does not understand.</t>
        <t>Tokens sent in NEW_TOKEN frames MUST have the first bit set to '1'.</t>
        <t>If a server receives an Initial Packet with the first bit in the token set to
'1', it could be from a server-generated NEW_TOKEN frame and should be processed
in accordance with the QUIC specification. If a server receives an Initial
Packet with the first bit to '0', it is a Retry token and the server MUST NOT
attempt to validate it. Instead, it MUST assume the address is validated, MUST
include the packet's Destination Connection ID in a Retry Source Connection ID
transport parameter, and MUST extract the Original Destination Connection ID
from the token cleartext for use in the transport parameter of the same name.</t>
      </section>
    </section>
    <section anchor="shared-state-retry" numbered="true" toc="default">
      <name>Shared-State Retry Offload</name>
      <t>A shared-state Retry Offload uses a shared key, so that the server can decode
the offload's retry tokens. It does not require that all traffic pass through
the Retry Offload, so servers MAY send Retry packets in response to Initial
packets that don't include a valid token.</t>
      <t>Both server and offload MUST have time synchronized with respect to one another
to prevent tokens being incorrectly marked as expired, though tight
synchronization is unnecessary.</t>
      <t>The tokens are protected using AES128-GCM AEAD, as explained in
<xref target="token-protection-with-aead" format="default"/>. All tokens, generated by either the server or
Retry Offload, MUST use the following format, which includes:</t>
      <ul spacing="normal">
        <li>A 1 bit token type identifier.</li>
        <li>A 7 bit token key identifier.</li>
        <li>A 96 bit unique token number transmitted in clear text, but protected as part
of the AEAD associated data.</li>
        <li>A token body, encoding the Original Destination Connection ID and the
Timestamp, optionally followed by server specific Opaque Data.</li>
      </ul>
      <t>The token protection uses an 128 bit representation of the source IP address
from the triggering Initial packet.  The client IP address is 16 octets. If an
IPv4 address, the last 12 octets are zeroes. It also uses the Source Connection
ID of the Retry packet, which will cause an authentication failure if it
differs from the Destination Connection ID of the packet bearing the token.</t>
      <t>If there is a Network Address Translator (NAT) in the server infrastructure that
changes the client IP, the Retry Offload MUST either be positioned behind the
NAT, or the NAT must have the token key to rewrite the Retry token accordingly.
Note also that a host that obtains a token through a NAT and then attempts to
connect over a path that does not have an identically configured NAT will fail
address validation.</t>
      <t>The 96 bit unique token number is set to a random value using a
cryptography-grade random number generator.</t>
      <t>The token key identifier and the corresponding AEAD key and AEAD IV are
provisioned by the configuration agent.</t>
      <t>The token body is encoded as follows:</t>
      <figure anchor="ss-retry-offload-token-body">
        <name>Body of shared-state Retry Offload tokens</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Shared-State Retry Offload Token Body {
   Timestamp (64),
   [ODCIL (8) = 8..20],
   [Original Destination Connection ID (64..160)],
   [Port (16)],
   Opaque Data (..),
}
]]></artwork>
      </figure>
      <t>The token body has the following fields:</t>
      <t>Timestamp: The Timestamp is a 64-bit integer, in network order, that expresses
the expiration time of the token as a number of seconds in POSIX time (see Sec.
4.16 of <xref target="TIME_T" format="default"/>).</t>
      <t>ODCIL: The original destination connection ID length. Tokens in NEW_TOKEN frames
do not have this field.</t>
      <t>Original Destination Connection ID: The server or Retry Offload copies this
from the field in the client Initial packet. Tokens in NEW_TOKEN frames do not
have this field.</t>
      <t>Port: The Source Port of the UDP datagram that triggered the Retry packet.
This field MUST be present if and only if the ODCIL is greater than zero. This
field is therefore always absent in tokens in NEW_TOKEN frames.</t>
      <t>Opaque Data: The server may use this field to encode additional information,
such as congestion window, RTT, or MTU. The Retry Offload MUST have zero-length
opaque data.</t>
      <t>Some implementations of QUIC encode in the token the Initial Packet Number used
by the client, in order to verify that the client sends the retried Initial
with a PN larger that the triggering Initial. Such implementations will encode
the Initial Packet Number as part of the opaque data. As tokens may be
generated by the Service, servers MUST NOT reject tokens because they lack
opaque data and therefore the packet number.</t>
      <t>Shared-state Retry Offloads use the AES-128-ECB cipher. Future standards could
add new algorithms that use other ciphers to provide cryptographic agility in
accordance with <xref target="RFC7696" format="default"/>. Retry Offload and server implementations SHOULD be
extensible to support new algorithms.</t>
      <section anchor="token-protection-with-aead" numbered="true" toc="default">
        <name>Token Protection with AEAD</name>
        <t>On the wire, the token is presented as:</t>
        <figure anchor="ss-retry-offload-token-wire-image">
          <name>Wire image of shared-state Retry Offload tokens</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
Shared-State Retry Offload Token {
  Token Type (1),
  Key Sequence (7),
  Unique Token Number (96),
  Encrypted Shared-State Retry Offload Token Body (64..),
  AEAD Integrity Check Value (128),
}
]]></artwork>
        </figure>
        <t>The tokens are protected using AES128-GCM as follows:</t>
        <ul spacing="normal">
          <li>The Key Sequence is the 7 bit identifier to retrieve the token key and IV.</li>
          <li>The AEAD IV, is a 96 bit data which produced by implementer's custom
AEAD IV derivation function.</li>
          <li>The AEAD nonce, N, is formed by combining the AEAD IV with the 96 bit unique
token number. The 96 bits of the unique token number are left-padded with zeros
to the size of the IV. The exclusive OR of the padded unique token number and
the AEAD IV forms the AEAD nonce.</li>
          <li>The associated data is a formatted as a pseudo header by combining the
cleartext part of the token with the IP address of the client. The format of
the pseudoheader depends on whether the Token Type bit is '1' (a NEW_TOKEN
token) or '0' (a Retry token).</li>
        </ul>
        <figure anchor="ss-retry-offload-token-pseudoheader">
          <name>Psuedoheader for shared-state Retry Offload tokens</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
Shared-State Retry Offload Token Pseudoheader {
  IP Address (128),
  Token Type (1),
  Key Sequence (7),
  Unique Token Number (96),
  [RSCIL (8)],
  [Retry Source Connection ID (0..20)],
}
]]></artwork>
        </figure>
        <t>RSCIL: The Retry Source Connection ID Length in octets. This field is only
present when the Token Type is '0'.</t>
        <t>Retry Source Connection ID: To create a Retry Token, populate this field with
the Source Connection ID the Retry packet will use. To validate a Retry token,
populate it with the Destination Connection ID of the Initial packet that
carries the token. This field is only present when the Token Type is '0'.</t>
        <ul spacing="normal">
          <li>The input plaintext for the AEAD is the token body. The output ciphertext of
the AEAD is transmitted in place of the token body.</li>
          <li>The AEAD Integrity Check Value(ICV), defined in Section 6 of <xref target="RFC4106" format="default"/>, is
computed as part of the AEAD encryption process, and is verified during
 decryption.</li>
        </ul>
      </section>
      <section anchor="configuration-agent-actions-1" numbered="true" toc="default">
        <name>Configuration Agent Actions</name>
        <t>The configuration agent generates and distributes a "token key", a "token IV",
a key sequence, and the information described in <xref target="common-requirements" format="default"/>.</t>
      </section>
      <section anchor="ss-offload" numbered="true" toc="default">
        <name>Offload Requirements</name>
        <t>In inactive mode, the Retry Offload forwards all packets without further
inspection or processing. The rest of this section only applies to a offload in
active mode.</t>
        <t>Retry Offloads MUST NOT issue Retry packets except where explicitly allowed
below, to avoid sending a Retry packet in response to a Retry token.</t>
        <t>The offload MUST generate Retry tokens with the format described above when it
receives a client Initial packet with no token.</t>
        <t>If there is a token of either type, the offload MUST attempt to decrypt it.</t>
        <t>To decrypt a packet, the offload checks the Token Type and constructs a
pseudoheader with the appropriate format for that type, using the bearing
packet's Destination Connection ID to populate the Retry Source Connection ID
field, if any.</t>
        <t>A token is invalid if:</t>
        <ul spacing="normal">
          <li>it uses unknown key sequence,</li>
          <li>the AEAD ICV does not match the expected value (By construction, it will only
match if the client IP Address, and any Retry Source Connection ID, also
matches),</li>
          <li>the ODCIL, if present, is invalid for a client-generated CID (less than 8 or
more than 20 in QUIC version 1),</li>
          <li>the Timestamp of a token points to time in the past (however, in order to
allow for clock skew, it SHOULD NOT consider tokens to be expired if the
Timestamp encodes a few seconds in the past), or</li>
          <li>the port number, if present, does not match the source port in the
encapsulating UDP header.</li>
        </ul>
        <t>Packets with valid tokens MUST be forwarded to the server.</t>
        <t>The offload MUST drop packets with invalid tokens. If the token is of type '1'
(NEW_TOKEN), it MUST respond with a Retry packet. If of type '0', it MUST NOT
respond with a Retry packet.</t>
      </section>
      <section anchor="server-requirements-1" numbered="true" toc="default">
        <name>Server Requirements</name>
        <t>The server MAY issue Retry or NEW_TOKEN tokens in accordance with <xref target="RFC9000" format="default"/>.
When doing so, it MUST follow the format above.</t>
        <t>The server MUST validate all tokens that arrive in Initial packets, as they may
have bypassed the Retry Offload. It determines validity using the procedure
in <xref target="ss-offload" format="default"/>.</t>
        <t>If a valid Retry token, the server populates the
original_destination_connection_id transport parameter using the
corresponding token field. It populates the retry_source_connection_id transport
parameter with the Destination Connection ID of the packet bearing the token.</t>
        <t>In all other respects, the server processes both valid and invalid tokens in
accordance with <xref target="RFC9000" format="default"/>.</t>
        <t>For QUIC versions the offload does not support, the server MAY use any token
format.</t>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <section anchor="shared-state-retry-keys" numbered="true" toc="default">
        <name>Shared-State Retry Keys</name>
        <t>The Shared-State Retry Offload defined in <xref target="shared-state-retry" format="default"/> describes the
format of retry tokens or new tokens protected and encrypted using AES128-GCM.
Each token includes a 96 bit randomly generated unique token number, and an 8
bit identifier used to get the AES-GCM encryption context. The AES-GCM
encryption context contains a 128 bit key and an AEAD IV. There are three
important security considerations for these tokens:</t>
        <ul spacing="normal">
          <li>An attacker that obtains a copy of the encryption key will be able to decrypt
and forge tokens.</li>
          <li>Attackers may be able to retrieve the key if they capture a sufficently large
number of retry tokens encrypted with a given key.</li>
          <li>Confidentiality of the token data will fail if separate tokens reuse the
same 96 bit unique token number and the same key.</li>
        </ul>
        <t>To protect against disclosure of keys to attackers, offload and servers MUST
ensure that the keys are stored securely. To limit the consequences of potential
exposures, the time to live of any given key should be limited.</t>
        <t>Section 6.6 of <xref target="RFC9001" format="default"/> states that "Endpoints MUST count the number of
encrypted packets for each set of keys. If the total number of encrypted packets
with the same key exceeds the confidentiality limit for the selected AEAD, the
endpoint MUST stop using those keys." It goes on with the specific limit: "For
AEAD_AES_128_GCM and AEAD_AES_256_GCM, the confidentiality limit is 2^23
encrypted packets; see Appendix B.1." It is prudent to adopt the same limit
here, and configure the offload in such a way that no more than 2^23 tokens are
generated with the same key.</t>
        <t>In order to protect against collisions, the 96 bit unique token numbers should
be generated using a cryptographically secure pseudorandom number generator
(CSPRNG), as specified in Appendix C.1 of the TLS 1.3 specification
<xref target="RFC8446" format="default"/>. With proper random numbers, if fewer than 2^40 tokens are
generated with a single key, the risk of collisions is lower than 0.001%.</t>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>There are no IANA requirements.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="TIME_T" target="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_16">
          <front>
            <title>Open Group Standard: Vol. 1: Base Definitions, Issue 7</title>
            <author>
              <organization/>
            </author>
            <date year="2018"/>
          </front>
          <seriesInfo name="IEEE Std 1003.1" value=""/>
        </reference>
        <reference anchor="RFC9000" target="https://www.rfc-editor.org/info/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="RFC8446" target="https://www.rfc-editor.org/info/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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC4987" target="https://www.rfc-editor.org/info/rfc4987">
          <front>
            <title>TCP SYN Flooding Attacks and Common Mitigations</title>
            <author fullname="W. Eddy" initials="W." surname="Eddy">
              <organization/>
            </author>
            <date month="August" year="2007"/>
            <abstract>
              <t>This document describes TCP SYN flooding attacks, which have been well-known to the community for several years.  Various countermeasures against these attacks, and the trade-offs of each, are described.  This document archives explanations of the attack and common defense techniques for the benefit of TCP implementers and administrators of TCP servers or networks, but does not make any standards-level recommendations.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4987"/>
          <seriesInfo name="DOI" value="10.17487/RFC4987"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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="RFC8999" target="https://www.rfc-editor.org/info/rfc8999">
          <front>
            <title>Version-Independent Properties of QUIC</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8999"/>
          <seriesInfo name="DOI" value="10.17487/RFC8999"/>
        </reference>
        <reference anchor="I-D.ietf-quic-load-balancers" target="https://www.ietf.org/archive/id/draft-ietf-quic-load-balancers-12.txt">
          <front>
            <title>QUIC-LB: Generating Routable QUIC Connection IDs</title>
            <author fullname="Martin Duke">
              <organization>Google</organization>
            </author>
            <author fullname="Nick Banks">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Christian Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="11" month="February" year="2022"/>
            <abstract>
              <t>   The QUIC protocol design is resistant to transparent packet
   inspection, injection, and modification by intermediaries.  However,
   the server can explicitly cooperate with network services by agreeing
   to certain conventions and/or sharing state with those services.
   This specification provides a standardized means of solving three
   problems: (1) maintaining routability to servers via a low-state load
   balancer even when the connection IDs in use change; (2) explicit
   encoding of the connection ID length in all packets to assist
   hardware accelerators; and (3) injection of QUIC Retry packets by an
   anti-Denial-of-Service agent on behalf of the server.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-load-balancers-12"/>
        </reference>
        <reference anchor="RFC7696" target="https://www.rfc-editor.org/info/rfc7696">
          <front>
            <title>Guidelines for Cryptographic Algorithm Agility and Selecting Mandatory-to-Implement Algorithms</title>
            <author fullname="R. Housley" initials="R." surname="Housley">
              <organization/>
            </author>
            <date month="November" year="2015"/>
            <abstract>
              <t>Many IETF protocols use cryptographic algorithms to provide confidentiality, integrity, authentication, or digital signature.  Communicating peers must support a common set of cryptographic algorithms for these mechanisms to work properly.  This memo provides guidelines to ensure that protocols have the ability to migrate from one mandatory-to-implement algorithm suite to another over time.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="201"/>
          <seriesInfo name="RFC" value="7696"/>
          <seriesInfo name="DOI" value="10.17487/RFC7696"/>
        </reference>
        <reference anchor="RFC4106" target="https://www.rfc-editor.org/info/rfc4106">
          <front>
            <title>The Use of Galois/Counter Mode (GCM) in IPsec Encapsulating Security Payload (ESP)</title>
            <author fullname="J. Viega" initials="J." surname="Viega">
              <organization/>
            </author>
            <author fullname="D. McGrew" initials="D." surname="McGrew">
              <organization/>
            </author>
            <date month="June" year="2005"/>
            <abstract>
              <t>This memo describes the use of the Advanced Encryption Standard (AES) in Galois/Counter Mode (GCM) as an IPsec Encapsulating Security Payload (ESP) mechanism to provide confidentiality and data origin authentication.  This method can be efficiently implemented in hardware for speeds of 10 gigabits per second and above, and is also well-suited to software implementations.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4106"/>
          <seriesInfo name="DOI" value="10.17487/RFC4106"/>
        </reference>
        <reference anchor="RFC9001" target="https://www.rfc-editor.org/info/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="RFC6020" target="https://www.rfc-editor.org/info/rfc6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC8340" target="https://www.rfc-editor.org/info/rfc8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams.  The purpose of this document is to provide a single location for this definition.  This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
      </references>
    </references>
    <section anchor="yang-model" numbered="true" toc="default">
      <name>Retry Offload YANG Model</name>
      <t>These YANG models conform to <xref target="RFC6020" format="default"/> and express a complete Retry Offload
configuration.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
module ietf-retry-offload {
  yang-version "1.1";
  namespace "urn:ietf:params:xml:ns:yang:ietf-quic-lb";
  prefix "quic-lb";

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types.";
  }

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types.";
  }

  organization
    "IETF QUIC Working Group";

  contact
    "WG Web:   <http://datatracker.ietf.org/wg/quic>
     WG List:  <quic@ietf.org>

     Authors: Martin Duke (martin.h.duke at gmail dot com)
              Nick Banks (nibanks at microsoft dot com)
              Christian Huitema (huitema at huitema.net)";

  description
    "This module enables the explicit cooperation of QUIC servers
     with offloads that generate Retry packets on their behalf.

     Copyright (c) 2022 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.";

  revision "2022-02-11" {
    description
      "Initial version";
    reference
      "RFC XXXX, QUIC Retry Offloads";
  }

  container retry-offload-config {
    description
      "Configuration of Retry Offload. If supported-versions is empty,
       there is no Retry Offload. If token-keys is empty, it uses the
       non-shared-state offload. If present, it uses shared-state
       tokens.";

    leaf-list supported-versions {
      type uint32;
      description
        "QUIC versions that the Retry Offload supports. If empty,
         there is no Retry Offload.";
    }

    leaf unsupported-version-default {
      type enumeration {
        enum allow {
          description "Unsupported versions admitted by default";
        }
        enum deny {
          description "Unsupported versions denied by default";
        }
      }
      default allow;
      description
        "Are unsupported versions not in version-exceptions allowed
         or denied?";
    }

    leaf-list version-exceptions {
      type uint32;
      description
        "Exceptions to the default-deny or default-allow rule.";
    }

    list token-keys {
      key "key-sequence-number";
      description
        "list of active keys, for key rotation purposes. Existence
         implies shared-state format";

      leaf key-sequence-number {
        type uint8 {
          range "0..127";
        }
        mandatory true;
        description
          "Identifies the key used to encrypt the token";
        }

      leaf token-key {
        type retry-offload-key;
        mandatory true;
        description
          "16-byte key to encrypt the token";
      }

      leaf token-iv {
        type yang:hex-string {
          length 23;
        }
        mandatory true;
        description
          "8-byte IV to encrypt the token, encoded in 23 bytes";
      }
    }
  }
}
]]></artwork>
      <section anchor="tree-diagram" numbered="true" toc="default">
        <name>Tree Diagram</name>
        <t>This summary of the YANG models uses the notation in <xref target="RFC8340" format="default"/>.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
module: retry-offload-config
  +--rw retry-offload-config
     +--rw supported-versions*            uint32
     +--rw unsupported-version-default?   enumeration
     +--rw version-exceptions*            uint32
     +--rw token-keys* [key-sequence-number]
        +--rw key-sequence-number    uint8
        +--rw token-key              quic-lb-key
        +--rw token-iv               yang:hex-string

## Shared State Retry Token Test Vectors

In this case, the shared-state retry token is issued by Retry Offload, so the
opaque data of shared-state retry token body would be null
({{shared-state-retry}}).

]]></artwork>
        <t>Configuration:
key_seq 0x00
encrypt_key 0x30313233343536373839303132333435
AEAD_IV 0x313233343536373839303132</t>
        <t>Shared-State Retry Offload Token Body:
ODCIL 0x12
RSCIL 0x10
port 0x1a0a
original_destination_connection_id 0x0c3817b544ca1c94313bba41757547eec937
retry_source_connection_id 0x0301e770d24b3b13070dd5c2a9264307
timestamp 0x0000000060c7bf4d</t>
        <t>Shared-State Retry Offload Token:
unique_token_number 0x59ef316b70575e793e1a8782
key_sequence 0x00
encrypted_shared_state_retry_offload_token_body
0x7d38b274aa4427c7a1557c3fa666945931defc65da387a83855196a7cb73caac1e28e5346fd76868de94f8b62294
AEAD_ICV 0xf91174fdd711543a32d5e959867f9c22</t>
        <t>AEAD related parameters:
client_ip_addr 127.0.0.1
client_port 6666
AEAD_nonce 0x68dd025f45616941072ab6b0
AEAD_associated_data 0x7f00000100000000000000000000000059ef316b70575e793e1a878200
~~~</t>
      </section>
    </section>
    <section anchor="acknowledgments" numbered="true" toc="default">
      <name>Acknowledgments</name>
      <t>Christian Huitema, Ling Tao Nju, and William Zeng Ke all provided useful input
to this document.</t>
    </section>
    <section anchor="change-log" numbered="true" toc="default">
      <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-ietf-quic-load-balancers-12" numbered="true" toc="default">
        <name>since draft-ietf-quic-load-balancers-12</name>
        <ul spacing="normal">
          <li>Separated from the QUIC-LB draft</li>
          <li>Renamed "Retry Service" to "Retry Offload"</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-11" numbered="true" toc="default">
        <name>since draft-ietf-quic-load-balancers-11</name>
        <ul spacing="normal">
          <li>Fixed mistakes in test vectors</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-10" numbered="true" toc="default">
        <name>since draft-ietf-quic-load-balancers-10</name>
        <ul spacing="normal">
          <li>Refactored algorithm descriptions; made the 4-pass algorithm easier to
implement</li>
          <li>Revised test vectors</li>
          <li>Split YANG model into a server and middlebox version</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-09" numbered="true" toc="default">
        <name>since draft-ietf-quic-load-balancers-09</name>
        <ul spacing="normal">
          <li>Renamed "Stream Cipher" and "Block Cipher" to "Encrypted Short" and
"Encrypted Long"</li>
          <li>Added section on per-connection state</li>
          <li>Changed "Encrypted Short" to a 4-pass algorithm.</li>
          <li>Recommended a random initial nonce when incrementing.</li>
          <li>Clarified what SNI LBs should do with unknown QUIC versions.</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-08" numbered="true" toc="default">
        <name>since draft-ietf-quic-load-balancers-08</name>
        <ul spacing="normal">
          <li>Eliminate Dynamic SID allocation</li>
          <li>Eliminated server use bytes</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-07" numbered="true" toc="default">
        <name>since draft-ietf-quic-load-balancers-07</name>
        <ul spacing="normal">
          <li>Shortened SSCID nonce minimum length to 4 bytes</li>
          <li>Removed RSCID from Retry token body</li>
          <li>Simplified CID formats</li>
          <li>Shrunk size of SID table</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-06" numbered="true" toc="default">
        <name>since draft-ietf-quic-load-balancers-06</name>
        <ul spacing="normal">
          <li>Added interoperability with DTLS</li>
          <li>Changed "non-compliant" to "unroutable"</li>
          <li>Changed "arbitrary" algorithm to "fallback"</li>
          <li>Revised security considerations for mistrustful tenants</li>
          <li>Added Retry Offload considerations for non-Initial packets</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-05" numbered="true" toc="default">
        <name>since draft-ietf-quic-load-balancers-05</name>
        <ul spacing="normal">
          <li>Added low-config CID for further discussion</li>
          <li>Complete revision of shared-state Retry Token</li>
          <li>Added YANG model</li>
          <li>Updated configuration limits to ensure CID entropy</li>
          <li>Switched to notation from quic-transport</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-04" numbered="true" toc="default">
        <name>since draft-ietf-quic-load-balancers-04</name>
        <ul spacing="normal">
          <li>Rearranged the shared-state retry token to simplify token processing</li>
          <li>More compact timestamp in shared-state retry token</li>
          <li>Revised server requirements for shared-state retries</li>
          <li>Eliminated zero padding from the test vectors</li>
          <li>Added server use bytes to the test vectors</li>
          <li>Additional compliant DCID criteria</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-03" numbered="true" toc="default">
        <name>since-draft-ietf-quic-load-balancers-03</name>
        <ul spacing="normal">
          <li>Improved Config Rotation text</li>
          <li>Added stream cipher test vectors</li>
          <li>Deleted the Obfuscated CID algorithm</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-02" numbered="true" toc="default">
        <name>since-draft-ietf-quic-load-balancers-02</name>
        <ul spacing="normal">
          <li>Replaced stream cipher algorithm with three-pass version</li>
          <li>Updated Retry format to encode info for required TPs</li>
          <li>Added discussion of version invariance</li>
          <li>Cleaned up text about config rotation</li>
          <li>Added Reset Oracle and limited configuration considerations</li>
          <li>Allow dropped long-header packets for known QUIC versions</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-01" numbered="true" toc="default">
        <name>since-draft-ietf-quic-load-balancers-01</name>
        <ul spacing="normal">
          <li>Test vectors for load balancer decoding</li>
          <li>Deleted remnants of in-band protocol</li>
          <li>Light edit of Retry Offloads section</li>
          <li>Discussed load balancer chains</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-00" numbered="true" toc="default">
        <name>since-draft-ietf-quic-load-balancers-00</name>
        <ul spacing="normal">
          <li>Removed in-band protocol from the document</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-load-balancers-06" numbered="true" toc="default">
        <name>Since draft-duke-quic-load-balancers-06</name>
        <ul spacing="normal">
          <li>Switch to IETF WG draft.</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-load-balancers-05" numbered="true" toc="default">
        <name>Since draft-duke-quic-load-balancers-05</name>
        <ul spacing="normal">
          <li>Editorial changes</li>
          <li>Made load balancer behavior independent of QUIC version</li>
          <li>Got rid of token in stream cipher encoding, because server might not have it</li>
          <li>Defined "non-compliant DCID" and specified rules for handling them.</li>
          <li>Added psuedocode for config schema</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-load-balancers-04" numbered="true" toc="default">
        <name>Since draft-duke-quic-load-balancers-04</name>
        <ul spacing="normal">
          <li>Added standard for Retry Offloads</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-load-balancers-03" numbered="true" toc="default">
        <name>Since draft-duke-quic-load-balancers-03</name>
        <ul spacing="normal">
          <li>Renamed Plaintext CID algorithm as Obfuscated CID</li>
          <li>Added new Plaintext CID algorithm</li>
          <li>Updated to allow 20B CIDs</li>
          <li>Added self-encoding of CID length</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-load-balancers-02" numbered="true" toc="default">
        <name>Since draft-duke-quic-load-balancers-02</name>
        <ul spacing="normal">
          <li>Added Config Rotation</li>
          <li>Added failover mode</li>
          <li>Tweaks to existing CID algorithms</li>
          <li>Added Block Cipher CID algorithm</li>
          <li>Reformatted QUIC-LB packets</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-load-balancers-01" numbered="true" toc="default">
        <name>Since draft-duke-quic-load-balancers-01</name>
        <ul spacing="normal">
          <li>Complete rewrite</li>
          <li>Supports multiple security levels</li>
          <li>Lightweight messages</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-load-balancers-00" numbered="true" toc="default">
        <name>Since draft-duke-quic-load-balancers-00</name>
        <ul spacing="normal">
          <li>Converted to markdown</li>
          <li>Added variable length connection IDs</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
S0Buuu0/yEtGrYVcf+Gs+m+dxtuRJ4cAAA==

-->

</rfc>
