<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rosomakho-tls-secondary-client-auth-00" category="std" consensus="true" submissionType="IETF" updates="9846, 9001, 9113" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Secondary Client Authentication">Secondary Client Authentication in TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-rosomakho-tls-secondary-client-auth-00"/>
    <author fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <author fullname="Tirumaleswar Reddy">
      <organization>Nokia</organization>
      <address>
        <postal>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <country>India</country>
        </postal>
        <email>k.tirumaleswar_reddy@nokia.com</email>
      </address>
    </author>
    <author fullname="Rifaat Shekh-Yusef">
      <organization>Ciena</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>rifaat.s.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Hannes Tschofenig">
      <organization abbrev="UniBw M.">University of the Bundeswehr Munich</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <date year="2026" month="October" day="15"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <keyword>tls</keyword>
    <keyword>client authentication</keyword>
    <keyword>post-handshake authentication</keyword>
    <abstract>
      <?line 58?>

<t>Some deployments authenticate a client using two certificates, such as
one identifying a device and another identifying its user. This
document defines the <tt>secondary_client_certificate</tt> TLS flag to
negotiate one additional client authentication exchange as part of
connection establishment. The server sends an additional
CertificateRequest immediately after its Finished, and the client
responds after its own handshake Finished and before sending
application data. Either certificate response can be empty, and the
server determines whether the resulting authentication state satisfies
its policy.</t>
      <t>This document updates RFC 9846 to permit the additional request before
the server receives the client's Finished. It also updates RFCs 9001
and 9113 to permit this negotiated exchange with QUIC and HTTP/2.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://yaroslavros.github.io/tls-secondary-client-auth/draft-rosomakho-tls-secondary-client-auth.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-rosomakho-tls-secondary-client-auth/"/>.
      </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/yaroslavros/tls-secondary-client-auth"/>.</t>
    </note>
  </front>
  <middle>
    <?line 75?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>TLS 1.3 <xref target="TLS"/> supports client certificate authentication
during the handshake and post-handshake authentication (PHA). Some
deployments need two client credentials when establishing a connection.
For example, a VPN over TLS can authenticate both a managed device and
the user operating it. The server evaluates the credentials together
when deciding what access to grant.</t>
      <t>This document defines secondary client authentication: a single
additional client authentication exchange negotiated during the TLS
handshake and completed by the client before it sends application
data. The <tt>secondary_client_certificate</tt> flag, carried in the
<tt>tls_flags</tt> extension <xref target="TLS-FLAGS"/>, signals
support in ClientHello and acceptance in the server's handshake
CertificateRequest.</t>
      <t>The server sends the secondary CertificateRequest immediately after
its Finished. The client answers the handshake request, sends its
handshake Finished, and then answers the secondary request using PHA.
The secondary request can be sent in the same server flight, avoiding
an additional round trip to request the second credential.</t>
      <t>The two requests can specify different certificate-selection criteria.
This document assigns no user or device role to either request. Their
roles are determined by the request parameters, deployment policy, or
an application-specific agreement. Nor does negotiation promise that
the client will supply two non-empty certificate chains: acceptance of
the responses remains a server policy decision.</t>
      <t>The exchange is part of establishing the connection's client
authentication context. It is not triggered by an application request,
so the client does not need to correlate it with activity on a
particular application stream. This permits a limited exception to the
PHA restrictions in QUIC and HTTP/2, as specified in <xref target="h2-quic"/>.</t>
    </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?>

<t>The <em>handshake request</em> is the CertificateRequest sent before the
server's Finished. The <em>secondary request</em> is the additional
CertificateRequest sent immediately after that Finished. The
<em>handshake Finished</em> is the client's Finished completing the main TLS
handshake, as distinct from the Finished in its secondary response.</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>A client offers secondary client authentication by including both the
<tt>secondary_client_certificate</tt> flag and the <tt>post_handshake_auth</tt>
extension in its ClientHello. A server accepts by including the flag
in the CertificateRequest message sent during the handshake. Acceptance
commits the server to sending one secondary request and the client to
responding before sending any application data.</t>
      <t><xref target="fig-overview"/> shows an exchange in which both client Certificate
messages contain certificates. Braces indicate handshake traffic key
protection; square brackets indicate application traffic key
protection. A CertificateVerify is omitted if its corresponding client
Certificate is empty. An asterisk marks optional server application
data before client authentication.</t>
      <figure anchor="fig-overview">
        <name>Secondary client authentication</name>
        <artwork><![CDATA[
Client                                             Server

ClientHello
  + post_handshake_auth
  + secondary_client_certificate
                         -------->
                                               ServerHello
                                     {EncryptedExtensions}
                                      {CertificateRequest
                           + secondary_client_certificate}
                                             {Certificate}
                                       {CertificateVerify}
                                                {Finished}
                                      [CertificateRequest]
                                       [Application Data*]
                         <--------
{Certificate}
{CertificateVerify}
{Finished}
[Certificate]
[CertificateVerify]
[Finished]               -------->

[Application Data]       <------->      [Application Data]
]]></artwork>
      </figure>
      <t>The server need not wait for either client response before sending
