<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.12 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-duke-quic-protected-initial-03" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.10.0 -->
  <front>
    <title abbrev="protected-initial">Protected QUIC Initial Packets</title>
    <seriesInfo name="Internet-Draft" value="draft-duke-quic-protected-initial-03"/>
    <author initials="M." surname="Duke" fullname="Martin Duke">
      <organization>F5 Networks, Inc.</organization>
      <address>
        <email>martin.h.duke@gmail.com</email>
      </address>
    </author>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View, California 94043</city>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2021" month="October" day="25"/>
    <area>Transport</area>
    <workgroup>quic</workgroup>
    <abstract>
      <t>QUIC encrypts its Initial Packets using keys derived from well-known constants,
meaning that observers can inspect the contents of these packets and
successfully spoof them. This document proposes a new version of QUIC that
encrypts Initial Packets more securely by leveraging a Public Key distributed
via the Domain Name System (DNS) or other out-of-band system.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    mailing list (quic@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/martinduke/quic-version-aliasing"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>DISCLAIMER: This draft is a preliminary proposal with insufficient security
analysis. It should not be used in production systems.</t>
      <t>The QUIC Initial Packet <xref target="RFC9000" format="default"/> is encrypted using a key derived from the
Destination Connection ID in the packet cleartext and a well-known salt (see
Section 5.2 of <xref target="RFC9001" format="default"/>). Section 7 of that draft describes security
vulnerabilities resulting from the resulting lack of authentication.</t>
      <t>This also has privacy implications, as observers can decrypt the packet and
inspect the contents, which contain the TLS Client Hello and Server Hello
Messages (<xref target="RFC8446" format="default"/>). The former contains QUIC Transport Parameters, which
reveal even more information about the traffic.</t>
      <t>Furthermore, packets vulnerable to deep inspection create an ossification
vector. Intermediaries that expect the contents of these messages to match a
certain format and template might drop packets that do not, preventing the use
of new protocol extensions or improved security protocols.</t>
      <t>This document proposes a new version of QUIC where the client obtains a public
key generated by the server and uses it to encrypt a shared secret, sent in the
Initial packet header, that both endpoints can then use to protect Initial
packets.</t>
      <t>This mechanism leverages the public key that would be distributed via DNS (or
other out-of-band mechanism) to support Encrypted Client Hello
<xref target="ECHO" format="default"/>. That design uses Hybrid Public Key Exchange (HPKE)
<xref target="HPKE" format="default"/> to authenticate some HPKE configuration
information and the "outer client hello" that is in plaintext, while encrypting
the "inner client hello" that contains privacy-sensitive information. This
document uses the widespread configuration that will exist if ECHO is widely
deployed, but only sends the subset of information necessary to seed the QUIC
key generation process.</t>
      <section anchor="relationship-to-ech-and-version-aliasing" numbered="true" toc="default">
        <name>Relationship to ECH and Version Aliasing</name>
        <t>Encrypted Client Hello <xref target="ECHO" format="default"/> and QUIC Version Aliasing
<xref target="VERSION-ALIASING" format="default"/> also exist in the solution
space of concealing parts of the Initial packet exchange from observers. The
following table summarizes the advantages and disadvantages of each.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Property</th>
              <th align="center">ECH</th>
              <th align="center">Protected Initials</th>
              <th align="center">Version Aliasing</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Fields Protected</td>
              <td align="center">Some of Client Hello</td>
              <td align="center">All Initial Payloads</td>
              <td align="center">All Initial Payloads</td>
            </tr>
            <tr>
              <td align="left">Delay when server loses its keys</td>
              <td align="center">1 RTT</td>
              <td align="center">2 RTT</td>
              <td align="center">2 RTT</td>
            </tr>
            <tr>
              <td align="left">Works with TLS over TCP</td>
              <td align="center">Yes</td>
              <td align="center">No</td>
              <td align="center">No</td>
            </tr>
            <tr>
              <td align="left">First-connection protection</td>
              <td align="center">Yes</td>
              <td align="center">Yes</td>
              <td align="center">No</td>
            </tr>
            <tr>
              <td align="left">Prevents Initial packet injection attacks</td>
              <td align="center">No</td>
              <td align="center">Yes</td>
              <td align="center">Yes</td>
            </tr>
            <tr>
              <td align="left">Symmetric Encryption Only</td>
              <td align="center">No</td>
              <td align="center">No</td>
              <td align="center">Yes</td>
            </tr>
            <tr>
              <td align="left">Greases the Version Field</td>
              <td align="center">No</td>
              <td align="center">No</td>
              <td align="center">Yes</td>
            </tr>
            <tr>
              <td align="left">Prevents Retry injection attacks</td>
              <td align="center">No</td>
              <td align="center">No</td>
              <td align="center">Yes</td>
            </tr>
            <tr>
              <td align="left">No trial decryption</td>
              <td align="center">No</td>
              <td align="center">No</td>
              <td align="center">Yes</td>
            </tr>
          </tbody>
        </table>
        <t>The more complex properties in the table are discussed in
<xref target="security-considerations" format="default"/>.</t>
        <t>Both ECH and Protected Initials are complimentary with Version Aliasing: they
provide a computationally expensive way to protect parts of the Initial packet
during the first connection between client and server, after which Version
Aliasing can protect future exchanges with several additional desirable
properties.</t>
      </section>
    </section>
    <section anchor="conventions" numbered="true" toc="default">
      <name>Conventions</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" format="default"/>.</t>
    </section>
    <section anchor="differences-with-quic-version-1" numbered="true" toc="default">
      <name>Differences with QUIC Version 1</name>
      <t>The version of QUIC described in this specification is identical to QUIC version
1 <xref target="RFC9000" format="default"/> except where described in this document.</t>
      <section anchor="version-number" numbered="true" toc="default">
        <name>Version Number</name>
        <t>The version field in long headers is TBD. Note: for interoperability
exercises, use the provisional value 0xff454900.</t>
      </section>
      <section anchor="key-configuration" numbered="true" toc="default">
        <name>Key Configuration</name>
        <t>The client obtains the Encrypted ClientHello Configuration (ECHConfig) described
in Section 4 of <xref target="ECHO" format="default"/>, which provides the context that allows protection of
Initial packets. The ECHConfig is available via a DNS record or other out-of-
band system.</t>
      </section>
      <section anchor="labels" numbered="true" toc="default">
        <name>Key Derivation Labels</name>
        <t>The labels used to derive keying material in <xref target="RFC9001" format="default"/> change from "quic key",
"quic iv", "quic hp", and "quic ku" to "quicpi key", "quicpi iv", "quicpi hp",
 and "quicpi ku", respectively.</t>
      </section>
      <section anchor="initial-packet-header" numbered="true" toc="default">
        <name>Initial Packet Header</name>
        <t>The figure below is presented in the format from <xref target="RFC9000" format="default"/>, and adds a
variable-length Encryption Context preceded by a length field:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Initial Packet {
   Header From (1) = 1,
   Fixed Big (1) = 1,
   Long Packet Type (2) = 0,
   Reserved Bits (2),
   Packet Number Length (2),
   Version (32),
   Destination Connection ID Length (8),
   Destination Connection ID (0..160),
   Source Connection ID Length (8),
   Source Connection ID (0..160),
   Token Length (i),
   Token (..),
   Encryption Context Length (8),
   Encryption Context (..),
   Length (i),
   Packet Number (8..32),
}
]]></artwork>
        <t>Encryption Context Length: A variable-length integer specifying the length of
