<?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.2.8 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-tls-esni-01" category="exp">

  <front>
    <title abbrev="TLS 1.3 SNI Encryption">Encrypted Server Name Indication for TLS 1.3</title>

    <author initials="E." surname="Rescorla" fullname="Eric Rescorla">
      <organization>RTFM, Inc.</organization>
      <address>
        <email>ekr@rtfm.com</email>
      </address>
    </author>
    <author initials="K." surname="Oku" fullname="Kazuho Oku">
      <organization>Fastly</organization>
      <address>
        <email>kazuhooku@gmail.com</email>
      </address>
    </author>
    <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
      <organization>Cloudflare</organization>
      <address>
        <email>nick@cloudflare.com</email>
      </address>
    </author>
    <author initials="C.A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Apple, Inc.</organization>
      <address>
        <email>cawood@apple.com</email>
      </address>
    </author>

    <date year="2018" month="September" day="18"/>

    <area>General</area>
    <workgroup>tls</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document defines a simple mechanism for encrypting the
Server Name Indication for TLS 1.3.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>DISCLAIMER: This is very early a work-in-progress design and has not
yet seen significant (or really any) security analysis. It should not
be used as a basis for building production systems.</t>

<t>Although TLS 1.3 <xref target="RFC8446"/> encrypts most of the
handshake, including the server certificate, there are several other
channels that allow an on-path attacker to determine the domain name the
client is trying to connect to, including:</t>

<t><list style="symbols">
  <t>Cleartext client DNS queries.</t>
  <t>Visible server IP addresses, assuming the the server is not doing
domain-based virtual hosting.</t>
  <t>Cleartext Server Name Indication (SNI) <xref target="RFC6066"/> in ClientHello messages.</t>
</list></t>

<t>DoH <xref target="I-D.ietf-doh-dns-over-https"/> and DPRIVE <xref target="RFC7858"/> <xref target="RFC8094"/>
provide mechanisms for clients to conceal DNS lookups from network inspection,
and many TLS servers host multiple domains on the same IP address.
In such environments, SNI is an explicit signal used to determine the server’s
identity. Indirect mechanisms such as traffic analysis also exist.</t>

<t>The TLS WG has extensively studied the problem of protecting SNI, but
has been unable to develop a completely generic
solution. <xref target="I-D.ietf-tls-sni-encryption"/> provides a description
of the problem space and some of the proposed techniques. One of the
more difficult problems is “Do not stick out”
(<xref target="I-D.ietf-tls-sni-encryption"/>; Section 3.4): if only sensitive/private
services use SNI encryption, then SNI encryption is a signal that
a client is going to such a service. For this reason,
much recent work has focused on
concealing the fact that SNI is being protected. Unfortunately,
the result often has undesirable performance consequences, incomplete
coverage, or both.</t>

<t>The design in this document takes a different approach: it assumes
that private origins will co-locate with or hide behind a provider (CDN, app server,
etc.) which is able to activate encrypted SNI (ESNI) for all of the domains
it hosts. Thus, the use of encrypted SNI does not indicate that the
client is attempting to reach a private origin, but only that it is
going to a particular service provider, which the observer could
already tell from the IP address.</t>

</section>
<section anchor="conventions-and-definitions" title="Conventions and Definitions">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”,
“SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>

</section>
<section anchor="overview" title="Overview">

<t>This document is designed to operate in one of two primary topologies
shown below, which we call “Shared Mode” and “Split Mode”</t>

<section anchor="topologies" title="Topologies">

<figure title="Shared Mode Topology" anchor="shared-mode"><artwork><![CDATA[
                +---------------------+
                |                     |
                |   2001:DB8::1111    |
                |                     |
Client <----->  | private.example.org |
                |                     |
                | public.example.com  |
                |                     |
                +---------------------+
                        Server
]]></artwork></figure>

<t>In Shared Mode, the provider is the origin server for all the domains
whose DNS records point to it and clients form a TLS connection directly
to that provider, which has access to the plaintext of the connection.</t>

<figure title="Split Mode Topology" anchor="split-mode"><artwork><![CDATA[
                +--------------------+       +---------------------+
                |                    |       |                     |
                |   2001:DB8::1111   |       |   2001:DB8::EEEE    |
Client <------------------------------------>|                     |
                | public.example.com |       | private.example.com |
                |                    |       |                     |
                +--------------------+       +---------------------+
                  Client-Facing Server            Backend Server
]]></artwork></figure>

<t>In Split Mode, the provider is <spanx style="emph">not</spanx> the origin server for private
domains. Rather the DNS records for private domains point to the provider,
but the provider’s server just relays the connection back to the
backend server, which is the true origin server. The provider does
not have access to the plaintext of the connection. In principle,
the provider might not be the origin for any domains, but as
a practical matter, it is probably the origin for a large set of
innocuous domains, but is also providing protection for some private
domains. Note that the backend server can be an unmodified TLS 1.3
server.</t>

</section>
<section anchor="sni-encryption" title="SNI Encryption">

<t>The protocol designed in this document is quite straightforward.</t>

<t>First, the provider publishes a public key which is used for SNI encryption
for all the domains for which it serves directly or indirectly (via Split mode).
This document defines a publication mechanism using DNS, but other mechanisms
are also possible. In particular, if some of the clients of
a private server are applications rather than Web browsers, those
applications might have the public key preconfigured.</t>

<t>When a client wants to form a TLS connection to any of the domains
served by an ESNI-supporting provider, it replaces the
“server_name” extension in the ClientHello with an “encrypted_server_name”
extension, which contains the true extension encrypted under the
provider’s public key. The provider can then decrypt the extension
and either terminate the connection (in Shared Mode) or forward
it to the backend server (in Split Mode).</t>

