<?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.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-tls-pake-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="TLS 1.3 PAKE">A Password Authenticated Key Exchange Extension for TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-tls-pake-00"/>
    <author initials="L." surname="Bauman" fullname="Laura Bauman">
      <organization>Apple, Inc.</organization>
      <address>
        <email>l_bauman@apple.com</email>
      </address>
    </author>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <author initials="S." surname="Menon" fullname="Samir Menon">
      <organization>Apple, Inc.</organization>
      <address>
        <email>samir_menon@apple.com</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Apple, Inc.</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2025" month="September" day="04"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 43?>

<t>The pre-shared key mechanism available in TLS 1.3 is not suitable
for usage with low-entropy keys, such as passwords entered by users.
This document describes an extension that enables the use of
password-authenticated key exchange protocols with TLS 1.3.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://tlswg.org/tls-pake/draft-ietf-tls-pake.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-tls-pake/"/>.
      </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/tlswg/tls-pake"/>.</t>
    </note>
  </front>
  <middle>
    <?line 51?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>DISCLAIMER: Much of this text is copied from <xref target="FIRST-DRAFT"/>
and is in the process of being updated. This is a work-in-progress draft and has
not yet seen significant security analysis. See <xref target="security"/> and <xref target="spake2plus-sec"/>
for more information.</t>
      <t>In some applications, it is desirable to enable a client and server
to authenticate to one another using a low-entropy pre-shared value,
such as a user-entered password.</t>
      <t>In prior versions of TLS, this functionality has been provided by
the integration of the Secure Remote Password PAKE protocol (SRP)
<xref target="RFC5054"/>. The specific SRP integration described in RFC 5054
does not immediately extend to TLS 1.3 because it relies on the
Client Key Exchange and Server Key Exchange messages, which no
longer exist in 1.3.</t>
      <t>TLS 1.3 itself provides a mechanism for authentication with
pre-shared keys (PSKs). However, PSKs used with this protocol need
to be "full-entropy", because the binder values used for
authentication can be used to mount a dictionary attack on the PSK.
So while the TLS 1.3 PSK mechanism is suitable for the session
resumption cases for which it is specified, it cannot be used when
the client and server share only a low-entropy secret.</t>
      <t>Enabling TLS to address this use case effectively requires the TLS
handshake to execute a password-authenticated key establishment
(PAKE) protocol. This document describes a TLS extension <tt>pake</tt>
that can carry data necessary to execute a PAKE.</t>
      <t>This extension is generic, in that it can be used to carry key
exchange information for multiple different PAKEs. We assume that
prior to the TLS handshake the client and server will both have
knowledge of the password or PAKE-specific values derived from the
password (e.g. augmented PAKEs only require one party to know the
actual password). The choice of PAKE and any required parameters will
be explicitly specified using IANA assigned values. As a first
case, this document defines a concrete protocol for executing the
SPAKE2+ PAKE protocol <xref target="RFC9383"/>.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</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 mechanisms described in this document also apply to DTLS 1.3
<xref target="RFC9147"/>, but for brevity, we will refer only to TLS
throughout.</t>
    </section>
    <section anchor="setup">
      <name>Setup</name>
      <t>In order to use the extension specified in this document, a TLS client
and server need to have pre-provisioned a password (or derived values
as described by the desired PAKE protocol(s)). The details of this
pre-provisioned information are specific to each PAKE algorithm and
are not specified here.</t>
      <t>Servers will of course have multiple instances of this configuration
information for different clients. Clients may also have multiple
identities, even within a given server.</t>
    </section>
    <section anchor="pake-integration-in-tls">
      <name>PAKE Integration in TLS</name>
      <t>This section describes how the PAKE protocol is integrated and executed
in the TLS handshake.</t>
      <section anchor="client-behavior">
        <name>Client Behavior</name>
        <t>To offer support for a PAKE protocol, the client sends a <tt>pake</tt> extension
