<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-thomson-tls-ech-pnmasq-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="Public Name Masquerade">Public Name Masquerade for TLS Encrypted Client Hello</title>
    <seriesInfo name="Internet-Draft" value="draft-thomson-tls-ech-pnmasq-00"/>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <author fullname="Marwan Fayed">
      <organization>Cloudflare</organization>
      <address>
        <email>marwan@cloudflare.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="03"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 41?>

<t>An alternative method
for authenticating Encrypted Client Hello (ECH)
retry configurations is described.
This method enables the use of multiple
public names for the same server anonymity set.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://martinthomson.github.io/ech-pnmasq/draft-thomson-tls-ech-pnmasq.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-thomson-tls-ech-pnmasq/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Transport Layer Security Working Group mailing list (<eref target="mailto:tls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/martinthomson/ech-pnmasq"/>.</t>
    </note>
  </front>
  <middle>
    <?line 50?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The TLS Encrypted Client Hello (ECH) <xref target="ECH"/>
defines a 'retry' fallback mechanism that is used when a client
attempts to use an outdated or incorrect configuration. The retry
requires that the server can authenticate its identity to the
client. This recovery is an essential feature of ECH, but it can
contribute to a reduction in the size of the anonymity set of
server identities.</t>
      <section anchor="privacy-in-ech">
        <name>Privacy in ECH</name>
        <t>In a TLS Encrypted Client Hello (ECH) <xref target="ECH"/>,
the level of privacy is dependent on its deployment. Privacy in
ECH is proportional to the number of possible names that could be
encrypted in the <tt>ClientHelloInner</tt> relative to the name(s) in
the <tt>ClientHelloOuter</tt>. This means that privacy is defined by the
'herd' of names, not of users, which contrasts with
longer-standing schemes for secure or private communication such
as VPNs, Tor, and oblivious proxies, to name a few.</t>
        <t>Privacy in ECH is conferred by either or both of the
<tt>ClientHelloInner</tt> and the <tt>ClientHelloOuter</tt>. For example, 100
names that share the same ECH configuration establish an
anonymity set of 100, irrespective of the number of users, i.e.,
an observer's ability to know the contents of the
ClientHelloInner is neither advantaged nor disadvantaged by the
number of users connecting to the ClientHelloOuter. However, this
setup is dependent on the operator, and confers no additional
privacy to one-server one-name deployments.</t>
        <t>Alternatively, an ECH deployment may vary the number of names in
the <tt>ClientHelloOuter</tt>. If the set size is finite consisting of
public names, then every query for the HTTPS RR may be populated
with any of the names selected at random. In this setup an
adversary must engage in a "Coupon Collector" exercise to identify
all names in the set. Names could also be randomized, which would
force every server to decrypt all connections, including for
names it knows it does not own.</t>
        <t>A natural way to improve privacy maximizes the 'herd' quality by
creating an anonymity set consisting of all names from all
servers---effectively rendering every connection
indistinguishable to an adversary from every other connection.
This would mean sharing a single consistent ECH configuration
(<xref section="4" sectionFormat="of" target="ECH"/>)
across all clients or, alternatively, across all providers and
servers.</t>
        <t>However, a consistent configuration negates any single server's
ability to authenticate itself on the SNI in the
ClientHelloOuter. Authentication against a public name is needed
so the server can safely invoke a retry mechanism, for example,
when a client attempts to use outdated or incorrect
configuration. This recovery is an essential feature of ECH that
also ensures a server attempts to decrypt only those ECH
connections it expects, for example, so that a server for
example.com does not attempt to decrypt ECH connections for
not-example.com.</t>
        <t>The need to authenticate a public name also limits the size of
the anonymity set to the number of names available at the server,
thereby upper-bounding ECH privacy to its server's deployment.</t>
      </section>
      <section anchor="unique-public-names">
        <name>Unique Public Names</name>
        <t>This document describes an approach that seeks
to improve privacy by increasing the number of public names.
Rather than having as few public names as possible,
it increases the size of the anonymity set
for public names
by using as many public names as possible.</t>
        <t>In the ideal form of this approach,
a unique public name is used for each client.
In practice,
caching of HTTPS records <xref target="RFC9460"/>
will ensure that the same public name
is likely to be used by some number of clients.
A client cannot be sure that a configuration
is not available to others,
unless it is provided directly
through a mechanism like a ECH Retry,
as defined in <xref section="6.1.6" sectionFormat="of" target="ECH"/>.</t>
        <t>Any reuse of a name will cluster clients
