<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.14 (Ruby 3.1.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-quic-load-balancers-20" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="QUIC-LB">QUIC-LB: Generating Routable QUIC Connection IDs</title>

    <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>


<?line 53?>

<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>



  </front>

  <middle>


<?line 66?>

<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 three 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 0b111 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
0b111 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 0b111, 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 5 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 five 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 title="First Octet Format" anchor="first-octet-format"><artwork><![CDATA[
First Octet {
  Config Rotation (3),
  CID Len or Random Bits (5),
}
]]></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
three bits of the connection ID to multiplex incoming Destination Connection IDs
(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>

<t><list style="symbols">
  <t>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 0b111 (see
<xref target="config-failover"/>) is always routable.</t>
  <t>The DCID might not be long enough for the decoder to process.</t>
  <t>The extracted server mapping might not correspond to an active server.</t>
</list></t>

<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 otherwise drop long
header 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.</t>

<t>A fallback algorithm MAY parse a packet from a QUIC version it understands and
use that information to make a routing decision.</t>

<t>For versions it does not understand, a fallback algorithm MUST NOT make the
routing behavior dependent on any part of the long header that is not invariant
across versions (see <xref target="RFC8999"/>).</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 title="CID Format" anchor="plaintext-cid-format"><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>

<figure><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" stroke-linecap="round">
<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,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,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,292 316,286.4 316,297.6" fill="black" transform="rotate(90,320,292)"/>
<polygon class="arrowhead" points="328,196 316,190.4 316,201.6" fill="black" transform="rotate(90,320,196)"/>
<polygon class="arrowhead" points="316,304 304,298.4 304,309.6" fill="black" transform="rotate(0,308,304)"/>
<polygon class="arrowhead" points="316,208 304,202.4 304,213.6" fill="black" transform="rotate(0,308,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="100,352 88,346.4 88,357.6" fill="black" transform="rotate(180,92,352)"/>
<polygon class="arrowhead" points="100,256 88,250.4 88,261.6" fill="black" transform="rotate(180,92,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,340 76,334.4 76,345.6" fill="black" transform="rotate(90,80,340)"/>
<polygon class="arrowhead" points="88,244 76,238.4 76,249.6" fill="black" transform="rotate(90,80,244)"/>
<polygon class="arrowhead" points="40,488 28,482.4 28,493.6" fill="black" transform="rotate(90,32,488)"/>
<circle cx="80" cy="256" r="6" class="xordot" fill="white" stroke="black"/>
<line x1="74" y1="256" x2="86" y2="256" stroke="black"/><line x1="80" y1="250" x2="80" y2="262" stroke="black"/><circle cx="80" cy="352" r="6" class="xordot" fill="white" stroke="black"/>
<line x1="74" y1="352" x2="86" y2="352" stroke="black"/><line x1="80" y1="346" x2="80" y2="358" stroke="black"/><circle cx="320" cy="208" r="6" class="xordot" fill="white" stroke="black"/>
<line x1="314" y1="208" x2="326" y2="208" stroke="black"/><line x1="320" y1="202" x2="320" y2="214" stroke="black"/><circle cx="320" cy="304" r="6" class="xordot" fill="white" stroke="black"/>
<line x1="314" y1="304" x2="326" y2="304" stroke="black"/><line x1="320" y1="298" x2="320" y2="310" stroke="black"/><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="360" y="244">right_1</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="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></figure>

</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 output of expand is as follows:</t>

<figure><sourcecode type="pseudocode"><![CDATA[
ExpandResult {
     input_bytes(...),
     ZeroPad(...),
     length(8),
     pass(8)
}
]]></sourcecode></figure>

<t>in which:</t>

<t><list style="symbols">
  <t>'input_bytes' is drawn from one half of the plaintext. It forms the N most
significant octets of the output, where N is half the 'length' argument, rounded
up, and thus a number between 3 and 10, inclusive.</t>
  <t>'Zeropad' is a set of 14-N octets set to zero.</t>
  <t>'length' is an 8-bit integer that reports the sum of the configured nonce
length and server id length in octets, and forms the fifteenth octet of the
output. The 'length' argument MUST NOT exceed 19 and MUST NOT be less than 5.</t>
  <t>'pass' is an 8-bit integer that reports the 'pass' argument of the algorithm,
and forms the sixteenth (least significant) octet of the output. It guarantees
that the cryptographic input of every pass of the algorithm is unique.</t>
</list></t>

<t>For example,</t>

<figure><sourcecode type="pseudocode"><![CDATA[
expand(0x06, 0x02, 0xaaba3c) = 0xaaba3c00000000000000000000000602
]]></sourcecode></figure>

<t>Similarly, truncate(input, n) returns the first n octets of 'input'.</t>

<figure><sourcecode type="pseudocode"><![CDATA[
truncate(0x2094842ca49256198c2deaa0ba53caa0, 4) = 0x2094842c
]]></sourcecode></figure>

<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>

<t><list style="numbers" type="1">
  <t>The server concatenates the server ID and nonce to create plaintext_CID. The
length of the result in octets is plaintext_len.</t>
  <t>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.</t>
  <t>Encrypt the result of expand(plaintext_len, 1, left_0) using an AES-ECB-128
cipher to obtain a ciphertext.</t>
  <t>XOR the first half_len octets of the ciphertext with right_0 to form right_1.
Steps 3 and 4 can be summarized as</t>
</list></t>

<figure><sourcecode type="psuedocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 1, left_0))
    right_1 = XOR(right_0, truncate(result, half_len))
]]></sourcecode></figure>

