<?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.17 (Ruby 3.0.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-16" 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>


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


<section anchor="introduction"><name>Introduction</name>

<t>QUIC packets <xref target="RFC9000"/> usually contain a connection ID to allow endpoints to
associate packets with different address/port 4-tuples to the same connection
context. This feature makes connections robust in the event of NAT rebinding.
QUIC endpoints usually designate the connection ID which peers use to address
packets. Server-generated connection IDs create a potential need for out-of-band
communication to support QUIC.</t>

<t>QUIC allows servers (or load balancers) to encode useful routing information for
load balancers in connection IDs.  It also encourages servers, in packets
protected by cryptography, to provide additional connection IDs to the client.
This allows clients that know they are going to change IP address or port to use
a separate connection ID on the new path, thus reducing linkability as clients
move through the world.</t>

<t>There is a tension between the requirements to provide routing information and
mitigate linkability.  Ultimately, because new connection IDs are in protected
packets, they must be generated at the server if the load balancer does not have
access to the connection keys. However, it is the load balancer that has the
context necessary to generate a connection ID that encodes useful routing
information. In the absence of any shared state between load balancer and
server, the load balancer must maintain a relatively expensive table of
server-generated connection IDs, and will not route packets correctly if they
use a connection ID that was originally communicated in a protected
NEW_CONNECTION_ID frame.</t>

<t>This specification provides common algorithms for encoding the server mapping in
a connection ID given some shared parameters. The mapping is generally only
discoverable by observers that have the parameters, preserving unlinkability as
much as possible.</t>

<t>As this document proposes a structured QUIC Connection ID, it also proposes a
system for self-encoding connection ID length in all packets, so that crypto
offload can efficiently obtain key information.</t>

<t>While this document describes a small set of configuration parameters to make
the server mapping intelligible, the means of distributing these parameters
between load balancers, servers, and other trusted intermediaries is out of its
scope. There are numerous well-known infrastructures for distribution of
configuration.</t>

<section anchor="terminology"><name>Terminology</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in RFC 2119 <xref target="RFC2119"/>.</t>

<t>In this document, these words will appear with that interpretation only when in
ALL CAPS.  Lower case uses of these words are not to be interpreted as carrying
significance described in RFC 2119.</t>

<t>In this document, "client" and "server" refer to the endpoints of a QUIC
connection unless otherwise indicated.  A "load balancer" is an intermediary for
that connection that does not possess QUIC connection keys, but it may rewrite
IP addresses or conduct other IP or UDP processing. A "configuration agent" is
the entity that determines the QUIC-LB configuration parameters for the network
and leverages some system to distribute that configuration.</t>

<t>Note that stateful load balancers that act as proxies, by terminating a QUIC
connection with the client and then retrieving data from the server using QUIC
or another protocol, are treated as a server with respect to this specification.</t>

<t>For brevity, "Connection ID" will often be abbreviated as "CID".</t>

</section>
<section anchor="notation"><name>Notation</name>

<t>All wire formats will be depicted using the notation defined in Section 1.3 of
<xref target="RFC9000"/>.</t>

</section>
</section>
<section anchor="first-octet"><name>First CID octet</name>

<t>The Connection ID construction schemes defined in this document reserve the
first octet of a CID for two special purposes: one mandatory (config rotation)
and one optional (length self-description).</t>

<t>Subsequent sections of this document refer to the contents of this octet as the
"first octet."</t>

<section anchor="config-rotation"><name>Config Rotation</name>

<t>The first two bits of any connection ID MUST encode an identifier for the
configuration that the connection ID uses. This enables incremental deployment
of new QUIC-LB settings (e.g., keys).</t>

<t>When new configuration is distributed to servers, there will be a transition
period when connection IDs reflecting old and new configuration coexist in the
network.  The rotation bits allow load balancers to apply the correct routing
algorithm and parameters to incoming packets.</t>

<t>Configuration Agents SHOULD deliver new configurations to load balancers before
doing so to servers, so that load balancers are ready to process CIDs using the
new parameters when they arrive.</t>

<t>A Configuration Agent SHOULD NOT use a codepoint to represent a new
configuration until it takes precautions to make sure that all connections using
CIDs with an old configuration at that codepoint have closed or transitioned.</t>

<t>Servers MUST NOT generate new connection IDs using an old configuration after
receiving a new one from the configuration agent. Servers MUST send
NEW_CONNECTION_ID frames that provide CIDs using the new configuration, and
retire CIDs using the old configuration using the "Retire Prior To" field of
that frame.</t>

<t>It also possible to use these bits for more long-lived distinction of different
configurations, but this has privacy implications (see <xref target="multiple-configs"/>).</t>

</section>
<section anchor="config-failover"><name>Configuration Failover</name>

<t>A server that is configured to use QUIC-LB might be forced to accept new
connections without having received a current configuration.  A server without
QUIC-LB configuration can accept connections, but it SHOULD generate initial
connection IDs with the config rotation bits set to 0b11 and avoid sending the
client connection IDs in NEW_CONNECTION_ID frames or the preferred_address
transport parameter.  Servers in this state SHOULD use the
"disable_active_migration" transport parameter until a valid configuration is
received.</t>

<t>A load balancer that sees a connection ID with config rotation bits set to
0b11 MUST route using an algorithm based solely on the address/port 4-tuple,
which is consistent well beyond the QUIC handshake. However, a load balancer MAY
observe the connection IDs used during the handshake and populate a connection
ID table that allows the connection to survive a NAT rebinding, and reduces the
probability of connection failure due to a change in the number of servers.</t>

<t>When using codepoint 0b11, all bytes but the first SHOULD have no larger of a
chance of collision as random bytes. The connection ID SHOULD be of at least
length 8 to provide 7 bytes of entropy after the first octet with a low chance
of collision. Furthermore, servers in a pool SHOULD also use a consistent
connection ID length to simplify the load balancer's extraction of a connection
ID from short headers.</t>

</section>
<section anchor="length-self-description"><name>Length Self-Description</name>

<t>Local hardware cryptographic offload devices may accelerate QUIC servers by
receiving keys from the QUIC implementation indexed to the connection ID.
However, on physical devices operating multiple QUIC servers, it might be
impractical to efficiently lookup keys if the connection ID varies in length and
does not self-encode its own length.</t>

<t>Note that this is a function of particular server devices and is irrelevant to
load balancers. As such, load balancers MAY omit this from their configuration.
However, the remaining 6 bits in the first octet of the Connection ID are
reserved to express the length of the following connection ID, not including
the first octet.</t>

<t>A server not using this functionality SHOULD choose the six bits so as to have
no observable relationship to previous connection IDs issued for that
connection.</t>

</section>
<section anchor="format"><name>Format</name>

<figure title="First Octet Format" anchor="first-octet-format"><artwork><![CDATA[
First Octet {
  Config Rotation (2),
  CID Len or Random Bits (6),
}
]]></artwork></figure>

<t>The first octet has the following fields:</t>

<t>Config Rotation: Indicates the configuration used to interpret the CID.</t>

<t>CID Len or Random Bits: Length Self-Description (if applicable), or random bits
otherwise. Encodes the length of the Connection ID following the First Octet.</t>

</section>
</section>
<section anchor="load-balancing"><name>Load Balancing Preliminaries</name>

<t>In QUIC-LB, load balancers do not generate individual connection IDs for
servers.  Instead, they communicate the parameters of an algorithm to generate
routable connection IDs.</t>

<t>The algorithms differ in the complexity of configuration at both load balancer
and server. Increasing complexity improves obfuscation of the server mapping.</t>

<t>This section describes three participants: the configuration agent, the load
balancer, and the server. For any given QUIC-LB configuration that enables
connection-ID-aware load balancing, there must be a choice of (1) routing
algorithm, (2) server ID allocation strategy, and (3) algorithm parameters.</t>

<t>Fundamentally, servers generate connection IDs that encode their server ID.
Load balancers decode the server ID from the CID in incoming packets to route
to the correct server.</t>

<t>There are situations where a server pool might be operating two or more routing
algorithms or parameter sets simultaneously.  The load balancer uses the first
two bits of the connection ID to multiplex incoming DCIDs over these schemes
(see <xref target="config-rotation"/>).</t>

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

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

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

<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 0b11 (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">
<path d="M 8,32 L 8,64" fill="none" stroke="black"/>
<path d="M 8,496 L 8,528" fill="none" stroke="black"/>
<path d="M 32,64 L 32,488" fill="none" stroke="black"/>
<path d="M 56,32 L 56,64" fill="none" stroke="black"/>
<path d="M 56,112 L 56,144" fill="none" stroke="black"/>
<path d="M 56,416 L 56,448" fill="none" stroke="black"/>
<path d="M 56,496 L 56,528" fill="none" stroke="black"/>
<path d="M 80,144 L 80,240" fill="none" stroke="black"/>
<path d="M 80,272 L 80,336" fill="none" stroke="black"/>
<path d="M 80,368 L 80,408" fill="none" stroke="black"/>
<path d="M 120,448 L 120,488" fill="none" stroke="black"/>
<path d="M 152,32 L 152,64" fill="none" stroke="black"/>
<path d="M 160,192 L 160,224" fill="none" stroke="black"/>
<path d="M 160,288 L 160,320" fill="none" stroke="black"/>
<path d="M 200,64 L 200,144" fill="none" stroke="black"/>
<path d="M 200,416 L 200,448" fill="none" stroke="black"/>
<path d="M 264,240 L 264,272" fill="none" stroke="black"/>
<path d="M 264,336 L 264,368" fill="none" stroke="black"/>
<path d="M 272,448 L 272,488" fill="none" stroke="black"/>
<path d="M 320,144 L 320,192" fill="none" stroke="black"/>
<path d="M 320,224 L 320,288" fill="none" stroke="black"/>
<path d="M 320,320 L 320,408" fill="none" stroke="black"/>
<path d="M 344,32 L 344,64" fill="none" stroke="black"/>
<path d="M 344,112 L 344,144" fill="none" stroke="black"/>
<path d="M 344,416 L 344,448" fill="none" stroke="black"/>
<path d="M 344,496 L 344,528" fill="none" stroke="black"/>
<path d="M 8,32 L 344,32" fill="none" stroke="black"/>
<path d="M 8,64 L 344,64" fill="none" stroke="black"/>
<path d="M 56,112 L 344,112" fill="none" stroke="black"/>
<path d="M 56,144 L 344,144" fill="none" stroke="black"/>
<path d="M 160,192 L 224,192" fill="none" stroke="black"/>
<path d="M 80,208 L 152,208" fill="none" stroke="black"/>
<path d="M 240,208 L 312,208" fill="none" stroke="black"/>
<path d="M 160,224 L 224,224" fill="none" stroke="black"/>
<path d="M 200,240 L 264,240" fill="none" stroke="black"/>
<path d="M 88,256 L 184,256" fill="none" stroke="black"/>
<path d="M 272,256 L 320,256" fill="none" stroke="black"/>
<path d="M 200,272 L 264,272" fill="none" stroke="black"/>
<path d="M 160,288 L 224,288" fill="none" stroke="black"/>
<path d="M 80,304 L 152,304" fill="none" stroke="black"/>
<path d="M 240,304 L 312,304" fill="none" stroke="black"/>
<path d="M 160,320 L 224,320" fill="none" stroke="black"/>
<path d="M 200,336 L 264,336" fill="none" stroke="black"/>
<path d="M 88,352 L 184,352" fill="none" stroke="black"/>
<path d="M 272,352 L 320,352" fill="none" stroke="black"/>
<path d="M 200,368 L 264,368" fill="none" stroke="black"/>
<path d="M 56,416 L 344,416" fill="none" stroke="black"/>
<path d="M 56,448 L 344,448" fill="none" stroke="black"/>
<path d="M 8,496 L 344,496" fill="none" stroke="black"/>
<path d="M 8,528 L 344,528" fill="none" stroke="black"/>
<path d="M 224,192 C 232.83064,192 240,199.16936 240,208" fill="none" stroke="black"/>
<path d="M 224,224 C 232.83064,224 240,216.83064 240,208" fill="none" stroke="black"/>
<path d="M 200,240 C 191.16936,240 184,247.16936 184,256" fill="none" stroke="black"/>
<path d="M 200,272 C 191.16936,272 184,264.83064 184,256" fill="none" stroke="black"/>
<path d="M 224,288 C 232.83064,288 240,295.16936 240,304" fill="none" stroke="black"/>
<path d="M 224,320 C 232.83064,320 240,312.83064 240,304" fill="none" stroke="black"/>
<path d="M 200,336 C 191.16936,336 184,343.16936 184,352" fill="none" stroke="black"/>
<path d="M 200,368 C 191.16936,368 184,360.83064 184,352" fill="none" stroke="black"/>
<polygon class="arrowhead" points="328,408 316,402.4 316,413.6" fill="black" transform="rotate(90,320,408)"/>
<polygon class="arrowhead" points="328,288 316,282.4 316,293.6" fill="black" transform="rotate(90,320,288)"/>
<polygon class="arrowhead" points="328,192 316,186.4 316,197.6" fill="black" transform="rotate(90,320,192)"/>
<polygon class="arrowhead" points="320,304 308,298.4 308,309.6" fill="black" transform="rotate(0,312,304)"/>
<polygon class="arrowhead" points="320,208 308,202.4 308,213.6" fill="black" transform="rotate(0,312,208)"/>
<polygon class="arrowhead" points="280,488 268,482.4 268,493.6" fill="black" transform="rotate(90,272,488)"/>
<polygon class="arrowhead" points="280,352 268,346.4 268,357.6" fill="black" transform="rotate(180,272,352)"/>
<polygon class="arrowhead" points="280,256 268,250.4 268,261.6" fill="black" transform="rotate(180,272,256)"/>
<polygon class="arrowhead" points="208,104 196,98.4 196,109.6" fill="black" transform="rotate(90,200,104)"/>
<polygon class="arrowhead" points="160,304 148,298.4 148,309.6" fill="black" transform="rotate(0,152,304)"/>
<polygon class="arrowhead" points="160,208 148,202.4 148,213.6" fill="black" transform="rotate(0,152,208)"/>
<polygon class="arrowhead" points="128,488 116,482.4 116,493.6" fill="black" transform="rotate(90,120,488)"/>
<polygon class="arrowhead" points="96,352 84,346.4 84,357.6" fill="black" transform="rotate(180,88,352)"/>
<polygon class="arrowhead" points="96,256 84,250.4 84,261.6" fill="black" transform="rotate(180,88,256)"/>
<polygon class="arrowhead" points="88,408 76,402.4 76,413.6" fill="black" transform="rotate(90,80,408)"/>
<polygon class="arrowhead" points="88,336 76,330.4 76,341.6" fill="black" transform="rotate(90,80,336)"/>
<polygon class="arrowhead" points="88,240 76,234.4 76,245.6" fill="black" transform="rotate(90,80,240)"/>
<polygon class="arrowhead" points="40,488 28,482.4 28,493.6" fill="black" transform="rotate(90,32,488)"/>
<g class="text">
<text x="28" y="52">FO</text>
<text x="92" y="52">Server</text>
<text x="132" y="52">ID</text>
<text x="248" y="52">Nonce</text>
<text x="132" y="132">left_0</text>
<text x="280" y="132">right_0</text>
<text x="200" y="212">AES-ECB</text>
<text x="320" y="212">⊕</text>
<text x="360" y="244">right_1</text>
<text x="80" y="260">⊕</text>
<text x="224" y="260">AES-ECB</text>
<text x="116" y="292">left_1</text>
<text x="200" y="308">AES-ECB</text>
<text x="320" y="308">⊕</text>
<text x="80" y="356">⊕</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 three 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 0b11 codepoint in their CIDs (in which case they SHOULD
disable migration in their connections), which neutralizes the value of
QUIC-LB but preserves privacy.</t>
</list></t>

<t>When configuring QUIC-LB, administrators must evaluate the privacy tradeoff
considering the relative value of each of these properties, given the trust
model between tenants, the presence of methods to obscure the domain name, and
value of address migration in the tenant use cases.</t>

<t>As the plaintext algorithm makes no attempt to conceal the server mapping,
these deployments SHOULD simply use a common configuration.</t>

</section>
<section anchor="stateless-reset-oracle"><name>Stateless Reset Oracle</name>

<t>Section 21.9 of <xref target="RFC9000"/> discusses the Stateless Reset Oracle attack.  For a
server deployment to be vulnerable, an attacking client must be able to cause
two packets with the same Destination CID to arrive at two different servers
that share the same cryptographic context for Stateless Reset tokens. As QUIC-LB
requires deterministic routing of DCIDs over the life of a connection, it is a
sufficient means of avoiding an Oracle without additional measures.</t>

<t>Note also that when a server starts using a new QUIC-LB config rotation
codepoint, new CIDs might not be unique with respect to previous configurations
that occupied that codepoint, and therefore different clients may have observed
the same CID and stateless reset token. A straightforward method of managing
stateless reset keys is to maintain a separate key for each config rotation
codepoint, and replace each key when the configuration for that codepoint
changes. Thus, a server transitions from one config to another, it will be able
to generate correct tokens for connections using either type of CID.</t>

</section>
<section anchor="cid-entropy"><name>Connection ID Entropy</name>

<t>If a server ever reuses a nonce in generating a CID for a given configuration,
it risks exposing sensitive information. Given the same server ID, the CID will
be identical (aside from a possible difference in the first octet).  This can
risk exposure of the QUIC-LB key. If two clients receive the same connection ID,
they also have each other's stateless reset token unless that key has changed in
the interim.</t>

<t>The encrypted mode needs to generate different cipher text for each generated
Connection ID instance to protect the Server ID. To do so, at least four octets
of the CID are reserved for a nonce that, if used only once, will result in
unique cipher text for each Connection ID.</t>

<t>If servers simply increment the nonce by one with each generated connection ID,
then it is safe to use the existing keys until any server's nonce counter
exhausts the allocated space and rolls over. To maximize entropy, servers SHOULD
start with a random nonce value, in which case the configuration is usable until
the nonce value wraps around to zero and then reaches the initial value again.</t>

<t>Whether or not it implements the counter method, the server MUST NOT reuse a
nonce until it switches to a configuration with new keys.</t>

<t>Servers are forbidden from generating linkable plaintext nonces, because
observable correlations between plaintext nonces would provide trivial
linkability between individual connections, rather than just to a common server.</t>

<t>For any algorithm, configuration agents SHOULD implement an out-of-band method
to discover when servers are in danger of exhausting their nonce space, and
SHOULD respond by issuing a new configuration. A server that has exhausted its
nonces MUST either switch to a different configuration, or if none exists, use
the 4-tuple routing config rotation codepoint.</t>

<t>When sizing a nonce that is to be randomly generated, the configuration agent
SHOULD consider that a server generating a N-bit nonce will create a duplicate
about every 2^(N/2) attempts, and therefore compare the expected rate at which
servers will generate CIDs with the lifetime of a configuration.</t>

</section>
<section anchor="distinguishing-attacks"><name>Distinguishing Attacks</name>

<t>The Four Pass Encryption algorithm is structured as a 4-round Feistel network
with non-bijective round function. As such, it does not offer a very high
security level against distinguishing attacks, as explained in <xref target="Patarin2008"></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' target='https://www.rfc-editor.org/info/rfc9000'>
<front>
<title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
<author fullname='J. Iyengar' initials='J.' role='editor' surname='Iyengar'><organization/></author>
<author fullname='M. Thomson' initials='M.' role='editor' surname='Thomson'><organization/></author>
<date month='May' year='2021'/>
<abstract><t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t></abstract>
</front>
<seriesInfo name='RFC' value='9000'/>
<seriesInfo name='DOI' value='10.17487/RFC9000'/>
</reference>



<reference anchor='RFC8999' target='https://www.rfc-editor.org/info/rfc8999'>
<front>
<title>Version-Independent Properties of QUIC</title>
<author fullname='M. Thomson' initials='M.' surname='Thomson'><organization/></author>
<date month='May' year='2021'/>
<abstract><t>This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t></abstract>
</front>
<seriesInfo name='RFC' value='8999'/>
<seriesInfo name='DOI' value='10.17487/RFC8999'/>
</reference>




    </references>

    <references 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' target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<date month='March' year='1997'/>
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference anchor='RFC7696' target='https://www.rfc-editor.org/info/rfc7696'>
<front>
<title>Guidelines for Cryptographic Algorithm Agility and Selecting Mandatory-to-Implement Algorithms</title>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<date month='November' year='2015'/>
<abstract><t>Many IETF protocols use cryptographic algorithms to provide confidentiality, integrity, authentication, or digital signature.  Communicating peers must support a common set of cryptographic algorithms for these mechanisms to work properly.  This memo provides guidelines to ensure that protocols have the ability to migrate from one mandatory-to-implement algorithm suite to another over time.</t></abstract>
</front>
<seriesInfo name='BCP' value='201'/>
<seriesInfo name='RFC' value='7696'/>
<seriesInfo name='DOI' value='10.17487/RFC7696'/>
</reference>



<reference anchor='RFC8484' target='https://www.rfc-editor.org/info/rfc8484'>
<front>
<title>DNS Queries over HTTPS (DoH)</title>
<author fullname='P. Hoffman' initials='P.' surname='Hoffman'><organization/></author>
<author fullname='P. McManus' initials='P.' surname='McManus'><organization/></author>
<date month='October' year='2018'/>
<abstract><t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS.  Each DNS query-response pair is mapped into an HTTP exchange.</t></abstract>
</front>
<seriesInfo name='RFC' value='8484'/>
<seriesInfo name='DOI' value='10.17487/RFC8484'/>
</reference>


<reference anchor='I-D.ietf-tls-esni' target='https://datatracker.ietf.org/doc/html/draft-ietf-tls-esni-16'>
   <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='6' month='April' 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-16'/>
   
</reference>



<reference anchor='RFC6020' target='https://www.rfc-editor.org/info/rfc6020'>
<front>
<title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
<author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'><organization/></author>
<date month='October' year='2010'/>
<abstract><t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6020'/>
<seriesInfo name='DOI' value='10.17487/RFC6020'/>
</reference>



<reference anchor='RFC8340' target='https://www.rfc-editor.org/info/rfc8340'>
<front>
<title>YANG Tree Diagrams</title>
<author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'><organization/></author>
<author fullname='L. Berger' initials='L.' role='editor' surname='Berger'><organization/></author>
<date month='March' year='2018'/>
<abstract><t>This document captures the current syntax used in YANG module tree diagrams.  The purpose of this document is to provide a single location for this definition.  This syntax may be updated from time to time based on the evolution of the YANG language.</t></abstract>
</front>
<seriesInfo name='BCP' value='215'/>
<seriesInfo name='RFC' value='8340'/>
<seriesInfo name='DOI' value='10.17487/RFC8340'/>
</reference>



<reference anchor='RFC9146' target='https://www.rfc-editor.org/info/rfc9146'>
<front>
<title>Connection Identifier for DTLS 1.2</title>
<author fullname='E. Rescorla' initials='E.' role='editor' surname='Rescorla'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' role='editor' surname='Tschofenig'><organization/></author>
<author fullname='T. Fossati' initials='T.' surname='Fossati'><organization/></author>
<author fullname='A. Kraus' initials='A.' surname='Kraus'><organization/></author>
<date month='March' year='2022'/>
<abstract><t>This document specifies the Connection ID (CID) construct for the Datagram Transport Layer Security (DTLS) protocol version 1.2.</t><t>A CID is an identifier carried in the record layer header that gives the recipient additional information for selecting the appropriate security association. In &quot;classical&quot; DTLS, selecting a security association of an incoming DTLS record is accomplished with the help of the 5-tuple. If the source IP address and/or source port changes during the lifetime of an ongoing DTLS session, then the receiver will be unable to locate the correct security context.</t><t>The new ciphertext record format with the CID also provides content type encryption and record layer padding.</t><t>This document updates RFC 6347.</t></abstract>
</front>
<seriesInfo name='RFC' value='9146'/>
<seriesInfo name='DOI' value='10.17487/RFC9146'/>
</reference>



<reference anchor='RFC4347' target='https://www.rfc-editor.org/info/rfc4347'>
<front>
<title>Datagram Transport Layer Security</title>
<author fullname='E. Rescorla' initials='E.' surname='Rescorla'><organization/></author>
<author fullname='N. Modadugu' initials='N.' surname='Modadugu'><organization/></author>
<date month='April' year='2006'/>
<abstract><t>This document specifies Version 1.0 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t></abstract>
</front>
<seriesInfo name='RFC' value='4347'/>
<seriesInfo name='DOI' value='10.17487/RFC4347'/>
</reference>



<reference anchor='RFC6347' target='https://www.rfc-editor.org/info/rfc6347'>
<front>
<title>Datagram Transport Layer Security Version 1.2</title>
<author fullname='E. Rescorla' initials='E.' surname='Rescorla'><organization/></author>
<author fullname='N. Modadugu' initials='N.' surname='Modadugu'><organization/></author>
<date month='January' year='2012'/>
<abstract><t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.  This document updates DTLS 1.0 to work with TLS version 1.2.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6347'/>
<seriesInfo name='DOI' value='10.17487/RFC6347'/>
</reference>



<reference anchor='RFC7983' target='https://www.rfc-editor.org/info/rfc7983'>
<front>
<title>Multiplexing Scheme Updates for Secure Real-time Transport Protocol (SRTP) Extension for Datagram Transport Layer Security (DTLS)</title>
<author fullname='M. Petit-Huguenin' initials='M.' surname='Petit-Huguenin'><organization/></author>
<author fullname='G. Salgueiro' initials='G.' surname='Salgueiro'><organization/></author>
<date month='September' year='2016'/>
<abstract><t>This document defines how Datagram Transport Layer Security (DTLS), Real-time Transport Protocol (RTP), RTP Control Protocol (RTCP), Session Traversal Utilities for NAT (STUN), Traversal Using Relays around NAT (TURN), and ZRTP packets are multiplexed on a single receiving socket.  It overrides the guidance from RFC 5764 (&quot;SRTP                Extension for DTLS&quot;), which suffered from four issues described and fixed in this document.</t><t>This document updates RFC 5764.</t></abstract>
</front>
<seriesInfo name='RFC' value='7983'/>
<seriesInfo name='DOI' value='10.17487/RFC7983'/>
</reference>



<reference anchor='RFC9147' target='https://www.rfc-editor.org/info/rfc9147'>
<front>
<title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
<author fullname='E. Rescorla' initials='E.' surname='Rescorla'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<author fullname='N. Modadugu' initials='N.' surname='Modadugu'><organization/></author>
<date month='April' year='2022'/>
<abstract><t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t><t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t><t>This document obsoletes RFC 6347.</t></abstract>
</front>
<seriesInfo name='RFC' value='9147'/>
<seriesInfo name='DOI' value='10.17487/RFC9147'/>
</reference>




    </references>


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

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

    description
      "QUIC-LB container.";

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

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

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

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

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

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

    leaf server-id {
      type yang:hex-string;
      must "string-length(.) = 3 * ../../server-id-length - 1";
      mandatory true;
      description
        "An allocated server ID";
    }
  }
}
]]></artwork></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 40a350d28b4203487d970b
]]></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
                         4fcd3f572d4eefb046fdb51d164efccc
