<?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.6.39 (Ruby 2.7.4) -->


<!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-18" 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
two bits of the connection ID to multiplex incoming DCIDs over these schemes
(see <xref target="config-rotation"/>).</t>

<section anchor="unroutable"><name>Unroutable Connection IDs</name>

<t>QUIC-LB servers will generate Connection IDs that are decodable to extract a
server ID in accordance with a specified algorithm and parameters.  However,
QUIC often uses client-generated Connection IDs prior to receiving a packet from
the server.</t>

<t>These client-generated CIDs might not conform to the expectations of the
routing algorithm and therefore not be routable by the load balancer. Those that
are not routable are "unroutable DCIDs" and receive similar treatment
regardless of why they're unroutable:</t>

<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 drop packets, the device
might implement other security policies, outside the scope of this
specification, that might force a drop.</t>

<t>Servers that receive packets with unroutable CIDs MUST use the available
mechanisms to induce the client to use a routable CID in future packets. In
QUIC version 1, this requires using a routable CID in the Source CID field of
server-generated long headers.</t>

</section>
<section anchor="fallback-algorithm"><name>Fallback Algorithms</name>

<t>There are conditions described below where a load balancer routes a packet using
a "fallback algorithm." It can choose any algorithm, without coordination with
the servers, but the algorithm SHOULD be deterministic over short time scales so
that related packets go to the same server. The design of this algorithm SHOULD
consider the version-invariant properties of QUIC described in <xref target="RFC8999"/> to
maximize its robustness to future versions of QUIC.</t>

<t>A fallback algorithm MUST NOT make the routing behavior dependent on any bits
in the first octet of the QUIC packet header, except the first bit, which
indicates a long header. All other bits are QUIC version-dependent and
intermediaries SHOULD NOT base their design on version-specific templates.</t>

<t>For example, one fallback algorithm might convert a unroutable DCID to an
integer and divided by the number of servers, with the modulus used to forward
the packet. The number of servers is usually consistent on the time scale of a
QUIC connection handshake. Another might simply hash the address/port 4-tuple.
See also <xref target="version-invariance"/>.</t>

</section>
<section anchor="sid-allocation"><name>Server ID Allocation</name>

<t>Load Balancer configurations include a mapping of server IDs to forwarding
addresses. The corresponding server configurations contain one or
more unique server IDs.</t>

<t>The configuration agent chooses a server ID length for each configuration that
MUST be at least one octet.</t>

<t>A QUIC-LB configuration MAY significantly over-provision the server ID space
(i.e., provide far more codepoints than there are servers) to increase the
probability that a randomly generated Destination Connection ID is unroutable.</t>

<t>The configuration agent SHOULD provide a means for servers to express the
number of server IDs it can usefully employ, because a single routing address
actually corresponds to multiple server entities (see <xref target="lb-chains"/>).</t>

<t>Conceptually, each configuration has its own set of server ID allocations,
though two static configurations with identical server ID lengths MAY use a
common allocation between them.</t>

<t>A server encodes one of its assigned server IDs in any CID it generates using
the relevant configuration.</t>

</section>
</section>
<section anchor="server-id-encoding-in-connection-ids"><name>Server ID Encoding in Connection IDs</name>

<section anchor="cid-format"><name>CID format</name>

<t>All connection IDs use the following format:</t>

<figure 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 first argument 'length' is an 8-bit integer that reports the sum of the
configured nonce length and server id length in octets, and forms the most
significant octet of the output. The 'length' argument MUST NOT exceed 28.</t>

<t>The second argument is an 8-bit integer that is the 'pass' of the algorithm, and
forms the second-most significant octet of the output.</t>

<t>The third argument is a variable-length stream of octets, which is copied into
the third-most significant octet of the output and beyond. The length of this
octet stream is half the 'length', rounded up. All remaining octets of the
output are zero.</t>

<t>For example,</t>

<figure><sourcecode type="pseudocode"><![CDATA[
expand(0x06, 0x02, 0xaaba3c) = 0x0602aaba3c0000000000000000000000
]]></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">
  <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">
  <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">
  <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">
  <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">
  <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 = 0x070131441a9000000000000000000000
ciphertext = 0x6373991e1d6d5d284f3d015da31d343d

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

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

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

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

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

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

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

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

// step 12
cid = first_octet || left_2 || right_2 = 0x078e9a91f4949762
]]></sourcecode></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 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).</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'>

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