<t><list style="numbers" start="5" type="1">
  <t>If the plaintext_len is odd, clear the first four bits of right_1.</t>
  <t>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.</t>
</list></t>

<figure><sourcecode type="psuedocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 2, right_1))
    left_1 = XOR(left_0, truncate(result, half_len))
]]></sourcecode></figure>

<t><list style="numbers" start="7" type="1">
  <t>If the plaintext_len is odd, clear the last four bits of left_1.</t>
  <t>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.</t>
</list></t>

<figure><sourcecode type="pseudocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 3, left_1))
    right_2 = XOR(right_1, truncate(result, half_len))
]]></sourcecode></figure>

<t><list style="numbers" start="9" type="1">
  <t>If the plaintext_len is odd, clear the first four bits of right_2.</t>
  <t>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.</t>
</list></t>

<figure><sourcecode type="psuedocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 4, right_2))
    left_2 = XOR(left_1, truncate(result, half_len))
]]></sourcecode></figure>

<t><list style="numbers" start="11" type="1">
  <t>If the plaintext_len is odd, clear the last four bits of left_2.</t>
  <t>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.</t>
</list></t>

</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>

<figure><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 = 0x31441a90000000000000000000000701
aes_output = 0xa255dd8cdacf01948d3a848c3c7fee23

// step 4
right_1 = 0x0c69c275 ^ 0xa255dd8c = 0xae3c1ff9

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

// step 6
aes_input = 0x0e3c1ff9000000000000000000000702
aes_output = 0xe5e452cb9e1bedb0b2bf830506bf4c4e
left_1 = 0x31441a90 ^ 0xe5e452cb = 0xd4a0485b

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

// step 8
aes_input = 0xd4a04850000000000000000000000703
aes_output = 0xb7821ab3024fed0913b6a04d18e3216f
right_2 = 0x0e3c1ff9 ^ 0xb7821ab3 = 0xb9be054a

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

// step 10
aes_input = 0x09be054a000000000000000000000704
aes_output = 0xb334357cfdf81e3fafe180154eaf7378
left_2 = 0xd4a04850 ^ 0xb3e4357c = 0x67947d2c

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

// step 12
cid = first_octet || left_2 || right_2 = 0x0767947d29be054a
]]></sourcecode></figure>

</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>

<figure><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></figure>

<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>

<figure><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></figure>

<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>

<t><list style="symbols">
  <t>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.</t>
  <t>Incoming Stateless Reset packets and ICMP messages are easily routed to the
correct origin server.</t>
</list></t>

<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 or threads 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>

<t><list style="symbols">
  <t>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.</t>
  <t>Each process could register the connection IDs it generates with the