in the ClientHello carrying a <tt>PAKEClientHello</tt> value:</t>
        <artwork><![CDATA[
enum {
    pake(0xTODO), (65535)
} ExtensionType;
]]></artwork>
        <t>The payload of the client extension has the following <tt>PAKEClientHello</tt>
structure:</t>
        <artwork><![CDATA[
enum {
    SPAKE2PLUS_V1 (0xXXXX),
} PAKEScheme;

struct {
    PAKEScheme   pake_scheme;
    opaque      pake_message<1..2^16-1>;
} PAKEShare;

struct {
    opaque    client_identity<0..2^16-1>;
    opaque    server_identity<0..2^16-1>;
    PAKEShare client_shares<0..2^16-1>;
} PAKEClientHello;
]]></artwork>
        <t>The <tt>PAKEClientHello</tt> structure consists of an identity pair under which the
client can authenticate alongside a list of PAKE algorithms and the
client's first message for each underlying PAKE protocol.
Concretely, these structure fields are defined as follows:</t>
        <dl>
          <dt>client_shares</dt>
          <dd>
            <t>A list of PAKEShare values, each one with a distinct PAKEScheme algorithm.</t>
          </dd>
          <dt>client_identity</dt>
          <dd>
            <t>The client identity used for the PAKE. It may be empty.</t>
          </dd>
          <dt>server_identity</dt>
          <dd>
            <t>The server identity used for the PAKE. It may be empty.</t>
          </dd>
          <dt>pake_scheme</dt>
          <dd>
            <t>The 2-byte identifier of the PAKE algorithm.</t>
          </dd>
          <dt>pake_message</dt>
          <dd>
            <t>The client PAKE message used to initialize the protocol.</t>
          </dd>
        </dl>
        <t>The client and server identity fields are common to all PAKEShares to prevent
client enumeration attacks; see <xref target="security"/>.</t>
        <t>The <tt>PAKEScheme</tt> field in the <tt>PAKEShare</tt> allows implementations to
support multiple PAKEs and negotiate which to use in the context of
the handshake. For instance, if a client knows a password but not which
PAKE the server supports it could send corresponding PAKEShares for each
PAKE. If the client sends multiple PAKEShare values, then they <bcp14>MUST</bcp14>
be sorted in monotonically increasing order by the NamedPAKE value. Moreover,
the client <bcp14>MUST NOT</bcp14> send more than one PAKEShare with the same NamedPAKE value.</t>
        <t><xref section="9.2" sectionFormat="of" target="TLS13"/> specifies that a valid ClientHello
must include either a <tt>pre_shared_key</tt> extension or both
a <tt>signature_algorithms</tt> and <tt>supported_groups</tt> extension. With the
addition of the <tt>pake</tt> extension specified here, the new requirement
is that a valid ClientHello must satisfy at least one of the
following options:</t>
        <ul spacing="normal">
          <li>
            <t>includes a <tt>pre_shared_key</tt> extension</t>
          </li>
          <li>
            <t>includes <tt>signature_algorithms</tt>, <tt>supported_groups</tt>, and <tt>key_share</tt>  extensions</t>
          </li>
          <li>
            <t>includes <tt>pake</tt>, <tt>supported_groups</tt>, and <tt>key_share</tt> extensions</t>
          </li>
        </ul>
        <t>If a client sends the <tt>pake</tt> extension, then it <bcp14>MUST</bcp14> also send a <tt>supported_groups</tt> and
<tt>key_share</tt> extension. Like PSK-based authentication in psk_dhe_ke mode as defined in
<xref section="4.2.0" sectionFormat="of" target="TLS13"/>, authentication with the <tt>pake</tt> extension
is always combined with the normal TLS key exchange mechanism. See <xref target="key-sched-mods"/> for details.</t>
        <t>Combining the <tt>pake</tt> extension with the normal TLS key exchange mechanism
using a hybrid or PQ key agreement protects against Harvest Now Decrypt
Later Attacks where traffic recorded today may be decrypted by a Cryptographically
Relevant Quantum Computer (CRQC) in the future.</t>
        <t>A client which sends both a <tt>pake</tt> and <tt>signature_algorithms</tt> extension indicates the client