</section>
</section>
<section anchor="publishing-key" title="Publishing the SNI Encryption Key">

<t>SNI Encryption keys can be published in the DNS using the ESNIKeys
structure, defined below.</t>

<figure><artwork><![CDATA[
    // Copied from TLS 1.3
    struct {
        NamedGroup group;
        opaque key_exchange<1..2^16-1>;
    } KeyShareEntry;

    struct {
        uint16 version;
        uint8 checksum[4];
        KeyShareEntry keys<4..2^16-1>;
        CipherSuite cipher_suites<2..2^16-2>;
        uint16 padded_length;
        uint64 not_before;
        uint64 not_after;
        Extension extensions<0..2^16-1>;
    } ESNIKeys;
]]></artwork></figure>

<t><list style="hanging">
  <t hangText='version'>
  The version of the structure. For this specification, that value
SHALL be 0xff01. Clients MUST ignore any ESNIKeys structure with a
version they do not understand.
[[NOTE: This means that the RFC will presumably have a nonzero value.]]</t>
  <t hangText='checksum'>
  The first four (4) octets of the SHA-256 message digest <xref target="RFC6234"/>
of the ESNIKeys structure. For the purpose of computing the checksum, the
value of the “checksum” field MUST be set to zero.</t>
  <t hangText='keys'>
  The list of keys which can be used by the client to encrypt the SNI.
Every key being listed MUST belong to a different group.</t>
</list></t>

<t>padded_length
:
The length to pad the ServerNameList value to prior to encryption.
This value SHOULD be set to the largest ServerNameList the server
expects to support rounded up the nearest multiple of 16. If the
server supports wildcard names, it SHOULD set this value to 260.</t>

<t><list style="hanging">
  <t hangText='not_before'>
  The moment when the keys become valid for use. The value is represented
as seconds from 00:00:00 UTC on Jan 1 1970, not including leap seconds.</t>
  <t hangText='not_after'>
  The moment when the keys become invalid. Uses the same unit as
not_before.</t>
  <t hangText='extensions'>
  A list of extensions that the client can take into consideration when
generating a Client Hello message. The format is defined in
<xref target="RFC8446"/>; Section 4.2. The purpose of the field is to
provide room for additional features in the future; this document does
not define any extension.</t>
</list></t>

<t>The semantics of this structure are simple: any of the listed keys may
be used to encrypt the SNI for the associated domain name.
The cipher suite list is orthogonal to the
list of keys, so each key may be used with any cipher suite.</t>

<t>This structure is placed in the RRData section of a TXT record
as a base64-encoded string. If this encoding exceeds the 255 octet
limit of TXT strings, it must be split across multiple concatenated
strings as per Section 3.1.3 of <xref target="RFC4408"/>. Servers MAY supply
multiple ESNIKeys values, either of the same or of different versions.
This allows a server to support multiple versions at once.</t>

<t>The name of each TXT record MUST match the name composed
of _esni and the query domain name. That is, if a client queries
example.com, the ESNI TXT Resource Record might be:</t>

<figure><artwork><![CDATA[
_esni.example.com. 60S IN TXT "..." "..."
]]></artwork></figure>

<t>Servers MUST ensure that if multiple A or AAAA records are returned for a
domain with ESNI support, all the servers pointed to by those records are
able to handle the keys returned as part of a ESNI TXT record for that domain.</t>

<t>Clients obtain these records by querying DNS for ESNI-enabled server domains.
Clients may initiate these queries in parallel alongside normal A or AAAA queries,
and SHOULD block TLS handshakes until they complete, perhaps by timing out.</t>

<t>Servers operating in Split Mode SHOULD have DNS configured to return
the same A (or AAAA) record for all ESNI-enabled servers they service. This yields
an anonymity set of cardinality equal to the number of ESNI-enabled server domains
supported by a given client-facing server. Thus, even with SNI encryption,
an attacker which can enumerate the set of ESNI-enabled domains supported
by a client-facing server can guess the correct SNI with probability at least
1/K, where K is the size of this ESNI-enabled server anonymity set. This probability
may be increased via traffic analysis or other mechanisms.</t>

<t>The “checksum” field provides protection against transmission errors,
including those caused by intermediaries such as a DNS proxy running on a
home router.</t>

<t>“not_before” and “not_after” fields represent the validity period of the
published ESNI keys. Clients MUST NOT use ESNI keys that was covered by an
invalid checksum or beyond the published
period. Servers SHOULD set the Resource Record TTL small enough so that the
record gets discarded by the cache before the ESNI keys reach the end of
their validity period. Note that servers MAY need to retain the decryption key
for some time after “not_after”, and will need to consider clock skew, internal
caches and the like, when selecting the “not_before” and “not_after” values.</t>

<t>Client MAY cache the ESNIKeys for a particular domain based on the TTL of the
Resource Record, but SHOULD NOT cache it based on the not_after value, to allow
servers to rotate the keys often and improve forward secrecy.</t>

<t>Note that the length of this structure MUST NOT exceed 2^16 - 1, as the
RDLENGTH is only 16 bits <xref target="RFC1035"/>.</t>

</section>
<section anchor="esni-extension" title="The “encrypted_server_name” extension">

<t>The encrypted SNI is carried in an “encrypted_server_name”
extension, defined as follows:</t>

<figure><artwork><![CDATA[
   enum {
       encrypted_server_name(0xffce), (65535)
   } ExtensionType;
]]></artwork></figure>

