<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.11 (Ruby 3.1.2) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-load-balancers-14" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title abbrev="QUIC-LB">QUIC-LB: Generating Routable QUIC Connection IDs</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-load-balancers-14"/>
    <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>
    <author initials="C." surname="Huitema" fullname="Christian Huitema">
      <organization>Private Octopus Inc.</organization>
      <address>
        <email>huitema@huitema.net</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <abstract>
      <t>QUIC address migration allows clients to change their IP address while
maintaining connection state. To reduce the ability of an observer to link two
IP addresses, clients and servers use new connection IDs when they communicate
via different client addresses. This poses a problem for traditional "layer-4"
load balancers that route packets via the IP address and port 4-tuple. This
specification provides a standardized means of securely encoding routing
information in the server's connection IDs so that a properly configured load
balancer can route packets with migrated addresses correctly. As it proposes a
structured connection ID format, it also provides a means of connection IDs
self-encoding their length to aid some hardware offloads.</t>
    </abstract>
    <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">
      <name>Introduction</name>
      <t>QUIC packets <xref target="RFC9000"/> usually contain a connection ID to allow endpoints to
associate packets with different address/port 4-tuples to the same connection
context. This feature makes connections robust in the event of NAT rebinding.
QUIC endpoints usually designate the connection ID which peers use to address
packets. Server-generated connection IDs create a potential need for out-of-band
communication to support QUIC.</t>
      <t>QUIC allows servers (or load balancers) to designate an initial connection ID to
encode useful routing information for load balancers.  It also encourages
servers, in packets protected by cryptography, to provide additional connection
IDs to the client.  This allows clients that know they are going to change IP
address or port to use a separate connection ID on the new path, thus reducing
linkability as clients move through the world.</t>
      <t>There is a tension between the requirements to provide routing information and
mitigate linkability.  Ultimately, because new connection IDs are in protected
packets, they must be generated at the server if the load balancer does not have
access to the connection keys. However, it is the load balancer that has the
context necessary to generate a connection ID that encodes useful routing
information. In the absence of any shared state between load balancer and
server, the load balancer must maintain a relatively expensive table of
server-generated connection IDs, and will not route packets correctly if they
use a connection ID that was originally communicated in a protected
NEW_CONNECTION_ID frame.</t>
      <t>This specification provides common algorithms for encoding the server mapping in
a connection ID given some shared parameters. The mapping is generally only
discoverable by observers that have the parameters, preserving unlinkability as
much as possible.</t>
      <t>As this document proposes a structured QUIC Connection ID, it also proposes a
system for self-encoding connection ID length in all packets, so that crypto
offload can efficiently obtain key information.</t>
      <t>While this document describes a small set of configuration parameters to make
the server mapping intelligible, the means of distributing these parameters
between load balancers, servers, and other trusted intermediaries is out of its
scope. There are numerous well-known infrastructures for distribution of
configuration.</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>In this document, "client" and "server" refer to the endpoints of a QUIC
connection unless otherwise indicated.  A "load balancer" is an intermediary for
that connection that does not possess QUIC connection keys, but it may rewrite
IP addresses or conduct other IP or UDP processing. A "configuration agent" is
the entity that determines the QUIC-LB configuration parameters for the network
and leverages some system to distribute that configuration.</t>
        <t>Note that stateful load balancers that act as proxies, by terminating a QUIC
connection with the client and then retrieving data from the server using QUIC
or another protocol, are treated as a server with respect to this specification.</t>
        <t>For brevity, "Connection ID" will often be abbreviated as "CID".</t>
      </section>
      <section anchor="notation">
        <name>Notation</name>
        <t>All wire formats will be depicted using the notation defined in Section 1.3 of
<xref target="RFC9000"/>. There is one addition: the function len() refers to the length of
a field which can serve as a limit on a different field, so that the lengths of
two fields can be concisely defined as limited to a sum, for example:</t>
        <t>x(A..B)
y(C..B-len(x))</t>
        <t>indicates that x can be of any length between A and B, and y can be of any