<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>RTFM, Inc.</organization>
      </author>
      <author fullname="Kazuho Oku" initials="K." surname="Oku">
         <organization>Fastly</organization>
      </author>
      <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
         <organization>Cloudflare</organization>
      </author>
      <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
         <organization>Cloudflare</organization>
      </author>
      <date day="9" month="October" year="2023"/>
      <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-17"/>
   
</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 1037?>

<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 074126ee38bf5454
1 ed793a51d49b8f5fab65 ee080dbf48
                         2fcd3f572d4eefb046fdb51d164efccc
2 ed793a51d49b8f5f ee080dbf48c0d1e5
                         504dd2d05a7b0de9b2b9907afb5ecf8cc3
3 ed793a51d49b8f5fab ee080dbf48c0d1e55d
                         72124d1eb8fbb21e4a490ca53cfe21d04ae63a
]]></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,
Kazuho Oku, Udip Pant, Ian Swett, Andy Sykes, Martin Thomson, Dmitri Tikhonov,
Victor Vasiliev, and William Zeng Ke all provided useful input to this document.</t>

</section>
<section anchor="change-log"><name>Change Log</name>

<ul empty="true"><li>
  <t><strong>RFC Editor's Note:</strong>  Please remove this section prior to
publication of a final version of this document.</t>
</li></ul>

<section anchor="since-draft-ietf-quic-load-balancers-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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
x+J4W0ldw3D0Vn32KORQYRVrnNFsAVh65e9QAZ26pXmQ7RL9+pf/rYqoA+Ov
KWu/tvpYYYuW/y1K22617SsVN8ej9Gen6vYbQPzbVbidSlz7QNqqzW7lZudq
v0XBaU/fq0f+Gi7EuuRvhvNv0Sm/VasM94+EwN8HCZEP7zNRGPfEXu92AGuR
GEgqpVPLHCoHJGSnXukgvkO3JMj+Rv3yS6ez63y+pGsGh9+7Pc1v6OwRla/z
fKMP/Mb1hSH8Phc9jDZpN5fqwdvPXc35yROQT4E5XOXpDei8WsKcWt4+KpKG
PuCtpjgUGrVFLn9K/zqcjT9/jtyu531+V0ON66t7vfz/jZfHn3lj564fuq7h
K182PP49PCfmxvClDhL9+jwRDfm6pQnV+/udmwkJYO/ydr7YukNtQ8j5DkvI
l4HvxY/fJf/SJwX8Kz/+S+u4YkkhhsQvvwbyvmd3Aa4Drl9+7XS+vBKlhrBd
96Hf4xeOow3+Xa/oZYWfFkWQC9jqYvcey5r8DPwMlelPT4CkN8M7/vNzq8GA
u4q+BWg6n6OSwEIdt0yiTnv0E8nnZlF94MPiDHGQ5eU+f4/RnyBJ80+0OlPr
WI7u8y5eqPrislk1DMknt3SKRXvDO0cw/lRE4T11u+OTrrjOVWiCrZlxspgd
j49sMjsazxaL2TIZn/An+oGZJIdH42x6Op9Nx8nh7PQkOzsZz5PpOPWfu48d
XXzeWozqr1pdxaXVSQQSyf6ny7Oj5fhsOjs6OT5ano6nR8dnhzN7NF4cH0/H
J0sui91QIUY5ZC0WRhX8OZZJ46D4eEGbYKdFTaFBQ+o8XHPTP8MtDlKsdrNa
UYRm4ZMKOOowYguuXvDDgnMYVAgx2uKVg4Y4GFa6cQWRfTh5p5PrrpOx2cnZ
YZpYOz4dZ3M8mdlkemzt4el8eTQ7msHJ8CNHk2x2Nj9dHi3T+fGRe2F22jK/
BT/T5SI7XB6dTLOZtcv5eHa8zOYwzuR4ZpeLxcJMO2MH4y7G2cQe7R4dUCfL
ptn4KD2ZjzN7Np/Oz87GJ+lyfmQXy9PF4tAc9qy9M8NRtnuOk+lkOoOH4N35
fDqxs3R2Nl6kR4eLpZ1OsvEstceHqZIJqiFPpkEJaCdd8opKtuHR/nT1Vurc
2eIur8rC1wx2FS/xYS0KFKAMae9idcRcPBlOI0VxiDlWcuawvyAOl9sYUXfG
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

-->

</rfc>