into relatively small anonymity sets.
Any clustering will be based on attributes
that already leak to a passive observer.
This includes
the time,
the network that a client uses,
or the choice of DNS resolver.</t>
        <t>The net effect is that the public name
is either unique (used for a single connection)
or forms a small anonymity set (used for a small number of connections).
Assembling observed connection attempts
into groups that represent the true anonymity set
requires that an adversary obtain mappings for all of the public names
that correspond to the same hidden names.
If public name is a sufficient-strong encryption
of the hidden name,
an adversary either needs to receive that mapping
or they are only able to use inference
(such as website fingerprinting).</t>
        <t>An increased diversity of public names
leads to a much larger effective anonymity set.
An adversary that is ignorant of mappings
for each public name
effectively observes a single anonymity set
that corresponds to every name that it does not know.
Both the public name and other ECH configuration values,
such as HPKE <xref target="RFC9180"/> parameters,
are obscured.</t>
        <t>The use of multiple public names
can undermine the effectiveness of ECH
if poorly implemented;
<xref target="deployment"/> includes a discussion of these considerations.
This approach also cannot hide the use of IP addresses
that correspond to a set of hidden names.</t>
      </section>
      <section anchor="limitations">
        <name>Limitations</name>
        <t>Though diversity in public names
could create a larger anonymity set for hidden names,
that could be partitioned
by information that leaks as part of connection establishment and use.
In particular, server IP addresses are not hidden
and can be used to distinguish services.
Website fingerprinting <xref target="WFP"/>
might also be used to recover the identity of hidden sites.</t>
        <t>This protection is limited
to those public names for which an adversary
is unable to recover the mapping to the corresponding hidden names.
As mappings could be retained in shared caches
at DNS resolvers,
this creates a significant risk;
see <xref target="unique-mapping"/> for details.</t>
        <t>The use of multiple public names
can undermine the effectiveness of ECH
if incautiously implemented.
<xref target="deployment"/> includes a discussion of these considerations.</t>
      </section>
      <section anchor="alternative-authentication-for-public-names">
        <name>Alternative Authentication for Public Names</name>
        <t>This document defines a new method
for validating the certificate that a server proffers
during an ECH retry.
This enables a retry process that does not
depend on the public key infrastructure
that is used for server authentication,
making it far easier to create new public names.</t>
        <t>These names can even overlap with
parts of the domain name system.
The client determines
whether a server is authorized to provide
an ECH retry configuration
based on the choice of name alone.
This removes any need to rely on anything other than
the public key that is bound to the name.
This obviates any need for revocation checks,</t>
        <t>This change to public name authentication
is the only aspect of this document that requires
client changes.
This document describes a server architecture
that helps demonstrate the feasibility of this approach,
including an analysis of drawbacks; see <xref target="authn"/>.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

</section>
    <section anchor="authn">
      <name>Alternative Retry Authentication</name>
      <t>ECH defines a retry process
for when the ECH configuration that a client uses
is rejected by a server.
The server completes the handshake
using the outer (or unprotected) ClientHello.</t>
      <t>By default, the server offers a certificate
that is valid for the outer "server_name" that is used.
The client then authenticates the handshake
using that certificate
and the process by which a client would ordinarily
validate a server identity.</t>
      <t>That ordinary process relies on
the client having previously established
which name it wishes to authenticate.
The name that is used during an ECH retry
comes from the ECH configuration.
The ECH configuration is typically obtained
from the SVCB record <xref target="SVCB"/>,
which ECH treats as unauthenticated;
see <xref section="10.2" sectionFormat="of" target="ECH"/>.</t>
      <t>The client therefore relies on the ECH configuration
to choose the public name that it authenticates.
This opens the possibility that the ECH configuration
can also specify alternative means of authentication.</t>
      <t>The public name therefore does not need to be valid
according to ordinary client expectations.
The public name exists solely to carry information to the server
about the anonymity set
into which the connection attempt falls.
The public name value could even be encrypted;
see <xref target="deployment"/>.</t>
      <t>This document defines an ECH configuration extension,