application data. It decides when to send data and when to authorize
application operations according to its policy. A session ticket is
issued only after the server has accepted the authentication state
resulting from both responses.</t>
    </section>
    <section anchor="negotiation">
      <name>Negotiation</name>
      <t>The <tt>secondary_client_certificate</tt> flag is defined for ClientHello and
for the handshake CertificateRequest only. It <bcp14>MUST NOT</bcp14> appear in a
post-handshake CertificateRequest or in a Certificate message.</t>
      <t>A client offering the flag <bcp14>MUST</bcp14> also include the <tt>post_handshake_auth</tt>
extension defined in <xref section="4.3.6" sectionFormat="of" target="TLS"/>. A server supporting this
specification that receives the flag without that extension <bcp14>MUST</bcp14> abort
the handshake with an <tt>illegal_parameter</tt> alert.</t>
      <t>A server accepting the offer <bcp14>MUST</bcp14> include the flag in the
CertificateRequest message sent during the handshake. A server <bcp14>MUST NOT</bcp14>
include the flag unless the client offered it. A client receiving the
flag without having offered it <bcp14>MUST</bcp14> abort with an <tt>illegal_parameter</tt>
alert. An endpoint receiving the flag in any other message, including
a post-handshake CertificateRequest, <bcp14>MUST</bcp14> abort with an
<tt>illegal_parameter</tt> alert.</t>
      <t>A server that does not accept the offer omits the flag. The client
then follows the otherwise applicable TLS and application-protocol
rules. If local policy requires secondary client authentication for a
full handshake, an endpoint <bcp14>MUST</bcp14> abort the connection when it is not
negotiated. Resuming an accepted authentication state is described in
<xref target="resumption"/>.</t>
      <t>Secondary client authentication is negotiated only in a full,
certificate-authenticated server handshake. A client <bcp14>MAY</bcp14> offer the
flag while also offering resumption, to allow its use if the server
declines resumption. A server selecting a PSK <bcp14>MUST NOT</bcp14> negotiate the
flag. Resumption behavior is specified in <xref target="resumption"/>.</t>
    </section>
    <section anchor="exchange">
      <name>Secondary Authentication Exchange</name>
      <section anchor="server-request">
        <name>Server Request</name>
        <t>Once secondary client authentication has been negotiated, the server
<bcp14>MUST</bcp14> send exactly one secondary request immediately after its
Finished, before any other TLS message or application data. It <bcp14>MAY</bcp14>
send the request in the same flight as its Finished, without waiting
for the client's handshake Finished. This updates the timing rule in
<xref section="4.7.2" sectionFormat="of" target="TLS"/> for this negotiated exchange only.</t>
        <t>The secondary request uses the PHA CertificateRequest format and
application traffic key protection. Its <tt>certificate_request_context</tt>
          <bcp14>MUST</bcp14> be non-empty and chosen according to <xref section="4.4.2" sectionFormat="of" target="TLS"/>.
The two requests independently specify certificate-selection
parameters, including acceptable signature algorithms and, optionally,
certificate authorities or certificate extension filters.</t>
        <t>Further post-handshake authentication is governed by the TLS rules and
the application protocol in use. Negotiating secondary client
authentication does not prohibit later PHA where the application
protocol permits it. The restrictions for HTTP/2 and QUIC are specified
in <xref target="h2-quic"/>.</t>
      </section>
      <section anchor="client-responses">
        <name>Client Responses</name>
        <t>The client <bcp14>MUST</bcp14> respond to the handshake request and send its
handshake Finished before sending its secondary response. It <bcp14>MUST</bcp14>
respond to the secondary request using the PHA authentication messages
defined in <xref section="4.7.2" sectionFormat="of" target="TLS"/>. The client <bcp14>MUST NOT</bcp14> send
application data until it has sent the Finished ending that response.</t>
        <t>If the secondary request has not yet arrived when the client sends its
handshake Finished, the client <bcp14>MUST</bcp14> wait for that request before
sending application data. Receipt of server application data does not
release the client from this obligation.</t>
        <t>Either or both client Certificate messages <bcp14>MAY</bcp14> have an empty
<tt>certificate_list</tt>, including when the client has no suitable
certificate or declines to provide one. An empty response omits
CertificateVerify but still includes the applicable Finished. An empty
handshake response does not remove the obligation to send the
secondary response if the connection continues.</t>
        <t>Sending the secondary request early does not add it to the main