requires both PAKE authentication and standard server certificate authentication.</t>
        <t>The client <bcp14>MAY</bcp14> also send a <tt>pre_shared_key</tt> extension along with the <tt>pake</tt> extension,
to allow the server to choose an authentication mode.</t>
        <t>The server identity value provided in the PAKEClientHello structure
are disjoint from that which the client may provide in the
ServerNameIndication (SNI) field.</t>
      </section>
      <section anchor="server-behavior">
        <name>Server Behavior</name>
        <t>A server that receives a <tt>pake</tt> extension examines its contents to determine
if it is well-formed. In particular, if the list of PAKEShare values is not
sorted in monotonically increasing order by PAKEScheme values, or if there are
duplicate PAKEScheme entries in this list, the server aborts the handshake with
an "illegal_parameter" alert.</t>
        <t>If the list of PAKEShare values is well-formed, the server then scans the list
of PAKEShare values to determine if there is one corresponding to a server
supported PAKEScheme. If the server does not support any of the offered PAKESchemes
in the client PAKEShares then the server <bcp14>MUST</bcp14> abort the protocol
with an "illegal_parameter" alert.</t>
        <t>If the server has a PAKEScheme in common with the client then the server uses
the client_identity and server_identity alongside its local database of PAKE
registration information to determine if the request corresponds to a legitimate
client registration record. If one does not
exist, the server <bcp14>MAY</bcp14> simulate a PAKE response as described in <xref target="simulation"/>.
Simulating a response prevents client enumeration attacks on the server's
PAKE database; see <xref target="security"/>.</t>
        <t>If there exists a valid PAKE registration, the server indicates its selection
by including a <tt>pake</tt> extension in its ServerHello. The content of this extension
is a <tt>PAKEServerHello</tt> value, specifying the PAKE the server has selected, and the
server's first message in the PAKE protocol. The format of this structure is as follows:</t>
        <artwork><![CDATA[
struct {
    PAKEShare server_share;
} PAKEServerHello;
]]></artwork>
        <t>The server_share value of this structure is a <tt>PAKEShare</tt>, which echoes
back the PAKE algorithm chosen and the server's PAKE message generated
in response to the client's PAKE message.</t>
        <t>If a server uses PAKE authentication, then it <bcp14>MUST NOT</bcp14> send an
extension of type <tt>pre_shared_key</tt>, or <tt>early_data</tt>.</t>
        <t>Use of PAKE authentication <bcp14>MAY</bcp14> be used with
certificate-based authentication of both clients and servers.
If use of a PAKE is negotiated and the client included the <tt>signature_algorithms</tt> extension,
then servers <bcp14>MUST</bcp14> include Certificate and CertificateVerify messages in the handshake.
The server <bcp14>MAY</bcp14> send a CertificateRequest for client certificate authentication.
See <xref target="security"/> for a discussion on different security considerations
depending on if certificates are used or not.</t>
      </section>
      <section anchor="key-sched-mods">
        <name>Key Schedule Modifications</name>
        <t>When the client and server agree on a PAKE to use, a shared secret derived
from the PAKE protocol is concatenated with the regular <tt>ECDH(E)</tt>
input and used as part of the <tt>ECDH(E)</tt> input to the TLS 1.3
key schedule. Details for the shared secret computation are left to the
specific PAKE algorithm. See <xref target="spake2plus"/> for information about how
the SPAKE2+ variant operates.</t>
        <t>As with client authentication via certificates, the server has not
authenticated the client until after it has received the client's
Finished message. When a server negotiates the use of this
mechanism for authentication, it <bcp14>SHOULD NOT</bcp14> send application data
before it has received the client's Finished message, as it would
otherwise be sending data to an unauthenticated client.</t>
      </section>
      <section anchor="simulation">
        <name>Server Simulation</name>
        <t>To simulate a fake PAKE response, the server does the following:</t>
        <ul spacing="normal">
          <li>
            <t>Select a PAKEScheme supported by the client and server, as normal.</t>
          </li>
          <li>
            <t>Include the <tt>pake</tt> extension in its ServerHello, containing a PAKEShare value with