the encryption context, in bytes. Servers MUST set this field to zero; a client
that receives a non-zero length MUST either discard the packet or generate a
connection error of type PROTOCOL_VIOLATION.</t>
        <t>Clients MUST include a nonzero Encryption Context Length in all Initial packets,
unless executing fallback procedures (see <xref target="fallback" format="default"/>).</t>
        <t>When the client includes a non-zero-length Encryption Context, it MUST include
an initial_encryption_context in its Client Hello, so that this header field
is included in the TLS handshake transcript.</t>
        <section anchor="encryption-context" numbered="true" toc="default">
          <name>Encryption Context</name>
          <t>The encryption context, if nonzero length, has the following format:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
Encryption Context {
    Config ID (8),
    SCKDF (16),
    SCAEADID (16),
    Encapsulated Secret (..),
}
]]></artwork>
          <t>Config ID: An 8-bit integer identifying the configuration parameters, obtained
from the ECHConfig. This ID implicitly identifies the public key, Key
Encapsulation Mechanism, and the set of symmetric suites from which the
following fields are selected.</t>
          <t>SCKDF: Symmetric Cipher Key Derivation Function. The client selects this from
the cipher suites listed in the ECHConfig. This is the cipher used to encrypt
the Initial Packet. The values are listed in Section 7.2 of <xref target="HPKE" format="default"/>. All
endpoints MUST support HKDF-SHA256 (0x0001), which is used for QUIC Version 1
Initial packets.</t>
          <t>SCAEADID: Symmetric Cipher Key Derivation Function. The client selects this