demultiplexer, which routes those connection IDs accordingly.</t>
  <t>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.</t>
  <t>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). It is important that the server also appends
the process ID to the server ID in the plaintext, so that different processes do
not generate the same ciphertext. The load balancer will consider this data to
be part of the nonce.</t>
</list></t>

</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>

<t><list style="symbols">
  <t>Incoming short headers do not contain DCIDs that are client-generated.</t>
  <t>The use of client-generated incoming DCIDs does not persist beyond a few round
trips in the connection.</t>
  <t>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.</t>
</list></t>

<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>

<t><list style="symbols">
  <t>all co-tenants can use the same QUIC-LB configuration, leaking the server
mapping to each other as described above;</t>
  <t>co-tenants can be issued one of up to seven configurations distinguished by
the config rotation bits (<xref target="config-rotation"/>), exposing information about the
target domain to the entire network; or</t>
  <t>tenants can use the 0b111 codepoint in their CIDs (in which case they SHOULD
disable migration in their connections), which neutralizes the value of
QUIC-LB but preserves privacy.</t>
</list></t>

<t>When configuring QUIC-LB, administrators evaluate the privacy tradeoff by
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 MAY 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"></xref>.
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"></xref> 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 title='Normative References' anchor="sec-normative-references">

<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></organization>
    </author>
    <date year="2021"/>
  </front>
<refcontent>NIST Special Publication 800-38A</refcontent></reference>


<reference anchor="RFC9000">
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <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">
  <front>
    <title>Version-Independent Properties of QUIC</title>
    <author fullname="M. Thomson" initials="M." surname="Thomson"/>
    <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 title='Informative References' anchor="sec-informative-references">

<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">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <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">
  <front>
    <title>Guidelines for Cryptographic Algorithm Agility and Selecting Mandatory-to-Implement Algorithms</title>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <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">
  <front>
    <title>DNS Queries over HTTPS (DoH)</title>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <author fullname="P. McManus" initials="P." surname="McManus"/>
    <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">
   <front>
      <title>TLS Encrypted Client Hello</title>
      <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
         <organization>Independent</organization>
      </author>
      <author fullname="Kazuho Oku" initials="K." surname="Oku">
         <organization>Fastly</organization>
      </author>
      <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
         <organization>Cryptography Consulting LLC</organization>
      </author>
      <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
         <organization>Cloudflare</organization>
      </author>
      <date day="19" month="February" year="2025"/>
      <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-23"/>
   
</reference>

<reference anchor="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"/>
    <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">
  <front>
    <title>YANG Tree Diagrams</title>
    <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
    <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
    <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">
  <front>
    <title>Connection Identifier for DTLS 1.2</title>
    <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
    <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig"/>
    <author fullname="T. Fossati" initials="T." surname="Fossati"/>
    <author fullname="A. Kraus" initials="A." surname="Kraus"/>
    <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">
  <front>
    <title>Datagram Transport Layer Security</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
    <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">
  <front>
    <title>Datagram Transport Layer Security Version 1.2</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
    <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">
  <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"/>
    <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
    <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">
  <front>
    <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
    <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>


<?line 1055?>

<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>

<figure><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 "2023-07-14" {
    description
      "Updated to design in version 17 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..6";
      }
      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></figure>

<figure><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></figure>

<section anchor="tree-diagram"><name>Tree Diagram</name>

<t>This summary of the YANG models uses the notation in <xref target="RFC8340"/>.</t>

<figure><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></figure>

<figure><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></figure>

</section>
</section>
<section anchor="test-vectors"><name>Load Balancer Test Vectors</name>

<t>This section uses the following abbreviations:</t>

<figure><artwork><![CDATA[
cid      Connection ID
cr_bits  Config Rotation Bits
LB       Load Balancer
sid      Server ID
]]></artwork></figure>

<t>In all cases, the server is configured to encode the CID length.</t>

<section anchor="unencrypted-cids"><name>Unencrypted CIDs</name>

<figure><sourcecode type="pseudocode"><![CDATA[
cr_bits sid nonce cid
0 c4605e 4504cc4f 07c4605e4504cc4f
1 350d28b420 3487d970b 20a350d28b4203487d970b
]]></sourcecode></figure>