the selected PAKEScheme and corresponding <tt>pake_message</tt>. To generate the <tt>pake_message</tt>
for this <tt>PAKEShare</tt> value, the server selects a value uniformly at random from
the set of possible values of the PAKE algorithm shares.</t>
          </li>
          <li>
            <t>Perform the rest of the protocol as normal.</t>
          </li>
        </ul>
        <t>Because the server's share was selected uniformly at random, the server will reject
the client's Finished message with overwhelming probability.</t>
        <t>A server that performs the simulation of the protocol acts only
as an all-or-nothing oracle for whether a given (identity, password) pair
is correct. If an attacker does not supply a correct pair, they do not learn
anything beyond this fact.</t>
      </section>
    </section>
    <section anchor="compatible-pake-protocols">
      <name>Compatible PAKE Protocols</name>
      <t>In order to be usable with the <tt>pake</tt> extension, a PAKE protocol
must specify some syntax for its messages, and the protocol itself
must be compatible with the message flow described above.  A
specification describing the use of a particular PAKE protocol with
TLS must provide the following details:</t>
      <ul spacing="normal">
        <li>
          <t>A <tt>PAKEScheme</tt> registered value indicating pre-provisioned parameters;</t>
        </li>
        <li>
          <t>Content of the <tt>pake_message</tt> field in a ClientHello;</t>
        </li>
        <li>
          <t>Content of the <tt>pake_message</tt> field in a ServerHello;</t>
        </li>
        <li>
          <t>How the PAKE protocol is executed based on those messages; and</t>
        </li>
        <li>
          <t>How the outputs of the PAKE protocol are used to create the PAKE portion of the<tt>(EC)DHE</tt> input to the TLS key schedule.</t>
        </li>
      </ul>
      <t>In addition, to be compatible with the security requirements of TLS
1.3, PAKE protocols defined for use with TLS 1.3 <bcp14>MUST</bcp14> provide
forward secrecy.</t>
      <t>Several current PAKE protocols satisfy these requirements, for
example:</t>
      <ul spacing="normal">
        <li>
          <t>CPace <xref target="CPACE"/></t>
        </li>
        <li>
          <t>SPAKE2+ (described in <xref target="spake2plus"/>) <xref target="RFC9383"/></t>
        </li>
        <li>
          <t>OPAQUE <xref target="OPAQUE"/></t>
        </li>
      </ul>
    </section>
    <section anchor="spake2plus">
      <name>SPAKE2+ Integration</name>
      <t>This section describes the SPAKE2+ instantiation of the <tt>pake</tt> extension for TLS.
The SPAKE2+ protocol is described in <xref target="SPAKE2PLUS"/>.
<xref target="spake2plus-setup"/> describes the setup required before the protocol runs,
and <xref target="spake2plus-run"/> describes the protocol execution in TLS.</t>
      <section anchor="spake2plus-setup">
        <name>Protocol Setup</name>
        <t>The TLS client and server roles map to the <tt>Prover</tt> and <tt>Verifier</tt> roles in the
SPAKE2+ specification, respectively. Clients are configured with a client
identity, server identity, and password verifier (w0 and w1 according to <xref target="SPAKE2PLUS"/>).
Similarly, servers are configured with a list of client identity, server identity,
and password registration values (w0 and L according to <xref target="SPAKE2PLUS"/>). Servers
use this list when completing the SPAKE2+ protocol. The values for the password
verifiers and registration records (w0, w1, and L) are not specified here; see
<xref section="3.2" sectionFormat="of" target="SPAKE2PLUS"/> for more information.</t>
        <t>The PAKEScheme value for SPAKE2+ fully defines the parameters associated with