handshake transcript. For the secondary response, the transcript
consists of the complete main handshake through the client's handshake
Finished, followed by the secondary request and its response messages,
as specified for PHA in <xref section="4.5" sectionFormat="of" target="TLS"/>. This ordering applies
even when the client receives the secondary request before sending its
handshake Finished. The key schedule and PHA authentication
computations are unchanged.</t>
      </section>
      <section anchor="policy">
        <name>Server Policy and Application Data</name>
        <t>Negotiating secondary client authentication commits the peers to the
exchange, not to accepting any particular credentials. The server
validates any certificates presented, verifies each CertificateVerify
that is present and both Finished messages, and applies its policy to
the resulting combination of identities. Certificate validation and
message verification follow <xref section="4.5" sectionFormat="of" target="TLS"/>. The server <bcp14>MAY</bcp14>
accept an empty response to either request. If a required certificate
is absent, it <bcp14>MAY</bcp14> abort with a <tt>certificate_required</tt> alert, as in
ordinary client authentication. Other certificate validation failures
follow the TLS rules.</t>
        <t>This specification imposes no additional restriction on when the
server sends application data. In particular, the server <bcp14>MAY</bcp14> send
application data after its secondary request without waiting for the
client's responses. Implementations determine when the available
authentication state permits application operations, just as with
ordinary handshake client authentication.</t>
        <t>The client sending its secondary Finished does not imply that the
server has accepted either credential. An application requiring
confirmation of authorization obtains it through its own protocol.</t>
      </section>
    </section>
    <section anchor="resumption">
      <name>Session Tickets and Resumption</name>
      <t>On a connection that negotiated secondary client authentication, a
server <bcp14>MUST NOT</bcp14> issue a NewSessionTicket until it has received and
verified both client Finished messages, processed both certificate
responses, and accepted the resulting authentication state under its
policy. This applies even when one or both responses are empty.</t>
      <t>The server <bcp14>MUST</bcp14> associate each such ticket with the accepted
authentication state, including the identities authenticated and any
absence of a credential. This state can be stored at the server or
protected within the ticket. A ticket <bcp14>MUST NOT</bcp14> imply that two
identities were authenticated merely because the flag was negotiated.</t>
      <t>A connection resumed from such a ticket uses the authentication state
associated with that ticket. The server <bcp14>MUST NOT</bcp14> request additional
client certificate authentication on the resumed connection. If its
policy requires fresh authentication, the server <bcp14>MUST</bcp14> decline
resumption and perform a full handshake instead. Offering the flag on
a resumption attempt does not by itself require fresh authentication.</t>
      <t>This specification does not prohibit 0-RTT on resumed connections. The
usual early-data rules apply, and the server decides whether the
stored authentication state permits the requested early-data
operations. If resumption is declined and secondary client
authentication is negotiated in a full handshake, early data is
rejected and the client follows the send ordering in <xref target="exchange"/>.</t>
    </section>
    <section anchor="h2-quic">
      <name>Use with HTTP/2 and QUIC</name>
      <t>HTTP/2 <xref target="H2"/> and QUIC <xref target="QUIC-TLS"/> prohibit
post-handshake CertificateRequest messages. Secondary client
authentication provides a limited exception: the request is agreed
during connection establishment, precedes client application data,
and cannot be triggered by an application request on any stream.</t>
      <t>When the flag has been negotiated, this document updates
<xref section="9.2.3" sectionFormat="of" target="H2"/> and <xref section="4.4" sectionFormat="of" target="QUIC-TLS"/> to permit the
single secondary request and its response specified in <xref target="exchange"/>.
A client <bcp14>MUST NOT</bcp14> reject that request solely because it is a
post-handshake CertificateRequest. All other post-handshake
CertificateRequest messages remain prohibited by those specifications,
with their existing protocol-specific error handling. Merely offering
<tt>post_handshake_auth</tt> or offering this flag without server acceptance
does not enable this exception.</t>
      <t>For HTTP/2, the client sends its connection preface and subsequent
HTTP/2 frames only after sending its secondary response.</t>
      <t>For QUIC, the secondary exchange uses CRYPTO frames at the 1-RTT
encryption level. The client submits the complete secondary response
for transmission before sending application data in STREAM or
DATAGRAM frames. This requirement does not delay ACKs or other QUIC
transport control frames, and does not impose a new packet arrival
ordering requirement. Implementations decide when to deliver or act on
application data according to their authentication policy, as with
ordinary client certificate authentication. Server application-data
timing remains governed by <xref target="policy"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="combined-authentication-state">
        <name>Combined Authentication State</name>
        <t>The server needs a policy for the combination of credentials, not
merely independent decisions that each certificate chains to a trusted
issuer. For example, a VPN deployment might require that the user be
authorized to use the device represented by the other credential.
Neither possession of two credentials nor their presentation on one
connection establishes that relationship by itself.</t>
        <t>The secondary authentication transcript includes the main handshake,
including the first client response. This binds the secondary proof
to that handshake. It does not assign semantic roles to the
credentials or prove that their private keys reside on the same
device. Those properties require deployment-specific controls.</t>
        <t>An empty Certificate response contributes no certificate identity.