from the cipher suites listed in the ECHConfig. This is the cipher used to
encrypt the Initial Packet. The values are listed in Section 7.3 of <xref target="HPKE" format="default"/>.
All endpoints MUST support AES-128-GCM (0x0001), which is used for QUIC Version
1 Initial packets.</t>
          <t>The Encapsulated Secret is HPKE encapsulated. Its length is inferred from the
Encryption Context Length field.</t>
        </section>
      </section>
      <section anchor="client-packet-protection-procedure" numbered="true" toc="default">
        <name>Client Packet Protection Procedure</name>
        <t>An client extracts the public key pkR and uses it to generate a shared_secret:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
pkR = Deserialize(ECHConfig.contents.public_key)
shared_secret, enc = Encap(pkR)
initial_secret = HKDF-Extract(shared_secret,
        client_dst_connection_id || ECHConfig)
]]></artwork>
        <t>enc is the Encapsulated Secret, and is written into that subfield of the
Encryption Context Field.</t>
        <t>The initial_secret above is used to generate client_initial_secret and
server_initial_secret as described in Section 5.2 of <xref target="RFC9001" format="default"/>.</t>
        <t>When applying header protection, the Context Length and Encryption Context are
not Protected.</t>
        <t>This derivation is performed once per connection. Subsequent Initial Packets
use the same keys and the same offset to the packet number, regardless of
additional Encryption Context fields or changed connection IDs.</t>
      </section>
      <section anchor="server-procedure" numbered="true" toc="default">
        <name>Server Packet Protection Procedure</name>
        <t>The server reads the Config ID and Encapsulated Secret (enc) from the Initial
Packet. It looks up its private key (skR) associated with the Config ID.</t>
        <t>Otherwise, the server generates the Initial secrets:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
shared_secret = Decap(enc, skR)
initial_secret = HKDF-Extract(shared_secret,
        client_dst_connection_id || ECHConfig)
]]></artwork>
        <t>The remainder is identical to the client procedure. All server-generated
Initial packets use the keys generated in this process.</t>
        <t>If packet decryption fails, see <xref target="fallback" format="default"/>.</t>
        <t>The server terminates the connection with a TRANSPORT_PARAMETER_ERROR under the
following conditions:</t>
        <ul spacing="normal">
          <li>There is a zero-length Encryption Context field, but the
initial_encryption_context transport parameter is present</li>
          <li>There is a non-zero-length Encryption Context field, but the
initial_encryption_context transport parameter is absent or does not match the
header.</li>
        </ul>
        <t>However, see <xref target="intermediaries" format="default"/> for exceptions to this transport parameter
processing rule.</t>
      </section>
      <section anchor="retry" numbered="true" toc="default">
        <name>Retry Integrity Tag</name>
        <t>The Retry packet is identical to QUIC version 1, except that the key and nonce