the protocol, including the prime-order group <tt>G</tt>, cryptographic hash function <tt>Hash</tt>,
key derivation function <tt>KDF</tt>, and message authentication code <tt>MAC</tt>. Additionally,
the PAKEScheme value for SPAKE2+ fully defines the constants for M and N
as needed for the protocol; see <xref section="4" sectionFormat="of" target="SPAKE2PLUS"/>.</t>
      </section>
      <section anchor="spake2plus-run">
        <name>Protocol Execution</name>
        <t>The content of one PAKEShare value in the PAKEClientHello structure consists
of the PAKEScheme value <tt>SPAKE2PLUS_V1</tt> and the value <tt>shareP</tt> as computed in
<xref section="3.3" sectionFormat="of" target="SPAKE2PLUS"/>.</t>
        <t>The content of the server PAKEShare value in the PAKEServerHello structure
consists of the PAKEScheme value <tt>SPAKE2PLUS_V1</tt> and the value <tt>shareV || confirmV</tt>,
i.e., <tt>shareV</tt> and <tt>confirmV</tt> concatenated, as computed in <xref section="3.3" sectionFormat="of" target="SPAKE2PLUS"/>.</t>
        <t>Given <tt>shareP</tt> and <tt>shareV</tt>, the client and server can then both compute
K_main, the root secret in the protocol as described in <xref section="3.4" sectionFormat="of" target="SPAKE2PLUS"/>.
The "Context" value for SPAKE2+ may be specified by the application to include additional
context in the protocol transcript or left empty. See <xref section="3" sectionFormat="of" target="SPAKE2PLUS"/>. The rest of
the values needed for the transcript derivation are as configured in <xref target="spake2plus-setup"/>,
exchanged over the wire, or computed by client and server.</t>
        <t>Using <tt>K_main</tt>, the client and server both compute <tt>K_shared</tt> which is combined with the
<tt>(EC)DHE</tt> shared secret as input to the TLS 1.3 key schedule, where the (EC)DHE shared
secret is as specified in <xref section="7.1" sectionFormat="of" target="TLS13"/> or as the <tt>concatenated_shared_secret</tt>
as specified in <xref section="3.3" sectionFormat="of" target="I-D.ietf-tls-hybrid-design"/>. Specifically, <tt>K_shared || (EC)DHE</tt> is used
as the <tt>(EC)DHE</tt> input to the key schedule in <xref section="7.1" sectionFormat="of" target="TLS13"/>, as shown below.</t>
        <artwork><![CDATA[
                                    0
                                    |
                                    v
                        0 ->  HKDF-Extract = Early Secret
                                    |
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    |
                                    v
                              Derive-Secret(., "derived", "")
                                    |
                                    v
                K_shared || (EC)DHE -> HKDF-Extract = Handshake Secret
                ^^^^^^^^^^^         |
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    |
                                    v
                              Derive-Secret(., "derived", "")
                                    |
                                    v
                         0 -> HKDF-Extract = Master Secret
                                    |
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
]]></artwork>
        <t>Note that the server does compute and send confirmV as defined in <xref section="3.4" sectionFormat="of" target="SPAKE2PLUS"/>
since it can do so within the structure of the TLS 1.3 handshake and the client <bcp14>MUST</bcp14> verify it.
If verification of confirmV fails, clients <bcp14>SHOULD</bcp14> abort the handshake with a "decrypt_error" alert.
The client and server do not additionally compute or verify confirmP
as described in <xref section="3.4" sectionFormat="of" target="SPAKE2PLUS"/>.
See <xref target="spake2plus-sec"/> for more information about the safety of this approach.</t>
      </section>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>Client and server identities are sent in the clear in the PAKEClientHello extension.
While normally the TLS server identity is already in the clear -- carried in
the SNI extension -- TLS client identities are encrypted under the TLS handshake
secrets. Thus, the PAKEClientHello extension reveals more information to a passive
network attacker than normal, mutually-authenticated TLS handshakes.</t>
      <t>The implications of leaking the client identity to a passive network attacker vary.
For instance, a successful TLS handshake after negotiating use of a PAKE indicates
that the chosen client identity is valid. This is relevant in settings where
client enumeration may be a concern.</t>
      <t>Applications for which this leak is a problem can use the TLS Encrypted ClientHello