<t>For clients (in ClientHello), this extension contains the following
ClientEncryptedSNI structure:</t>

<figure><artwork><![CDATA[
   struct {
       CipherSuite suite;
       KeyShareEntry key_share;
       opaque record_digest<0..2^16-1>;
       opaque encrypted_sni<0..2^16-1>;
   } ClientEncryptedSNI;
]]></artwork></figure>

<t><list style="hanging">
  <t hangText='suite'>
  The cipher suite used to encrypt the SNI.</t>
  <t hangText='key_share'>
  The KeyShareEntry carrying the client’s public ephemeral key shared
used to derive the ESNI key.</t>
  <t hangText='record_digest'>
  A cryptographic hash of the ESNIKeys structure from which the ESNI
key was obtained, i.e., from the first byte of “checksum” to the end
of the structure.  This hash is computed using the hash function
associated with <spanx style="verb">suite</spanx>.</t>
  <t hangText='encrypted_sni'>
  The ClientESNIInner structure, AEAD-encrypted using cipher suite “suite” and
the key generated as described below.</t>
</list></t>

<t>For servers (in EncryptedExtensions), this extension contains the following
structure:</t>

<figure><artwork><![CDATA[
   struct {
       uint8 nonce[16];
   } ServerEncryptedSNI;
]]></artwork></figure>

<t><list style="hanging">
  <t hangText='nonce'>
  The contents of ClientESNIInner.nonce. (See <xref target="client-behavior"/>.)</t>
</list></t>

<section anchor="client-behavior" title="Client Behavior">

<t>In order to send an encrypted SNI, the client MUST first select one of
the server ESNIKeyShareEntry values and generate an (EC)DHE share in the
matching group. This share will then be sent to the server in the
“encrypted_sni” extension and used to derive the SNI encryption key. It does not affect the
(EC)DHE shared secret used in the TLS key schedule.</t>

<t>Let Z be the DH shared secret derived from a key share in ESNIKeys and the
corresponding client share in ClientEncryptedSNI.key_share. The SNI encryption key is
computed from Z as follows:</t>

<figure><artwork><![CDATA[
   Zx = HKDF-Extract(0, Z)
   key = HKDF-Expand-Label(Zx, "esni key", Hash(ESNIContents), key_length)
   iv = HKDF-Expand-Label(Zx, "esni iv", Hash(ESNIContents), iv_length)
]]></artwork></figure>

<t>where ESNIContents is as specified below and Hash is the hash function
associated with the HKDF instantiation.</t>

<figure><artwork><![CDATA[
   struct {
       opaque record_digest<0..2^16-1>;
       KeyShareEntry esni_key_share;
       Random client_hello_random;
   } ESNIContents;
]]></artwork></figure>

<t>The client then creates a ClientESNIInner structure:</t>

<figure><artwork><![CDATA[
   struct {
       ServerNameList sni;
       opaque zeros[ESNIKeys.padded_length - length(sni)];
   } PaddedServerNameList;

   struct {
       uint8 nonce[16];
       PaddedServerNameList realSNI;
   } ClientESNIInner;
]]></artwork></figure>
<t><list style="hanging">
  <t hangText='nonce'>
  A random 16-octet value to be echoed by the server in the
“encrypted_server_name” extension.</t>
  <t hangText='sni'>
  The true SNI, that is, the ServerNameList that would have been sent in the
plaintext “server_name” extension.</t>
  <t hangText='zeros'>
  Zero padding whose length makes the serialized PaddedServerNameList
struct have a length equal to ESNIKeys.padded_length.</t>
</list></t>

<t>This value consists of the serialized ServerNameList from the “server_name” extension,
padded with enough zeroes to make the total structure ESNIKeys.padded_length
bytes long. The purpose of the padding is to prevent attackers
from using the length of the “encrypted_server_name” extension
to determine the true SNI. If the serialized ServerNameList is
longer than ESNIKeys.padded_length, the client MUST NOT use
the “encrypted_server_name” extension.</t>

<t>The ClientEncryptedSNI.encrypted_sni value is then computed using the usual
TLS 1.3 AEAD:</t>

<figure><artwork><![CDATA[
    encrypted_sni = AEAD-Encrypt(key, iv, ClientHello.KeyShareClientHello, ClientESNIInner)
]]></artwork></figure>

<t>Where ClientHello.KeyShareClientHello is the body of the extension but
not including the extension header. Including
ClientHello.KeyShareClientHello in the AAD of AEAD-Encrypt binds the
ClientEncryptedSNI value to the ClientHello and prevents cut-and-paste
attacks.</t>

<t>Note: future extensions may end up reusing the server’s ESNIKeyShareEntry
for other purposes within the same message (e.g., encrypting other
values). Those usages MUST have their own HKDF labels to avoid
reuse.</t>

<t>[[OPEN ISSUE: If in the future you were to reuse these keys for
0-RTT priming, then you would have to worry about potentially
expanding twice of Z_extracted. We should think about how
to harmonize these to make sure that we maintain key separation.]]</t>

<t>This value is placed in an “encrypted_server_name” extension.</t>

<t>The client MAY either omit the “server_name” extension or provide
an innocuous dummy one (this is required for technical conformance
with <xref target="RFC7540"/>; Section 9.2.)</t>

<t>If the server does not provide an “encrypted_server_name” extension
in EncryptedExtensions, the client MUST abort the connection with
an “illegal_parameter” alert. Moreover, it MUST check that
ClientESNIInner.nonce matches the value of the
“encrypted_server_name” extension provided by the server,
and otherwise abort the connection with an “illegal_parameter”
alert.</t>

</section>
<section anchor="client-facing-server-behavior" title="Client-Facing Server Behavior">

