<?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-15" 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-15"/>
    <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 encode useful routing information for
load balancers in connection IDs.  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"/>.</t>
      </section>
    </section>
    <section anchor="first-octet">
      <name>First CID octet</name>
      <t>The Connection ID construction schemes defined in this document reserve the
first octet of a CID 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>A server that is configured to use QUIC-LB might be forced to accept new
connections without having received a current configuration.  A server without
QUIC-LB configuration can accept connections, but it SHOULD generate initial
connection IDs with the config rotation bits set to 0b11 and avoid sending the
client connection IDs in NEW_CONNECTION_ID frames or the preferred_address
transport parameter.  Servers in this state SHOULD use the
"disable_active_migration" transport parameter until a valid configuration is
received.</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 might be
impractical to efficiently lookup keys if the connection ID varies in length and
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 choose the six bits so as to have
no observable relationship to previous connection IDs issued for that
connection.</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),
    Plaintext Block (40..152),
}
Plaintext Block {
    Server ID (8..),
    Nonce (32..),
}
]]></artwork>
        </figure>
        <t>The First Octet field serves one or two purposes, as defined in <xref target="first-octet"/>.</t>
        <t>The Server ID field encodes the information necessary for the load balancer to
route a packet with that connection ID. It is often encrypted.</t>
        <t>The server uses the Nonce field to make sure that each connection ID it
generates is unique, even though they all use the same Server ID.</t>
      </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 have no observable relationship to the field in previously
issued connection IDs. 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
NOT provide any observable correlation to previous connection IDs for that
connection (e.g., the bytes can be chosen at random).</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 <xref target="NIST-AES-ECB"/>. 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>When configured with both a key, and a nonce length and server ID length that
sum to any number other than 16, the server MUST follow the algorith below to
encrypt the connection ID.</t>
          <section anchor="overview">
            <name>Overview</name>
            <t>The 4-pass algorithm is a four-round Feistel Network with the round function
being AES-ECB. Most modern applications of Feistel Networks have more than four
rounds. The implications of this choice, which is meant to limit the per-packet
compute overhead at load balancers, are discussed in
<xref target="distinguishing-attacks"/>.</t>
            <t>The server concatenates the server ID and nonce into a single field, which is