(ECH) extension to encrypt the PAKEClientHello extension in transit to the server
<xref target="ECH"/>.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <section anchor="dictionary-attack-mitigation">
        <name>Dictionary attack mitigation</name>
        <t>Because PAKE security is based on knowledge of a low-entropy secret,
an attacker can perform a "dictionary attack" by repeatedly attempting to
guess the low-entropy secret.</t>
        <t>Clients and servers <bcp14>SHOULD</bcp14> apply mitigations against dictionary attacks.
Reasonable mitigations include rate-limiting authentication attempts,
imposing a backoff time between attempts, limiting the
number of failed attempts, or limiting the total number
of attempts.</t>
        <t>Clients <bcp14>SHOULD</bcp14> treat each time they receive an invalid PAKEServerHello
as a failed authentication attempt for the identity in the previously sent PAKEClientHello.
Servers <bcp14>SHOULD</bcp14> treat each time they send a PAKEServerHello extension as a failed
authentication attempt for the selected identity, until they receive a correct Finished
message from the client. Once the server receives a correct Finished message,
the authentication attempt <bcp14>MAY</bcp14> be treated as successful.</t>
      </section>
      <section anchor="protection-of-client-identities">
        <name>Protection of client identities</name>
        <t>Many of the security properties of this protocol will derive from
the PAKE protocol being used. Security considerations for PAKE
protocols are noted in <xref target="compatible-pake-protocols"/>.</t>
        <t>If a server doesn't recognize the identity supplied by the
client in the ClientHello <tt>pake</tt> extension, the server <bcp14>MAY</bcp14> abort the handshake with an
"illegal_parameter" alert. In this case, the server acts as an oracle
for identities, in which each handshake allows an attacker
to learn whether the server recognizes a given identity.</t>
        <t>Alternatively, if the server wishes to hide the fact that a client
identity is unrecognized, the server <bcp14>MAY</bcp14> simulate the protocol as
if an identity was recognized, but the password was incorrect.
This is similar to the procedure outlined in <xref target="RFC5054"/>.
The simulation mechanism is described in <xref target="simulation"/>.</t>
      </section>
      <section anchor="ramifications-of-low-entropy-secret-compromise">
        <name>Ramifications of low entropy secret compromise</name>
        <t>As with PSK based authentication, if only PAKE authentication is in use,
then an attacker that learns the low entropy secret could impersonate
either the client or the server. In situations where a notion of stable identity
is available, then certificate-based authentication <bcp14>MAY</bcp14> be used as well to
reduce this risk. For example, requiring the server to authenticate with
a certificate in addition to PAKE authentication means an attacker
that learns the password could only impersonate a client to a server, but could not impersonate a server to a client.
This is an important distinction in situations where
the client sends sensitive data to the server.</t>
      </section>
      <section anchor="spake2plus-sec">
        <name>SPAKE2+ Security Considerations</name>
        <t><xref target="spake2plus"/> describes how to integrate SPAKE2+ into TLS using the <tt>pake</tt>
extension in this document. This integration deviates from the SPAKE2+
protocol in <xref target="SPAKE2PLUS"/> in one important way: the explicit key confirmation
checks required in <xref target="SPAKE2PLUS"/> are replaced with the TLS Finished messages.
This is because the TLS Finished messages compute a MAC over the TLS transcript,
which includes both the <tt>shareP</tt> and <tt>shareV</tt> values exchanged for SPAKE2+.</t>
        <t>[[OPEN ISSUE: this requires formal analysis to confirm.]]</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests that IANA add a value to the TLS
ExtensionType Registry with the following contents:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Extension Name</th>
            <th align="center">TLS 1.3</th>
            <th align="center">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">0xTODO</td>
            <td align="left">pake</td>
            <td align="center">CH, SH</td>
            <td align="center">(this document)</td>
          </tr>
        </tbody>
      </table>
      <t>[[ RFC EDITOR: Please replace "TODO" in the above table with the
value assigned by IANA, and replace "(this document)" with the
RFC number assigned to this document. ]]</t>
      <section anchor="pake-scheme-registry">
        <name>PAKE Scheme registry</name>
        <t>This document requests that IANA create a new registry called
