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


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

]>

<?rfc docmapping="yes"?>

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

    <author initials="M." surname="Duke" fullname="Martin Duke">
      <organization>Google</organization>
      <address>
        <email>martin.h.duke@gmail.com</email>
      </address>
    </author>
    <author initials="N." surname="Banks" fullname="Nick Banks">
      <organization>Microsoft</organization>
      <address>
        <email>nibanks@microsoft.com</email>
      </address>
    </author>
    <author initials="C." surname="Huitema" fullname="Christian Huitema">
      <organization>Private Octopus Inc.</organization>
      <address>
        <email>huitema@huitema.net</email>
      </address>
    </author>

    <date />

    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    

    <abstract>


<?line 43?>

<t>QUIC address migration allows clients to change their IP address while
maintaining connection state. To reduce the ability of an observer to link two
IP addresses, clients and servers use new connection IDs when they communicate
via different client addresses. This poses a problem for traditional "layer-4"
load balancers that route packets via the IP address and port 4-tuple. This
specification provides a standardized means of securely encoding routing
information in the server's connection IDs so that a properly configured load
balancer can route packets with migrated addresses correctly. As it proposes a
structured connection ID format, it also provides a means of connection IDs
self-encoding their length to aid some hardware offloads.</t>



    </abstract>



  </front>

  <middle>


<?line 56?>

<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"/>. There is one addition: the function len() refers to the length of
a field which can serve as a limit on a different field, so that the lengths of
two fields can be concisely defined as limited to a sum, for example:</t>

<t>x(A..B)
y(C..B-len(x))</t>

<t>indicates that x can be of any length between A and B, and y can be of any
length between C and B provided that (len(x) + len(y)) does not exceed B.</t>

<t>The example below illustrates the basic framework:</t>

<figure title="Example Format" anchor="fig-ex-format"><artwork><![CDATA[
Example Structure {
  One-bit Field (1),
  7-bit Field with Fixed Value (7) = 61,
  Field with Variable-Length Integer (i),
  Arbitrary-Length Field (..),
  Variable-Length Field (8..24),
  Variable-Length Field with Dynamic Limit
           (8..24-len(Variable-Length Field)),
  Field With Minimum Length (16..),
  Field With Maximum Length (..128),
  [Optional Field (64)],
  Repeated Field (8) ...,
}
]]></artwork></figure>

</section>
</section>
<section anchor="first-octet"><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 make the six bits appear to be
random.</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),
    Server ID (8..152-len(Nonce)),
    Nonce (32..152-len(Server ID)),
}
]]></artwork></figure>

</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 appear to be random. If there is a key, the server fills the
nonce field with a nonce of its choosing. See <xref target="cid-entropy"/> for details.</t>

<t>The server MAY append additional bytes to the connection ID, up to the limit
specified in that version of QUIC, for its own use. These bytes MUST NOT
provide observers with any information that could link two connection IDs to
the same connection, client, or server. In particular, all servers using a
configuration MUST consistently add the same length to each connection ID,
to preserve the linkability objectives of QUIC-LB. Any additional bytes SHOULD
appear random unless individual servers are not distinguishable (e.g. any server
using that configuration appends identical bytes to every connection ID).</t>

<t>If there is no key in the configuration, the Connection ID is complete.
Otherwise, there are further steps, as described in the two following
subsections.</t>

<t>Encryption below uses the AES-128-ECB cipher. Future standards could add new
algorithms that use other ciphers to provide cryptographic agility in accordance
with <xref target="RFC7696"/>. 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>The expand_left() function outputs 16 octets, with its first argument in the
most significant bits, its second argument in the least significant byte, its
third argument in the second least significant byte, and zeros in all other
positions. Thus,</t>

<figure><sourcecode type="pseudocode"><![CDATA[
expand_left(0xaaba3c, 0x0b, 0x02) =
                 0xaaba3c0000000000000000000000020b
]]></sourcecode></figure>