used for the Retry Integrity Tag (Sec 5.8 of <xref target="RFC9001" format="default"/> change to:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
secret = 0xe453a2e22377289f08a4458ee1c9a90a4e39696e026372ffc33190b8de5a0123
key = 0xbe0c690b9f66575a1d766b54e368c84e
nonce = 0x461599d35d632bf2239825bb
]]></artwork>
        <t>This key and nonce are also used in Fallback packets (<xref target="fallback-packet" format="default"/>).</t>
      </section>
      <section anchor="fallback" numbered="true" toc="default">
        <name>Fallback</name>
        <t>If decryption fails, the client may not have the server's correct configuration.
In this case, the server replies with a Fallback packet (see
<xref target="fallback-packet" format="default"/>), and discards the Initial.</t>
        <t>The client checks the Integrity Tag in the packet against the received Fallback
Packet and its own record of the Initial Packet. If they do not match, the
packet may have been corrupted, and the client SHOULD treat the packet as lost.
If they do match, the client MUST assume that it does not have the correct
ECHConfig.</t>
        <t>When it has the incorrect config, the client composes a new Client Hello. It
MUST include the public_key_failed transport parameter with the Config ID and
public key it attempted to use. It MUST use an Encryption Context Length of
zero, and encrypt it with keys derived from the "fallback salt"
0xbd62319ad6eeb17a9ed0d3bf75e37e4a8e7e6ac7, instead of the shared secret that
the server cannot decode. The Client Hello also MUST include any Retry Token the
previous Initial contained and MAY include a token from a NEW_TOKEN frame.</t>
        <t>This new Initial packet is part of the same connection and MUST use the same
Connection IDs and packet number space.</t>
        <t>Note that the fallback salt does not provide confidentiality to the client, and
the client SHOULD NOT include privacy-sensitive information there. See
<xref target="downgrade" format="default"/> for further discussion of this.</t>
        <t>A server interprets a client Initial with a zero-length Encryption Context as
an Initial encrypted with keys derived from the fallback salt and decrypts it
accordingly.</t>
        <t>The server checks the Config ID and public key from the public_key_failed
transport parameter to see if it should successfully process a Protected Initial
with these parameters. If it would have, it MUST terminate the connection with
an INVALID_PROTECTED_INITIAL_DOWNGRADE error to indicate that there has been an
attack.</t>
        <t>If the server would not have successfully decoded the packet with those
parameters, it MUST send its own public_key_failed transport parameter to
acknowledge the parameter was successfully processed. It MAY also send a
ECHConfig transport parameter to allow use of Protected Initials in subsequent
connections, a Version Aliasing transport parameter (see <xref target="VERSION-ALIASING" format="default"/>)
to enable a different means of Initial Protection, both, or neither.</t>
        <t>If the client does not receive a public_key_failed transport parameter in
response to sending a public_key_failed transport parameter, it MUST terminate
the connection with a TRANSPORT_PARAMETER_ERROR.</t>
        <t>The client MUST NOT include the original client hello in its TLS transcript
hash for key computation, as the server has no access to this message. However,
the client hello is an input to the Integrity tag in the public_key_failed
transport parameter, which will be in the transcript.</t>
      </section>
      <section anchor="fallback-packet" numbered="true" toc="default">
        <name>The Fallback Packet</name>
        <t>The Fallback packet uses the 0x1 packet type code, which it shares with 0-RTT.
Since 0-RTT is only sent by clients and Fallback is only sent by servers, these
two types are distinguished by the endpoint's role in the handshake.</t>
        <t>The Fallback packet has the following format:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Fallback Packet {
  Header Form (1) = 1,
  Fixed Bit (1) = 1,
  Long Packet Type (2) = 1,
  Unused (4),
  Version (32),
  Destination Connection ID Length (8),
  Destination Connection ID (0..160),
  Source Connection ID Length (8),
  Source Connection ID (0..160),
  Integrity Tag (128),
}
]]></artwork>
        <t>The server computes the Integrity Tag by prepending the entire UDP payload that