then split into equal halves. In successive passes, one of these halves is
expanded into a 16B plaintext, encrypted with AES-ECB, and the result XORed with
the other half. The diagram below shows the conceptual processing of a plaintext
server ID and nonce into a connection ID. 'FO' stands for 'First Octet'.</t>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="560" width="392" viewBox="0 0 392 560" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                  <path d="M 8,496 L 8,528" fill="none" stroke="black"/>
                  <path d="M 32,64 L 32,488" fill="none" stroke="black"/>
                  <path d="M 56,32 L 56,64" fill="none" stroke="black"/>
                  <path d="M 56,112 L 56,144" fill="none" stroke="black"/>
                  <path d="M 56,416 L 56,448" fill="none" stroke="black"/>
                  <path d="M 56,496 L 56,528" fill="none" stroke="black"/>
                  <path d="M 80,144 L 80,240" fill="none" stroke="black"/>
                  <path d="M 80,272 L 80,336" fill="none" stroke="black"/>
                  <path d="M 80,368 L 80,408" fill="none" stroke="black"/>
                  <path d="M 120,448 L 120,488" fill="none" stroke="black"/>
                  <path d="M 152,32 L 152,64" fill="none" stroke="black"/>
                  <path d="M 160,192 L 160,224" fill="none" stroke="black"/>
                  <path d="M 160,288 L 160,320" fill="none" stroke="black"/>
                  <path d="M 200,64 L 200,144" fill="none" stroke="black"/>
                  <path d="M 200,416 L 200,448" fill="none" stroke="black"/>
                  <path d="M 264,240 L 264,272" fill="none" stroke="black"/>
                  <path d="M 264,336 L 264,368" fill="none" stroke="black"/>
                  <path d="M 272,448 L 272,488" fill="none" stroke="black"/>
                  <path d="M 320,144 L 320,192" fill="none" stroke="black"/>
                  <path d="M 320,224 L 320,288" fill="none" stroke="black"/>
                  <path d="M 320,320 L 320,408" fill="none" stroke="black"/>
                  <path d="M 344,32 L 344,64" fill="none" stroke="black"/>
                  <path d="M 344,112 L 344,144" fill="none" stroke="black"/>
                  <path d="M 344,416 L 344,448" fill="none" stroke="black"/>
                  <path d="M 344,496 L 344,528" fill="none" stroke="black"/>
                  <path d="M 8,32 L 344,32" fill="none" stroke="black"/>
                  <path d="M 8,64 L 344,64" fill="none" stroke="black"/>
                  <path d="M 56,112 L 344,112" fill="none" stroke="black"/>
                  <path d="M 56,144 L 344,144" fill="none" stroke="black"/>
                  <path d="M 160,192 L 224,192" fill="none" stroke="black"/>
                  <path d="M 80,208 L 152,208" fill="none" stroke="black"/>
                  <path d="M 240,208 L 312,208" fill="none" stroke="black"/>
                  <path d="M 160,224 L 224,224" fill="none" stroke="black"/>
                  <path d="M 200,240 L 264,240" fill="none" stroke="black"/>
                  <path d="M 88,256 L 184,256" fill="none" stroke="black"/>
                  <path d="M 272,256 L 320,256" fill="none" stroke="black"/>
                  <path d="M 200,272 L 264,272" fill="none" stroke="black"/>
                  <path d="M 160,288 L 224,288" fill="none" stroke="black"/>
                  <path d="M 80,304 L 152,304" fill="none" stroke="black"/>
                  <path d="M 240,304 L 312,304" fill="none" stroke="black"/>
                  <path d="M 160,320 L 224,320" fill="none" stroke="black"/>
                  <path d="M 200,336 L 264,336" fill="none" stroke="black"/>
                  <path d="M 88,352 L 184,352" fill="none" stroke="black"/>
                  <path d="M 272,352 L 320,352" fill="none" stroke="black"/>
                  <path d="M 200,368 L 264,368" fill="none" stroke="black"/>
                  <path d="M 56,416 L 344,416" fill="none" stroke="black"/>
                  <path d="M 56,448 L 344,448" fill="none" stroke="black"/>
                  <path d="M 8,496 L 344,496" fill="none" stroke="black"/>
                  <path d="M 8,528 L 344,528" fill="none" stroke="black"/>
                  <path d="M 224,192 C 232.83064,192 240,199.16936 240,208" fill="none" stroke="black"/>
                  <path d="M 224,224 C 232.83064,224 240,216.83064 240,208" fill="none" stroke="black"/>
                  <path d="M 200,240 C 191.16936,240 184,247.16936 184,256" fill="none" stroke="black"/>
                  <path d="M 200,272 C 191.16936,272 184,264.83064 184,256" fill="none" stroke="black"/>
                  <path d="M 224,288 C 232.83064,288 240,295.16936 240,304" fill="none" stroke="black"/>
                  <path d="M 224,320 C 232.83064,320 240,312.83064 240,304" fill="none" stroke="black"/>
                  <path d="M 200,336 C 191.16936,336 184,343.16936 184,352" fill="none" stroke="black"/>
                  <path d="M 200,368 C 191.16936,368 184,360.83064 184,352" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="328,408 316,402.4 316,413.6 " fill="black" transform="rotate(90,320,408)"/>
                  <polygon class="arrowhead" points="328,288 316,282.4 316,293.6 " fill="black" transform="rotate(90,320,288)"/>
                  <polygon class="arrowhead" points="328,192 316,186.4 316,197.6 " fill="black" transform="rotate(90,320,192)"/>
                  <polygon class="arrowhead" points="320,304 308,298.4 308,309.6 " fill="black" transform="rotate(0,312,304)"/>
                  <polygon class="arrowhead" points="320,208 308,202.4 308,213.6 " fill="black" transform="rotate(0,312,208)"/>
                  <polygon class="arrowhead" points="280,488 268,482.4 268,493.6 " fill="black" transform="rotate(90,272,488)"/>
                  <polygon class="arrowhead" points="280,352 268,346.4 268,357.6 " fill="black" transform="rotate(180,272,352)"/>
                  <polygon class="arrowhead" points="280,256 268,250.4 268,261.6 " fill="black" transform="rotate(180,272,256)"/>
                  <polygon class="arrowhead" points="208,104 196,98.4 196,109.6 " fill="black" transform="rotate(90,200,104)"/>
                  <polygon class="arrowhead" points="160,304 148,298.4 148,309.6 " fill="black" transform="rotate(0,152,304)"/>
                  <polygon class="arrowhead" points="160,208 148,202.4 148,213.6 " fill="black" transform="rotate(0,152,208)"/>
                  <polygon class="arrowhead" points="128,488 116,482.4 116,493.6 " fill="black" transform="rotate(90,120,488)"/>
                  <polygon class="arrowhead" points="96,352 84,346.4 84,357.6 " fill="black" transform="rotate(180,88,352)"/>
                  <polygon class="arrowhead" points="96,256 84,250.4 84,261.6 " fill="black" transform="rotate(180,88,256)"/>
                  <polygon class="arrowhead" points="88,408 76,402.4 76,413.6 " fill="black" transform="rotate(90,80,408)"/>
                  <polygon class="arrowhead" points="88,336 76,330.4 76,341.6 " fill="black" transform="rotate(90,80,336)"/>
                  <polygon class="arrowhead" points="88,240 76,234.4 76,245.6 " fill="black" transform="rotate(90,80,240)"/>
                  <polygon class="arrowhead" points="40,488 28,482.4 28,493.6 " fill="black" transform="rotate(90,32,488)"/>
                  <g class="text">
                    <text x="28" y="52">FO</text>
                    <text x="92" y="52">Server</text>
                    <text x="132" y="52">ID</text>
                    <text x="248" y="52">Nonce</text>
                    <text x="132" y="132">left_0</text>
                    <text x="280" y="132">right_0</text>
                    <text x="200" y="212">AES-ECB</text>
                    <text x="320" y="212">&amp;#8853;</text>
                    <text x="360" y="244">right_1</text>
                    <text x="80" y="260">&amp;#8853;</text>
                    <text x="224" y="260">AES-ECB</text>
                    <text x="116" y="292">left_1</text>
                    <text x="200" y="308">AES-ECB</text>
                    <text x="320" y="308">&amp;#8853;</text>
                    <text x="80" y="356">&amp;#8853;</text>
                    <text x="224" y="356">AES-ECB</text>
                    <text x="132" y="436">left_2</text>
                    <text x="280" y="436">right_2</text>
                    <text x="28" y="516">FO</text>
                    <text x="196" y="516">Ciphertext</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
   +-----+-----------+-----------------------+
   | FO  | Server ID |         Nonce         |
   +--+--+-----------+-----+-----------------+
      |                    |
      |                    V
      |  +-----------------+-----------------+
      |  |      left_0     |      right_0    |
      |  +--+--------------+--------------+--+
      |     |                             |
      |     |                             |
      |     |         .--------.          V
      |     +-------->| AES-ECB +-------->⊕
      |     |         '--------'          |
      |     V             .--------.      | right_1
      |     ⊕<-----------+ AES-ECB |<-----+
      |     |             '--------'      |
      |     | left_1  .--------.          V
      |     +-------->| AES-ECB +-------->⊕
      |     |         '--------'          |
      |     V             .--------.      |
      |     ⊕<-----------+ AES-ECB |<-----+
      |     |             '--------'      |
      |     |                             |
      |     V                             V
      |  +-----------------+-----------------+
      |  |      left_2     |      right_2    |
      |  +-------+---------+--------+--------+
      |          |                  |
      V          V                  V
   +-----+-----------------------------------+
   | FO  |            Ciphertext             |
   +-----+-----------------------------------+
]]></artwork>
            </artset>
          </section>
          <section anchor="useful-functions">
            <name>Useful functions</name>
            <t>Two functions are useful to define:</t>
            <t>The expand(length, pass, input_bytes) function concatenates three arguments and