<t>expand_right() is similar, except that the second argument is in the most
significant byte, the third is in the second most significant byte, and the
first argument is in the least significant bits. Therefore,</t>

<figure><sourcecode type="pseudocode"><![CDATA[
expand_right(0xaaba3c, 0x0b, 0x02) =
                  0x0b020000000000000000000000aaba3c
]]></sourcecode></figure>

<t>Similarly, truncate_left() and truncate_right() take the most significant and
least significant bits, respectively, from a ciphertext. For example, to take
28 bits of a ciphertext:</t>

<figure><sourcecode type="pseudocode"><![CDATA[
truncate_left(0x2094842ca49256198c2deaa0ba53caa0, 28) = 0x2094842
truncate_right(0x2094842ca49256198c2deaa0ba53caa0, 28) = 0xa53caa0
]]></sourcecode></figure>

<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.</t>
  <t>The server splits plaintext_CID into components left_0 and right_0 of equal
length, splitting an odd octet in half if necessary. For example,
0x7040b81b55ccf3 would split into a left_0 of 0x7040b81 and right_0 of
0xb55ccf3.</t>
  <t>Encrypt the result of expand_left(left_0, index)) to obtain a ciphertext,
where 'index' is one octet: the two most significant bits of which are 0b00,
and the six least significant bits are the length of the resulting connection
ID in bytes, cid_len.</t>
  <t>XOR the least significant bits of the ciphertext with right_0 to form
right_1.  <vspace blankLines='1'/>
Thus steps 3 and 4 can be expressed as
 <spanx style="verb">
 right_1 = right_0 ^ truncate_right(
                 AES_ECB(key, expand_left(left_0, cid_len, 1)),
                         len(right_0))
</spanx></t>
  <t>Repeat steps 3 and 4, but use them to compute left_1 by expanding and
encrypting right_1 with the most significant octet as the concatenation of
0b01 and cid_len, and XOR the results with left_0.  <vspace blankLines='1'/>
<spanx style="verb">
 left_1 = left_0 ^ truncate_left(
                AES_ECB(key, expand_right(right_1, cid_len, 2)),
                        len(left_0))
</spanx></t>
  <t>Repeat steps 3 and 4, but use them to compute right_2 by expanding and
encrypting left_1 with the least significant octet as the concatenation of
0b10 and cid_len, and XOR the results with right_1.  <vspace blankLines='1'/>
<spanx style="verb">
 right_2 = right_1 ^ truncate_right(
                 AES_ECB(key, expand_left(left_1, cid_len, 3),
                         len(right_1))
</spanx></t>
  <t>Repeat steps 3 and 4, but use them to compute left_2 by expanding and
encrypting right_2 with the most significant octet as the concatenation of
0b11 ands cid_len, and XOR the results with left_1.  <vspace blankLines='1'/>
<spanx style="verb">
 left_2 = left_1 ^ truncate_left(
               AES_ECB(key, expand_right(right_2, cid_len, 4),
                       len(left_1))
</spanx></t>
  <t>The server concatenates left_2 with right_2 to form the ciphertext CID,
which it appends to the first octet.</t>
</list></t>

<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

// step 2
left_0 = 0x31441a9
right_0 = 0xc69c275

// step 3
cid_len = 8
aes_input = 0x31441a90000000000000000000000108
ciphertext = 0xa60469a0a97d565da383af820e3b689a

// step 4
right_1 = 0xc69c275 ^ 0xe3b689a = 0x252aaef

// step 5
aes_input = 0x0802000000000000000000000252aaef
aes_output = 0xd7e5202ae06026c25d5f4d14d5ead17b
left_1 = 0x31441a9 ^ 0xd7e5202 = 0xe6a13ab

// step 6
aes_input = 0xe6a13ab0000000000000000000000308
aes_output = 0x9b6d9e6777cfc4bfb8bbdc63beb34a3d
right_2 = 0x252aaef ^ 0xeb34a3d = 0xce1e0d2

// step 7
aes_input = 0x0804000000000000000000000ce1e0d2
aes_output = 0xd462594b30327d88117ac542c8c33b52
left_2 = 0xe6a13ab ^ 0xd462594 = 0x32c363f

// step 8
cid = first_octet || left_2 || right_2 = 0x0732c363fce1e0d2
]]></sourcecode></figure>