<t>Upon receiving an “encrypted_server_name” extension, the client-facing
server MUST first perform the following checks:</t>

<t><list style="symbols">
  <t>If it is unable to negotiate TLS 1.3 or greater, it MUST
abort the connection with a “handshake_failure” alert.</t>
  <t>If the ClientEncryptedSNI.record_digest value does not match the cryptographic
hash of any known ENSIKeys structure, it MUST abort the connection with
an “illegal_parameter” alert. This is necessary to prevent downgrade attacks.
[[OPEN ISSUE: We looked at ignoring the extension but concluded
this was better.]]</t>
  <t>If the ClientEncryptedSNI.key_share group does not match one in the ESNIKeys.keys,
it MUST abort the connection with an “illegal_parameter” alert.</t>
  <t>If the length of the “encrypted_server_name” extension is
inconsistent with the advertised padding length (plus AEAD
expansion) the server MAY abort the connection with an
“illegal_parameter” alert without attempting to decrypt.</t>
</list></t>

<t>Assuming these checks succeed, the server then computes K_sni
and decrypts the ServerName value. If decryption fails, the server
MUST abort the connection with a “decrypt_error” alert.</t>

<t>If the decrypted value’s length is different from
the advertised ESNIKeys.padded_length or the padding consists of
any value other than 0, then the server MUST abort the
connection with an illegal_parameter alert. Otherwise, the
server uses the PaddedServerNameList.sni value as if it were
the “server_name” extension. Any actual “server_name” extension is
ignored.</t>

<t>Upon determining the true SNI, the client-facing server then either
serves the connection directly (if in Shared Mode), in which case
it executes the steps in the following section, or forwards
the TLS connection to the backend server (if in Split Mode). In
the latter case, it does not make any changes to the TLS
messages, but just blindly forwards them.</t>

</section>
<section anchor="shared-mode-server-behavior" title="Shared Mode Server Behavior">

<t>A server operating in Shared Mode uses PaddedServerNameList.sni as
if it were the “server_name” extension to finish the handshake. It
SHOULD pad the Certificate message, via padding at the record layer,
such that its length equals the size of the largest possible Certificate
(message) covered by the same ESNI key. Moreover, the server MUST
include the “encrypted_server_name” extension in EncryptedExtensions,
and the value of this extension MUST match PaddedServerNameList.nonce.</t>

</section>
<section anchor="backend-server-behavior" title="Split Mode Server Behavior">

<t>In Split Mode, the backend server must know PaddedServerNameList.nonce
to echo it back in EncryptedExtensions and complete the handshake.
<xref target="communicating-sni"/> describes one mechanism for sending both
PaddedServerNameList.sni and ClientESNIInner.nonce to the backend
server. Thus, backend servers function the same as servers operating
in Shared mode.</t>

</section>
</section>
<section anchor="compatibility-issues" title="Compatibility Issues">

<t>In general, this mechanism is designed only to be used with
servers which have opted in, thus minimizing compatibility
issues. However, there are two scenarios where that does not
apply, as detailed below.</t>

<section anchor="misconfiguration" title="Misconfiguration">

<t>If DNS is misconfigured so that a client receives ESNI keys for a
server which is not prepared to receive ESNI, then the server will
ignore the “encrypted_server_name” extension, as required by
<xref target="RFC8446"/>; Section 4.1.2.  If the servers does not
require SNI, it will complete the handshake with its default
certificate. Most likely, this will cause a certificate name
mismatch and thus handshake failure. Clients SHOULD NOT fall
back to cleartext SNI, because that allows a network attacker
to disclose the SNI. They MAY attempt to use another server
from the DNS results, if one is provided.</t>

</section>
<section anchor="middleboxes" title="Middleboxes">

<t>A more serious problem is MITM proxies which do not support this
extension. <xref target="RFC8446"/>; Section 9.3 requires that
such proxies remove any extensions they do not understand.
This will have one of two results when connecting to the client-facing
server:</t>

<t><list style="numbers">
  <t>The handshake will fail if the client-facing server requires SNI.</t>
  <t>The handshake will succeed with the client-facing server’s default
certificate.</t>
</list></t>

<t>A Web client client can securely detect case (2) because it will result
in a connection which has an invalid identity (most likely)
but which is signed by a certificate which does not chain
to a publicly known trust anchor. The client can detect this
case and disable ESNI while in that network configuration.</t>

<t>In order to enable this mechanism, client-facing servers SHOULD NOT
require SNI, but rather respond with some default certificate.</t>

<t>A non-conformant MITM proxy will forward the ESNI extension,
substituting its own KeyShare value, with the result that
the client-facing server will not be able to decrypt the SNI.
This causes a hard failure. Detecting this case is difficult,
but clients might opt to attempt captive portal detection
to see if they are in the presence of a MITM proxy, and if
so disable ESNI. Hopefully, the TLS 1.3 deployment experience
has cleaned out most such proxies.</t>

</section>
</section>
<section anchor="security-considerations" title="Security Considerations">

<section anchor="cleartext-dns" title="Why is cleartext DNS OK?">

<t>In comparison to <xref target="I-D.kazuho-protected-sni"/>, wherein DNS Resource
Records are signed via a server private key, ESNIKeys have no
authenticity or provenance information. This means that any attacker
which can inject DNS responses or poison DNS caches, which is a common
scenario in client access networks, can supply clients with fake
ESNIKeys (so that the client encrypts SNI to them) or strip the
ESNIKeys from the response. However, in the face of an attacker that
controls DNS, no SNI encryption scheme can work because the attacker
can replace the IP address, thus blocking client connections, or
substituting a unique IP address which is 1:1 with the DNS name that
was looked up (modulo DNS wildcards). Thus, allowing the ESNIKeys in
the clear does not make the situation significantly worse.</t>