length between C and B provided that (len(x) + len(y)) does not exceed B.</t>
        <t>The example below illustrates the basic framework:</t>
        <figure anchor="fig-ex-format">
          <name>Example Format</name>
          <artwork><![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="first-octet">
      <name>First CID octet</name>
      <t>The first octet of a Connection ID is reserved for two special purposes, one
mandatory (config rotation) and one optional (length self-description).</t>
      <t>Subsequent sections of this document refer to the contents of this octet as the
"first octet."</t>
      <section anchor="config-rotation">
        <name>Config Rotation</name>
        <t>The first two bits of any connection ID MUST encode an identifier for the
configuration that the connection ID uses. This enables incremental deployment
of new QUIC-LB settings (e.g., keys).</t>
        <t>When new configuration is distributed to servers, there will be a transition
period when connection IDs reflecting old and new configuration coexist in the
network.  The rotation bits allow load balancers to apply the correct routing
algorithm and parameters to incoming packets.</t>
        <t>Configuration Agents SHOULD deliver new configurations to load balancers before
doing so to servers, so that load balancers are ready to process CIDs using the
new parameters when they arrive.</t>
        <t>A Configuration Agent SHOULD NOT use a codepoint to represent a new
configuration until it takes precautions to make sure that all connections using
CIDs with an old configuration at that codepoint have closed or transitioned.</t>
        <t>Servers MUST NOT generate new connection IDs using an old configuration after
receiving a new one from the configuration agent. Servers MUST send
NEW_CONNECTION_ID frames that provide CIDs using the new configuration, and
retire CIDs using the old configuration using the "Retire Prior To" field of
that frame.</t>
        <t>It also possible to use these bits for more long-lived distinction of different
configurations, but this has privacy implications (see <xref target="multiple-configs"/>).</t>
      </section>
      <section anchor="config-failover">
        <name>Configuration Failover</name>
        <t>If a server has not received a valid QUIC-LB configuration, and believes that
low-state, Connection-ID aware load balancers are in the path, it SHOULD
generate connection IDs with the config rotation bits set to 0b11 and SHOULD use
the "disable_active_migration" transport parameter in all new QUIC connections.
It SHOULD NOT send NEW_CONNECTION_ID frames with new values.</t>
        <t>A load balancer that sees a connection ID with config rotation bits set to
0b11 MUST route using an algorithm based solely on the address/port 4-tuple,
which is consistent well beyond the QUIC handshake. However, a load balancer MAY
observe the connection IDs used during the handshake and populate a connection
ID table that allows the connection to survive a NAT rebinding, and reduces the
probability of connection failure due to a change in the number of servers.</t>
        <t>When using codepoint 0b11, all bytes but the first SHOULD have no larger of a
chance of collision as random bytes. The connection ID SHOULD be of at least
length 8 to provide 7 bytes of entropy after the first octet with a low chance
of collision. Furthermore, servers in a pool SHOULD also use a consistent
connection ID length to simplify the load balancer's extraction of a connection
ID from short headers.</t>
      </section>
      <section anchor="length-self-description">
        <name>Length Self-Description</name>
        <t>Local hardware cryptographic offload devices may accelerate QUIC servers by
receiving keys from the QUIC implementation indexed to the connection ID.
However, on physical devices operating multiple QUIC servers, it is impractical
to efficiently lookup these keys if the connection ID does not self-encode its
own length.</t>
        <t>Note that this is a function of particular server devices and is irrelevant to
load balancers. As such, load balancers MAY omit this from their configuration.
However, the remaining 6 bits in the first octet of the Connection ID are
reserved to express the length of the following connection ID, not including
the first octet.</t>
        <t>A server not using this functionality SHOULD make the six bits appear to be
random.</t>
      </section>
      <section anchor="format">
        <name>Format</name>
        <figure anchor="first-octet-format">
          <name>First Octet Format</name>
          <artwork><![CDATA[
First Octet {
  Config Rotation (2),
  CID Len or Random Bits (6),
}
]]></artwork>
        </figure>
        <t>The first octet has the following fields:</t>
        <t>Config Rotation: Indicates the configuration used to interpret the CID.</t>
        <t>CID Len or Random Bits: Length Self-Description (if applicable), or random bits
otherwise. Encodes the length of the Connection ID following the First Octet.</t>
      </section>
    </section>
    <section anchor="load-balancing">
      <name>Load Balancing Preliminaries</name>
      <t>In QUIC-LB, load balancers do not generate individual connection IDs for
servers.  Instead, they communicate the parameters of an algorithm to generate
routable connection IDs.</t>
      <t>The algorithms differ in the complexity of configuration at both load balancer
and server. Increasing complexity improves obfuscation of the server mapping.</t>
      <t>This section describes three participants: the configuration agent, the load
balancer, and the server. For any given QUIC-LB configuration that enables
connection-ID-aware load balancing, there must be a choice of (1) routing
algorithm, (2) server ID allocation strategy, and (3) algorithm parameters.</t>
      <t>Fundamentally, servers generate connection IDs that encode their server ID.
Load balancers decode the server ID from the CID in incoming packets to route
to the correct server.</t>
      <t>There are situations where a server pool might be operating two or more routing
algorithms or parameter sets simultaneously.  The load balancer uses the first
two bits of the connection ID to multiplex incoming DCIDs over these schemes
(see <xref target="config-rotation"/>).</t>
      <section anchor="unroutable">
        <name>Unroutable Connection IDs</name>
        <t>QUIC-LB servers will generate Connection IDs that are decodable to extract a
server ID in accordance with a specified algorithm and parameters.  However,
QUIC often uses client-generated Connection IDs prior to receiving a packet from
the server.</t>
        <t>These client-generated CIDs might not conform to the expectations of the
routing algorithm and therefore not be routable by the load balancer. Those that
are not routable are "unroutable DCIDs" and receive similar treatment
regardless of why they're unroutable:</t>
        <ul spacing="normal">
          <li>The config rotation bits (<xref target="config-rotation"/>) may not correspond to an active
configuration. Note: a packet with a DCID with config ID codepoint 0b11 (see
<xref target="config-failover"/>) is always routable.</li>
          <li>The DCID might not be long enough for the decoder to process.</li>
          <li>The extracted server mapping might not correspond to an active server.</li>
        </ul>
        <t>All other DCIDs are routable.</t>
        <t>Load balancers MUST forward packets with routable DCIDs to a server in
accordance with the chosen routing algorithm. Exception: if the load balancer
can parse the QUIC packet and makes a routing decision depending on the
contents (e.g., the SNI in a TLS client hello), it MAY route in accordance with
this instead. However, load balancers MUST always route long header packets it
cannot parse in accordance with the DCID (see <xref target="version-invariance"/>).</t>
        <t>Load balancers SHOULD drop short header packets with unroutable DCIDs.</t>
        <t>When forwarding a packet with a long header and unroutable DCID, load
balancers MUST use a fallback algorithm as specified in <xref target="fallback-algorithm"/>.</t>
        <t>Load balancers MAY drop packets with long headers and unroutable DCIDs if
and only if it knows that the encoded QUIC version does not allow an unroutable
DCID in a packet with that signature. For example, a load balancer can safely
drop a QUIC version 1 Handshake packet with an unroutable DCID, as a
version 1 Handshake packet sent to a QUIC-LB routable server will always have
a server-generated routable CID. The prohibition against dropping packets with
long headers remains for unknown QUIC versions.</t>
        <t>Furthermore, while the load balancer function MUST NOT drop packets, the device
might implement other security policies, outside the scope of this
specification, that might force a drop.</t>
        <t>Servers that receive packets with unroutable CIDs MUST use the available
mechanisms to induce the client to use a routable CID in future packets. In
QUIC version 1, this requires using a routable CID in the Source CID field of
server-generated long headers.</t>
      </section>
      <section anchor="fallback-algorithm">
        <name>Fallback Algorithms</name>
        <t>There are conditions described below where a load balancer routes a packet using
a "fallback algorithm." It can choose any algorithm, without coordination with
the servers, but the algorithm SHOULD be deterministic over short time scales so
that related packets go to the same server. The design of this algorithm SHOULD
consider the version-invariant properties of QUIC described in <xref target="RFC8999"/> to
maximize its robustness to future versions of QUIC.</t>
        <t>A fallback algorithm MUST NOT make the routing behavior dependent on any bits
in the first octet of the QUIC packet header, except the first bit, which
indicates a long header. All other bits are QUIC version-dependent and
intermediaries SHOULD NOT base their design on version-specific templates.</t>
        <t>For example, one fallback algorithm might convert a unroutable DCID to an
integer and divided by the number of servers, with the modulus used to forward
the packet. The number of servers is usually consistent on the time scale of a
QUIC connection handshake. Another might simply hash the address/port 4-tuple.
See also <xref target="version-invariance"/>.</t>
      </section>
      <section anchor="sid-allocation">
        <name>Server ID Allocation</name>
        <t>Load Balancer configurations include a mapping of server IDs to forwarding
addresses. The corresponding server configurations contain one or
more unique server IDs.</t>
        <t>The configuration agent chooses a server ID length for each configuration that
MUST be at least one octet.</t>
        <t>A QUIC-LB configuration MAY significantly over-provision the server ID space
(i.e., provide far more codepoints than there are servers) to increase the
probability that a randomly generated Destination Connection ID is unroutable.</t>
        <t>The configuration agent SHOULD provide a means for servers to express the
number of server IDs it can usefully employ, because a single routing address
actually corresponds to multiple server entities (see <xref target="lb-chains"/>).</t>
        <t>Conceptually, each configuration has its own set of server ID allocations,
though two static configurations with identical server ID lengths MAY use a
common allocation between them.</t>
        <t>A server encodes one of its assigned server IDs in any CID it generates using
the relevant configuration.</t>
      </section>
    </section>
    <section anchor="server-id-encoding-in-connection-ids">
      <name>Server ID Encoding in Connection IDs</name>
      <section anchor="cid-format">
        <name>CID format</name>
        <t>All connection IDs use the following format:</t>
        <figure anchor="plaintext-cid-format">
          <name>CID Format</name>
          <artwork><![CDATA[
QUIC-LB Connection ID {
    First Octet (8),
    Server ID (8..152-len(Nonce)),
    Nonce (32..152-len(Server ID)),
}
]]></artwork>
        </figure>
      </section>
      <section anchor="configuration-agent-actions">
        <name>Configuration Agent Actions</name>
        <t>The configuration agent assigns a server ID to every server in its pool in
accordance with <xref target="sid-allocation"/>, and determines a server ID length (in
octets) sufficiently large to encode all server IDs, including potential future
servers.</t>
        <t>Each configuration specifies the length of the Server ID and Nonce fields, with
limits defined for each algorithm.</t>
        <t>Optionally, it also defines a 16-octet key. Note that failure to define a key
means that observers can determine the assigned server of any connection,
significantly increasing the linkability of QUIC address migration.</t>
        <t>The nonce length MUST be at least 4 octets. The server ID length MUST be at
least 1 octet.</t>
        <t>As QUIC version 1 limits connection IDs to 20 octets, the server ID and nonce
lengths MUST sum to 19 octets or less.</t>
      </section>
      <section anchor="server-actions">
        <name>Server Actions</name>
        <t>The server writes the first octet and its server ID into their respective
fields.</t>
        <t>If there is no key in the configuration, the server MUST fill the Nonce field
with bytes that appear to be random. If there is a key, the server fills the
nonce field with a nonce of its choosing. See <xref target="cid-entropy"/> for details.</t>
        <t>The server MAY append additional bytes to the connection ID, up to the limit
specified in that version of QUIC, for its own use. These bytes MUST NOT
provide observers with any information that could link two connection IDs to
the same connection, client, or server. In particular, all servers using a
configuration MUST consistently add the same length to each connection ID,
to preserve the linkability objectives of QUIC-LB. Any additional bytes SHOULD
appear random unless individual servers are not distinguishable (e.g. any server
using that configuration appends identical bytes to every connection ID).</t>
        <t>If there is no key in the configuration, the Connection ID is complete.
Otherwise, there are further steps, as described in the two following
subsections.</t>
        <t>Encryption below uses 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"/>. QUIC-LB implementations SHOULD be extensible to support new
algorithms.</t>
        <section anchor="special-case-single-pass-encryption">
          <name>Special Case: Single Pass Encryption</name>
          <t>When the nonce length and server ID length sum to exactly 16 octets, the server
MUST use a single-pass encryption algorithm. All connection ID octets except the
first form an AES-ECB block. This block is encrypted once, and the result forms
the second through seventeenth most significant bytes of the connection ID.</t>
        </section>
        <section anchor="general-case-four-pass-encryption">
          <name>General Case: Four-Pass Encryption</name>
          <t>Any other field length requires four passes for encryption and at least three
for decryption. To understand this algorithm, it is useful to define four 
functions that minimize the amount of bit-shifting necessary in the event that
there are an odd number of octets.</t>
          <t>The expand_left() function outputs 16 octets, with its first argument in the
most significant bits, its second argument in the least significant byte, its
third argument in the second least significant byte, and zeros in all other
positions. Thus,</t>
          <sourcecode type="pseudocode"><![CDATA[
expand_left(0xaaba3c, 0x0b, 0x02) =
                 0xaaba3c0000000000000000000000020b
]]></sourcecode>
          <t>expand_right() is similar, except that the second argument is in the most
significant byte, the third is in the second most significant byte, and the
first argument is in the least significant bits. Therefore,</t>
          <sourcecode type="pseudocode"><![CDATA[
expand_right(0xaaba3c, 0x0b, 0x02) =
                  0x0b020000000000000000000000aaba3c
]]></sourcecode>
          <t>Similarly, truncate_left() and truncate_right() take the most significant and
least significant bits, respectively, from a ciphertext. For example, to take
28 bits of a ciphertext:</t>
          <sourcecode type="pseudocode"><![CDATA[
truncate_left(0x2094842ca49256198c2deaa0ba53caa0, 28) = 0x2094842
truncate_right(0x2094842ca49256198c2deaa0ba53caa0, 28) = 0xa53caa0
]]></sourcecode>
          <t>The example at the end of this section helps to clarify the steps described
below.</t>
          <ol spacing="normal" type="1"><li>The server concatenates the server ID and nonce to create plaintext_CID.</li>
            <li>The server splits plaintext_CID into components left_0 and right_0 of equal
length, splitting an odd octet in half if necessary. For example,
0x7040b81b55ccf3 would split into a left_0 of 0x7040b81 and right_0 of
0xb55ccf3.</li>
            <li>Encrypt the result of expand_left(left_0, index)) to obtain a ciphertext,