outputs 16 zero-padded octets.</t>
            <t>The first argument 'length' is an 8-bit integer that reports the sum of the
configured nonce length and server id length in octets, and forms the most
significant octet of the output. The 'length' argument MUST NOT exceed 28.</t>
            <t>The second argument is an 8-bit integer that is the 'pass' of the algorithm, and
forms the second-most significant octet of the output.</t>
            <t>The third argument is a variable-length stream of octets, which is copied into
the third-most significant octet of the output and beyond. The length of this
octet stream is half the 'length', rounded up. All remaining octets of the
output are zero.</t>
            <t>For example,</t>
            <sourcecode type="pseudocode"><![CDATA[
expand(0x06, 0x02, 0xaaba3c) = 0x0602aaba3c0000000000000000000000
]]></sourcecode>
            <t>Similarly, truncate(input, n) returns the first n octets of 'input'.</t>
            <sourcecode type="pseudocode"><![CDATA[
truncate(0x2094842ca49256198c2deaa0ba53caa0, 4) = 0x2094842c
]]></sourcecode>
            <t>Let 'half_len' be equal to 'plaintext_len' / 2, rounded up.</t>
          </section>
          <section anchor="algorithm-description">
            <name>Algorithm Description</name>
            <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. The
length of the result in octets is plaintext_len.</li>
              <li>The server splits plaintext_CID into components left_0 and right_0 of equal