contained the client Initial to the Fallback packet contents (minus the tag
itself, of course) to form a pseudo-packet. The server then computes the
Integrity Tag as the output of AEAD_AES_128_GCM with the key and nonce from
<xref target="retry" format="default"/>, no plaintext, and the pseudo-packet as the Additional Data. This
thus confirms the integrity of both packets in the exchange.</t>
      </section>
      <section anchor="new-transport-parameters" numbered="true" toc="default">
        <name>New Transport Parameters</name>
        <section anchor="publickeyfailed" numbered="true" toc="default">
          <name>public_key_failed</name>
          <t>The public_key_failed transport parameter allows detection of an attacker
injecting messages to force use of the fallback salt. For details on use,
see <xref target="fallback" format="default"/>.</t>
          <t>Its provisional type is 0x706b66.</t>
          <t>When sent by a client, the content of the transport parameter is as follows:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
{
    Integrity Tag (128),
    Config ID (8),
    Public Key (..),
}
]]></artwork>
          <t>The Integrity Tag is copied from the Fallback packet.</t>
          <t>The other fields are populated using the ECHConfig that the client attempted to
use.  The length of the Public Key is inferred from the length field of the
transport parameter.</t>
          <t>When sent by a server, the transport parameter has no value field.</t>
          <t>Endpoints MUST respond to a malformed transport parameter by closing the
connection with a TRANSPORT_PARAMETER_ERROR.</t>
          <t>Note that this transport parameter is always sent as a result of a fallback from
a Protected Initial, and therefore with a zero-length Encryption Context in the
packet header. Therefore, if received with non-zero-length Encryption Context,
the receiving endpoint MUST terminate the connection with a
TRANSPORT_PARAMETER_ERROR.</t>
        </section>
        <section anchor="echconfig" numbered="true" toc="default">
          <name>ECHConfig</name>
          <t>The ECHConfig transport parameter allows servers to directly provide clients a
valid configuration.</t>
          <t>Its provisional type is 0x454348.</t>
          <t>Its format is equivalent to ECHConfigList, as defined in Section 4 of <xref target="ECHO" format="default"/>.</t>
          <t>If this transport parameter does not match this format, is received by a server,
or is received in a connection where the client's most recent Initial had a
non-zero-length Encryption Context, the receiver MUST terminate the connection
with a TRANSPORT_PARAMETER_ERROR.</t>
        </section>
        <section anchor="initialencryptioncontext" numbered="true" toc="default">
          <name>initial_encryption_context</name>
          <t>The format of this transport parameter is identical to the Encryption Context
described in <xref target="encryption-context" format="default"/>.</t>
          <t>Its provisional type is 0x696563.</t>
        </section>
      </section>
    </section>
    <section anchor="intermediaries" numbered="true" toc="default">
      <name>Intermediaries</name>
      <t>In the topology proposed in Section 3.1 of <xref target="ECHO" format="default"/>, where a client-facing
server has its own public name and potentially fronts a number of independent
domains, only the client-facing server has the private keys. Thus, it modifies
incoming Initial Packets before forwarding to the back-end server.</t>
      <t>A common use case of this topology is a load balancer fronting multiple domains
using the same IP address, which makes routing decisions based on the SNI in the
Client Hello.</t>
      <section anchor="client-facing-server" numbered="true" toc="default">
        <name>Client-Facing Server</name>
        <t>The client-facing server is responsible for verifying the Initial packet is
decryptable, sending a Fallback packet (and dropping the Initial) if it is not,
and otherwise forwarding the packet encrypted with a different key.</t>
        <t>If an incoming Initial packet is not decryptable, the client-facing server
sends a Fallback packet and drops the Initial.</t>
        <t>If an incoming client Initial has a non-zero length Encryption Context field,