where 'index' is one octet: the two most significant bits of which are 0b00,
and the six least significant bits are the length of the resulting connection
ID in bytes, cid_len.</li>
            <li>
              <t>XOR the least significant bits of the ciphertext with right_0 to form
right_1.  </t>
              <t>
Thus steps 3 and 4 can be expressed as
 <tt>
 right_1 = right_0 ^ truncate_right(
                 AES_ECB(key, expand_left(left_0, cid_len, 1)),
                         len(right_0))
</tt></t>
            </li>
            <li>
              <t>Repeat steps 3 and 4, but use them to compute left_1 by expanding and
encrypting right_1 with the most significant octet as the concatenation of
0b01 and cid_len, and XOR the results with left_0.  </t>
              <t><tt>
 left_1 = left_0 ^ truncate_left(
                AES_ECB(key, expand_right(right_1, cid_len, 2)),
                        len(left_0))
</tt></t>
            </li>
            <li>
              <t>Repeat steps 3 and 4, but use them to compute right_2 by expanding and
encrypting left_1 with the least significant octet as the concatenation of
0b10 and cid_len, and XOR the results with right_1.  </t>
              <t><tt>
 right_2 = right_1 ^ truncate_right(
                 AES_ECB(key, expand_left(left_1, cid_len, 3),
                         len(right_1))
</tt></t>
            </li>
            <li>
              <t>Repeat steps 3 and 4, but use them to compute left_2 by expanding and
encrypting right_2 with the most significant octet as the concatenation of
0b11 ands cid_len, and XOR the results with left_1.  </t>
              <t><tt>
 left_2 = left_1 ^ truncate_left(
               AES_ECB(key, expand_right(right_2, cid_len, 4),
                       len(left_1))
</tt></t>
            </li>
            <li>The server concatenates left_2 with right_2 to form the ciphertext CID,
which it appends to the first octet.</li>
          </ol>
          <t>The following example executes the steps for the provided inputs. Note that the
plaintext is of odd octet length, so the middle octet will be split evenly
left_0 and right_0.</t>
          <sourcecode type="pseudocode"><![CDATA[
server_id = 0x31441a
nonce = 0x9c69c275
key = 0xfdf726a9893ec05c0632d3956680baf0

// step 1
plaintext_CID = 0x31441a9c69c275

// step 2
left_0 = 0x31441a9
right_0 = 0xc69c275

// step 3
cid_len = 8
aes_input = 0x31441a90000000000000000000000108
ciphertext = 0xa60469a0a97d565da383af820e3b689a

// step 4
right_1 = 0xc69c275 ^ 0xe3b689a = 0x252aaef

// step 5
aes_input = 0x0802000000000000000000000252aaef
aes_output = 0xd7e5202ae06026c25d5f4d14d5ead17b
left_1 = 0x31441a9 ^ 0xd7e5202 = 0xe6a13ab

// step 6
aes_input = 0xe6a13ab0000000000000000000000308
aes_output = 0x9b6d9e6777cfc4bfb8bbdc63beb34a3d
right_2 = 0x252aaef ^ 0xeb34a3d = 0xce1e0d2

// step 7
aes_input = 0x0804000000000000000000000ce1e0d2
aes_output = 0xd462594b30327d88117ac542c8c33b52
left_2 = 0xe6a13ab ^ 0xd462594 = 0x32c363f

// step 8
cid = first_octet || left_2 || right_2 = 0x0732c363fce1e0d2
]]></sourcecode>
        </section>
      </section>
      <section anchor="load-balancer-actions">
        <name>Load Balancer Actions</name>
        <t>On each incoming packet, the load balancer extracts consecutive octets,
beginning with the second octet. If there is no key, the first octets
correspond to the server ID.</t>
        <t>If there is a key, the load balancer takes one of two actions:</t>
        <section anchor="special-case-single-pass-encryption-1">
          <name>Special Case: Single Pass Encryption</name>
          <t>If server ID length and nonce length sum to exactly 16 octets, they form a
ciphertext block. The load balancer decrypts the block using the AES-ECB key
and extracts the server ID from the most significant bytes of the resulting
plaintext.</t>
        </section>
        <section anchor="general-case-four-pass-encryption-1">
          <name>General Case: Four-Pass Encryption</name>
          <t>First, split the ciphertext CID (excluding the first octet) into its equal-
length components left_2 and right_2. Then follow the process below:</t>
          <sourcecode type="pseudocode"><![CDATA[
    left_1 = left_2 ^ truncate_left(
                  AES_ECB(key, expand_right(right_2, cid_len, 4),
                          len(left_1))
    right_1 = right_1 ^ truncate_right(
                  AES_ECB(key, expand_left(left_1, cid_len, 3),
                            len(right_1))
    left_0 = left_1 ^ truncate_left(
                  AES_ECB(key, expand_right(right_1, cid_len, 2),
                          len(left_1))
]]></sourcecode>
          <t>As the load balancer has no need for the nonce, it can conclude after 3 passes
as long as the server ID is entirely contained in left_0 (i.e., the nonce is at
least as large as the server ID). If the server ID is longer, a fourth pass
is necessary:</t>
          <t><tt>
    right_0 = right_1 ^ truncate_right(
                   AES_ECB(key, expand_left(left_0, cid_len, 1),
                            len(right_1))
</tt></t>
          <t>and the load balancer has to concatenate left_0 and right_0 to obtain the
complete server ID.</t>
        </section>
      </section>
    </section>
    <section anchor="per-connection-state">
      <name>Per-connection state</name>
      <t>QUIC-LB requires no per-connection state at the load balancer. The load balancer
can extract the server ID from the connection ID of each incoming packet and
route that packet accordingly.</t>
      <t>However, once the routing decision has been made, the load balancer MAY
associate the 4-tuple or connection ID with the decision. This has two
advantages:</t>
      <ul spacing="normal">
        <li>The load balancer only extracts the server ID once until the 4-tuple or
connection ID changes. When the CID is encrypted, this might reduce
computational load.</li>
        <li>Incoming Stateless Reset packets and ICMP messages are easily routed to the
correct origin server.</li>
      </ul>
      <t>In addition to the increased state requirements, however, load balancers cannot
detect the CONNECTION_CLOSE frame to indicate the end of the connection, so they
rely on a timeout to delete connection state. There are numerous considerations
around setting such a timeout.</t>
      <t>In the event a connection ends, freeing an IP and port, and a different
connection migrates to that IP and port before the timeout, the load balancer
will misroute the different connection's packets to the original server. A short
timeout limits the likelihood of such a misrouting.</t>
      <t>Furthermore, if a short timeout causes premature deletion of state, the routing
is easily recoverable by decoding an incoming Connection ID. However, a short
timeout also reduces the chance that an incoming Stateless Reset is correctly
routed.</t>
      <t>Servers MAY implement the technique described in Section 14.4.1 of <xref target="RFC9000"/>
in case the load balancer is stateless, to increase the likelihood a Source
Connection ID is included in ICMP responses to Path Maximum Transmission Unit
(PMTU) probes.  Load balancers MAY parse the echoed packet to extract the Source
Connection ID, if it contains a QUIC long header, and extract the Server ID as
if it were in a Destination CID.</t>
    </section>
    <section anchor="additional-use-cases">
      <name>Additional Use Cases</name>
      <t>This section discusses considerations for some deployment scenarios not implied
by the specification above.</t>
      <section anchor="lb-chains">
        <name>Load balancer chains</name>
        <t>Some network architectures may have multiple tiers of low-state load balancers,
where a first tier of devices makes a routing decision to the next tier, and so
on, until packets reach the server. Although QUIC-LB is not explicitly designed
for this use case, it is possible to support it.</t>
        <t>If each load balancer is assigned a range of server IDs that is a subset of the
range of IDs assigned to devices that are closer to the client, then the first
devices to process an incoming packet can extract the server ID and then map it
to the correct forwarding address. Note that this solution is extensible to
arbitrarily large numbers of load-balancing tiers, as the maximum server ID
space is quite large.</t>
        <t>If the number of necessary server IDs per next hop is uniform, a simple
implementation would use successively longer server IDs at each tier of load
balancing, and the server configuration would match the last tier. The forward
load balancers would simply treat the least significant bits of the server ID
as part of the nonce.</t>
      </section>
      <section anchor="server-process-demultiplexing">
        <name>Server Process Demultiplexing</name>
        <t>QUIC servers might have QUIC running on multiple processes listening on the same
address, and have a need to demultiplex between them. In principle, this
demultiplexer is a Layer 4 load balancer, and the guidance in <xref target="lb-chains"/>
applies. However, in many deployments the demultiplexer lacks the capability to
perform decryption operations. There are some other techniques that might work,
depending on the capabilities of the server architecture.</t>
        <ul spacing="normal">
          <li>Some bytes of the server ID are reserved to encode the process ID. The
demultiplexer might operate based on the 4-tuple or other legacy indicator, but
the receiving server process extracts the server ID, and if it does not match
the one for that process, the process could "toss" the packet to the correct
destination process.</li>
          <li>Each process could register the connection IDs it generates with the
demultiplexer, which routes those connection IDs accordingly.</li>
          <li>Some bytes of the server ID are reserved to encode the process ID. The load
balancer writes the decrypted connection ID into the packet. The demultiplexer
reads the process ID from the relevant bytes and routes it accordingly. The
receiving server process immediately re-encrypts the connection ID in deliver
the packet to the correct connection and successfully authenticate the packet.
While this requires coordination between load balancer and server, this document
does not standardize the technique because it is unsafe to use unless the path
between load balancer and server is fully secure. An observer at that point can
determine the server mapping via the IP address of the destination server, but
the process ID provides additional linkability information.</li>
        </ul>
      </section>
      <section anchor="moving-connections-between-servers">
        <name>Moving connections between servers</name>
        <t>Some deployments may transparently move a connection from one server to another.
The means of transferring connection state between servers is out of scope of
this document.</t>
        <t>To support a handover, a server involved in the transition could issue CIDs that
map to the new server via a NEW_CONNECTION_ID frame, and retire CIDs associated
with the new server using the "Retire Prior To" field in that frame.</t>
        <t>Alternately, if the old server is going offline, the load balancer could simply
map its server ID to the new server's address.</t>
      </section>
    </section>
    <section anchor="version-invariance">
      <name>Version Invariance of QUIC-LB</name>
      <t>The server ID encodings, and requirements for their handling, are designed to be
QUIC version independent (see <xref target="RFC8999"/>). A QUIC-LB load balancer will
generally not require changes as servers deploy new versions of QUIC. However,
there are several unlikely future design decisions that could impact the
operation of QUIC-LB.</t>
      <t>The maximum Connection ID length could be below the minimum necessary to use all
or part of this specification. The minimum Connection ID length could exceed the
limits in this specification.</t>
      <t><xref target="unroutable"/> provides guidance about how load balancers should handle
unroutable DCIDs. This guidance, and the implementation of an algorithm to
handle these DCIDs, rests on some assumptions:</t>
      <ul spacing="normal">
        <li>Incoming short headers do not contain DCIDs that are client-generated.</li>
        <li>The use of client-generated incoming DCIDs does not persist beyond a few round
trips in the connection.</li>
        <li>While the client is using DCIDs it generated, some exposed fields (IP address,
UDP port, client-generated destination Connection ID) remain constant for all
packets sent on the same connection.</li>
      </ul>
      <t>While this document does not update the commitments in <xref target="RFC8999"/>, the
additional assumptions are minimal and narrowly scoped, and provide a likely
set of constants that load balancers can use with minimal risk of version-
dependence.</t>
      <t>If these assumptions are not valid, this specification is likely to lead to loss
of packets that contain unroutable DCIDs, and in extreme cases connection
failure.</t>
      <t>Some load balancers might inspect elements of the Server Name Indication (SNI)
extension in the TLS Client Hello to make a routing decision. Note that the
format and cryptographic protection of this information may change in future
versions or extensions of TLS or QUIC, and therefore this functionality is
inherently not version-invariant. See also <xref target="unroutable"/> for other
considerations about this case. Note that an SNI-aware load balancer, faced with
an unknown QUIC version, might misdirect initial packets to the wrong tenant.
While inefficient, this preserves the ability for tenants to deploy new versions
provided they have an out-of-band means of providing a connection ID for the
client to use.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>QUIC-LB is intended to prevent linkability.  Attacks would therefore attempt to
subvert this purpose.</t>
      <t>Note that without a key for the encoding, QUIC-LB makes no attempt to obscure
the server mapping, and therefore does not address these concerns. Without a
key, QUIC-LB merely allows consistent CID encoding for compatibility across a
network infrastructure, which makes QUIC robust to NAT rebinding. Servers that
are encoding their server ID without a key algorithm SHOULD only use it to
generate new CIDs for the Server Initial Packet and SHOULD NOT send CIDs in QUIC
NEW_CONNECTION_ID frames, except that it sends one new Connection ID in the
event of config rotation <xref target="config-rotation"/>. Doing so might falsely suggest to
the client that said CIDs were generated in a secure fashion.</t>
      <t>A linkability attack would find some means of determining that two connection
IDs route to the same server. As described above, there is no scheme that
strictly prevents linkability for all traffic patterns, and therefore efforts to
frustrate any analysis of server ID encoding have diminishing returns.</t>
      <section anchor="attackers-not-between-the-load-balancer-and-server">
        <name>Attackers not between the load balancer and server</name>
        <t>Any attacker might open a connection to the server infrastructure and
aggressively simulate migration to obtain a large sample of IDs that map to the
same server. It could then apply analytical techniques to try to obtain the
server encoding.</t>
        <t>An encrypted encoding provides robust protection against this. An unencrypted
one provides none.</t>
        <t>Were this analysis to obtain the server encoding, then on-path observers might
apply this analysis to correlating different client IP addresses.</t>
      </section>
      <section anchor="attackers-between-the-load-balancer-and-server">
        <name>Attackers between the load balancer and server</name>
        <t>Attackers in this privileged position are intrinsically able to map two
connection IDs to the same server.  The QUIC-LB algorithms do prevent the
linkage of two connection IDs to the same individual connection if servers make
reasonable selections when generating new IDs for that connection.</t>
      </section>
      <section anchor="multiple-configs">
        <name>Multiple Configuration IDs</name>
        <t>During the period in which there are multiple deployed configuration IDs (see
<xref target="config-rotation"/>), there is a slight increase in linkability. The server
space is effectively divided into segments with CIDs that have different config
rotation bits. Entities that manage servers SHOULD strive to minimize these
periods by quickly deploying new configurations across the server pool.</t>
      </section>
      <section anchor="limited-configuration-scope">
        <name>Limited configuration scope</name>
        <t>A simple deployment of QUIC-LB in a cloud provider might use the same global
QUIC-LB configuration across all its load balancers that route to customer
servers. An attacker could then simply become a customer, obtain the
configuration, and then extract server IDs of other customers' connections at
will.</t>
        <t>To avoid this, the configuration agent SHOULD issue QUIC-LB configurations to
mutually distrustful servers that have different keys for encryption
algorithms. In many cases, the load balancers can distinguish these
configurations by external IP address.</t>
        <t>However, assigning multiple entities to an IP address is complimentary with
concealing DNS requests (e.g., DoH <xref target="RFC8484"/>) and the TLS Server Name
Indicator (SNI) (<xref target="I-D.ietf-tls-esni"/>) to obscure the ultimate destination
of traffic. While the load balancer's fallback algorithm
(<xref target="fallback-algorithm"/>) can use the SNI to make a routing decision on the
first packet, there are three ways to route subsequent packets:</t>
        <ul spacing="normal">
          <li>all co-tenants can use the same QUIC-LB configuration, leaking the server
mapping to each other as described above;</li>
          <li>co-tenants can be issued one of up to three configurations distinguished by
the config rotation bits (<xref target="config-rotation"/>), exposing information about the
target domain to the entire network; or</li>
          <li>tenants can use the 0b11 codepoint in their CIDs (in which case they SHOULD
disable migration in their connections), which neutralizes the value of
QUIC-LB but preserves privacy.</li>
        </ul>
        <t>When configuring QUIC-LB, administrators must evaluate the privacy tradeoff
considering the relative value of each of these properties, given the trust
model between tenants, the presence of methods to obscure the domain name, and
value of address migration in the tenant use cases.</t>
        <t>As the plaintext algorithm makes no attempt to conceal the server mapping,
these deployments SHOULD simply use a common configuration.</t>
      </section>
      <section anchor="stateless-reset-oracle">
        <name>Stateless Reset Oracle</name>
        <t>Section 21.9 of <xref target="RFC9000"/> discusses the Stateless Reset Oracle attack.  For a
server deployment to be vulnerable, an attacking client must be able to cause
two packets with the same Destination CID to arrive at two different servers
that share the same cryptographic context for Stateless Reset tokens. As QUIC-LB
requires deterministic routing of DCIDs over the life of a connection, it is a
sufficient means of avoiding an Oracle without additional measures.</t>
        <t>Note also that when a server starts using a new QUIC-LB config rotation
codepoint, new CIDs might not be unique with respect to previous configurations
that occupied that codepoint, and therefore different clients may have observed
the same CID and stateless reset token. A straightforward method of managing
stateless reset keys is to maintain a separate key for each config rotation
codepoint, and replace each key when the configuration for that codepoint
changes. Thus, a server transitions from one config to another, it will be able
to generate correct tokens for connections using either type of CID.</t>
      </section>
      <section anchor="cid-entropy">
        <name>Connection ID Entropy</name>
        <t>If a server ever reuses a nonce in generating a CID for a given configuration,
it risks exposing sensitive information. Given the same server ID, the CID will
be identical (aside from a possible difference in the first octet).  This can
risk exposure of the QUIC-LB key. If two clients receive the same connection ID,
they also have each other's stateless reset token unless that key has changed in
the interim.</t>
        <t>The encrypted mode needs to generate different cipher text for each generated
Connection ID instance to protect the Server ID. To do so, at least four octets
of the CID are reserved for a nonce that, if used only once, will result in
unique cipher text for each Connection ID.</t>
        <t>If servers simply increment the nonce by one with each generated connection ID,
then it is safe to use the existing keys until any server's nonce counter
exhausts the allocated space and rolls over. To maximize entropy, servers SHOULD
start with a random nonce value, in which case the configuration is usable until
the nonce value wraps around to zero and then reaches the initial value again.</t>
        <t>Whether or not it implements the counter method, the server MUST NOT reuse a
nonce until it switches to a configuration with new keys.</t>
        <t>If the nonce is sent in plaintext, servers MUST generate nonces so that they
appear to be random. Observable correlations between plaintext nonces would
provide trivial linkability between individual connections, rather than just to
a common server.</t>
        <t>For any algorithm, configuration agents SHOULD implement an out-of-band method
to discover when servers are in danger of exhausting their nonce space, and
SHOULD respond by issuing a new configuration. A server that has exhausted its
nonces MUST either switch to a different configuration, or if none exists, use
the 4-tuple routing config rotation codepoint.</t>
        <t>When sizing a nonce that is to be randomly generated, the configuration agent
SHOULD consider that a server generating a N-bit nonce will create a duplicate
about every 2^(N/2) attempts, and therefore compare the expected rate at which
servers will generate CIDs with the lifetime of a configuration.</t>
      </section>
      <section anchor="distinguishing-attacks">
        <name>Distinguishing Attacks</name>
        <t>The Four Pass Encryption algorithm is structured as a 4-round Feistel network
with non-bijective round function. As such, it does not offer a very high
security level against distinguishing attacks, as explained in <xref target="Patarin2008"/>.
Attackers can mount these attacks if they are in possession of O(SQRT(len/2))
pairs of ciphertext and known corresponding plain text, where "len" is the
sum of the lengths of the Server ID and the Nonce.</t>
        <t>The authors considered increasing the number of passes from 4 to 12,
which would definitely block these attacks. However, this would require
12 round of AES decryption by load balancers accessing the CID, a cost deemed
prohibitive in the planned deployments.</t>
        <t>The attacks described in <xref target="Patarin2008"/> rely on known plain text. In a normal
deployment, the plain text is only known by the server that generates the ID
and by the load balancer that decrypts the content of the CID. Attackers
would have to compensate by guesses about the allocation of server identifiers
or the generation of nonces. The these attacks are thus mitigated by making
nonces hard to guess, as specified in <xref target="cid-entropy"/>, and by rules related
to mixed deployments that use both clear text CID and encrypted CID, for
example when transitioning from clear text to encryption. Such deployments
MUST use different server ID allocations for the clear text and the
encrypted versions.</t>
        <t>These attacks cannot be mounted against the Single Pass Encryption algorithm.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <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="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="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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="Patarin2008" target="https://eprint.iacr.org/2008/036.pdf">
          <front>
            <title>Generic Attacks on Feistel Schemes - Extended Version</title>
            <author initials="J." surname="Patarin" fullname="Jacques Patarin">
              <organization>PRiSM, University of Versailles</organization>
            </author>
            <date year="2008"/>
          </front>
        </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="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="RFC8484" target="https://www.rfc-editor.org/info/rfc8484">
          <front>
            <title>DNS Queries over HTTPS (DoH)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="October" year="2018"/>
            <abstract>
              <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS.  Each DNS query-response pair is mapped into an HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8484"/>
          <seriesInfo name="DOI" value="10.17487/RFC8484"/>
        </reference>
        <reference anchor="I-D.ietf-tls-esni" target="https://www.ietf.org/archive/id/draft-ietf-tls-esni-14.txt">
          <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="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>
        <reference anchor="I-D.ietf-tls-dtls-connection-id" target="https://www.ietf.org/archive/id/draft-ietf-tls-dtls-connection-id-13.txt">
          <front>
            <title>Connection Identifier for DTLS 1.2</title>
            <author fullname="Eric Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Thomas Fossati">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Achim Kraus">
              <organization>Bosch.IO GmbH</organization>
            </author>
            <date day="22" month="June" year="2021"/>
            <abstract>
              <t>This document specifies the Connection ID (CID) construct for the Datagram Transport Layer Security (DTLS) protocol version 1.2.

 A CID is an identifier carried in the record layer header that gives the recipient additional information for selecting the appropriate security association. In "classical" DTLS, selecting a security association of an incoming DTLS record is accomplished with the help of the 5-tuple. If the source IP address and/or source port changes during the lifetime of an ongoing DTLS session, then the receiver will be unable to locate the correct security context.

 The new ciphertext record format with the CID also provides content type encryption and record layer padding.

 This document updates RFC 6347.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-dtls-connection-id-13"/>
        </reference>
        <reference anchor="RFC4347" target="https://www.rfc-editor.org/info/rfc4347">
          <front>
            <title>Datagram Transport Layer Security</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu">
              <organization/>
            </author>
            <date month="April" year="2006"/>
            <abstract>
              <t>This document specifies Version 1.0 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4347"/>
          <seriesInfo name="DOI" value="10.17487/RFC4347"/>
        </reference>
        <reference anchor="RFC6347" target="https://www.rfc-editor.org/info/rfc6347">
          <front>
            <title>Datagram Transport Layer Security Version 1.2</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu">
              <organization/>
            </author>
            <date month="January" year="2012"/>
            <abstract>
              <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.  This document updates DTLS 1.0 to work with TLS version 1.2.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6347"/>
          <seriesInfo name="DOI" value="10.17487/RFC6347"/>
        </reference>
        <reference anchor="RFC7983" target="https://www.rfc-editor.org/info/rfc7983">
          <front>
            <title>Multiplexing Scheme Updates for Secure Real-time Transport Protocol (SRTP) Extension for Datagram Transport Layer Security (DTLS)</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin">
              <organization/>
            </author>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro">
              <organization/>
            </author>
            <date month="September" year="2016"/>
            <abstract>
              <t>This document defines how Datagram Transport Layer Security (DTLS), Real-time Transport Protocol (RTP), RTP Control Protocol (RTCP), Session Traversal Utilities for NAT (STUN), Traversal Using Relays around NAT (TURN), and ZRTP packets are multiplexed on a single receiving socket.  It overrides the guidance from RFC 5764 ("SRTP                Extension for DTLS"), which suffered from four issues described and fixed in this document.</t>
              <t>This document updates RFC 5764.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7983"/>
          <seriesInfo name="DOI" value="10.17487/RFC7983"/>
        </reference>
        <reference anchor="I-D.draft-ietf-tls-dtls13" target="https://www.ietf.org/archive/id/draft-ietf-tls-dtls13-43.txt">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="Eric Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Nagendra Modadugu">
              <organization>Google, Inc.</organization>
            </author>
            <date day="30" month="April" year="2021"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.

 The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.

 This document obsoletes RFC 6347.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-dtls13-43"/>
        </reference>
      </references>
    </references>
    <section anchor="yang-model">
      <name>QUIC-LB YANG Model</name>
      <t>These YANG models conform to <xref target="RFC6020"/> and express a complete QUIC-LB
configuration. There is one model for the server and one for the middlebox
(i.e the load balancer and/or Retry Service).</t>
      <artwork><![CDATA[
module ietf-quic-lb-server {
  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 trusted intermediaries without breaking important
     protocol features.

     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
      "Updated to design in version 13 of the draft";
    reference
      "RFC XXXX, QUIC-LB: Generating Routable QUIC Connection IDs";
  }

  container quic-lb {
    presence "The container for QUIC-LB configuration.";

    description
      "QUIC-LB container.";

    typedef quic-lb-key {
      type yang:hex-string {
        length 47;
      }
      description
        "This is a 16-byte key, represented with 47 bytes";
    }

    leaf config-id {
      type uint8 {
        range "0..2";
      }
      mandatory true;
      description
        "Identifier for this CID configuration.";
    }

    leaf first-octet-encodes-cid-length {
      type boolean;
      default false;
      description
        "If true, the six least significant bits of the first
         CID octet encode the CID length minus one.";
    }

    leaf server-id-length {
      type uint8 {
        range "1..15";
      }
      must '. <= (19 - ../nonce-length)' {
        error-message
          "Server ID and nonce lengths must sum
           to no more than 19.";
      }
      mandatory true;
      description
        "Length (in octets) of a server ID. Further range-limited
         by nonce-length.";
    }

    leaf nonce-length {
      type uint8 {
        range "4..18";
      }
      mandatory true;
      description
        "Length, in octets, of the nonce. Short nonces mean there
         will be frequent configuration updates.";
    }

    leaf cid-key {
      type quic-lb-key;
      description
        "Key for encrypting the connection ID.";
    }

    leaf server-id {
      type yang:hex-string;
      must "string-length(.) = 3 * ../../server-id-length - 1";
      mandatory true;
      description
        "An allocated server ID";
    }
  }
}
]]></artwork>
      <artwork><![CDATA[
module ietf-quic-lb-middlebox {
  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 trusted intermediaries without breaking important
     protocol features.

     Copyright (c) 2021 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 "2021-02-11" {
    description
      "Updated to design in version 13 of the draft";
    reference
      "RFC XXXX, QUIC-LB: Generating Routable QUIC Connection IDs";
  }

  container quic-lb {
    presence "The container for QUIC-LB configuration.";

    description
      "QUIC-LB container.";

    typedef quic-lb-key {
      type yang:hex-string {
        length 47;
      }
      description
        "This is a 16-byte key, represented with 47 bytes";
    }

    list cid-configs {
      key "config-rotation-bits";
      description
        "List up to three load balancer configurations";

      leaf config-rotation-bits {
        type uint8 {
          range "0..2";
        }
        mandatory true;
        description
          "Identifier for this CID configuration.";
      }

      leaf server-id-length {
        type uint8 {
          range "1..15";
        }
        must '. <= (19 - ../nonce-length)' {
          error-message
            "Server ID and nonce lengths must sum to
             no more than 19.";
        }
        mandatory true;
        description
          "Length (in octets) of a server ID. Further range-limited
           by nonce-length.";
      }

      leaf cid-key {
        type quic-lb-key;
        description
          "Key for encrypting the connection ID.";
      }

      leaf nonce-length {
        type uint8 {
          range "4..18";
        }
        mandatory true;
        description
          "Length, in octets, of the nonce. Short nonces mean there
           will be frequent configuration updates.";
      }

      list server-id-mappings {
        key "server-id";
        description "Statically allocated Server IDs";

        leaf server-id {
          type yang:hex-string;
          must "string-length(.) = 3 * ../../server-id-length - 1";
          mandatory true;
          description
            "An allocated server ID";

        }

        leaf server-address {
          type inet:ip-address;
          mandatory true;
          description
            "Destination address corresponding to the server ID";
        }
      }
    }
  }
}
]]></artwork>
      <section anchor="tree-diagram">
        <name>Tree Diagram</name>
        <t>This summary of the YANG models uses the notation in <xref target="RFC8340"/>.</t>
        <artwork><![CDATA[
module: ietf-quic-lb-server
  +--rw quic-lb!
     +--rw config-id                         uint8
     +--rw first-octet-encodes-cid-length?   boolean
     +--rw server-id-length                  uint8
     +--rw nonce-length                      uint8
     +--rw cid-key?                          quic-lb-key
     +--rw server-id                         yang:hex-string
]]></artwork>
        <artwork><![CDATA[
module: ietf-quic-lb-middlebox
  +--rw quic-lb!
     +--rw cid-configs* [config-rotation-bits]
     |  +--rw config-rotation-bits    uint8
     |  +--rw server-id-length        uint8
     |  +--rw cid-key?                quic-lb-key
     |  +--rw nonce-length            uint8
     |  +--rw server-id-mappings* [server-id]
     |     +--rw server-id         yang:hex-string
     |     +--rw server-address    inet:ip-address
]]></artwork>
      </section>
    </section>
    <section anchor="test-vectors">
      <name>Load Balancer Test Vectors</name>
      <t>This section uses the following abbreviations:</t>
      <artwork><![CDATA[
cid      Connection ID
cr_bits  Config Rotation Bits
LB       Load Balancer
sid      Server ID
]]></artwork>
      <t>In all cases, the server is configured to encode the CID length.</t>
      <section anchor="unencrypted-cids">
        <name>Unencrypted CIDs</name>
        <sourcecode type="pseudocode"><![CDATA[
cr_bits sid nonce cid
0 c4605e 4504cc4f 07c4605e4504cc4f
1 350d28b420 3487d970b 40a350d28b4203487d970b
]]></sourcecode>
      </section>
      <section anchor="encrypted-cids">
        <name>Encrypted CIDs</name>
        <t>The key for all of these examples is 8f95f09245765f80256934e50c66207f. The
test vectors include an example that uses the 16-octet single-pass special
case, as well as an instance where the server ID length exceeds the nonce
length, requiring a fourth decryption pass.</t>
        <sourcecode type="pseudocode"><![CDATA[
cr_bits sid nonce cid
0 ed793a ee080dbf 0727edaa37e7fac8
1 ed793a51d49b8f5fab65 ee080dbf48
                         4f22614a97ceee84341ed7fbfeb1e6e2
2 ed793a51d49b8f5f ee080dbf48c0d1e5
                         904dd2d05a7b0de9b2b9907afb5ecf8cc3
0 ed793a51d49b8f5fab ee080dbf48c0d1e55d
                         125e3b00aa5fcfd1a9a58102a89a19a1e4a10e
]]></sourcecode>
      </section>
    </section>
    <section anchor="interoperability-with-dtls-over-udp">
      <name>Interoperability with DTLS over UDP</name>
      <t>Some environments may contain DTLS traffic as well as QUIC operating over UDP,
which may be hard to distinguish.</t>
      <t>In most cases, the packet parsing rules above will cause a QUIC-LB load
balancer to route DTLS traffic in an appropriate way. DTLS 1.3 implementations
that use the connection_id extension <xref target="I-D.ietf-tls-dtls-connection-id"/> might
use the techniques in this document to generate connection IDs and achieve
robust routability for DTLS associations if they meet a few additional
requirements. This non-normative appendix describes this interaction.</t>
      <section anchor="dtls-10-and-12">
        <name>DTLS 1.0 and 1.2</name>
        <t>DTLS 1.0 <xref target="RFC4347"/> and 1.2 <xref target="RFC6347"/> use packet formats that a QUIC-LB
router will interpret as short header packets with CIDs that request 4-tuple
routing.  As such, they will route such packets consistently as long as the
4-tuple does not change. Note that DTLS 1.0 has been deprecated by the IETF.</t>
        <t>The first octet of every DTLS 1.0 or 1.2 datagram contains the content type.
A QUIC-LB load balancer will interpret any content type less than 128 as a short
header packet, meaning that the subsequent octets should contain a connection
ID.</t>
        <t>Existing TLS content types comfortably fit in the range below 128. Assignment of
codepoints greater than 64 would require coordination in accordance with
<xref target="RFC7983"/>, and anyway would likely create problems demultiplexing DTLS and
version 1 of QUIC. Therefore, this document believes it is extremely unlikely
that TLS content types of 128 or greater will be assigned. Nevertheless, such
an assignment would cause a QUIC-LB load balancer to interpret the packet as a
QUIC long header with an essentially random connection ID, which is likely to be
routed irregularly.</t>
        <t>The second octet of every DTLS 1.0 or 1.2 datagram is the bitwise complement
of the DTLS Major version (i.e. version 1.x = 0xfe). A QUIC-LB load balancer
will interpret this as a connection ID that requires 4-tuple based load
balancing, meaning that the routing will be consistent as long as the 4-tuple
remains the same.</t>
        <t><xref target="I-D.ietf-tls-dtls-connection-id"/> defines an extension to add connection IDs
to DTLS 1.2. Unfortunately, a QUIC-LB load balancer will not correctly parse
the connection ID and will continue 4-tuple routing. An modified QUIC-LB load
balancer that correctly identifies DTLS and parses a DTLS 1.2 datagram for
the connection ID is outside the scope of this document.</t>
      </section>
      <section anchor="dtls-13">
        <name>DTLS 1.3</name>
        <t>DTLS 1.3 <xref target="I-D.draft-ietf-tls-dtls13"/> changes the structure of datagram
headers in relevant ways.</t>
        <t>Handshake packets continue to have a TLS content type in the first octet and
0xfe in the second octet, so they will be 4-tuple routed, which should not
present problems for likely NAT rebinding or address change events.</t>
        <t>Non-handshake packets always have zero in their most significant bit and will
therefore always be treated as QUIC short headers. If the connection ID is
present, it follows in the succeeding octets. Therefore, a DTLS 1.3 association
where the server utilizes Connection IDs and the encodings in this document
will be routed correctly in the presence of client address and port changes.</t>
        <t>However, if the client does not include the connection_id extension in its
ClientHello, the server is unable to use connection IDs. In this case, non-
handshake packets will appear to contain random connection IDs and be routed
randomly. Thus, unmodified QUIC-LB load balancers will not work with DTLS 1.3
if the client does not advertise support for connection IDs, or the server does
not request the use of a compliant connection ID.</t>
        <t>A QUIC-LB load balancer might be modified to identify DTLS 1.3 packets and
correctly parse the fields to identify when there is no connection ID and
revert to 4-tuple routing, removing the server requirement above. However, such
a modification is outside the scope of this document, and classifying some
packets as DTLS might be incompatible with future versions of QUIC.</t>
      </section>
      <section anchor="future-versions-of-dtls">
        <name>Future Versions of DTLS</name>
        <t>As DTLS does not have an IETF consensus document that defines what parts of
DTLS will be invariant in future versions, it is difficult to speculate about
the applicability of this section to future versions of DTLS.</t>
      </section>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Manasi Deval, Erik Fuller, Toma Gavrichenkov, Jana Iyengar, Subodh Iyengar,
Ladislav Lhotka, Jan Lindblad, Ling Tao Nju, Ilari Liusvaara, Kazuho Oku, Udip
Pant, Ian Swett, Martin Thomson, Dmitri Tikhonov, Victor Vasiliev, and William
Zeng Ke all provided useful input to this document.</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-ietf-quic-load-balancers-13">
        <name>since draft-ietf-quic-load-balancers-13</name>
        <ul spacing="normal">
          <li>Incorporated Connection ID length in argument of truncate function</li>
          <li>Added requirements for codepoint 0b11.</li>
          <li>Describe Distinguishing Attack in Security Considerations.</li>
          <li>Added non-normative language about server process demultiplexers</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-12">
        <name>since draft-ietf-quic-load-balancers-12</name>
        <ul spacing="normal">
          <li>Separated Retry Service design into a separate draft</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-11">
        <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">
        <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">
        <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">
        <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">
        <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">
        <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 service considerations for non-Initial packets</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-05">
        <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">
        <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">
        <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">
        <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">
        <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 Services section</li>
          <li>Discussed load balancer chains</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-load-balancers-00">
        <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">
        <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">
        <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">
        <name>Since draft-duke-quic-load-balancers-04</name>
        <ul spacing="normal">
          <li>Added standard for retry services</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-load-balancers-03">
        <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">
        <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">
        <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">
        <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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
878BSNbW/jbsAAA=

-->

</rfc>
