<?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-ietf-quic-load-balancers-13" 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-LB">QUIC-LB: Generating Routable QUIC Connection IDs</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-load-balancers-13"/>
    <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" numbered="true" toc="default">
      <name>Introduction</name>
      <t>QUIC packets <xref target="RFC9000" format="default"/> 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" 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>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" 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"/>. 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 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="first-octet" numbered="true" toc="default">
      <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" numbered="true" toc="default">
        <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" format="default"/>).</t>
      </section>
      <section anchor="config-failover" numbered="true" toc="default">
        <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 '11' 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
'11' MUST revert to 5-tuple routing. These connection IDs may be of any length;
however, see <xref target="cid-entropy" format="default"/> for limits on this length.</t>
      </section>
      <section anchor="length-self-description" numbered="true" toc="default">
        <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" numbered="true" toc="default">
        <name>Format</name>
        <figure anchor="first-octet-format">
          <name>First Octet Format</name>
          <artwork name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
      <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" format="default"/>).</t>
      <section anchor="unroutable" numbered="true" toc="default">
        <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" format="default"/>) may not correspond to an active
configuration. Note: a packet with a DCID that indicates 5-tuple routing (see
<xref target="config-failover" format="default"/>) 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" format="default"/>).</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" format="default"/>.</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" numbered="true" toc="default">
        <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" format="default"/> 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" format="default"/>.</t>
      </section>
      <section anchor="sid-allocation" numbered="true" toc="default">
        <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" format="default"/>).</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" numbered="true" toc="default">
      <name>Server ID Encoding in Connection IDs</name>
      <section anchor="cid-format" numbered="true" toc="default">
        <name>CID format</name>
        <t>All connection IDs use the following format:</t>
        <figure anchor="plaintext-cid-format">
          <name>CID Format</name>
          <artwork name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
        <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" format="default"/>, 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" numbered="true" toc="default">
        <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" format="default"/> 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" format="default"/>. QUIC-LB implementations SHOULD be extensible to support new
algorithms.</t>
        <section anchor="special-case-single-pass-encryption" numbered="true" toc="default">
          <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" numbered="true" toc="default">
          <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, and
zeros in all other positions. Thus,</t>
          <sourcecode type="pseudocode"><![CDATA[
expand_left(0xaaba3c, 0x13) = 0xaaba3c00000000000000000000000013
]]></sourcecode>
          <t>expand_right() is similar, except that the second argument is in the most
significant byte, and the first argument is in the least significant bits.
Therefore,</t>
          <sourcecode type="pseudocode"><![CDATA[
expand_right(0xaaba3c, 0x13) = 0x13000000000000000000000000aaba3c
]]></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) to obtain a ciphertext.</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, 0x01)),
                         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 0x02 and XOR the
results with left_0.  </t>
              <t><tt>
 left_1 = left_0 ^ truncate_left(
                       AES_ECB(key, expand_right(right_1, 0x02)),
                       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 0x03 and XOR the
results with right_1.  </t>
              <t><tt>
 right_2 = right_1 ^ truncate_right(
                         AES_ECB(key, expand_left(left_1, 0x03)),
                         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 0x04 and XOR the
results with left_1.  </t>
              <t><tt>
 left_2 = left_1 ^ truncate_left(
                       AES_ECB(key, expand_right(right_2, 0x04)),
                       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
aes_input = 0x31441a90000000000000000000000001
ciphertext = 0x4d140de42d0b85bdf554ba35c1d5c653

// step 4
right_1 = 0xc69c275 ^ 0x1d5c653 = 0xdbc0426

// step 5
aes_input = 0x0200000000000000000000000dbc0426
aes_output = 0x7e99160f3cf5b89c70584ccd2c2cd24b
left_1 = 0x31441a9 ^ 0x7e99160 = 0x4fdd0c9

// step 6
AES input = 0x4fdd0c90000000000000000000000003
AES output = 0x26c1d5a3a5e31ff8e3ca505da6061ac6
right_2 = 0xdbc0426 ^ 0x6061ac6 = 0xbba1ee0

// step 7
AES input = 0x0400000000000000000000000bba1ee0
AES output = 0xade1b8b25b436a94007d80cf3704377b
left_2 = 0x4fdd0c9 ^ 0xade1b8b = 0xe23cb42

// step 8
cid = first_octet || left_2 || right_2 = 0x07e23cb42bba1ee0
]]></sourcecode>
        </section>
      </section>
      <section anchor="load-balancer-actions" numbered="true" toc="default">
        <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" numbered="true" toc="default">
          <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" numbered="true" toc="default">
          <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), 0x04))