<t>Clearly, DNSSEC (if the client validates and hard fails) is a defense against
this form of attack, but DoH/DPRIVE are also defenses against DNS attacks
by attackers on the local network, which is a common case where SNI.
Moreover, as noted in the introduction, SNI encryption is less useful
without encryption of DNS queries in transit via DoH or DPRIVE mechanisms.</t>

</section>
<section anchor="comparison-against-criteria" title="Comparison Against Criteria">

<t><xref target="I-D.ietf-tls-sni-encryption"/> lists several requirements for SNI
encryption. In this section, we re-iterate these requirements and assess
the ESNI design against them.</t>

<section anchor="mitigate-against-replay-attacks" title="Mitigate against replay attacks">

<t>Since the SNI encryption key is derived from a (EC)DH operation
between the client’s ephemeral and server’s semi-static ESNI key, the ESNI
encryption is bound to the Client Hello. It is not possible for
an attacker to “cut and paste” the ESNI value in a different Client
Hello, with a different ephemeral key share, as the terminating server
will fail to decrypt and verify the ESNI value.</t>

</section>
<section anchor="avoid-widely-deployed-shared-secrets" title="Avoid widely-deployed shared secrets">

<t>This design depends upon DNS as a vehicle for semi-static public key distribution.
Server operators may partition their private keys however they see fit provided
each server behind an IP address has the corresponding private key to decrypt
a key. Thus, when one ESNI key is provided, sharing is optimally bound by the number
of hosts that share an IP address. Server operators may further limit sharing
by sending different Resource Records containing ESNIKeys with different keys
using a short TTL.</t>

</section>
<section anchor="prevent-sni-based-dos-attacks" title="Prevent SNI-based DoS attacks">

<t>This design requires servers to decrypt ClientHello messages with ClientEncryptedSNI
extensions carrying valid digests. Thus, it is possible for an attacker to force
decryption operations on the server. This attack is bound by the number of
valid TCP connections an attacker can open.</t>

</section>
<section anchor="do-not-stick-out" title="Do not stick out">

<t>As more clients enable ESNI support, e.g., as normal part of Web browser
functionality, with keys supplied by shared hosting providers, the presence
of ESNI extensions becomes less suspicious and part of common or predictable
client behavior. In other words, if all Web browsers start using ESNI,
the presence of this value does not signal suspicious behavior to passive
eavesdroppers.</t>

</section>
<section anchor="forward-secrecy" title="Forward secrecy">

<t>This design is not forward secret because the server’s ESNI key is static.
However, the window of exposure is bound by the key lifetime. It is
RECOMMEMDED that servers rotate keys frequently.</t>

</section>
<section anchor="proper-security-context" title="Proper security context">

<t>This design permits servers operating in Split Mode to forward connections
directly to backend origin servers, thereby avoiding unnecessary MiTM attacks.</t>

</section>
<section anchor="split-server-spoofing" title="Split server spoofing">

<t>Assuming ESNIKeys retrieved from DNS are validated, e.g., via DNSSEC or fetched
from a trusted Recursive Resolver, spoofing a server operating in Split Mode
is not possible. See <xref target="cleartext-dns"/> for more details regarding cleartext
DNS.</t>

</section>
<section anchor="supporting-multiple-protocols" title="Supporting multiple protocols">

<t>This design has no impact on application layer protocol negotiation. It may affect
connection routing, server certificate selection, and client certificate verification.
Thus, it is compatible with multiple protocols.</t>

</section>
</section>
<section anchor="misrouting" title="Misrouting">

<t>Note that the backend server has no way of knowing what the SNI was,
but that does not lead to additional privacy exposure because the
backend server also only has one identity. This does, however, change
the situation slightly in that the backend server might previously have
checked SNI and now cannot (and an attacker can route a connection
with an encrypted SNI to any backend server and the TLS connection will
still complete).  However, the client is still responsible for
verifying the server’s identity in its certificate.</t>

<t>[[TODO: Some more analysis needed in this case, as it is a little
odd, and probably some precise rules about handling ESNI and no
SNI uniformly?]]</t>

</section>
</section>
<section anchor="iana-considerations" title="IANA Considerations">

<section anchor="update-of-the-tls-extensiontype-registry" title="Update of the TLS ExtensionType Registry">

<t>IANA is requested to Create an entry, encrypted_server_name(0xffce),
in the existing registry for ExtensionType (defined in
<xref target="RFC8446"/>), with “TLS 1.3” column values being set to
“CH, EE”, and “Recommended” column being set to “Yes”.</t>

</section>
<section anchor="update-of-the-dns-underscore-global-scoped-entry-registry" title="Update of the DNS Underscore Global Scoped Entry Registry">

<t>IANA is requested to create an entry in the DNS Underscore Global
Scoped Entry Registry (defined in <xref target="I-D.ietf-dnsop-attrleaf"/>) with the
“RR Type” column value being set to “TXT”, the “_NODE NAME” column
value being set to “_esni”, and the “Reference” column value being set
to this document.</t>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC1035" target='https://www.rfc-editor.org/info/rfc1035'>
<front>
<title>Domain names - implementation and specification</title>
<author initials='P.V.' surname='Mockapetris' fullname='P.V. Mockapetris'><organization /></author>
<date year='1987' month='November' />
<abstract><t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System.  It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t></abstract>
</front>
<seriesInfo name='STD' value='13'/>
<seriesInfo name='RFC' value='1035'/>
<seriesInfo name='DOI' value='10.17487/RFC1035'/>
</reference>



