<?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-bmw-tls-pake13-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="TLS 1.3 PAKE">A Password Authenticated Key Exchange Extension for TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-bmw-tls-pake13-02"/>
    <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="July" day="07"/>
    <area>Security</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 33?>

<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>
  <middle>
    <?line 41?>

<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-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="17" month="June" 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 all but one of the component algorithms is broken.
   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.

   Discussion of this work is encouraged to happen on the TLS IETF
   mailing list tls@ietf.org or on the GitHub repository which contains
   the draft: https://github.com/dstebila/draft-ietf-tls-hybrid-design.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-hybrid-design-13"/>
        </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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
+G93FyG6/1oAAA==

-->

</rfc>
