<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.4.7 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?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-02" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.7.0 -->
  <front>
    <title abbrev="protected-initial">Protected QUIC Initial Packets</title>
    <seriesInfo name="Internet-Draft" value="draft-duke-quic-protected-initial-02"/>
    <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="May" day="13"/>
    <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="QUIC-TRANSPORT" 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="QUIC-TLS" 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="QUIC-TRANSPORT" 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="QUIC-TLS" 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="QUIC-TRANSPORT" 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="QUIC-TLS" 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="QUIC-TLS" 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="QUIC-TRANSPORT">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="Jana Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <date day="14" month="January" 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.

DO NOT DEPLOY THIS VERSION OF QUIC

   DO NOT DEPLOY THIS VERSION OF QUIC UNTIL IT IS IN AN RFC.  This
   version is still a work in progress.  For trial deployments, please
   use earlier versions.

Note to Readers

   Discussion of this draft takes place on the QUIC working group
   mailing list (quic@ietf.org (mailto:quic@ietf.org)), which is
   archived at https://mailarchive.ietf.org/arch/search/?email_list=quic

   Working Group information can be found at https://github.com/quicwg;
   source code and issues list for this draft can be found at
   https://github.com/quicwg/base-drafts/labels/-transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-transport-34"/>
        </reference>
        <reference anchor="QUIC-TLS">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Sean Turner">
              <organization>sn3rd</organization>
            </author>
            <date day="14" month="January" year="2021"/>
            <abstract>
              <t>   This document describes how Transport Layer Security (TLS) is used to
   secure QUIC.

Note to Readers

   Discussion of this draft takes place on the QUIC working group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/search/?email_list=quic.

   Working Group information can be found at https://github.com/quicwg;
   source code and issues list for this draft can be found at
   https://github.com/quicwg/base-drafts/labels/-tls.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-tls-34"/>
        </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="8" month="March" year="2021"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-10"/>
        </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="15" month="February" year="2021"/>
            <abstract>
              <t>   This document describes a scheme for hybrid public-key encryption
   (HPKE).  This scheme provides authenticated public key encryption of
   arbitrary-sized plaintexts for a recipient public 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.  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-08"/>
        </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="4" month="February" 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.

   Discussion of this work is encouraged to happen on the QUIC IETF
   mailing list quic@ietf.org (mailto:quic@ietf.org) or on the GitHub
   repository which contains the draft: https://github.com/quicwg/
   version-negotiation/ (https://github.com/quicwg/version-
   negotiation/).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-version-negotiation-03"/>
        </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="4" 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-05"/>
        </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" spacing="normal">
        <li>
          <strong>RFC Editor's Note:</strong> Please remove this section prior to
publication of a final version of this document.</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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

-->

</rfc>