<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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="RFC6234" target='https://www.rfc-editor.org/info/rfc6234'>
<front>
<title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
<author initials='D.' surname='Eastlake 3rd' fullname='D. Eastlake 3rd'><organization /></author>
<author initials='T.' surname='Hansen' fullname='T. Hansen'><organization /></author>
<date year='2011' month='May' />
<abstract><t>Federal Information Processing Standard, FIPS</t></abstract>
</front>
<seriesInfo name='RFC' value='6234'/>
<seriesInfo name='DOI' value='10.17487/RFC6234'/>
</reference>



<reference  anchor="RFC8446" target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2018' month='August' />
<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="RFC6066" target='https://www.rfc-editor.org/info/rfc6066'>
<front>
<title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
<author initials='D.' surname='Eastlake 3rd' fullname='D. Eastlake 3rd'><organization /></author>
<date year='2011' month='January' />
<abstract><t>This document provides specifications for existing TLS extensions.  It is a companion document for RFC 5246, &quot;The Transport Layer Security (TLS) Protocol Version 1.2&quot;.  The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6066'/>
<seriesInfo name='DOI' value='10.17487/RFC6066'/>
</reference>



<reference  anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>



<reference  anchor="RFC4408" target='https://www.rfc-editor.org/info/rfc4408'>
<front>
<title>Sender Policy Framework (SPF) for Authorizing Use of Domains in E-Mail, Version 1</title>
<author initials='M.' surname='Wong' fullname='M. Wong'><organization /></author>
<author initials='W.' surname='Schlitt' fullname='W. Schlitt'><organization /></author>
<date year='2006' month='April' />
<abstract><t>E-mail on the Internet can be forged in a number of ways.  In particular, existing protocols place no restriction on what a sending host can use as the reverse-path of a message or the domain given on the SMTP HELO/EHLO commands.  This document describes version 1 of the ender Policy Framework (SPF) protocol, whereby a domain may explicitly authorize the hosts that are allowed to use its domain name, and a receiving host may check such authorization.  This memo defines an Experimental Protocol for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='4408'/>
<seriesInfo name='DOI' value='10.17487/RFC4408'/>
</reference>



<reference  anchor="RFC7540" target='https://www.rfc-editor.org/info/rfc7540'>
<front>
<title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
<author initials='M.' surname='Belshe' fullname='M. Belshe'><organization /></author>
<author initials='R.' surname='Peon' fullname='R. Peon'><organization /></author>
<author initials='M.' surname='Thomson' fullname='M. Thomson' role='editor'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t><t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t></abstract>
</front>
<seriesInfo name='RFC' value='7540'/>
<seriesInfo name='DOI' value='10.17487/RFC7540'/>
</reference>



<reference anchor="I-D.ietf-dnsop-attrleaf">
<front>
<title>DNS Scoped Data Through "Underscore" Naming of Attribute Leaves</title>

<author initials='D' surname='Crocker' fullname='Dave Crocker'>
    <organization />
</author>

<date month='August' day='21' year='2018' />

<abstract><t>Formally, any DNS resource record may occur under any domain name. However some services have defined an operational convention, which applies to DNS leaf nodes that are under a DNS branch having one or more reserved node names, each beginning with an _underscore.  The underscored naming construct defines a semantic scope for DNS record types that are associated with the parent domain, above the underscored branch.  This specification explores the nature of this DNS usage and defines the "DNS Global Underscore Scoped Entry Registry" with IANA.  The purpose of the Underscore registry is to avoid collisions resulting from the use of the same underscore-based name, for different services.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-dnsop-attrleaf-13' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-dnsop-attrleaf-13.txt' />
</reference>



<reference anchor="I-D.ietf-tls-exported-authenticator">
<front>
<title>Exported Authenticators in TLS</title>

<author initials='N' surname='Sullivan' fullname='Nick Sullivan'>
    <organization />
</author>

<date month='June' day='5' year='2018' />

<abstract><t>This document describes a mechanism in Transport Layer Security (TLS) to provide an exportable proof of ownership of a certificate that can be transmitted out of band and verified by the other party.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-exported-authenticator-07' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-exported-authenticator-07.txt' />
</reference>




    </references>

    <references title='Informative References'>





<reference anchor="I-D.ietf-doh-dns-over-https">
<front>
<title>DNS Queries over HTTPS (DoH)</title>

<author initials='P' surname='Hoffman' fullname='Paul Hoffman'>
    <organization />
</author>

<author initials='P' surname='McManus' fullname='Patrick McManus'>
    <organization />
</author>

<date month='August' day='16' year='2018' />

<abstract><t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS.  Each DNS query-response pair is mapped into an HTTP exchange.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-doh-dns-over-https-14' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-doh-dns-over-https-14.txt' />
</reference>



<reference  anchor="RFC7858" target='https://www.rfc-editor.org/info/rfc7858'>
<front>
<title>Specification for DNS over Transport Layer Security (TLS)</title>
<author initials='Z.' surname='Hu' fullname='Z. Hu'><organization /></author>
<author initials='L.' surname='Zhu' fullname='L. Zhu'><organization /></author>
<author initials='J.' surname='Heidemann' fullname='J. Heidemann'><organization /></author>
<author initials='A.' surname='Mankin' fullname='A. Mankin'><organization /></author>
<author initials='D.' surname='Wessels' fullname='D. Wessels'><organization /></author>
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'><organization /></author>
<date year='2016' month='May' />
<abstract><t>This document describes the use of Transport Layer Security (TLS) to provide privacy for DNS.  Encryption provided by TLS eliminates opportunities for eavesdropping and on-path tampering with DNS queries in the network, such as discussed in RFC 7626.  In addition, this document specifies two usage profiles for DNS over TLS and provides advice on performance considerations to minimize overhead from using TCP and TLS with DNS.</t><t>This document focuses on securing stub-to-recursive traffic, as per the charter of the DPRIVE Working Group.  It does not prevent future applications of the protocol to recursive-to-authoritative traffic.</t></abstract>
</front>
<seriesInfo name='RFC' value='7858'/>
<seriesInfo name='DOI' value='10.17487/RFC7858'/>
</reference>