2 ed793a51d49b8f5f ee080dbf48c0d1e5
                         904dd2d05a7b0de9b2b9907afb5ecf8cc3
0 ed793a51d49b8f5fab ee080dbf48c0d1e55d
                         12124d1eb8fbb21e4a490ca53cfe21d04ae63a
]]></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, 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-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:
H4sIAAAAAAAAA+192XLbWJbg+/0KjPxgqYqkSYpas6q7lZKz0t3exnJmTU9H
jwMkLiW0SYAFgFrK6f6AeZ8fnC+Zs94FAJ12Z8fExEQpqtISCdzl3HPPvgyH
Q9PkzcqeJ3v/9acXl8OX358nf7KFrdImL26Sd+W2Secrm+CXyWVZFHbR5GWR
vLiq90w6n1f27jyRN01WLop0DWNlVbpshrltlsO/bPPFcFWm2XCertJiYat6
uEobWzcmg3/Ok09XF++ffzYL+OOmrB7Pk7rJTL6pzpOm2tbNdDw+G09NWtn0
PHlfpUW9KavG3JfVx5uq3G54dmPqJi2yD+mqLGDMR1ubTX6e/EtTLgZJDS9U
dlnDb49r/gVWuk43G9jivxqTbpvbsjo3STKE/ydJXtTnyatRcrX9aOkD3tSr
tAKY+E/L6gZgVZY3K/7brtN8dZ6s6bHR7SiDB//hBj8cLcq1iYd/PUq+T4uP
dTD+63zxMfiQhn+VL6qyLpdNOEORz/Gpf1jrlz3jX46SH7d5A28EM1zeVnnd
5GkRfUcTva3yOziB5M2iKTfbOnlRLEbhnLf8wj/Iv6PCNsYUZbUGPLmzCLvX
L67fDy+eXw+fX35/Tq8qYr2zsL61LeC8EXWWZZV8vyphs5f55tZWyasys3VS
LpM3G8K7soCNWziTrE7gUJP3dnFb5H/ZWkA5HNefF/4M/XkhUuQFfc64NR1P
J/QnnPqiLBpbNP61PVxxcr2xizxdJW+381W+4BWejsfDw9MLnq1JqxvbwDZu
m2ZTnz97VtytNtt5PSoAlqOb8u4Z/oKfPHtpb9LF47Prt/RRzSNv/MA8bjra
ZMs9Y/JiGcIvSd6mMFdeAMaf6ir99Dq73cAjzShPF9UITu4ZPv1sfHiMg/qX
GPJ0kfNFctE06eIjgLhIfrCwMrtKrhe3dg1QHybPHwAsmc2Sn+FqwiLdIDGY
+YdA/Y8jXWr0HePYP6YLPKneJxjT3uXXrwbJTwXsGyZsHvHkcW7As5Wt3Qt6
guNTY4bDYZLO66ZKF4B2RIvSLKtsXSfr/IZxJklXq/K+TharHI65TpoyWdym
xY1NmlubV8mLt+6d+9sc7iwgdtHA/5HOLTxlA0LS2FHyvgSkybYLeh0mz1ey
VLg95by2Fawe51jlxcekuS+NH98CgdFVIP7yw3WyrW1S2PtwMiCjsBpb4CSP
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
8kf85Hg85b/HvT986a45KBaNy021pVuxT3dmkBQHWC1kWxWhvbIIFv2UHhSZ
KliaG2j8MB2fzU5n00U6O5seHU/OThfTzKbpeJ4eHS7g30Ey49Xqg7yqlwDT
pwjKDwDFp2QCIOEWrvxTJxPyd8+SaQRioSMutCeJEuiYThBEExdilzkNQRMf
bu1qw6VQATaa20cGGm+cMSTHwnyTyDT9VYI9jswVEv1uNHbNxD4Eka3dvUck
i0AAK5hGKyCVoI5HZlkZNRrQAJDIidRH8dEi7mF2JUJZF6DwJ+ttNCW5rTLQ
RfTVBSjqFftu1XKx5eCVgdTHWbYeW6XhU62AxPHDyXg2np9O5kdHi8XyMLkn
oxRtzIjUL0PCot3Tne3AJZARAEiHIzVOhHDFTfNNinY4wEA0nuLA5ymLhIJW
NSMWtabUSmSpmMSoeKcxsxHqQ8HNUXDGtz54SWKaZfkcyLFWMXJkrgn9DmmP
M7VWAhtZA4b+larkyD3cWrmHJG7wNv+Ia/8Aa98na8OvbfnAeFFlAi/DTvZl
YQGd4LEHbmfwGt3eT+egflXNH/eO9j6bIzX+70AhwokATA4nEEBu8+Z4lLyz
G0uFkgI4cNCbuC/JKKJau4jD80fZLB9hptYOqkQg+yO4k1Hjj0hMcGA9Ot6i
xvMScEa/FcxTvTcTgbMslcHMk3wLlE8AyidfDeX44iGQeXrY1um3wlhl2S8B
WTYXwvjwCzD2Jx7zlG8F8qHg8iTC5WmEy5NvgfIZQPnst+PyFBnG+D+EzF+G
s24wBPTs15B58puReabIPA2ReRoi8zeBeTIBOE8mvxWdCczT3YxZVhmg3NRR
3BZVxjh2rTbRiBex9i5Qn/+8m01yHM62Ehd1ZGiPVi0y/bbqscjHaKRLIrMz
CJUoMbI5EmtNwSJRqFlKyaRg7+Ip06BXwwdCGaN+y20/nyQma5lVv0uVtgIn
1HNm4qIiueAjFbrsg11snWhE2L909VBKDhMlsbIOoxlwpW5SDpohSztL36rx
1XwmXPbbVYTg6lpsJ0Wr/erRdIWfDr1hpPkAihdKp4eT2WySGhbe8IOzxfHZ
YnpyZNAXiB8ss+XJ9Dg9Oz07tIvx0WJ8fDjNDs+Ojo9PQdhdjo159oz2m0xM
LJn58d2gMRb9MTnxb08NhqLK5zPdSTDG2KgEQUqADukGODSprT8QiPmJk/FE
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

-->

</rfc>