the client-facing server MUST delete the Encryption Context field. When
forwarding to the back-end server, it encrypts the plaintext version of this
modified packet with keys derived from the fallback salt. Thus, between
client-facing server and back-end server the packet is inspectable by observers.</t>
        <t>Similarly, if the client is using the shared secret, the client-facing server
MUST decrypt server Initial packets encrypted with keys derived from the
fallback secret, and re-encrypt them with keys derived from the shared secret.</t>
        <t>The client-facing server MUST enforce correct use of the
initial_encryption_context parameter, as described in <xref target="server-procedure" format="default"/>, and
terminate the connection if necessary.</t>
        <t>Non-Initial packets pass unmodified through the client-facing server. Note that
client-facing servers cannot inspect any packet payloads except for Initial
packets.</t>
      </section>
      <section anchor="back-end-server" numbered="true" toc="default">
        <name>Back-End Server</name>
        <t>Back-end servers MUST have an up-to-date copy of the ECHConfigList the client-
facing server is using, though it need not hold the private key, in order to
properly process and generate the relevant transport parameters.</t>
        <t>Back-end servers MUST NOT take any action based on the presence or contents of
the initial_encryption_context transport parameter, as the client-facing server
has likely stripped the Encryption Context out of the header.</t>
        <t>In all other respects, they operate as Protected Initial servers.</t>
      </section>
    </section>
    <section anchor="applicability" numbered="true" toc="default">
      <name>Applicability</name>
      <t>This version of QUIC provides no change from QUIC version 1 relating to the
capabilities available to applications. Therefore, all Application Layer
Protocol Negotiation (ALPN) (<xref target="RFC7301" format="default"/>) codepoints specified to operate over
QUICv1 can also operate over this version of QUIC.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security and Privacy Considerations</name>
      <t>Sections 10.2, 10.3, 10.4, and 10.6 of <xref target="ECHO" format="default"/> apply to QUIC Protected Initials
as well.</t>
      <t>Section 7.8 of <xref target="VERSION-ALIASING" format="default"/> is also applicable.</t>
      <section anchor="downgrade" numbered="true" toc="default">
        <name>Forcing Downgrade</name>
        <t>An attacker attempts to force a client to send an Initial that uses unprotected
Initials by injecting a Version Negotiation packet (which implies the server no
longer supports Protected Initials) or a Fallback packet (which implies the
server has a new cryptographic context).</t>
        <t>The weak form of this attack observes the Initial and injects the Version
Negotiation or Fallback packet, but cannot drop the Initial. To counteract this,
a client SHOULD NOT respond to these packets until they have waited for Probe
Timeout (PTO) for a valid server Initial to arrive.</t>
        <t>The strong form features an attacker that can drop Initial packets. In this
case, the client can either abandon the connection attempt or connect with a
unprotected Initial: using the fallback salt in response to a Fallback packet,
or a different version in response to Version Negotiation.</t>
        <t>If connecting with an unprotected Initial, the client MAY alter it to sanitize
sensitive information and obtain either a correct ECHConfig or an aliased
version before proceeding with its true connection attempt. However, the client
Initial MUST lead to the authentication of a domain name the client trusts to
provide accurate cryptographic information (usually the public_name from the
ECHConfig). Advice for the Outer ClientHello in Section 10.5 of <xref target="ECHO" format="default"/> applies
here.</t>
        <t>Furthermore, if it received a Fallback packet, the client sends a
public_key_failed transport parameter to detect the downgrade attack, and the
server will terminate the connection if the Fallback packet was an attack.</t>
        <t>If the client received a Version Negotiation packet, it MUST implement a
downgrade detection mechanism such as <xref target="I-D.ietf-quic-version-negotiation" format="default"/> or
abandon the connection attempt. If it subsequently detects a downgrade
detection, or discovers that the server does not support the same mechanism, it
terminates the connection attempt.</t>
        <t>Note that ECH is able to retrieve an up-to-date cryptographic context in 1 RTT,