<reference  anchor="RFC8094" target='https://www.rfc-editor.org/info/rfc8094'>
<front>
<title>DNS over Datagram Transport Layer Security (DTLS)</title>
<author initials='T.' surname='Reddy' fullname='T. Reddy'><organization /></author>
<author initials='D.' surname='Wing' fullname='D. Wing'><organization /></author>
<author initials='P.' surname='Patil' fullname='P. Patil'><organization /></author>
<date year='2017' month='February' />
<abstract><t>DNS queries and responses are visible to network elements on the path between the DNS client and its server.  These queries and responses can contain privacy-sensitive information, which is valuable to protect.</t><t>This document proposes the use of Datagram Transport Layer Security (DTLS) for DNS, to protect against passive listeners and certain active attacks.  As latency is critical for DNS, this proposal also discusses mechanisms to reduce DTLS round trips and reduce the DTLS handshake size.  The proposed mechanism runs over port 853.</t></abstract>
</front>
<seriesInfo name='RFC' value='8094'/>
<seriesInfo name='DOI' value='10.17487/RFC8094'/>
</reference>



<reference anchor="I-D.ietf-tls-sni-encryption">
<front>
<title>Issues and Requirements for SNI Encryption in TLS</title>

<author initials='C' surname='Huitema' fullname='Christian Huitema'>
    <organization />
</author>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<date month='May' day='20' year='2018' />

<abstract><t>This draft describes the general problem of encryption of the Server Name Identification (SNI) parameter.  The proposed solutions hide a Hidden Service behind a Fronting Service, only disclosing the SNI of the Fronting Service to external observers.  The draft lists known attacks against SNI encryption, discusses the current "co-tenancy fronting" solution, and presents requirements for future TLS layer solutions.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-sni-encryption-03' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-sni-encryption-03.txt' />
</reference>



<reference anchor="I-D.kazuho-protected-sni">
<front>
<title>TLS Extensions for Protecting SNI</title>

<author initials='K' surname='Oku' fullname='Kazuho Oku'>
    <organization />
</author>

<date month='July' day='18' year='2017' />

<abstract><t>This memo introduces TLS extensions and a DNS Resource Record Type that can be used to protect attackers from obtaining the value of the Server Name Indication extension being transmitted over a Transport Layer Security (TLS) version 1.3 handshake.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-kazuho-protected-sni-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-kazuho-protected-sni-00.txt' />
</reference>




    </references>


<section anchor="communicating-sni" title="Communicating SNI and Nonce to Backend Server">

<t>When operating in Split mode, backend servers will not have access
to PaddedServerNameList.sni or ClientESNIInner.nonce without
access to the ESNI keys or a way to decrypt ClientEncryptedSNI.encrypted_sni.</t>

<t>One way to address this for a single connection, at the cost of having
communication not be unmodified TLS 1.3, is as follows.
Assume there is a shared (symmetric) key between the
client-facing server and the backend server and use it to AEAD-encrypt Z
and send the encrypted blob at the beginning of the connection before
the ClientHello. The backend server can then decrypt ESNI to recover
the true SNI and nonce.</t>

<t>Another way for backend servers to access the true SNI and nonce is by the
client-facing server sharing the ESNI keys.</t>

</section>
<section anchor="alternative-sni-protection-designs" title="Alternative SNI Protection Designs">

<t>Alternative approaches to encrypted SNI may be implemented at the TLS or
application layer. In this section we describe several alternatives and discuss
drawbacks in comparison to the design in this document.</t>

<section anchor="tls-layer" title="TLS-layer">

<section anchor="tls-in-early-data" title="TLS in Early Data">

<t>In this variant, TLS Client Hellos are tunneled within early data payloads
belonging to outer TLS connections established with the client-facing server. This
requires clients to have established a previous session -— and obtained PSKs —- with
the server. The client-facing server decrypts early data payloads to uncover Client Hellos
destined for the backend server, and forwards them onwards as necessary. Afterwards, all
records to and from backend servers are forwarded by the client-facing server – unmodified.
This avoids double encryption of TLS records.</t>

<t>Problems with this approach are: (1) servers may not always be able to
distinguish inner Client Hellos from legitimate application data, (2) nested 0-RTT
data may not function correctly, (3) 0-RTT data may not be supported –
especially under DoS – leading to availability concerns, and (4) clients must bootstrap
tunnels (sessions), costing an additional round trip and potentially revealing the SNI
during the initial connection. In contrast, encrypted SNI protects the SNI in a distinct
Client Hello extension and neither abuses early data nor requires a bootstrapping connection.</t>

</section>
<section anchor="combined-tickets" title="Combined Tickets">

<t>In this variant, client-facing and backend servers coordinate to produce “combined tickets”
that are consumable by both. Clients offer combined tickets to client-facing servers.
The latter parse them to determine the correct backend server to which the Client Hello
should be forwarded. This approach is problematic due to non-trivial coordination between
client-facing and backend servers for ticket construction and consumption. Moreover,
it requires a bootstrapping step similar to that of the previous variant. In contrast,
encrypted SNI requires no such coordination.</t>