length half_len. If plaintext_len is odd, right_0 clears its first four bits,
and left_0 clears its last four bits. For example, 0x7040b81b55ccf3 would split
into a left_0 of 0x7040b810 and right_0 of 0x0b55ccf3.</li>
              <li>Encrypt the result of expand(plaintext_len, 1, left_0) using an AES-ECB-128
cipher to obtain a ciphertext.</li>
              <li>XOR the first half_len octets of the ciphertext with right_0 to form right_1.
Steps 3 and 4 can be summarized as</li>
            </ol>
            <sourcecode type="psuedocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 1, left_0))
    right_1 = XOR(right_0, truncate(result, half_len))
]]></sourcecode>
            <ol spacing="normal" type="1" start="5"><li>If the plaintext_len is odd, clear the first four bits of right_1.</li>
              <li>Repeat steps 3 and 4, but use them to compute left_1 by expanding and
encrypting right_1 with pass = 2, and XOR the results with left_0.</li>
            </ol>
            <sourcecode type="psuedocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 2, right_1))
    left_1 = XOR(left_0, truncate(result, half_len))
]]></sourcecode>
            <ol spacing="normal" type="1" start="7"><li>If the plaintext_len is odd, clear the last four bits of left_1.</li>
              <li>Repeat steps 3 and 4, but use them to compute right_2 by expanding and
encrypting left_1 with pass = 3, and XOR the results with right_1.</li>
            </ol>
            <sourcecode type="pseudocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 3, left_1))
    right_2 = XOR(right_1, truncate(result, half_len))
]]></sourcecode>
            <ol spacing="normal" type="1" start="9"><li>If the plaintext_len is odd, clear the first four bits of right_2.</li>
              <li>Repeat steps 3 and 4, but use them to compute left_2 by expanding and
encrypting right_2 with pass = 4, and XOR the results with left_1.</li>
            </ol>
            <sourcecode type="psuedocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 4, right_2))
    left_2 = XOR(left_1, truncate(result, half_len))
]]></sourcecode>
            <ol spacing="normal" type="1" start="11"><li>If the plaintext_len is odd, clear the last four bits of left_2.</li>
              <li>The server concatenates left_2 with right_2 to form the ciphertext CID,