"public_name_authn",
that specifies an alternative name
and the means by which that alternative name is authenticated.</t>
    </section>
    <section anchor="extension">
      <name>ECH Public Name Masquerade Extension</name>
      <t>An extension is defined for ECH
that includes a randomized name
and information necessary to authenticate
the TLS handshake that
supplies an ECH retry configuration.</t>
      <figure anchor="fig-pn-auth">
        <name>public_name_authn Extension Structure</name>
        <sourcecode type="tls-syntax"><![CDATA[
struct {
  SignatureScheme scheme;
  opaque spki_hash[32];
} PublicNameAuthentication;
]]></sourcecode>
      </figure>
      <t>This extension is defined as mandatory,
because a server that uses this approach
relies on clients applying
the alternative authentication method
to validate the public name.</t>
      <t>Clients <bcp14>MUST NOT</bcp14> use an ECH configuration
with this extension
unless the connection they establish
includes the indicated signature scheme
in a "signature_algorithms" extension.</t>
      <t>An ECH configuration with this extension
refers to a public name
that the operator of the client-facing server
might not have a valid certificate for;
see <xref target="name-selection"/>.
Clients that use an ECH configuration with this extension
<bcp14>MUST</bcp14> follow the process for authenticating an ECH retry
described in <xref target="retry-authn"/>.</t>
      <aside>
        <t>This might be marginally more compatible
if the extension were optional.
In that case, the extension would have to
include the bogus public name as well,
which would be less efficient in the longer term.</t>
        <t>In the short term, this approach is less efficient
as it forces a server that wishes
to support clients that do not support this extension
to provide additional configurations.</t>
      </aside>
    </section>
    <section anchor="retry-authn">
      <name>Retry Configuration Authentication</name>
      <t>A server that rejects an ECH configuration
can use a certificate or raw public key <xref target="RAW"/>.
Clients extract the <tt>subjectPublicKeyInfo</tt>,
either from the certificate or,
for raw public keys,
the Certificate message content.</t>
      <t>The resulting <tt>subjectPublicKeyInfo</tt> structure
is hashed using SHA-256
and compared to the <tt>spki_hash</tt> value from the
"public_name_authn" extension in the ECH configuration.
If the value matches,
the retry configuration is accepted.
Otherwise, the connection attempt <bcp14>MUST</bcp14> be aborted
and any retry configuration that is provided
is discarded.</t>
      <t>This procedure largely replaces the procedure
in <xref section="6.1.7" sectionFormat="of" target="ECH"/>.
This does not change the requirement that
the client not
provide a certificate if requested
or regard the connection as authenticated for the origin.</t>
    </section>
    <section anchor="deployment">
      <name>Deployment</name>
      <t>Client-facing server deployments
can use dynamically-generated public names
using techniques similar to those
described in this section.</t>
      <t>The use of these techniques
requires careful consideration of the privacy risks.
Two basic outcomes are worth considering:</t>
      <ul spacing="normal">
        <li>
          <t>ECH configurations
that are never seen by an adversary.
If this is achievable,
unique public names can be provided to clients,
which greatly improves privacy.
The net effect can be that
only the server IP address leaks information to observers
about the extent of the anonymity set.</t>
        </li>
        <li>
          <t>ECH configurations are seen by adversaries.
This is a more likely situation,
because the use of DNS for distribution
means that any given ECH configuration
is likely to be served to many clients.</t>
        </li>
      </ul>
      <t><xref target="unique-mapping"/> discusses how
the choice of public name is important
for maintaining the privacy of hidden names
in the second case.
<xref target="sample"/> discusses options
for constructing public names
to minimize the potential risks
that come from adversary access to the ECH configuration.</t>
      <t>This section addresses other deployment considerations.</t>
      <section anchor="name-selection">
        <name>Public Name Selection</name>
        <t>The public name used in the ECH configuration
does not need to be valid according to any grammar.
Any sequence of octets
up to the limit for public names (255 bytes)
is possible.</t>
        <t>Names that appear to be domain names
are most likely to be widely compatible.
That is, names formed from a sequence LDH labels,
as defined in <xref section="2.3.1" sectionFormat="of" target="IDNA"/>,
each joined with periods ('.').</t>
      </section>
      <section anchor="unique-mapping">
        <name>One-to-One Name Mappings</name>
        <t>A simple method for generating public names
is to generate a fresh name
for every ECH configuration.
If every public name is different,
then each public name also corresponds
to a single hidden name.</t>
        <t>Use of such a public name