Servers <bcp14>MUST NOT</bcp14> interpret completion of the exchange as proof that
both requested identities were authenticated.</t>
      </section>
      <section anchor="application-access">
        <name>Application Access</name>
        <t>A server that sends data before accepting the client responses must
account for the possibility that client authentication will fail.
Data already disclosed cannot be recovered by subsequently closing the
connection. Similarly, a server must apply its authorization policy
before acting on application operations that require authenticated
identities.</t>
        <t>The mechanism establishes the connection's initial authentication
context. Any later PHA and resulting changes to that context are
governed by the application protocol's rules. HTTP/2 and QUIC continue
to prohibit further TLS post-handshake authentication, as specified in
<xref target="h2-quic"/>.</t>
      </section>
      <section anchor="resumption-state">
        <name>Resumption State</name>
        <t>Resumption relies on the stored authentication state rather than fresh
proofs from the certificate private keys. Ticket lifetimes and
acceptance policy therefore need to account for changes such as
certificate revocation, device removal, or user access withdrawal.
Servers must retain enough information to apply that policy to the
complete authentication state.</t>
        <t>Early data additionally remains subject to the replay risks of TLS
0-RTT. Secondary client authentication on the original connection does
not make a resumed connection's early data replay-resistant.</t>
      </section>
      <section anchor="resource-use-and-privacy">
        <name>Resource Use and Privacy</name>
        <t>The secondary exchange adds certificate processing and can involve
user interaction. Implementations can apply timeouts and resource
limits while awaiting responses. Negotiation permits only one
secondary exchange, bounding the number of requests made by this
mechanism.</t>
        <t>The ClientHello flag exposes support for secondary client
authentication to observers unless protected by Encrypted ClientHello
<xref target="ECH"/>. The flag reveals no credential role or identity.
Both certificate requests and client responses are encrypted. Clients
still decide whether to disclose a certificate in response to either
request.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to add the following entry to the "TLS Flags"
registry established by <xref target="TLS-FLAGS"/>:</t>
      <ul spacing="normal">
        <li>
          <t>Value: TBD</t>
        </li>
        <li>
          <t>Flag Name: secondary_client_certificate</t>
        </li>
        <li>
          <t>Message: CH, CR</t>
        </li>
        <li>
          <t>Recommended: N</t>
        </li>
        <li>
          <t>Reference: [This document]</t>
        </li>
      </ul>
      <t>The CR use is restricted to the handshake CertificateRequest, as
specified in <xref target="negotiation"/>. This document defines no new TLS
extension type or handshake message.</t>
    </section>
  </middle>
  <back>
    <displayreference target="H2" to="HTTP/2"/>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="H2">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <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 latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="TLS">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="July" year="2026"/>
            <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 obsoletes RFC 8446, which specified TLS 1.3. This document obsoletes RFC 5246 (specifying TLS 1.2) and RFCs 5077, 6961, 7627, and 8422, all of which pertain to TLS 1.2 or earlier, and updates RFCs 5705 and 6066. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </reference>
        <reference anchor="TLS-FLAGS">
          <front>
            <title>A Flags Extension for TLS 1.3</title>
            <author fullname="Yoav Nir" initials="Y." surname="Nir">
              <organization>Dell Technologies</organization>
            </author>
            <date day="10" month="September" year="2026"/>
            <abstract>
              <t>   A number of extensions are proposed in the TLS working group that
   carry no interesting information except the 1-bit indication that a
   certain optional feature is supported.  Such extensions take 4 octets
   each.  This document defines a flags extension that can provide such
   indications at an average marginal cost of 1 bit each.  More
   precisely, it provides as many flag extensions as needed at 4 + the
   order of the last set bit divided by 8.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-tlsflags-18"/>
        </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>
        <reference anchor="QUIC-TLS">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="ECH">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="K. Oku" initials="K." surname="Oku"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="March" year="2026"/>
            <abstract>
              <t>This document describes a mechanism in Transport Layer Security (TLS) for encrypting a message under a server public key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9849"/>
          <seriesInfo name="DOI" value="10.17487/RFC9849"/>
        </reference>
      </references>
    </references>
    <?line 438?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA51c63YbN5L+j6fAyD+y4yVpy/HOJNokE1m2Y53YkldSMseb