</section>
</section>
<section anchor="application-layer" title="Application-layer">

<section anchor="http2-certificate-frames" title="HTTP/2 CERTIFICATE Frames">

<t>In this variant, clients request secondary certificates with CERTIFICATE_REQUEST HTTP/2
frames after TLS connection completion. In response, servers supply certificates via TLS
exported authenticators <xref target="I-D.ietf-tls-exported-authenticator"/> in CERTIFICATE frames.
Clients use a generic SNI for the underlying client-facing server TLS connection.
Problems with this approach include: (1) one additional round trip before peer
authentication, (2) non-trivial application-layer dependencies and interaction,
and (3) obtaining the generic SNI to bootstrap the connection. In contrast, encrypted
SNI induces no additional round trip and operates below the application layer.</t>

</section>
</section>
</section>
<section anchor="total-client-hello-encryption" title="Total Client Hello Encryption">

<t>The design described here only provides encryption for the SNI, but
not for other extensions, such as ALPN. Another potential design
would be to encrypt all of the extensions using the same basic
structure as we use here for ESNI. That design has the following
advantages:</t>

<t><list style="symbols">
  <t>It protects all the extensions from ordinary eavesdroppers</t>
  <t>If the encrypted block has its own KeyShare, it does not
necessarily require the client to use a single KeyShare,
because the client’s share is bound to the SNI by the
AEAD (analysis needed).</t>
</list></t>

<t>It also has the following disadvantages:</t>

<t><list style="symbols">
  <t>The client-facing server can still see the other extensions. By
contrast we could introduce another EncryptedExtensions
block that was encrypted to the backend server and not
the client-facing server.</t>
  <t>It requires a mechanism for the client-facing server to provide the
extension-encryption key to the backend server (as in <xref target="communicating-sni"/>
and thus cannot be used with an unmodified backend server.</t>
  <t>A conformant middlebox will strip every extension, which might
result in a ClientHello which is just unacceptable to the server
(more analysis needed).</t>
</list></t>

</section>
<section anchor="acknowledgments" title="Acknowledgments">

<t>This document draws extensively from ideas in <xref target="I-D.kazuho-protected-sni"/>, but
is a much more limited mechanism because it depends on the DNS for the
protection of the ESNI key. Richard Barnes, Christian Huitema, Patrick McManus,
Matthew Prince, Nick Sullivan, Martin Thomson, and Chris Wood also provided
important ideas.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIANU2oVsAA7V963bbRrbm/3qKGvlHS90kYzmOO1FyuluR5Fgnvo0ln5xO
JuMDkkURxyDAxkUy4/aseYh5wnmS2d/euy4ASdtZM6OVFUskUKja9zvG47Fp
87ZwJ/ainNWbdevm9srVt662z7OVs5flPJ9lbV6VdlHV9vrplT2efGmy6bR2
tyf+b3v1/NIvQJeaeTUr6e4TO6+zRTvOXbsYt0Uzdk2Zj+8fG1rR3VT15sS6
d2tj8nV9Ytu6a9oH9+9/c/+ByWqXndgfXOnqrDB3Vf32pq66NV1UNOat29An
8xPaW+vq0rXjczzFmKbNyvmbrKhKevLGNWadn9hf2mo2sk1Vt7VbNPTbZoVf
fjUm69plVZ8YOzZWfvKyIThM7CvXzKq6yPzncpaLOp9tfVXVN1mZ/8YQOrGv
rh8/G9G+ZhP/vVtleUHHfFv/rW4Xq8msWpnhE3+c2Bdvu/7Dfsx+65ZV+nn/
SY+zpi02g6e85Zuqt93fbvDBzoc9n9irrijy26zsP/F5Pnu79VX/oWdF1c0X
BWFn8OCS7v3bLHy788FnE3s6sT9V1bz/3LNlnTdttV4SyQ0u6D/9dL0u3E7o
zrI7uutvGS6QZ5uyqld0360j/NpXj8+O73/5lf764Pj4G/310YMvH54Q/ZWL
eDn9jMdjm02bts5mRFbXy7yxRNHdypWtnbtFXrrGZrbJV/Q8u3KzJe2yWTGD
OGWC8sa2S2c+zUoTedwqn88LZ8w9UHVdzbsZM5I5v7w6e3p6+eziFTEbNkL/
0Yob67K62NAuwBzjvByv6+qmdg3t1DX5TWmJFewya2xZtWbjWts4V1p8ky9o
F3SQQ9oDsVmBVcrNEV0w6+q8xV9ZsWnyZmIv6bZl1RVzXmXqbNeQeMhw+GlG
V/A5pl1ezHHeddg2MVnTulVDZzstiMm6m2WQFO/f/xcC/NcPHz768MFDq7Gr
qmlttWCYETTnzTJ7S7jOy1nRzRWYtEMG5szVLR+ipSvo89pZojn69hbSwlb4
yAAnpSsauiBrLZ2yuqOD2YoAlbVLm7VtNntLi7UVAYzEyIqQyg+ZV0RTJdMm
72ZW5EA7HbatN7yTys4qWnvW0q/JFoly/kgcQnhp3bvW6n3nz6/sPzpX546g
8Uf7b3mTT4twlMuXNpvPgTZHoilrmm7lD5scOGcs0s7oO6Jb2eGYMEDIuM3r
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
WX5dc/rSHdId+YprORFuB2Ag/f8P8kTw/Wd8AAA=

-->

</rfc>