reveals the hidden name
to any entity that knows of the relation.
Using a unique public name for every hidden name
is therely only possible
if the ECH configuration can be kept secret.</t>
        <t>Unique names are incompatible with distribution using DNS,
which involves shared caches at recursive resolvers.
An adversary that is able to obtain
the ECH configuration from a shared DNS cache
would be able to learn the hidden name
that corresponds to the included public name.</t>
        <t>It is therefore important that any given public name
be plausibly associated with multiple hidden names.
This can be achieved by increasing
the size of the anonymity set,
together with the inclusion of information that
diversifies the public name.</t>
      </section>
    </section>
    <section anchor="sample">
      <name>Candidate Processes for Name Selection</name>
      <t>A deployment can generate a secret
and distribute that secret
to all client-facing servers
and all authoritative name servers.
A corresponding short key identifier
might be generated using a counter.</t>
      <t>The secret can be split into two parts for use:</t>
      <ul spacing="normal">
        <li>
          <t>A key for enciphering public names.
<xref target="sample-pn-enc"/> describes a sample process.</t>
        </li>
        <li>
          <t>A secret for generating authentication keys.
<xref target="sample-authn-key"/> addresses this process.</t>
        </li>
      </ul>
      <t>These secrets need to be distributed
to all authoritative DNS resolvers for hidden names
and all client-facing servers.
There also needs to be a consistent view
across these servers
of how hidden names correspond to ECH profiles
(a concept that this document defines in <xref target="profiles"/>).</t>
      <section anchor="key-lifetime">
        <name>Key Lifetime</name>
        <t>If public names are -- in effect -- encrypted,
the lifetime of any keys that are used needs
to exceed the lifetime of ECH keys.
Otherwise, servers will be unable to recover
when clients use old ECH configurations.</t>
        <t>The keys used to protect public names only exist
to protect the extent of the anonymity set.
These keys can be rotated less often
than the keys that are used to protect hidden names.</t>
        <t>Because these keys are only used if a retry is necessary,
it might be possible to ensure that they are only valid
during a periodic transition of ECH keys.
This depends on being able to propagate ECH configurations
to all clients
between the time that these keys are emplaced
and when the ECH keys are changed out.</t>
      </section>
      <section anchor="profiles">
        <name>ECH Profiles</name>
        <t>These procedures assume that a client-facing server
maintains multiple active ECH profiles.</t>
        <t>ECH profile includes
a config identifier,
an HPKE KEM identifier,
a HPKE key pair,
a set of HPKE symmetric cipher suites,
any other extensions,
and (optionally) a public name for use with clients
that do not support this extension.</t>
        <t>Each profile can be allocated an identifier.
This identifier needs to be unique
within the set of profiles that might be concurrently active.</t>
        <t>A client-facing server can limit the number of such profiles
it supports at the one time.
An identifier that is unique
over a larger scope or longer span of time
is inadvisable as that makes it more difficult
to avoid creating unique name mappings (see <xref target="unique-mapping"/>).</t>
        <t>For a single ECH configuration,
each hidden name needs to be mapped to a single profile.
This ensures that a client-facing server
is able to successfully answer connection attempts
by decrypting the inner ClientHello
or presenting a retry configuration with acceptable authentication.</t>
        <t>A hidden name might also be associated
with different profiles
and ECH configurations
according to deployment needs.
In particular,
hidden names might be mapped to different profiles,
as key pairs are rotated
or changes are made to account for different deployment strategies.</t>
        <t>With an unmodified ECH deployment,
a client-facing server uses the combination of
the <tt>config_id</tt> from the outer "encrypted_client_hello" extension
and the public name from the "server_name" extension
to recover a profile.</t>
        <t>In this design,
a client-facing server uses the same information,
except that the true profile identifier is encrypted
and encoded into these two fields.</t>
      </section>
      <section anchor="sample-pn-enc">
        <name>Sample Public Name Generation Method</name>
        <t>Public names might be generated by
enciphering the profile identifier.
The encipher values is then encoded into a public name
and, optionally, the configuration identifier field.</t>
        <t>If this were to only contain the profile identifier,
each profile identifier might produce just one public name.
To diversify the set of public names,
additional information is encoded in each name.</t>
        <t>The amount of entropy included for diversification is limited