which it appends to the first octet. If plaintext_len is odd, the four
least significant bits of left_2 and four most significant bits of right_2,
which are all zero, are stripped off before concatenation to make the
resulting ciphertext the same length as the original plaintext.</li>
            </ol>
          </section>
          <section anchor="encryption-example">
            <name>Encryption Example</name>
            <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
plaintext_len = 7

// step 2
hash_len = 4
left_0 = 0x31441a90
right_0 = 0x0c69c275

// step 3
aes_input = 0x070131441a9000000000000000000000
ciphertext = 0x6373991e1d6d5d284f3d015da31d343d

// step 4
right_1 = 0x0c69c275 ^ 0x6373991e = 0x6f1a5b6b

// step 5 (clear bits)
right_1 = 0x0f1a5b6b

// step 6
aes_input = 0x07020f1a5b6b00000000000000000000
aes_output = 0x33ca01c065da4c66e27a990967272dca
left_1 = 0x31441a90 ^ 0x33ca01c0 = 0x028e1b50

// step 7 (clear bits)
left_1 = 0x028e1b50

// step 8
aes_input = 0x0703028e1b5000000000000000000000
aes_output = 0x6b8ecc0905bab0a3a96273cc50f4eee1
right_2 = 0x0f1a5b6b ^ 0x6b8ecc09 = 0x64949762

// step 9 (clear bits)
right_2 = 0x04949762

// step 10
aes_input = 0x07040494976200000000000000000000
aes_output = 0x8c148aa72244e4b46ae2f019dcfc8a64
left_2 = 0x028e1b50 ^ 0x8c148aa7 = 0x8e9a91f7

// step 11 (clear bits)
left_2 = 0x8e9a91f0

// step 12
cid = first_octet || left_2 || right_2 = 0x078e9a91f4949762
]]></sourcecode>
          </section>
        </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[
    result = AES_ECB(key, expand(plaintext_len, 4, right_2))
    left_1 = XOR(left_2, truncate(result, half_len))
    if (plaintext_len_is_odd()) clear_last_bits(left_1, 4)

    result = AES_ECB(key, expand(plaintext_len, 3, left_1))
    right_1 = XOR(right_2, truncate(result, half_len))
    if (plaintext_len_is_odd()) clear_first_bits(left_1, 4)

    result = AES_ECB(key, expand(plaintext_len, 2, right_1))
    left_0 = XOR(left_1, truncate(result, half_len))
    if (plaintext_len_is_odd()) clear_last_bits(left_0, 4)
]]></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>
          <sourcecode type="pseudocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 1, left_0))
    right_0 = XOR(right_1, truncate(result, half_len))
    if (plaintext_len_is_odd()) clear_first_bits(right_0, 4)
]]></sourcecode>
          <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>The CID allocation methods QUIC-LB defines require 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 a 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 <xref section="14.4.1" sectionFormat="of" 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. Load
balancers closer to the client can then treat any parts of the server ID they
did not use 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. Internal server coordination is out of scope of
this specification, but this non-normative section proposes some approaches
that could work given certain server capabilities:</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>In a combination of the two approaches above, the demultiplexer generally
routes by 4-tuple. After a migration, the process tosses the first flight of
packets and registers the new connection ID with the demultiplexer. This
alternative limits the bandwidth consumption of tossing and the memory footprint
of a full connection ID table.</li>
          <li>When generating a connection ID, the server writes the process ID to the
random field of the first octet, or if this is being used for length encoding,
in an octet it appends after the ciphertext. It then applies a keyed hash (with
a key locally generated for the sole use of that server). The hash result is
used as a bitmask to XOR with the bits encoding the process ID. On packet
receipt, the demultiplexer applies the same keyed hash to generate the same
mask and recoversthe process ID. (Note that this approach is conceptually
similar to QUIC header protection).</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 old server using the "Retire Prior To" field in that frame.</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>A QUIC version might define limits on connection ID length that make some or all
of the mechanisms in this document unusable.  For example, a maximum connection
ID length could be below the minimum necessary to use all or part of this
specification; or, the minimum connection ID length could be larger than the
largest value 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.  A QUIC version that violates the assumptions in this section therefore
cannot be safely deployed with a load balancer that follows this specification.
An updated or alternative version of this specification might address these
shortcomings for such a QUIC version.</t>
      <t>Some load balancers might inspect version-specific elements of packets to make a