</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[
    left_1 = left_2 ^ truncate_left(
                  AES_ECB(key, expand_right(right_2, cid_len, 4),
                          len(left_1))
    right_1 = right_1 ^ truncate_right(
                  AES_ECB(key, expand_left(left_1, cid_len, 3),
                            len(right_1))
    left_0 = left_1 ^ truncate_left(
                  AES_ECB(key, expand_right(right_1, cid_len, 2),
                          len(left_1))
]]></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>

<t><spanx style="verb">
    right_0 = right_1 ^ truncate_right(
                   AES_ECB(key, expand_left(left_0, cid_len, 1),
                            len(right_1))
</spanx></t>

<t>and the load balancer has to concatenate left_0 and right_0 to obtain the
complete server ID.</t>

</section>
</section>
</section>
<section anchor="per-connection-state"><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. There are some other techniques that might work,
depending on the capabilities of the server architecture.</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>Some bytes of the server ID are reserved to encode the process ID. The load
balancer writes the decrypted connection ID into the packet. The demultiplexer
reads the process ID from the relevant bytes and routes it accordingly. The
receiving server process immediately re-encrypts the connection ID in deliver
the packet to the correct connection and successfully authenticate the packet.
While this requires coordination between load balancer and server, this document
does not standardize the technique because it is unsafe to use unless the path
between load balancer and server is fully secure. An observer at that point can
determine the server mapping via the IP address of the destination server, but
the process ID provides additional linkability information.</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 new server using the "Retire Prior To" field in that frame.</t>

<t>Alternately, if the old server is going offline, the load balancer could simply
map its server ID to the new server's address.</t>

</section>
</section>
<section anchor="version-invariance"><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. As described above, there is no scheme that
strictly prevents linkability for all traffic patterns, and therefore efforts to
frustrate any analysis of server ID encoding have diminishing returns.</t>

<section anchor="attackers-not-between-the-load-balancer-and-server"><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.  The QUIC-LB algorithms do prevent the
linkage of two connection IDs to the same individual connection if servers make
reasonable selections when generating new IDs for that connection.</t>

</section>
<section anchor="multiple-configs"><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>If the nonce is sent in plaintext, servers MUST generate nonces so that they
appear to be random. Observable correlations between plaintext nonces would
provide trivial linkability between individual connections, rather than just to
a common server.</t>

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

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

</section>
<section 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. The 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="RFC9000">
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <date month="May" year="2021"/>
    <abstract>
      <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9000"/>
  <seriesInfo name="DOI" value="10.17487/RFC9000"/>
</reference>

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




    </references>

    <references title='Informative References'>

<reference anchor="Patarin2008" target="https://eprint.iacr.org/2008/036.pdf">
  <front>
    <title>Generic Attacks on Feistel Schemes - Extended Version</title>
    <author initials="J." surname="Patarin" fullname="Jacques Patarin">
      <organization>PRiSM, University of Versailles</organization>
    </author>
    <date year="2008"/>
  </front>
</reference>


<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

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

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


<reference anchor="I-D.ietf-tls-esni">
   <front>
      <title>TLS Encrypted Client Hello</title>
      <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
         <organization>RTFM, Inc.</organization>
      </author>
      <author fullname="Kazuho Oku" initials="K." surname="Oku">
         <organization>Fastly</organization>
      </author>
      <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
         <organization>Cloudflare</organization>
      </author>
      <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
         <organization>Cloudflare</organization>
      </author>
      <date day="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">
  <front>
    <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
    <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
    <date month="October" year="2010"/>
    <abstract>
      <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6020"/>
  <seriesInfo name="DOI" value="10.17487/RFC6020"/>
</reference>

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


<reference anchor="I-D.ietf-tls-dtls-connection-id">
   <front>
      <title>Connection Identifier for DTLS 1.2</title>
      <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
         <organization>RTFM, Inc.</organization>
      </author>
      <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Thomas Fossati" initials="T." surname="Fossati">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Achim Kraus" initials="A." surname="Kraus">
         <organization>Bosch.IO GmbH</organization>
      </author>
      <date day="22" month="June" year="2021"/>
      <abstract>
	 <t>This document specifies the Connection ID (CID) construct for the Datagram Transport Layer Security (DTLS) protocol version 1.2.

 A CID is an identifier carried in the record layer header that gives the recipient additional information for selecting the appropriate security association. In &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.

 The new ciphertext record format with the CID also provides content type encryption and record layer padding.

 This document updates RFC 6347.
	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-tls-dtls-connection-id-13"/>
   
</reference>

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

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

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


<reference anchor="I-D.draft-ietf-tls-dtls13">
   <front>
      <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
      <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
         <organization>RTFM, Inc.</organization>
      </author>
      <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Nagendra Modadugu" initials="N." surname="Modadugu">
         <organization>Google, Inc.</organization>
      </author>
      <date day="30" month="April" year="2021"/>
      <abstract>
	 <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.

 The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.

 This document obsoletes RFC 6347.
	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-tls-dtls13-43"/>
   
</reference>




    </references>


<?line 947?>

<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 0727edaa37e7fac8
1 ed793a51d49b8f5fab65 ee080dbf48
                         4f22614a97ceee84341ed7fbfeb1e6e2
2 ed793a51d49b8f5f ee080dbf48c0d1e5
                         904dd2d05a7b0de9b2b9907afb5ecf8cc3
0 ed793a51d49b8f5fab ee080dbf48c0d1e55d
                         125e3b00aa5fcfd1a9a58102a89a19a1e4a10e
]]></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="I-D.ietf-tls-dtls-connection-id"/> 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="I-D.ietf-tls-dtls-connection-id"/> 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="I-D.draft-ietf-tls-dtls13"/> 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,
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-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+19aXfbWHbg9/crEPmDpQ7JIqldlU6iklxdSrzFcnWlJyep
gMSjiDYJsAFQS7ud3z53fQsAuuxU5sycOa3T1ZZI4C333Xf3ZTgcmiZvVvYi
2fuXH2+uhi+/u0h+ZwtbpU1e3CXvym2TzlY2wS+Tq7Io7LzJyyK5ua73TDqb
Vfb+IpE3TVbOi3QNY2VVumiGuW0Wwz9t8/lwVabZcJau0mJuq3q4ShtbNyaD
fy6Sj9eX7198MnP4466sni6SuslMvqkukqba1s10PD4fT01a2fQieV+lRb0p
q8Y8lNWHu6rcbnh2Y+omLbKf01VZwJhPtjab/CL5t6acD5IaXqjsoobfntb8
C6x0nW42sMV/NybdNsuyujBJMoT/kiQv6ovk1Si53n6w9AFv6lVaAUz8p2V1
B7Aqy7sV/23Xab66SNb02Gg5yuDBf7zDD0fzcm3i4V+Pku/S4kMdjP86n38I
PqThX+XzqqzLRRPOUOQzfOof1/plz/hXo+SHbd7AG8EMV8sqr5s8LaLvaKK3
VX4PJ5C8mTflZlsnN8V8FM655Bf+Uf4dFbYxJi8WZbUGTLm3F/Tw27RJq7yA
MzvjD/AHPrqzDQzRNJv64ptv7AYeaUZ5Oq9GMPc3+PQ348OT0SZb+JcYKQkV
83ly2TTp/EOdAOZ9b2EPdpXczpd2betkmLx4bGyR2Sz5PSAXIKcbxB+s/yHo
/NNIlxp9x1D6p3T+py0M3PcEw+pdfvtqkPxYwL5hwuYpKRc0N0BqZWv3AuM3
bs+Y4XCYpLO6qdI5AI5uU5plla3rZJ3f4W2DraWrVflQJ/NVboumTpoymS/T
4s4mzdLmVXLz1r3zsMwB6+Boigb+w5s693cTrkJjR8n7Mqlstp3T6zB5vpKl
wvmXs9pWsHqcY5UXH5LmoTR+fAtXRFcB1yrhh+tkW9uksA/hZEAIYDW2wEme
4Iv1elvkeJnNfZ4mWb5Y2ArGkeH8BLC+ZV4nmxJ+T9JkU5VAZtYJIBTc+zTL
cfB0leyt0idbDY/2DNKQxNEQmC5tEiAAgLMbQA0LK8UJcasBnHDxSC+So2Gz
3awsz2rqjZ3nC1wmbgHmvs8zWgZRkbTK8j8DOq0tUBsEWG3n28qunhJbzMsM
oY0Tw7/+BsAwOcFAYPW8bgOpLnnNtNeNrVYIrWKR38HQWYK7M7q7ZA5HFO/t
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
M5BPgTlc5+kd6LxaTXq7XqPcLUga+oBdz/FC47PI5U9ZYIdH40+fIrfrRZ/f
Feb/2+GwetDL/ze8PP7MGzt3/dB1DV/5vOHxH+A5MTeGL3WQ6JfniWjIly1N
qN4/7NxMSAB7l7fzxdYdahtCLnZYQj4PfC9+/Cb5tz4p4N/58b+0jiuWFGJI
/OWXQN737C7AdcD1l186nc+vRKkhbNd96Pf4meNog3/XK3pZ4adFEeQCtpp5
vceSFb8HfobK9MdnQNKb4T3/+alV691dRd8zMJ3NUElgoY47KlHDMfqJ5HMz
r37mw+JEcZDl5T5/h3GeIEnzT7Q6U+tYju7zLm5UfXFJrb7UovKpTq1Yb3jn
WMUfiyi8p243hNIV17kKTbA1M07mRyfjY5scHY+P5vOjRTI+5U/0AzNJDo/H
2fRsdjQdJ4dHZ6fZ+el4lhyNU/+5+9jRxRetxaj+qnU1XHKdRCCR7H+2OD9e
jM+nR8enJ8eLs/H0+OT88Mgej+cnJ9Px6YKrzjZUZE8OWQtBUTF1jmXSOCg+
XtAm2GlRU2jQEAP7OOQqXRmuNp9iJZPViqI0C59XwJGHEVtQnQaLstis9kKI
6/PMQUMc9iodj4LoPpy80/px18nY7PT8ME2sHZ+NsxmezPTUZml6eGpPF+n8
DE6GHzmeZEfns7PF8SKdnRy7F47OWua34OdoMZ2eTI7S81PYiD07OjyawFiL
2cLOJvbETs20M3Yw7nycTezx7tHPx0dZNs3Gx+npbJzZ89l0dn4+Pk0Xs2M7
X5zN54due+HaOzMcZ7vnmEyP7eEMW7UfL+aLbJKep8dnk/E0PTtPJ/A/e5RO
xlbJxA1aIcg0KKHrpEteUzkuPNofr99KDTNb3OdVWfh6tK6aIT6s5WAClCHt
XayOmI4nw2m0KA4BgqeG/QWxuNxRhprUBVdfKiBjOw0qC0Nxf5SBLKHTKedg
hvVGfY1olzcdrRbtI1RvBUBQUbukh/RpxM9MRoetEpGSRbf1+RhC+LA7qStn
lrSz0DP8P/8wkPtPn6TqiQ4VFHjpWIzitLG4ujZWeZwvc3tvjZR04ZJ9vlQP
bUUr4VKUocYmry3WX6IakT6V0USxfWz3wwjsgvO7ML2TWs3mj85WJZX2yJyV
BiVDBIjc+GsymhrjPmHBDu7WqYT5wdca+8cfImDkwDm1TMtl+uRPPE2uI+tN
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
BkUxWLre7gAA

-->

</rfc>