so that there is a significant chance that
different hidden names produce the same public name.
This is achieved by hashing the inputs used for diversifying names
and taking a limited number of bits from the output.</t>
        <t>Suggested inputs that can be used for diversification
include:</t>
        <ul spacing="normal">
          <li>
            <t>The IP address of the DNS client,
or the DNS Client Subnet option,
if present.</t>
          </li>
          <li>
            <t>The current time,
rounded to the expected DNS record TTL
or a small integer fraction of that time.
For instance, with a TTL of 30 seconds
the time might be rounded to multiples of 5 seconds.</t>
          </li>
          <li>
            <t>A small amount of randomness.</t>
          </li>
        </ul>
        <t>In the following pseudocode
'<tt>^</tt>' is an exclusive OR,
'<tt>||</tt>' is concatenation,
and '<tt>[a..b]</tt>' takes a range of bits
from bit '<tt>a</tt>' (inclusive, default 0) to bit '<tt>b</tt>' (exclusive).
This code also uses functions for randomness ('<tt>random()</tt>'),
a collision-resistant hash ('<tt>H()</tt>'),
a pseudorandom function ('<tt>prf()</tt>'),
and encoding a byte sequence as a DNS name ('<tt>encode_dns()</tt>').</t>
        <sourcecode type="pseudocode"><![CDATA[
k1 = prf(secret, "k1" || key_id)
r = random()[..RANDOM_BITS]
diversity = H(client_ip || time || r)[..DIVERSITY_BITS]
k2 = prf(secret, "k2" || diversity)

d = key_id || k1 ^ (diversity || k2 ^ profile_id)

config_id = d[0..8]
public_name = encode_dns(d[8..])
]]></sourcecode>
        <aside>
          <t>Note that the PRF function only needs
to produce enough bits
to mask the value it obscures using XOR.
Any additional bits can be discarded.</t>
        </aside>
        <aside>
          <t>ISSUE:
This approach reveals to an observer that two
values share a <tt>diversity</tt> value.</t>
          <t>Something like format-preserving encryption
might be necessary.
For instance,
a Feistel network might ensure that the entire value
depends on all inputs,
including the profile identifier.</t>
          <t>The challenge being that
the two layers of protection here,
to protect the profile identifier
and the diversity value,
would each require an application of the network.</t>
        </aside>
        <section anchor="authenticated-encryption">
          <name>Authenticated Encryption</name>
          <t>The use of authenticated encryption <xref target="AEAD"/>
is not necessary to achieve privacy goals.
Authentication identifies any name
that is generated without access to the key.</t>
          <t>Avoiding authentication ensures that an adversary
is unable to use side channels
to determine whether any given public name is valid
as all public names receive the same treatment.</t>
          <t>Authenticated encryption could be used
if a deployment is concerned about
the cost of responding to connection attempts.
This approach could lead to
a significant amount of additional load
on servers due to the need to generate authentication keys
and certificates for every unique public name.</t>
          <t>Using authenticated encryption only
increases the length of public names;
it does not increase the diversity of names.
Authentication of names therefore
does not affect the potential privacy of public names.</t>
        </section>
        <section anchor="parameter-selection">
          <name>Parameter Selection</name>
          <t>An adversary that is able to make a request
at about the same time
and from the same client IP or subnet
will learn the mapping from hidden name to public name.
Including more randomness
will reduce the odds that the same public name
is used for a different hidden name.</t>
          <t>The optimal number of random bits that are added
(<tt>RANDOM_BITS</tt>)
depends on the number of hidden names that
correspond to the same profile identifier,
that is, the size of the anonymity set.
Larger anonymity sets allow for more diversity in names
as there are more public names generated
and a higher chance of collision.</t>
          <t>For <tt>RANDOM_BITS</tt>,
generating less than twice the number of bits
as the base 2 logarithm of the anonymity set size
ensures that a collision across the names in the set
is highly likely.
This value might be set significantly less than this limit
to account for the risk that not all hidden names
will be in active use.</t>
          <t>Combining this information using a hash function,
then taking a limited number of bits
ensures that the number of public names is limited.
This improves the chances that the same public name
is generated for different hidden names.
The number of bits that are retained
(<tt>DIVERSITY_BITS</tt>)
can exceed the number of random bits,
but only based on the expected number of different
ECH configurations that might be concurrently active
for the active names in the anonymity set.</t>
          <t>Setting <tt>DIVERSITY_BITS</tt>