</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>

<figure><sourcecode type="pseudocode"><![CDATA[
cr_bits sid nonce cid
0 ed793a ee080dbf 0720b1d07b359d3c
1 ed793a51d49b8f5fab65 ee080dbf48
                         2fcc381bc74cb4fbad2823a3d1f8fed2
2 ed793a51d49b8f5f ee080dbf48c0d1e5
                         504dd2d05a7b0de9b2b9907afb5ecf8cc3
3 ed793a51d49b8f5fab ee080dbf48c0d1e55d
                         125779c9cc86beb3a3a4a3ca96fce4bfe0cdbc
]]></sourcecode></figure>

</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,</t>

<t>Kazuho Oku, Udip Pant, Zaheduzzaman Sarker, Ian Swett, Andy Sykes, Martin
Thomson, Dmitri Tikhonov, Victor Vasiliev, Xingcan Lan, Yu Zhu, 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-19"><name>since draft-ietf-quic-load-balancers-19</name>

<t><list style="symbols">
  <t>Further guidance on multiple server processes/threads</t>
  <t>Fixed error in encryption example.</t>
  <t>Clarified fallback algorithms and known QUIC versions.</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-18"><name>since draft-ietf-quic-load-balancers-18</name>

<t><list style="symbols">
  <t>Rearranged the output of the expand function to reduce CPU load of decrypt</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-17"><name>since draft-ietf-quic-load-balancers-17</name>

<t><list style="symbols">
  <t>fixed regressions in draft-17 publication</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-16"><name>since draft-ietf-quic-load-balancers-16</name>

<t><list style="symbols">
  <t>added a config ID bit (now there are 3).</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-15"><name>since draft-ietf-quic-load-balancers-15</name>

<t><list style="symbols">
  <t>aasvg fixes.</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-14"><name>since draft-ietf-quic-load-balancers-14</name>

<t><list style="symbols">
  <t>Revised process demultiplexing text</t>
  <t>Restored lost text in Security Considerations</t>
  <t>Editorial comments from Martin Thomson.</t>
  <t>Tweaked 4-pass algorithm to avoid accidental plaintext similarities</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-13"><name>since draft-ietf-quic-load-balancers-13</name>

<t><list style="symbols">
  <t>Incorporated Connection ID length in argument of truncate function</t>
  <t>Added requirements for codepoint 0b11.</t>
  <t>Describe Distinguishing Attack in Security Considerations.</t>
  <t>Added non-normative language about server process demultiplexers</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-12"><name>since draft-ietf-quic-load-balancers-12</name>

<t><list style="symbols">
  <t>Separated Retry Service design into a separate draft</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-11"><name>since draft-ietf-quic-load-balancers-11</name>

<t><list style="symbols">
  <t>Fixed mistakes in test vectors</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-10"><name>since draft-ietf-quic-load-balancers-10</name>

<t><list style="symbols">
  <t>Refactored algorithm descriptions; made the 4-pass algorithm easier to
implement</t>
  <t>Revised test vectors</t>
  <t>Split YANG model into a server and middlebox version</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-09"><name>since draft-ietf-quic-load-balancers-09</name>
<t><list style="symbols">
  <t>Renamed "Stream Cipher" and "Block Cipher" to "Encrypted Short" and
"Encrypted Long"</t>
  <t>Added section on per-connection state</t>
  <t>Changed "Encrypted Short" to a 4-pass algorithm.</t>
  <t>Recommended a random initial nonce when incrementing.</t>
  <t>Clarified what SNI LBs should do with unknown QUIC versions.</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-08"><name>since draft-ietf-quic-load-balancers-08</name>
<t><list style="symbols">
  <t>Eliminate Dynamic SID allocation</t>
  <t>Eliminated server use bytes</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-07"><name>since draft-ietf-quic-load-balancers-07</name>
<t><list style="symbols">
  <t>Shortened SSCID nonce minimum length to 4 bytes</t>
  <t>Removed RSCID from Retry token body</t>
  <t>Simplified CID formats</t>
  <t>Shrunk size of SID table</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-06"><name>since draft-ietf-quic-load-balancers-06</name>