routing decision.  This might include the Server Name Indication (SNI) extension
in the TLS Client Hello.  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. Such a load
balancer, when it receives packets from an unknown QUIC version, might misdirect
initial packets to the wrong tenant.  While this can be inefficient, the design
in this document 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. Due to the limitations of measures at QUIC layer,
there is no scheme that strictly prevents linkability for all traffic patterns.</t>
      <t>To see why, consider two limits. At one extreme, one client is connected to the
server pool and migrates its address. An observer can easily link the two
addresses, and there is no remedy at the QUIC layer.</t>
      <t>At the other extreme, a very large number of clients are connected to each
server, and they all migrate address constantly. At this limit, even an
unencrypted server ID encoding is unlikely to definitively link two addresses.</t>
      <t>Therefore, efforts to frustrate any analysis of server ID encoding have
diminishing returns. Nevertheless, this specification seeks to minimize the
probability two addresses can be linked.</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. These algorithms ensure that two connection
IDs for the same connection cannot be identified as such as long as the server
chooses the first octet and any plaintext nonce correctly.</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>Servers are forbidden from generating linkable plaintext nonces, because
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. 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="NIST-AES-ECB" target="https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Methods and Techniques</title>
            <author initials="M." surname="Dworkin">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
          <refcontent>NIST Special Publication 800-38A</refcontent>
        </reference>
        <reference anchor="RFC9000" target="https://www.rfc-editor.org/info/rfc9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="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-15.txt">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="3" month="October" year="2022"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-15"/>
        </reference>
        <reference anchor="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="RFC9146" target="https://www.rfc-editor.org/info/rfc9146">
          <front>
            <title>Connection Identifier for DTLS 1.2</title>
            <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="T. Fossati" initials="T." surname="Fossati">
              <organization/>
            </author>
            <author fullname="A. Kraus" initials="A." surname="Kraus">
              <organization/>
            </author>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document specifies the Connection ID (CID) construct for the Datagram Transport Layer Security (DTLS) protocol version 1.2.</t>
              <t>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.</t>
              <t>The new ciphertext record format with the CID also provides content type encryption and record layer padding.</t>
              <t>This document updates RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9146"/>
          <seriesInfo name="DOI" value="10.17487/RFC9146"/>
        </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="RFC9147" target="https://www.rfc-editor.org/info/rfc9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu">
              <organization/>
            </author>
            <date month="April" year="2022"/>
            <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.</t>
              <t>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.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </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 074126ee38bf5454
1 ed793a51d49b8f5fab65 ee080dbf48
                         4fcd3f572d4eefb046fdb51d164efccc
2 ed793a51d49b8f5f ee080dbf48c0d1e5
                         904dd2d05a7b0de9b2b9907afb5ecf8cc3
0 ed793a51d49b8f5fab ee080dbf48c0d1e55d
                         12124d1eb8fbb21e4a490ca53cfe21d04ae63a
]]></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="RFC9146"/> 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="RFC9146"/> 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="RFC9147"/> 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,
Stefan Kolbl, 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-14">
        <name>since draft-ietf-quic-load-balancers-14</name>
        <ul spacing="normal">
          <li>Revised process demultiplexing text</li>
          <li>Restored lost text in Security Considerations</li>
          <li>Editorial comments from Martin Thomson.</li>
          <li>Tweaked 4-pass algorithm to avoid accidental plaintext similarities</li>
        </ul>
      </section>
      <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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
6mMGdNNtn4g7GuRcM9rQhmr+D81txk3P/QAA

-->

</rfc>