to less than twice the base 2 logarithm
of the total number of ECH configurations
ensures that a collision across the names in the set
is highly likely.</t>
          <t>The total number of ECH configurations can be determined
most reliably using an empirical measure.
DNS resolvers might count the number of queries
that produce different answers
for hidden names with the same profile
within the TTL of the resource record.</t>
          <t>Alternatively, the number of possible active ECH configurations
is the anonymity set size
times an estimate of the number of different resolvers.
The alternative approach likely produces a larger estimate,
so it might be adjusted downward
to improve the odds of collisions.</t>
          <t>In both cases,
a minimum amount random entropy
ensures that even small anonymity set has some diversity.
A minimum of 5 bits ensures that
every hidden name produces public names
from 32 different options.</t>
        </section>
        <section anchor="retry-unique">
          <name>Retry Configuration Generation</name>
          <t>The process described here can be greatly simplified
for ECH configurations that are
generated by a TLS server
and sent in the "retry_configs" field.</t>
          <t>Every ECH configuration that is provided
using "retry_configs"
can be unique.
This can be achieved
by setting <tt>DIVERSITY_BITS</tt> and <tt>RANDOM_BITS</tt>
to values that are large enough to ensure
that the collision risk is negligible.
The only relevant consideration is
the length of the resulting public name.</t>
          <t>If a different scheme is used
for generating public names
based on how the ECH configurations are delivered,
it is necessary to distinguish between the forms.
This could use the unprotected key identifier
or just the length of the name
(using a larger value of <tt>DIVERSITY_BITS</tt>
likely results in a longer name).</t>
        </section>
      </section>
      <section anchor="sample-authn-key">
        <name>Sample Authentication Key Generation Method</name>
        <t>An authentication key might be generated as a function of the public name,
and optionally the config_id,
using a pseudorandom function (PRF) that is keyed with a secret.</t>
        <sourcecode type="pseudocode"><![CDATA[
authn_secret = prf(secret, public_name)
authn_public_key = pk(authn_secret)
]]></sourcecode>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Use of this mechanism inherits
many of the security considerations from <xref section="10" sectionFormat="of" target="ECH"/>.
Depending on how it is deployed,
it can alter the privacy characteristics,
as it obscures the extent of an anonymity set
presented by a client-facing server;
see <xref section="10.1" sectionFormat="of" target="ECH"/>.</t>
      <t>This makes it far more difficult
to get a precise enumeration of the names that correspond
to any given anonymity set.</t>
      <section anchor="recovery-of-anonymity-sets">
        <name>Recovery of Anonymity Sets</name>
        <t>This design only permits linking public names
based on what an adversary can observe about the relation
between each hidden name
and all of the public names that are used for that each hidden name.</t>
        <t>Obviously, the reuse of a public name
reveals that the connection attempts
are accessing the same ECH configuration.
The use of ECH still means that uses of those public names
could correspond to different hidden names.</t>
        <t>To provide a comprehensible view of the true anonymity set,
an adversary would need to obtain all public names
that are in use across all hidden names in the set.
If different names are provided in response to every DNS query
from an authoritative resolver,
an adversary would --
at best --
need to query every DNS resolver cache that queries that authoritative.
Diversifying the choice of name based on client IP
or the Client Subnet option
ensures that an adversary needs to make multiple queries
to obtain all of the mappings.</t>
        <t>This makes it far more difficult
to get a precise enumeration of the names that correspond
to any given anonymity set.</t>
      </section>
      <section anchor="configuration-availability">
        <name>Configuration Availability</name>
        <t>An adversary that is able to obtain
every ECH configuration that is ever produced
can recover the anonymity set perfectly.
This design therefore depends on
adversaries being unable to
access all ECH configurations.</t>
        <t>Clients that use shared DNS caching resolvers
are less able to benefit from these protections.
Caching resolvers can improve privacy protections
by including the Client Subnet option <xref target="RFC7871"/>
in DNS queries.
Authoritative resolvers are then able to
change the public name based on the Client Subnet prefix.
An adversary would then need to
present an IP address with the same prefix as a target
to learn the ECH configuration
that the target was presented with.</t>
        <t>A shorter TTL on resource records
increases the work required by an adversary.</t>
        <t>An authoritative DNS resolver that generates public names