8bGbJEj2qNlgGt1SGB3lWfZZ9sn2q8K1L5Q063MSic0GUCjU9auCxuOxqPO6
UAdy71zNdDnPqq08KnJV1vKwqVf4mc+yOtelzEt58fZc7k++3BPZdFqpq/sH
7Qn8VEtdbQ+kqeei2czx2WDg1189/8tIfv306T7+v7+POcVcz8psDVLmVbao
x5U2ep1drvS4LszY+IXGM15onGGh8dOnwjTTdW4MFqu3Gww+fnXxWpTNeqqq
A0GrHQiMNKo0Ddatq0YJEP6lyCqV2Q00VV5v98S1ri6XlW42eHpRZaXZ6KqW
b7OtqmR861Jt8eL8QMixBF30wxIks9bO6YuNNvV4lZVzs8ouVfeFK1U2IE7K
+xeV0u5t7++gMS+X8gcaQs/XWV7gOSj5Plf1YqKrJT3OqtkKj1d1vTEHT57Q
W/Qov1IT/9oTevBkWulro55g/BMat8zrVTPFyG0G9hfZFf7/ZCf7aURB51kn
ayUjJ3a6Sa53z/HkwYc9WdXrAmJCv+uKDgDLS7loisKKzQe3sjzzk/EL2GtW
5r8z0w/kf5tZVqiKv1GWe9uw+Pe/228nM73uz3+RV80aX5vrrJJnaj7fDsx/
oi/zjJ/PcHQH8kVWLrNCV4qfVWrJb/2YVWVWZ5fuTd2UNanIcTl3gx1pe5eT
Oln1U0Wrfl/SGkTjXp/Is3yRZbU8X6nL1fhDY9RigMgjMLWz9FFWZvPW2hXP
NDEsMd8v6eEwX95kZamMvDCzlV6oMl8OrPhTCdmrDFgi9UJCD+SLppxjU2pV
yXdNmc9WPMobFrz/4lq+m7SJ/EFV66zctji04tUndVgdpP42KVUNUSk13q+x
MqnZm2cHPPBbMOn1Edkc/jjPzabIMPmbi4v3T54JkZeLOEyMx2MQZeoqm9VC
nOu1knO1KfR2Dbk0qU5Dwb0paAwpaX2t5UxVdb7gr81Imma2kpkRulQyn9O4
xZbezDDnVT7DDOUc/2nMWbVeyLEUzrKayItVbshSNrQ+hi1y4j0x9HPQmk+W
jE/J4p/Zdi+KDGRpUcIk1zmRTJRk83lOp5QVw6ZMqt9m4PISbxq5yWCf9IJs
aqlm9mtTZ9MiNysiiShUEqTiuPEDtg8bSpYQR5GoM/Vrg8EyX6/VnMgpthLG
gPaO/b7OS8yp5iPmCu3QUicqBSvJE4d39XUpo6H1I3ngVOE4FZMCTopssyn8
vuAdsol8lTO7E2ZJu4LBiqB9qiBrm3ob6BBud3OF5dfM/+uV4kmISgxuipqP
tc1GsAlzG3wwi1wZQYRvNKjZToSgc5XhXJ2fJEGV5ClxaHJDi9W8RHJileOh
3aaoI/MrNVOQYZOw7ovI1Yk8xjkXRqdrGXbIgvZJ+tFaFeQFsZlHkbgG9+R/
/XR8xNyxOjSxarPO5/NCCfEIdq2u9LxhccFWbRQhb27+hF+/JWXEFm9voR4b
cn/Gi2F6JB3nOYdnJBXD1hIHCwru9Lny396/OfzzRJIai1SNS4U9sb66lWFo
aRgYRGebyLhV1yj9E/FaV2BHtt4UCiIif35/IjXxn7ZJ8tMyEVPoNl6CFcuW
WDKqPZ8cqbjUYHlWW61vaZO6yoqGj4pPNCGx1kuWP8G0ztUsJ1kH5fAE2Wym
DL2COCODfnZFzZuQYD2GjcABqCarhgN9uL1IBCY5MDBGtA8NbgXco9em20Rc
ve5C/pwlicorrPJe3G/4yOiNcBJVlWMBRLGkwp8RZnyib8xnkFsjOiTCrUSO
X789/OH82+PxS3Z9HJHgP3779hZWPF9i70Y4caUpbfD7RhWFtjYcTN/UWYmz
tQu6M4QChp0PWEI+nI71tINDlP0A6ylS62lZ5M+phMOtTEdtnAkZuQUxWvRt
abB+ZWuWSJk3RNb3Qc8mbi/dF5xNNUSQZw7iCL/rRZEvVyAmu9K5tdhly94h
FgAdVb4hkfZzRlISvXDcJLV27xle3GygIIstPP9ioaqOoUHsWTi/NkPwrSpE
Wh2NyQxJAIyGdgpbeT2udKGILGVdiluVjyCvBH0LGa5U9BxB4P1G4F7BC3yL
aCEaKOcmRliK2RHVYGw3k89ktqyUsh74hCjSKhps2s2m0siTQB6Mgkh07Dov
Cra8EB9iVYlJ2d+1zC8UOi+RPyWCjSDAuTv2lQa/reklMhT2KC3VbI8Mm0o+
j2Ad8hBNtM0rExcM7BfeHYiOlcErNVSXHRk5J12TWCyXOFJma5tRQcoFXF6y
fcsnjLUuAB5AV5WirIbMDns3RH75FUeumFEQyfmsQT7Vmh4RosrWNj5zTpM4
UeT4xfpL8I1erHl5AQUh1oFi3qUhVei40RHFW+58reW6uVk9G//a5LPb2wn5
1SNdXhFHaDyNe0m2nDXFWF4jW5WUrhq59+6n84u9kf0pT07597NXWPLs1Uv6
/fzN4du34Rfh3jh/c/rT25fxtzjy6PTdu1cnL+1gPJWtR2Lv3eGHPWs09k7f
Xxyfnhy+3bP63tKlihVmSnYSUr+p2AsgREZuAP2b2n2/OHr/v/+z/5zsM6KF
Z/v7XyNasB++2v/rc3wgx2dX0yUE2X4En7cU8CmcFWbJIOizbJPXMN6WtyuO
GyEw4ObjX4gzHw/kN9PZZv/5d+4Bbbj10POs9ZB51n/SG2yZOPBoYJnAzdbz
Dqfb9B5+aH32fE8efvO3AmZHjve/+tt3wsrI454neEz6RDoy4G1M4pdjLPxF
1+E87tn9MOnduYB1C72EgKxWewnxuO+kwhq9cNeHGN6+kKVqByIsEUgG8cqs
lgtYS34xTID3SaXTfVnDx5p4CiZc5epaiENvWTR5l3vjKrJUWLFoOGLj8JDj
k/tjmpAWfaaY91PYyCda4LOIUY2jPIlRJvLQ22hr0E2bDJqVlhDOPw+c0xpB
JUJYe15D0TjWCL4C2eKaDWKSnkDrXU7GSWg/TmhnfZS2usSPGdXK6vDuVvYy
OyFubhb5cqzd2VCGAY3nhDQ6oRLGIkdazqx3ayX7FW6jhv0NSU2a0k/kiypD
fI1p5tZRRqGsq2xBjhk2WMD51tad/ac0vzZk9aYYeKnqZGi6geHBdG4JbT8j
OkEcA5mHa6/JcOYLPmr2YYFXzn0mA2kI+3hMCLtoKMwxl1CK6hJzbVyo5SWk
E3R73g+KM5j+xx9/CAcG/yv/znk1IRIxFVL+uxwQbn5+l4KInauM3b/vdr9y
F3merAf8u3lVzqrtBqfyymuiuX3gqjd9hbtr5N3MeOiiA2s/eOhNTyr/xVVp
Dm9qHzr0lz6XPj501V8OE2V7Cal+fMfQb7zUiDZzhnad7CKl72Prk30Zz/zL
HzsrRjEVPUo/dqj6bseOPrIm3hzIR6kRlFzu+TYp3Azq8d5tKxXl4Jii5OsM
UfGCEA+HmtnBATC7F207ri0+oRyw4twAf8sm3z+1MH/+u2pN4sARDnhnMHPW
XWmZYGns27gghL2SiYW1E7kxjXLBoY8owu5WmXF+UFmXMwTciYjrcXDA/iIk
PxwEnCTp1s2jJPlyzHyIU6fgmBGZObO5AywIetbO3gd8M+2SOe0DWJkEwaKD
kA2Nt2+mX3l/P+kGOGm4YNdjUNHGEupB8YnfLyc45y75fj75cvIXSg0RpCHb
iQGLQ13sujhZnwA7v0lxYgv5ZMIoj9NNbb+OK1t6p5hOtJlq875SfkZyrJZZ
8Snk5Z8lFYhq5kMrhPKMYK7YmVMm2MO14NP/M5zy6/lTFb35m7JgrC9GTUwN
8bamCYK2En/cEqLFoFXGz+OwhEd3cUVYrlA4AW3e6Ly7TGAAhWq2wOH2PIqB
p8i6+G2fVaMBisSDzokPP+T79tSSI9MhQiVSU9xMMOy10FDCa/sGb+Ca4BRn
nKYF45oW/EvgGYrd9EwXomoKChePF7LQMwRXDhuhYDev7odf2RhkgopuMk1Z
EnYnbGkjKNak5h4lidUfJFJnMGprG0FHEzhYt2DDFHNyxNZkENccLDIccY9H
ke0CAltitjK0p5FIIbgUMZ9HI51oglsBCa87vCjIqxxHwTYo2KdI6Ig9C52j
L6lRyBxdgYBvKhgOj2NS22OxQS4BvD//MdrXWFDzhDjWWsxnqkivyKz2AJ0O
Ex/JyMZO/8Urn7LcPPLZC/zKo0cuNJU+UBSnhM7dJ0/k86YKchHPZJQygrfG
nln9ls3qYrsjSxus3YmIGruAIGo9aYm3drrqZ23stw4/CF47hUZTrNiCxJSx
tyuF3oxRmEL2xLvLgAf0MQMH2fkqGL1d56wSpLJW0qNT+uvkWXBK0s6+ozDG
TljswMAb45YiGHDAHdgKNHv8HVmhTLPCYzDhc6JBn9w6nxxG+tke51Ql6C7X
XVbaqLIdSaW7fZ7sdtIH05G5qg2OCazF6XtYfRBMFymwHYEGByeT9eSqSt2Q
rBRLBH71as2g5igkpMW2ZSZ8hFjn4KVuF3Cji1/kBS2Kk3jdVCyAd1cIcZpL
ipUTbJ4kls13qNOlZ+ItPMknjnUSo0Dsr6uFXQw7eCPMssqnsNGEPFcsFtcE
TMrOciIs5zFmXyRsgckkmRZE5nO2wDLF5d74iD6a/Mi3cJ35oNZKr7e1JEEO
VXAgdr+GxKux5g5Xkbq4zQ5EzceuorPermqT16QOdz10I3ZEmKkyt+pkwa4T
nb0kBmFWnRfkUMmIcsTWQgrd3lwoGkDC48WOPdAsJANbRXh4hcjVZ0GRortL
c3WH9JClORpaLQIBM+tZ3jMK2DZckOljP3brXmBxMoXKjEqXdpgpwVFT2GeP
B7n+ClCzA2IL58T+HJ5ScVxDVkq0rFqRm/pzaj66XLKcRIqQs01pWQuu0jnn
Tn0Nlb5CFkpezUatbBRDHsvBoOhjbVM4F1NTycwF3ybVULJj0a/4WUWqJm7+
oPiVWsPc2KAycC1kxRZh7+qHj1mSEI8MfV42nIieBwEckjbkgTDWMQyec5Tv
FIxgcdGCMEsK+TawMa911ZvRkmPlL77L/ZY5OQjt6bTlfYu6J9OvKt0sVzs8
dBJE2NA7WuRhsJiMSWCRl6mRaBXRSCnIUnQswX+07ABJcDW3sSOfLEyIulJl
T95aiWafqL6xG9Bea3jIo5sZPlLMQZvpmzMC0TdN7dEPTNyUNtaYT9I48L3N
LGiSLiSE0NHmHQgc73JTXUOawvcbxbV/W8X00c7Ill91kgtTxJfUSpN2lbSp
RVxlRW4jLxqQYutQUUXGlQTgirSP/LzKZqs+BC7YzuVhiG38ImsTjHKQh5ii
KZPARlRfqFvdW9j0NC8d7LRw7XgUbExaxsttgN6i8MCHtpbikLxxyrFb4gIU
RZGvy0yznlEa6CyAU8l8EjlP2SfAjWxKzBhxFg/LmqbM/XCRJnBJM5fCYAg4
KNwpFRN5Wncb5xJmLLK8QDRnhNt8K5LyXUht8CZfIzZju9TucAuBjdRRB0W7
x7CfRpSJ+KWpDfNi2LHHhsK+MndSC+de4WO84YpYoDwme0f1baesod8jWpDs
inqyyUkNZtuhg2AQ+xzJfzaG0x+iKp5TtC67ijMX7ZCiH4MFhQkeAqdCrSGk
YQnbW5ipB4Nj6w3XlTrdFzkZVHIOi5z7a61eeZzXPZjW3EPCLYfWO/j+Th/5
uizZIrwXuS2ikVInCffNoySvpoy41bNnN5MkbffYP+iD6GBvkgFlzHqirh0t
lpR2cOgcBHeiCmfE5q04aMBAYaPUshdeTJQ6yNgoaTNTPk++s++U2q1tcu5x
ctZAbwmjf6M83wdrsbmH/I0tGbYKAxZ0MkbPGP1g88xdzg56Z2vD8u5IHRT3
Uaf2HG2tbGNBtj96K9iycQ8SHWwidtaq8IZ9n1mtyTRmdWoCdOWrqhRrg0YH
LliqCfFx9MfzTrTgWouEwmtK09pkrvEIb0/VLGtMgs9eZylWYLH0KJUsshSj
UBxtW8U9GQEvGKxMBP7PPb+JSreV7mHRZkLUFFsx7m25lboMYrbmhorQAkte
KApWxDQX+N+qp0t1hyAXlYuosbaRV1WEgjiAMDFtMA+1yhA3nfbqDwiSMpnO
U9cks9GWUZdDbVSx8EQO0jjsnfq5+tPx2cWFTE4u8sQGOaIxDTwYh9xj9jAO
R6Buu9jXHvrJQ12sds3kwkvvXT4iAcnIFofFRHQYfEQJYxjMZbbPXcp+N07R
xrgCbJtC0S6voE3mBof5T6tcnS6OFETnDCcE2hyRB2DTYqE/GVeK6WIZN488
dCGE++7m5s2z29vklZs/0c+xbzF/+nQfX/uze0AVzBvkiewi213uuFxysN/v
oI1hGtunOfcN7LuuUZAXgO+gSb1L6gQrI27Th5FjuVYP6X3kBkZE2a5XUYi/
+2iEtWcHJDxwLyGBRL+ePJt8SXY4cL8FINI3/hjwfesag7D95A/J5jqgeSom
hz3QxspeG/swukgtsi2GPKAWClcAMdcDwOEdVTzfChukzWeuOm5l5iI54T1k
TrcIuP1sGUKd2N2rqkrbGgiUdjmR76yH8SUOMVhjJTeeFGmx41atr1W+5Dat
YOJUyVgGjwmiTBhqwBVboFNAp1J5hgAvMnenyTRw2OARdMep64LgYJMW5O/B
BO3iJEvehfhXAuTOXvLo7MP7i1M/v3P7+2SphbIdOURcgXinaGF+fI/UWdMA
WPTpsCUFwjrcrdNeK1o3qYAcnF+cvTp8R1HHy8OLwx/O8LulzwUszhmtWw3J
c1VkW3l49COj21YEafuiDvdECfWpdOEmsw4ljdtJ3jKo8zVSIY4jGF6Etw9W
N1l5KG0hhxQ6MkBQboMnaolmZ9tLoNJKghXqrq10ney93OXeAGTiAY60vsp+
ztdrXP95it/f3DjAIxTX+EotdU4b7M25R4t+c76PYZ262znHWN1uGDL2Lt4J
RaY2YJAgHgyPCBcVJlWT0BpvXGcChc/9tnsGVujqMjl428pSWUCuc+8ouTGw
5gKZj3J89mYvLEyVCN01jK37INVfY1ABevGIm+4meOLEJX0QMt9uQ3Af3aFK
biaVljeQAzdliCWRZgxeIlTGW+7CHs4q38S4rVdR64hXRCHbAG0beRyJTq9r
XtHFlHYvk9NNHGnvFg7sM91+0JbSpDJ9nDYY8DURjFpnRJ+01z8ccJbySFcc
QcRTYm5BT2vGBdkNWqg6FECFPSkikXQcwzckNSqYkkQUohNx5oLQl4B4p1BW
vPZIL+bTprZgTCqRLvFBGmi10SQpku/gD83WTibSSx90hZS4x5sVLsn0seud
WZUFOVNI85CvtnU7PKwzSjtV2w06nWM2cg29ItCNbhkHZSaxhusuyFjwtMPI
KN+eIahrIhhgzQqEVnO6W2RmhaYcPkZoCOjIMlmlih6xINunfR1LpHnVOQxb
QXH1KF6qWTPyw9d1cncBOcIn1iKJsO/atlfvgJFiiJR3mZ0kuE7l1opOMDfr
jqp27urw/RPkPD3s2l3WOUT8GWuc5LASxJVFxOlIVvsbPoQ9iG5RdqgESyCc
bbPp5gu+PCJs5cembwtXECZU8s6icO8ijuiVThPsyfmL5AlMGdeonf7ekdLh
YGzmhwCeM1PBymLifYRUF1MjMXFQGDKQBTRv7arVyX0tj3NTWZnFw994SkXf
H4G/qd6+FX2lPUOCp1hrxBN0Mc26FnfblFz7vMquyVF4O8GCC+tAlliVFtrz
V+1tyctKNR99AOWdTrh4bIhpVGKMuWeENIptiAigbDYl0C4boxv/knrejYPh
Befy/VRvBwgCjVvmfAE2ejAy/IJUfc0SNAAKfGHSLNlSMSbjjn3wzVwrSLqp
wFrKfbkQRIcMne74vWhQ57B2balg+NDWYNj+gM9XurgiOIIgQDLTmUduOiHf
zGWOW2qCUcgSjNdRpkpwfmt8l5XHwhPoO+2B9QAFB/nk7/vkj+SULnR622z/
bgudSWgyWWdwfaz0uRHBCDmjlLbHcm6jfrMlBH83l2T6PnADUqGnxkmpa6GM
6CCWDp386XqwAX97dfTGXV//2tdxmApoirLRTxIM2duhukpc6IsOvht3zSfX
dVSMwXpaJo4YI2w9Ogbr1oTo4IMIIk09eDlQURK+osTX9Q9PDnsRMj90uYr1
1jWXaWwAxbAOnaKiv9ThFW2PTOtruje9J+hPnxj6LroPF6GHK9e3t/QHN+TP
WdHQn1t58RIfaLQ84b8zcueNjzFSYk6+D+TRmxGyQDw5U1S4pFB7fiBP+AFf
+J3hpX/80rrU+4+PTqDObFOgCWUnNdDtMtSVmoVWZI9SpA3gvq7cu3YPEaH8
jExQbFqiv/YjddLzmLRf019WmCKbo4M6nF2W+rpQ8yX/GQNxc2AVSM2/3VtA
ABW38Z++PIVd9m9ijv8DHdurvfZJAAA=

-->

</rfc>