"PAKE Schemes" with the following contents:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">PAKEScheme</th>
              <th align="center">Reference</th>
              <th align="left">Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0xTODO</td>
              <td align="left">SPAKE2PLUS_V1</td>
              <td align="center">(this document)</td>
              <td align="left">N/A</td>
            </tr>
          </tbody>
        </table>
        <t>The SPAKE2PLUS_V1 PAKEScheme variant has the following parameters associated with it:</t>
        <ul spacing="normal">
          <li>
            <t>G: P-256</t>
          </li>
          <li>
            <t>Hash: SHA256</t>
          </li>
          <li>
            <t>KDF: HKDF-SHA256</t>
          </li>
          <li>
            <t>MAC: HMAC-SHA256</t>
          </li>
        </ul>
        <t>Additionally, it uses the M and N values from <xref section="4" sectionFormat="of" target="SPAKE2PLUS"/>, included
below, as compressed points on the P-256 curve, for completeness.</t>
        <artwork><![CDATA[
M =
02886e2f97ace46e55ba9dd7242579f2993b64e16ef3dcab95afd497333d8fa12f

N =
03d8bbd6c639c62937b04d997f38c3770719c629d7014d49a24b4f98baa1292b49
]]></artwork>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the original authors of <xref target="FIRST-DRAFT"/>
for providing a firm basis for the extension mechanism specified in this
document.</t>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change Log</name>
      <t>Since draft-bmw-tls-pake13-02</t>
      <ul spacing="normal">
        <li>
          <t>Updated boilerplate after WG adoption</t>
        </li>
      </ul>
      <t>Since draft-bmw-tls-pake13-01</t>
      <ul spacing="normal">
        <li>
          <t>Require standard TLS Key exchange to be combined with pake</t>
        </li>
        <li>
          <t>Allow combining PAKEs and certificates</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9383">
          <front>
            <title>SPAKE2+, an Augmented Password-Authenticated Key Exchange (PAKE) Protocol</title>
            <author fullname="T. Taubert" initials="T." surname="Taubert"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes SPAKE2+, a Password-Authenticated Key Exchange (PAKE) protocol run between two parties for deriving a strong shared key with no risk of disclosing the password. SPAKE2+ is an augmented PAKE protocol, as only one party has knowledge of the password. This method is simple to implement, compatible with any prime-order group, and computationally efficient.</t>
              <t>This document was produced outside of the IETF and IRTF and represents the opinions of the authors. Publication of this document as an RFC in the Independent Submissions Stream does not imply endorsement of SPAKE2+ by the IETF or IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9383"/>
          <seriesInfo name="DOI" value="10.17487/RFC9383"/>
        </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="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="TLS13">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="CPACE">
          <front>
            <title>CPace, a balanced composable PAKE</title>
            <author fullname="Michel Abdalla" initials="M." surname="Abdalla">
              <organization>Nexus - San Francisco</organization>
            </author>
            <author fullname="Björn Haase" initials="B." surname="Haase">
              <organization>Endress + Hauser Liquid Analysis - Gerlingen</organization>
            </author>
            <author fullname="Julia Hesse" initials="J." surname="Hesse">
              <organization>IBM Research Europe - Zurich</organization>
            </author>
            <date day="16" month="April" year="2025"/>
            <abstract>
              <t>   This document describes CPace which is a protocol that allows two
   parties that share a low-entropy secret (password) to derive a strong
   shared key without disclosing the secret to offline dictionary
   attacks.  The CPace protocol was tailored for constrained devices and
   can be used on groups of prime- and non-prime order.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-cpace-14"/>
        </reference>
        <reference anchor="SPAKE2PLUS">
          <front>
            <title>SPAKE2+, an Augmented Password-Authenticated Key Exchange (PAKE) Protocol</title>
            <author fullname="T. Taubert" initials="T." surname="Taubert"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes SPAKE2+, a Password-Authenticated Key Exchange (PAKE) protocol run between two parties for deriving a strong shared key with no risk of disclosing the password. SPAKE2+ is an augmented PAKE protocol, as only one party has knowledge of the password. This method is simple to implement, compatible with any prime-order group, and computationally efficient.</t>
              <t>This document was produced outside of the IETF and IRTF and represents the opinions of the authors. Publication of this document as an RFC in the Independent Submissions Stream does not imply endorsement of SPAKE2+ by the IETF or IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9383"/>
          <seriesInfo name="DOI" value="10.17487/RFC9383"/>
        </reference>
        <reference anchor="I-D.ietf-tls-hybrid-design">
          <front>
            <title>Hybrid key exchange in TLS 1.3</title>
            <author fullname="Douglas Stebila" initials="D." surname="Stebila">
              <organization>University of Waterloo</organization>
            </author>
            <author fullname="Scott Fluhrer" initials="S." surname="Fluhrer">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Shay Gueron" initials="S." surname="Gueron">
              <organization>University of Haifa and Meta</organization>
            </author>
            <date day="3" month="September" year="2025"/>
            <abstract>
              <t>   Hybrid key exchange refers to using multiple key exchange algorithms
   simultaneously and combining the result with the goal of providing
   security even if a way is found to defeat the encryption for all but
   one of the component algorithms.  It is motivated by transition to
   post-quantum cryptography.  This document provides a construction for
   hybrid key exchange in the Transport Layer Security (TLS) protocol
   version 1.3.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-hybrid-design-15"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="FIRST-DRAFT">
          <front>
            <title>Usage of PAKE with TLS 1.3</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Owen Friel" initials="O." surname="Friel">
              <organization>Cisco</organization>
            </author>
            <date day="16" month="July" year="2018"/>
            <abstract>
              <t>   The pre-shared key mechanism available in TLS 1.3 is not suitable for
   usage with low-entropy keys, such as passwords entered by users.
   This document describes an extension that enables the use of
   password-authenticated key exchange protocols with TLS 1.3.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-barnes-tls-pake-04"/>
        </reference>
        <reference anchor="RFC5054">
          <front>
            <title>Using the Secure Remote Password (SRP) Protocol for TLS Authentication</title>
            <author fullname="D. Taylor" initials="D." surname="Taylor"/>
            <author fullname="T. Wu" initials="T." surname="Wu"/>
            <author fullname="N. Mavrogiannopoulos" initials="N." surname="Mavrogiannopoulos"/>
            <author fullname="T. Perrin" initials="T." surname="Perrin"/>
            <date month="November" year="2007"/>
            <abstract>
              <t>This memo presents a technique for using the Secure Remote Password protocol as an authentication method for the Transport Layer Security protocol. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5054"/>
          <seriesInfo name="DOI" value="10.17487/RFC5054"/>
        </reference>
        <reference anchor="OPAQUE">
          <front>
            <title>The OPAQUE Augmented PAKE Protocol</title>
            <author fullname="Daniel Bourdrez" initials="D." surname="Bourdrez">
         </author>
            <author fullname="Hugo Krawczyk" initials="H." surname="Krawczyk">
              <organization>AWS</organization>
            </author>
            <author fullname="Kevin Lewi" initials="K." surname="Lewi">
              <organization>Meta</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="21" month="November" year="2024"/>
            <abstract>
              <t>   This document describes the OPAQUE protocol, an augmented (or
   asymmetric) password-authenticated key exchange (aPAKE) that supports
   mutual authentication in a client-server setting without reliance on
   PKI and with security against pre-computation attacks upon server
   compromise.  In addition, the protocol provides forward secrecy and
   the ability to hide the password from the server, even during
   password registration.  This document specifies the core OPAQUE
   protocol and one instantiation based on 3DH.  This document is a
   product of the Crypto Forum Research Group (CFRG) in the IRTF.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-opaque-18"/>
        </reference>
        <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="14" month="June" 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-25"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
AA==

-->

</rfc>