based on the Client Subnet option
makes it easier for an adversary to enumerate
all the available public names
for a given hidden name.
The adversary can easily vary the Client Subnet option
that it includes in queries.
Whether the space is easily enumerable depends on
the minimum of
how many different public names might be generated
and how many Client Subnet values are in use.</t>
      </section>
      <section anchor="unique-mapping-to-hidden-names">
        <name>Unique Mapping To Hidden Names</name>
        <t>The use of a unique public name
could identify the hidden name.
If each hidden name corresponds to a different public name,
an adversary that is able to obtain that mapping
might reverse the mapping to recover the hidden name
from the unprotected "server_name" extension.
This attack is described in <xref target="unique-mapping"/>;
potential mitigations are described in <xref target="sample-pn-enc"/>.</t>
        <t>Providing a unique name mapping
in a retry configuration
carries no such risk;
see <xref target="retry-unique"/>.</t>
      </section>
      <section anchor="client-privacy">
        <name>Client Privacy</name>
        <t>The method in <xref target="unique-mapping"/> recommends
the inclusion of a client IP address
or the identity of its DNS recursive resolver
in the derivation of a public name.
This introduces a potential privacy leak.</t>
        <t>Any entity that can observe the TLS handshake
and is also able to obtain the same ECH configuration
might be able to learn something about the client IP address
or DNS resolver from the public name that is used.
The client-facing server also obtains the same information
with higher certainty.</t>
        <t>This risk is partly counteracted by
the limited number of bits that are retained
when generating public names in <xref target="sample-pn-enc"/>.
That increases the chances that different inputs
result in the same public name,
which might help if the adversary has no prior knowledge
of the client.
However, if an adversary only seeks to improve their confidence
in an existing hypothesis of client identity,
this is unlikely to be sufficient protection.</t>
        <t>A client that uses a tunnel,
such as a VPN or proxy,
for privacy purposes
can avoid leaking unwanted information
by accessing a DNS resolver using the tunnel.
This is also good practice
for the use of this sort of privacy mechanism
for reasons other than privacy,
such as ensuring that services are selected
for proximity to the tunnel egress point
rather than proximity to the client.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document registers an extension
in the TLS "ECH Configuration Extension Registry"
established by <xref target="ECH"/>.</t>
      <dl spacing="compact">
        <dt>Value:</dt>
        <dd>
          <t>0xTBD (value has to be 0x8000 or greater)</t>
        </dd>
        <dt>Extension Name:</dt>
        <dd>
          <t>public_name_authn</t>
        </dd>
        <dt>Recommended:</dt>
        <dd>
          <t>Y</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
        <dt>Notes:</dt>
        <dd>
          <t>(none)</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="ECH">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Independent</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cryptography Consulting LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="19" month="February" year="2025"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-23"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9460">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </reference>
        <reference anchor="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="WFP">
          <front>
            <title>Network-Based Website Fingerprinting</title>
            <author fullname="Ian Goldberg" initials="I." surname="Goldberg">
              <organization>University of Waterloo</organization>
            </author>
            <author fullname="Tao Wang" initials="T." surname="Wang">
              <organization>HK University of Science and Technology</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="8" month="September" year="2020"/>
            <abstract>
              <t>   The IETF is well on its way to protecting connection metadata with
   protocols such as DNS-over-TLS and DNS-over-HTTPS, and work-in-
   progress towards encrypting the TLS SNI.  However, more work is
   needed to protect traffic metadata, especially in the context of web
   traffic.  In this document, we survey Website Fingerprinting attacks,
   which are a class of attacks that use machine learning techniques to
   attack web privacy, and highlight metadata leaks used by said
   attacks.  We also survey proposed mitigations for such leakage and
   discuss their applicability to IETF protocols such as TLS, QUIC, and
   HTTP.  We endeavor to show that Website Fingerprinting attacks are a
   serious problem that affect all Internet users, and we pose open
   problems and directions for future research in this area.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-pearg-website-fingerprinting-01"/>
        </reference>
        <reference anchor="SVCB">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </reference>
        <reference anchor="RAW">
          <front>
            <title>Using Raw Public Keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
            <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig"/>
            <author fullname="J. Gilmore" initials="J." surname="Gilmore"/>
            <author fullname="S. Weiler" initials="S." surname="Weiler"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>This document specifies a new certificate type and two TLS extensions for exchanging raw public keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS). The new certificate type allows raw public keys to be used for authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7250"/>
          <seriesInfo name="DOI" value="10.17487/RFC7250"/>
        </reference>
        <reference anchor="IDNA">
          <front>
            <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5890"/>
          <seriesInfo name="DOI" value="10.17487/RFC5890"/>
        </reference>
        <reference anchor="AEAD">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms. The interface and registry can be used as an application-independent set of cryptoalgorithm suites. This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5116"/>
          <seriesInfo name="DOI" value="10.17487/RFC5116"/>
        </reference>
        <reference anchor="RFC7871">
          <front>
            <title>Client Subnet in DNS Queries</title>
            <author fullname="C. Contavalli" initials="C." surname="Contavalli"/>
            <author fullname="W. van der Gaast" initials="W." surname="van der Gaast"/>
            <author fullname="D. Lawrence" initials="D." surname="Lawrence"/>
            <author fullname="W. Kumari" initials="W." surname="Kumari"/>
            <date month="May" year="2016"/>
            <abstract>
              <t>This document describes an Extension Mechanisms for DNS (EDNS0) option that is in active use to carry information about the network that originated a DNS query and the network for which the subsequent response can be cached. Since it has some known operational and privacy shortcomings, a revision will be worked through the IETF for improvement.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7871"/>
          <seriesInfo name="DOI" value="10.17487/RFC7871"/>
        </reference>
      </references>
    </references>
    <?line 931?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8Vd6XLbWHb+f58CkX9YSolsy72OO90zai+xarzFUk9nqqtj