<t><list style="symbols">
  <t>Added interoperability with DTLS</t>
  <t>Changed "non-compliant" to "unroutable"</t>
  <t>Changed "arbitrary" algorithm to "fallback"</t>
  <t>Revised security considerations for mistrustful tenants</t>
  <t>Added retry service considerations for non-Initial packets</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-05"><name>since draft-ietf-quic-load-balancers-05</name>
<t><list style="symbols">
  <t>Added low-config CID for further discussion</t>
  <t>Complete revision of shared-state Retry Token</t>
  <t>Added YANG model</t>
  <t>Updated configuration limits to ensure CID entropy</t>
  <t>Switched to notation from quic-transport</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-04"><name>since draft-ietf-quic-load-balancers-04</name>
<t><list style="symbols">
  <t>Rearranged the shared-state retry token to simplify token processing</t>
  <t>More compact timestamp in shared-state retry token</t>
  <t>Revised server requirements for shared-state retries</t>
  <t>Eliminated zero padding from the test vectors</t>
  <t>Added server use bytes to the test vectors</t>
  <t>Additional compliant DCID criteria</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-03"><name>since-draft-ietf-quic-load-balancers-03</name>
<t><list style="symbols">
  <t>Improved Config Rotation text</t>
  <t>Added stream cipher test vectors</t>
  <t>Deleted the Obfuscated CID algorithm</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-02"><name>since-draft-ietf-quic-load-balancers-02</name>
<t><list style="symbols">
  <t>Replaced stream cipher algorithm with three-pass version</t>
  <t>Updated Retry format to encode info for required TPs</t>
  <t>Added discussion of version invariance</t>
  <t>Cleaned up text about config rotation</t>
  <t>Added Reset Oracle and limited configuration considerations</t>
  <t>Allow dropped long-header packets for known QUIC versions</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-01"><name>since-draft-ietf-quic-load-balancers-01</name>
<t><list style="symbols">
  <t>Test vectors for load balancer decoding</t>
  <t>Deleted remnants of in-band protocol</t>
  <t>Light edit of Retry Services section</t>
  <t>Discussed load balancer chains</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-00"><name>since-draft-ietf-quic-load-balancers-00</name>
<t><list style="symbols">
  <t>Removed in-band protocol from the document</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-06"><name>Since draft-duke-quic-load-balancers-06</name>
<t><list style="symbols">
  <t>Switch to IETF WG draft.</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-05"><name>Since draft-duke-quic-load-balancers-05</name>
<t><list style="symbols">
  <t>Editorial changes</t>
  <t>Made load balancer behavior independent of QUIC version</t>
  <t>Got rid of token in stream cipher encoding, because server might not have it</t>
  <t>Defined "non-compliant DCID" and specified rules for handling them.</t>
  <t>Added psuedocode for config schema</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-04"><name>Since draft-duke-quic-load-balancers-04</name>
<t><list style="symbols">
  <t>Added standard for retry services</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-03"><name>Since draft-duke-quic-load-balancers-03</name>
<t><list style="symbols">
  <t>Renamed Plaintext CID algorithm as Obfuscated CID</t>
  <t>Added new Plaintext CID algorithm</t>
  <t>Updated to allow 20B CIDs</t>
  <t>Added self-encoding of CID length</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-02"><name>Since draft-duke-quic-load-balancers-02</name>
<t><list style="symbols">
  <t>Added Config Rotation</t>
  <t>Added failover mode</t>
  <t>Tweaks to existing CID algorithms</t>
  <t>Added Block Cipher CID algorithm</t>
  <t>Reformatted QUIC-LB packets</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-01"><name>Since draft-duke-quic-load-balancers-01</name>
<t><list style="symbols">
  <t>Complete rewrite</t>
  <t>Supports multiple security levels</t>
  <t>Lightweight messages</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-00"><name>Since draft-duke-quic-load-balancers-00</name>
<t><list style="symbols">
  <t>Converted to markdown</t>
  <t>Added variable length connection IDs</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