because the client hello has enough plaintext information to begin a handshake
with the public_name. Protected Initials require reconnection with the public
name, incurring a 2 RTT penalty to achieve the same result.</t>
      </section>
      <section anchor="initial-packet-injection" numbered="true" toc="default">
        <name>Initial Packet Injection</name>
        <t>QUIC version 1 handshakes are vulnerable to DoS from observers for the short
interval that endpoints keep Initial keys (usually ~1.5 RTTS), since Initial
Packets are not authenticated. With version aliasing, attackers do not have
the necessary keys to launch such an attack.</t>
        <t>QUIC version 1 can use a fixed symmetric cipher for its Initial Packets because
the encryption is not providing true security. As this design aspires to
stonger guarantees, the Encryption Context field of the Initial header provides
the codepoints to enable use of other symmetric ciphers should AES-128-GCM be
compromised in the future. This is to provide cryptographic agility in
accordance with <xref target="RFC7696" format="default"/>.</t>
      </section>
      <section anchor="retry-injection" numbered="true" toc="default">
        <name>Retry Injection</name>
        <t>This version of QUIC does not improve the security of Retry packets with
respect to QUIC version 1. The Retry Integrity Tag uses a well-known key and
relies on data in the Initial that triggered the Retry. It therefore protects
against transmission errors and injection of Retry packets by off-path attackers
that cannot observe the Initial. To detect Retry packets injected by observers,
it relies on the subsequent exchange of transport parameters.</t>
        <t>An attacker that consistently injects Retry packets in front of a server that
also consistently sends Retry can result in a Denial of Service, as clients
cannot accept two Retries in the same connection.</t>
        <t>An alternate design would use the shared secret derived from the Client Initial
Packet to generate keys for the Retry Integrity Tag, which would allow the
client to immediately discard Retries injected by other parties. Unfortunately,
this would require servers to perform an asymmetric crypto operation to send a
Retry packet, when in a state where it is likely computationally limited.</t>
        <t>It is possible to enhance the security of Retry by assuming this added
computational cost. Such a design could also eliminate the complexity associated
with adding an arbitrary value to the Packet Length field. The purpose of this
addition is to avoid trial decryption to verify the configuration is correct,
but this cost is negligible compared to extracting the shared secret.</t>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="quic-version-registry" numbered="true" toc="default">
        <name>QUIC Version Registry</name>
        <t>This document requests that IANA add the following entry to the QUIC version
registry:</t>
        <t>Value: TBD</t>
        <t>Status: permanent</t>
        <t>Specification: This document</t>
        <t>Change Controller: IETF</t>
        <t>Contact: QUIC WG</t>
      </section>
      <section anchor="quic-transport-parameter-registry" numbered="true" toc="default">
        <name>QUIC Transport Parameter Registry</name>
        <t>This document requests that IANA add the following three entries to the QUIC
Transport Parameters registry:</t>
        <table align="center">
          <thead>
            <tr>
              <th align="center">Value</th>
              <th align="center">Parameter Name</th>
              <th align="center">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">TBD</td>
              <td align="center">public_key_failed</td>
              <td align="center">This document</td>
            </tr>
            <tr>
              <td align="center">TBD</td>
              <td align="center">ECHConfig</td>
              <td align="center">This document</td>
            </tr>
            <tr>
              <td align="center">TBD</td>
              <td align="center">initial_encryption_context</td>
              <td align="center">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="quic-transport-error-codes-registry" numbered="true" toc="default">
        <name>QUIC Transport Error Codes Registry</name>
        <t>This document requests that IANA add the following entry to the QUIC Transport