g8QliREIcABQNEfjeZY8S54s5zvn3A2E7FQlVfnTbZHAXc49y3e2y8lkYvqy
r+yj7OjNdlaV8+xVvrbZy7z769a2eWGzRdNmVy8us6f1vN1veltkj6vS1n32
3FZVc2Ty2ay1N3e+f2TmeW+XTbt/lHV9YUzRzGt65FFWtPmin/SrZt019aSv
uomdryabek3vTh48MN12ti67rmzqfr+h5y+eXj0z9XY9s+0jU9Cgj8y8qTtb
d9vuUda3W2toGV+avLU5LefSzrdt2e+PzK5pr5dts93Qp1dtXnebpu2zF/ne
tll46tru6cHikckmWW0/9NnS1rSDnubHR9u6nDct/7Pb5O11VdbLrCi7vi1n
W1ClssXStubG1ltaWZZ9fsYsk40d/UILxHD/ilfw+TovK/qcaPKH0vaLadMu
8XHezlf08arvN92jL77AU/iovLFT99gX+OCLWdvsOvsFvf8F3luW/Wo7ozfX
eduXtZL8i0BuPFQRRbs+GT56eCpjTMsmeu2LTx3hdNWvqyNj8i1934KsNEmW
LbZVJed/9JInyK7k9SP+mraQ1+XfmOyPspfN38qqyvkbq0RZ93+omh0xYNts
9tPa9kfjQ+/yOntGFC/GBn5cNdtiQdSz8dhrfusPc//ldN6sjambdk3v3dCx
mrJeRH+ZyWSS5TNignzeG3NeZ3nV27bm77O1pZ0XBgIEItCSS5IFHPS4LGXH
Tx8/PzGt7dt9Rqy9KJdbYcAuK7ussN2cmM0WU3O1or9l+MzW+ayyXUYTZNvO
Zs0iW2+rvtxU1mxEJEGUjgUZD3UQ0M62N8SMed3U+zVxI33QT3VD67Io6GVz
L7sAlYvtnIXgit69WxHI4rPb29/T/3+4mDxhlhSe6Ory40dT2EVZ0zry7D5v
8X62yKtqls+vaSvzFZ1Ot6YF5j02Szspsh3RjB6f8zQm73u73vS004Y3Sufb
bHsogoJONytrks/WzvuUdNMM6+YJibJ/3ZYt04pmYVoIGeY0VnRENitpmrLA
n0Qamo++MrIMjEfro4kaenOPtdLLtuvwcF5lC5v325aPgQhxmpFyoNEwA7SV
agsMmdMYSlpau6ym/Bu/iH8nJ0MfGl2qrqq0HR3XvXvZm7a8yed7DEHzmQsQ
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
AAA=

-->

</rfc>