right_1 = right_2 ^ truncate_right(AES_ECB(key, expand_left(left_1, 0x03))
left_0 = left_1 ^ truncate_left(AES_ECB(key, expand_right(right_1), 0x02))
]]></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, 0x01)))
</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" numbered="true" toc="default">
      <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 with the decision. This has two advantages:</t>
      <ul spacing="normal">
        <li>The load balancer only extracts the server ID once per incoming 4-tuple. When
the CID is encrypted, this substantially reduces 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" format="default"/>
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" numbered="true" toc="default">
      <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" numbered="true" toc="default">
        <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="moving-connections-between-servers" numbered="true" toc="default">
        <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" numbered="true" toc="default">
      <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" format="default"/>). 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 for one or
more encoding algorithms.</t>
      <t><xref target="unroutable" format="default"/> 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" format="default"/>, 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 invalid, 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" format="default"/> 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" numbered="true" toc="default">
      <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" format="default"/>. 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" numbered="true" toc="default">
        <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" numbered="true" toc="default">
        <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" numbered="true" toc="default">
        <name>Multiple Configuration IDs</name>
        <t>During the period in which there are multiple deployed configuration IDs (see
<xref target="config-rotation" format="default"/>), 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" numbered="true" toc="default">
        <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" format="default"/>) and the TLS Server Name
Indicator (SNI) (<xref target="I-D.ietf-tls-esni" format="default"/>) to obscure the ultimate destination
of traffic. While the load balancer's fallback algorithm
(<xref target="fallback-algorithm" format="default"/>) 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" format="default"/>), exposing information about the
target domain to the entire network; or</li>
          <li>tenants can use 4-tuple routing 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" numbered="true" toc="default">
        <name>Stateless Reset Oracle</name>
        <t>Section 21.9 of <xref target="RFC9000" format="default"/> 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" numbered="true" toc="default">
        <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 encrypte 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>
    <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="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="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 intentionally 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" numbered="true" toc="default">
      <name>QUIC-LB YANG Model</name>
      <t>These YANG models conform to <xref target="RFC6020" format="default"/> 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 name="" type="" align="left" alt=""><![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 name="" type="" align="left" alt=""><![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" 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: 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 name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
      <name>Load Balancer Test Vectors</name>
      <t>This section uses the following abbreviations:</t>
      <artwork name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
        <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" numbered="true" toc="default">
        <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 07fbfe05f731b425
1 ed793a51d49b8f5fab65 ee080dbf48 4f010956fb5c1d4d86e010183e0b7d1e
2 ed793a51d49b8f5f ee080dbf48c0d1e5 904dd2d05a7b0de9b2b9907afb5ecf8cc3
0 ed793a51d49b8f5fab ee080dbf48c0d1e55d 127a285a09f85280f4fd6abb434a7159e4d3eb
]]></sourcecode>
      </section>
    </section>
    <section anchor="interoperability-with-dtls-over-udp" numbered="true" toc="default">
      <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" format="default"/> 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" numbered="true" toc="default">
        <name>DTLS 1.0 and 1.2</name>
        <t>DTLS 1.0 <xref target="RFC4347" format="default"/> and 1.2 <xref target="RFC6347" format="default"/> 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" format="default"/>, 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" format="default"/> 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" numbered="true" toc="default">
        <name>DTLS 1.3</name>
        <t>DTLS 1.3 <xref target="I-D.draft-ietf-tls-dtls13" format="default"/> 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" numbered="true" toc="default">
        <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" numbered="true" toc="default">
      <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" 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 Retry Service design into a separate draft.</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 service 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 Services 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 services</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:
H4sIADU4QmIAA+19aXfbWHbg9/crMPIHSx2SRVK7Kp2OSnJVaeJtLFdXenKS
Cgg8imiTABsAtbTb+e1z17cApMueyoc5c9onnaJI4C333X17w+HQtEW7tBfJ
3v/66eZq+PK7i+QHW9o6bYvyLnlXbdp0trQJ/phcVWVps7aoyuTmutkz6WxW
2/uLRN40eZWV6QrGyut03g4L286Hf9kU2XBZpflwli7TMrN1M5wcmjxt4bmP
15fvX3wyGfxxV9VPF0nT5qZY1xdJW2+adjoen4+nJq1tepG8r9OyWVd1ax6q
+sNdXW3WPLMxTZuW+S/psiphzCfbmHVxkfxbW2WDpIEXajtv4NPTij/AKlfp
eg3b+3dj0k27qOoLkyRD+F+SFGVzkbwaJdebD5a+4A29SmuAh/+2qu8ATlV1
t+S/7SotlhfJih4bLUY5PPjPd/jlKKtWJh7+9Sj5Li0/NMH4r4vsQ/AlDf+q
yOqqqeZtOENZzPCpf17pj1vGvxolP26KFt4IZrha1EXTFmkZ/UYTva2LeziB
5E3WVutNk9yU2Sicc8Ev/LP8d1Ta1pjhcJiks6at0wz+IvRI87y2TZOsijtE
H8CSdLmsHpokWxa2bJukrZJskZZ3NmkXtqiTm7funYdFAaCE+coW/oeol3lk
g/Nt7Sh5XyW1zTcZvQ6TF8uifUqqeQKbqmaNre9tjXMsi/JD0j5Uxo9v4dx1
FYArCT/cJJvGJqV9CCcDzIbV2BIneYIfVqtNWSCGmvsiTfJiPrc1jCPD+Qlg
fYuiSdYVfE7SZF1XQDerZF7Bmuo0L3DwdJnsLdMnWw+P9gwSReKIAqZL2wSw
Gg5inWYfLKwUJ8StBnDCxSMRJEfDdrNeWp7VNGubFXNcJm4B5r4vcloGkUZa
58VfbZ6sLJAQAqyx2aa2y6fEllmVI7RxYvivKUpY8IqHKQgGAqvnTRdITcVr
pr2ubb1EaJXz4g6GzhPcndHdJRkcUby3h6JdCKbA0w6KMERdwyTLp1Fy2SRF
S4MzTIHO603W0vDRWhJe8wAfT5ewrgAAbs/x6k1jl/Oh2z7j49KWd7AqQKG0
ABypVjZZAOwegAHBCHPcUjNi1F8VeQ4Ia54BtbR1BViJIwsh6B4/fvwf776/
Oh+Px58+AaptgBwIRojisLR4DzgrkgucSb6uCqYXkzZNlRVpF3AeDQVy34RI
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
Mov16xWX7FB7GIwOSNAgag6czipqaqSmkq/IoSRKLIB3CZWAVTiRtI8CfpUt
CuSb1I0VKxCpp5BL0GwLKVl3nV+6/WKNljFIp6+CY46+2ceOCjdhEyXq3/gS
H0FTGWTB3ExJOUpNot5LQoxeSyKnC9trrz5sOlC0rtE8gIw1So7DEgFoXDbs
76Ph/KJlY41m7BGJSy6jfN07202iprJLyu7DZAhN8DfuWSpa1DFImDCQXPEv
9XLyTdkkmabVRAEudnZv+f5Xaa+mO9mtUrnum6t0jbV7nZrvsGqOE99i5xoi
dLXkbr3IRsO0CJBx3GuwcImLHIYWHArbMDBuDVTJXgl3cOs0lHaNU/wFrxbh
4ZwpHYS3fVQ8OIs1tSAD3FpUa86XLtCqJZ5NvNR0WslwAApxBOQPdW6lVuKs
24cjYy0+4aNgelApSP0E4qYFnSwfngVklCD0MhWaYa1YyxY6Go4Ex7imgAqR
vyBA5QGJbabS2tWbkMHD7OJVdR/3WGlcDrNkNgm/8IyJuQT3U0przs+ibvyR
xkJqO3oy/MUr0r2Vgtu+RzUNBOpEve1Wl+5igo7TWslmoqaG6En2xJxSfUal
olqTd++r5X2QxeSapknWEQimjVSxUWIFUoljVg86DN6+ku5qCTWQCnLfoczZ
CpKz2Bnt15uUaeafNikDDmjrUq4gkMpjbH6mu2zkbgZsvgS27zYbJguwyjAv
CBM5e3sGHU8ZAgq8P0oO4o2rWAmy6kDmbKloifIiYQptxd4owILLGcQRUNR0
iEsmrdo6vi49eqJEWWwHpSVOUkrgysAOUAPV1cWAQBXX+Db33CKNliL3WjRU
4Ss4yKTA/b66RWO+xUIbVIHck3MKO99/QJYiFWdSWqUCUaSA4OBqLXzbSB8N
n+yJOYsMSGWZsTLmnFM40Ewb1XKsg9uteoZJt6IEFTuuN36U0vbxY9DX4pO/
i+BuU3DaOyggG+S0vaaToB7jKugErenVabNlrMN41tlhzf2OOYZHxIcbGYyy
TbhvGalSQHGb1Vr9p4FJG9aRu3Y/Wr50fRU14+g2sdBuBpSBOO/3uOg0F/Fd
xhFRqMHME2UQJXPAHjIHTVsXa5cP5BkgzvSzqxKW8thCU2alDNwXiVCj5hVl
E1A3SGnNvO+7lQ8MdSUni7G37nxXqdGB1DaTxoruA0IZIBO9yoRLsbVkKk4H
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
Wn/IgW+67RNzR6+Lu0IrCkT8HwB3YG0P1wAA

-->

</rfc>