Error Codes registry:</t>
        <t>Value: TBD</t>
        <t>Code: INVALID_PROTECTED_INITIAL_DOWNGRADE</t>
        <t>Description: Attacker is forcing insecure Initial</t>
        <t>Specification: This document</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="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="RFC9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
        <reference anchor="ECHO">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Kazuho Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="12" month="August" year="2021"/>
            <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-13"/>
        </reference>
        <reference anchor="HPKE">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="Richard L. Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Karthik Bhargavan">
              <organization>Inria</organization>
            </author>
            <author fullname="Benjamin Lipp">
              <organization>Inria</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="2" month="September" year="2021"/>
            <abstract>
              <t>   This document describes a scheme for hybrid public-key encryption
   (HPKE).  This scheme provides a variant of public-key encryption of
   arbitrary-sized plaintexts for a recipient public key.  It also
   includes three authenticated variants, including one which
   authenticates possession of a pre-shared key, and two optional ones
   which authenticate possession of a KEM private key.  HPKE works for
   any combination of an asymmetric key encapsulation mechanism (KEM),
   key derivation function (KDF), and authenticated encryption with
   additional data (AEAD) encryption function.  Some authenticated
   variants may not be supported by all KEMs.  We provide instantiations
   of the scheme using widely used and efficient primitives, such as
   Elliptic Curve Diffie-Hellman key agreement, HKDF, and SHA2.

   This document is a product of the Crypto Forum Research Group (CFRG)
   in the IRTF.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hpke-12"/>
        </reference>
        <reference anchor="I-D.ietf-quic-version-negotiation">
          <front>
            <title>Compatible Version Negotiation for QUIC</title>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Eric Rescorla">
              <organization>Mozilla</organization>
            </author>
            <date day="26" month="May" year="2021"/>
            <abstract>
              <t>   QUIC does not provide a complete version negotiation mechanism but
   instead only provides a way for the server to indicate that the
   version the client offered is unacceptable.  This document describes
   a version negotiation mechanism that allows a client and server to
   select a mutually supported version.  Optionally, if the original and
   negotiated version share a compatible first flight format, the
   negotiation can take place without incurring an extra round trip.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-version-negotiation-04"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="VERSION-ALIASING">
          <front>
            <title>QUIC Version Aliasing</title>
            <author fullname="Martin Duke">
              <organization>F5 Networks, Inc.</organization>
            </author>
            <date day="13" month="May" year="2021"/>
            <abstract>
              <t>   The QUIC transport protocol preserves its future extensibility partly
   by specifying its version number.  There will be a relatively small
   number of published version numbers for the foreseeable future.  This
   document provides a method for clients and servers to negotiate the
   use of other version numbers in subsequent connections and encrypts
   Initial Packets using secret keys instead of standard ones.  If a
   sizeable subset of QUIC connections use this mechanism, this should
   prevent middlebox ossification around the current set of published
   version numbers and the contents of QUIC Initial packets, as well as
   improving the protocol's privacy properties.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-duke-quic-version-aliasing-06"/>
        </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">
              <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="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl">
              <organization/>
            </author>
            <author fullname="A. Popov" initials="A." surname="Popov">
              <organization/>
            </author>
            <author fullname="A. Langley" initials="A." surname="Langley">
              <organization/>
            </author>
            <author fullname="E. Stephan" initials="E." surname="Stephan">
              <organization/>
            </author>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </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">
              <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>
      </references>
    </references>
    <section anchor="change-log" numbered="true" toc="default">
      <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-duke-quic-protected-initials-01" numbered="true" toc="default">
        <name>since draft-duke-quic-protected-initials-01</name>
        <ul spacing="normal">
          <li>Redesigned fallback again without Version Negotiation</li>
          <li>Added the initial_encryption_context transport parameter</li>
        </ul>
      </section>
      <section anchor="since-draft-duke-quic-protected-initials-00" numbered="true" toc="default">
        <name>since draft-duke-quic-protected-initials-00</name>
        <ul spacing="normal">
          <li>Additional text comparing ECH, Version Aliasing</li>
          <li>Adapted to foreground the split-mode use case</li>
          <li>Clarified server initials are encrypted</li>
          <li>Retry keys are no longer generated from the shared secret</li>
          <li>Complete Rewrite of Fallback</li>
          <li>New transport parameters</li>
          <li>Added crypto agility</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
1HbW2rno4n8BobrnHuRfAAA=

-->

</rfc>
