<?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.23 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-guo-pake-in-tls-01" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="PAKE Usage in TLS 1.3">PAKE Usage in TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-guo-pake-in-tls-01"/>
    <author initials="W." surname="Guo" fullname="Wei Guo">
      <organization>Huawei Technologies</organization>
      <address>
        <email>guowei90@huawei.com</email>
      </address>
    </author>
    <author initials="L." surname="Xia" fullname="Liang Xia">
      <organization>Huawei Technologies</organization>
      <address>
        <email>frank.xialiang@huawei.com</email>
      </address>
    </author>
    <author initials="J." surname="Li" fullname="Ji Li">
      <organization>Huawei Technologies</organization>
      <address>
        <email>liji100@huawei.com</email>
      </address>
    </author>
    <date year="2025" month="February" day="25"/>
    <area>General</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>keyword1</keyword>
    <keyword>keyword2</keyword>
    <keyword>keyword3</keyword>
    <abstract>
      <?line 54?>

<t>This document provides a mechanism that uses password-authenticated key exchange (PAKE) as an authentication and key establishment in TLS 1.3, and that supports PAKE algorithms negotiation.</t>
    </abstract>
  </front>
  <middle>
    <?line 59?>

<section anchor="intro">
      <name>Introduction</name>
      <t>In some applications, it is desirable to use a pre-shared low-entropy secret, such as a password, to authenticate with each other between a client and a server. Although TLS 1.3 <xref target="RFC8446"/> itself provides an authentication mechanism of pre-shared keys (PSKs), PSKs need to be full-entropy secrets. If a low-entropy password is directly used in this authentication mechanism, then the PSK binder values can be used by a passive adversary to mount an offline dictionary attack on the password, and even if without the PSK binder and the PSK mechanism is combined with Diffie-Hellman (DH) key establishment, an active adversary can still offline enumerate the password through a man-in-the-middle (MITM) attack.</t>
      <t>Note that there are already some early works about PAKE usage in TLS: the Secure Remote Password (SRP) PAKE protocol has been integrated in prior versions of TLS <xref target="RFC5054"/>, but it does not extend to later TLS 1.3; the Dragonfly PAKE protocol has also been integrated in both prior versions of TLS and the latest TLS 1.3 <xref target="RFC8492"/>; the integration of the OPAQUE <xref target="I-D.draft-irtf-cfrg-opaque-18"/> PAKE protocol with TLS 1.3 has been presented in <xref target="I-D.draft-sullivan-tls-opaque-01"/>. However, they all do not consider PAKE algorithms negotiation, which is very important in practice, because some algorithms may be broken in the future and we need some way to negotiate new algorithms. Although PAKE algorithms negotiation has been mentioned in <xref target="I-D.draft-barnes-tls-pake-04"/>, it only presents the integration of the SPAKE2+ <xref target="RFC9383"/> PAKE protocol with TLS 1.3 assuming that the PAKE algorithm has been negotiated in advance. This document provides a mechanism that uses PAKE as an authentication and key establishment in TLS 1.3, which supports PAKE algorithms negotiation.</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>This document uses terminology such as client, server, connection, handshake, endpoint, and peer that are defined in <xref section="1.1" sectionFormat="of" target="RFC8446"/>.</t>
    </section>
    <section anchor="pake-usage-in-tls-13">
      <name>PAKE Usage in TLS 1.3</name>
      <t>This section describes details about PAKE usage in TLS 1.3.</t>
      <section anchor="extension">
        <name>TLS Extensions</name>
        <t>To use PAKE as an authentication and key establishment mechanism in TLS 1.3, we define three TLS extensions: "pake_algorithms", "pake_share" and "pake_auth_modes".</t>
        <ul spacing="normal">
          <li>
            <t>The "pake_algorithms" extension indicates all the PAKE algorithm suites supported by the client, it can only appear in ClientHello and EncryptedExtension messages, otherwise peers <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert.</t>
          </li>
          <li>
            <t>The "pake_share" extension indicates the specific parameters of PAKE key exchange between both parties, it can only appear in ClientHello, ServerHello, and HelloRetryRequest messages, otherwise peers <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert.</t>
          </li>
          <li>
            <t>The "pake_auth_modes" extension indicates the mode of PAKE authentication for the server, it can only appear in ClientHello and ServerHello messages, otherwise peers <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert.</t>
          </li>
        </ul>
        <section anchor="pake-algorithms">
          <name>PAKE Algorithms</name>
          <t>When sent by the client, the "pake_algorithms" extension indicates PAKE algorithms which the client supports for authenticated key exchange, ordered from most preferred to least preferred.</t>
          <t>The "extension_data" field of this extension contains a "PAKEAlgorithmList" value:</t>
          <artwork><![CDATA[
　enum {
    /* Balanced PAKE algorithms */
    0x0000~0x3FFF

    /* Augmented PAKE algorithms */
    0x4000~0x7FFF

    /* Post-Quantum Balanced PAKE algorithms */
    0x8000~0xBFFF

    /* Post-Quantum Augmented PAKE algorithms */
    0xC000~0xFFFF
    (0xFFFF)
　} PAKEAlgorithm;
]]></artwork>
          <artwork><![CDATA[
  struct {
    　PAKEAlgorithm supported_pake_algorithms<2..2^16-1>;
  } PAKEAlgorithmList;
]]></artwork>
          <t>Here, each PAKE algorithm suite consists of two part, the first part is represented by the first byte and specifies different PAKE algorithms, and the second part is represented by the second byte and specifies different ciphersuites for some PAKE algorithm. For example, the first bytes "0x00" and "0x01" represent CPace <xref target="I-D.draft-irtf-cfrg-cpace-13"/> and SPAKE2 <xref target="RFC9382"/>, respectively; and the first bytes "0x40" and "0x41" represent OPAQUE <xref target="I-D.draft-irtf-cfrg-opaque-18"/> and SPAKE2+ <xref target="RFC9383"/>, respectively. For the SPAKE2+ algorithm with the first byte "0x41", the second bytes "0x00~0xFF" can be used to represent its different ciphersuites (see <xref section="4" sectionFormat="of" target="RFC9383"/>).</t>
          <t>As of TLS 1.3, servers are permitted to send the "pake_algorithms" extension to the client. Clients <bcp14>MUST NOT</bcp14> act upon any information found in "pake_algorithms" prior to successful completion of the handshake but <bcp14>MAY</bcp14> use the information learned from a successfully completed handshake to change what PAKE algorithms they use in their "pake_share" extension in subsequent connections. If the server has a PAKE algorithm it prefers to the ones in the "pake_share" extension but is still willing to accept the ClientHello, it <bcp14>SHOULD</bcp14> send "pake_algorithms" to update the client’s view of its preferences; this extension <bcp14>SHOULD</bcp14> contain all PAKE algorithms the server supports, regardless of whether they are currently supported by the client.</t>
        </section>
        <section anchor="pake_share">
          <name>PAKE Share</name>
          <t>The "pake_share" extension contains the endpoint’s PAKE parameters. The "PAKEShareEntry" value is defined as follows:</t>
          <artwork><![CDATA[
  struct {
      PAKEAlgorithm pake_algorithm;
      opaque pake_message<1..2^16-1>;
  } PAKEShareEntry;
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>The "pake_algorithm" field indicates the PAKE algorithm used.</t>
            </li>
            <li>
              <t>The "pake_message" field indicates the PAKE key exchange information, its contents are determined by the specified PAKE algorithm, as shown below.</t>
            </li>
          </ul>
          <artwork><![CDATA[
  struct {
      select (pake_algorithm) {
      case CPace:
          opaque dh_share;
          opaque associated_data;
      case SPAKE2:
          opaque dh_share;
      case OPAQUE:
          opaque credential_message;
          opaque nonce;
          opaque dh_share;
      case SPAKE2+:
          opaque dh_share;
      };
  } PAKEMessage;
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>The "dh_share" field indicates a (EC)DH public element that is determined by the specified PAKE algorithm and the underlying group. 1) For CPace, the "dh_share" field indicates the value <tt>Ya</tt> or <tt>Yb</tt> in <xref section="6.2" sectionFormat="of" target="I-D.draft-irtf-cfrg-cpace-13"/>; 2) for SPAKE2, this field indicates the value <tt>pA</tt> or <tt>pB</tt> in <xref section="3.3" sectionFormat="of" target="RFC9382"/>; 3) for OPAQUE, this field indicates the value <tt>client_public_keyshare</tt> or <tt>server_public_keyshare</tt> in <xref section="6.1" sectionFormat="of" target="I-D.draft-irtf-cfrg-opaque-18"/>; 4) for SPAKE2+, this field indicates the value <tt>shareP</tt> or <tt>shareV</tt> in <xref section="3.3" sectionFormat="of" target="RFC9383"/>.</t>
            </li>
            <li>
              <t>The "associated_data" field for CPace indicates the value <tt>ADa</tt> or <tt>ADb</tt> in <xref section="3.1" sectionFormat="of" target="I-D.draft-irtf-cfrg-cpace-13"/>.</t>
            </li>
            <li>
              <t>The "credential_message" field for OPAQUE indicates the value <tt>CredentialRequest</tt> or <tt>CredentialResponse</tt> in <xref section="6.3.1" sectionFormat="of" target="I-D.draft-irtf-cfrg-opaque-18"/>.</t>
            </li>
            <li>
              <t>The "nonce" field for OPAQUE indicates the value <tt>client_nonce</tt> or <tt>server_nonce</tt> in <xref section="6.1" sectionFormat="of" target="I-D.draft-irtf-cfrg-opaque-18"/>.</t>
            </li>
          </ul>
          <t>Note that the "random" value of the ClientHello message (see <xref section="4.1.2" sectionFormat="of" target="RFC8446"/>) can be used as a unique session identifier <tt>sid</tt> of the CPace algorithm (see <xref section="3.1" sectionFormat="of" target="I-D.draft-irtf-cfrg-cpace-13"/>).</t>
          <!-- Note that the "random" value of the ClientHello message (see {{Section 4.1.2 of RFC8446}}) can be used as a unique session identifier of the CPace algorithm (see {{Section 3.1 of I-D.draft-irtf-cfrg-cpace-13}}); the "random" values of the ClientHello and ServerHello messages (see {{Section 4.1.2 and Section 4.1.3 of RFC8446}}) can be used as the "client_nonce" and "server_nonce" values of the OPAQUE algorithm, respectively (see {{Section 6.1 of I-D.draft-irtf-cfrg-opaque-18}}). -->

<!-- 
~~~
  struct {
      select (curve_type) {
      case secp256r1 or secp384r1 or secp521r1 or sm2:
          uint8 legency_form = 4;
          opaque X[coordinate_length];
          opaque Y[coordinate_length];
      case curve25519 or curve448 or edwards25519 or edwards448:
          opaque X[coordinate_length];
      };
  } DHShare;
~~~
-->

<t>(1) In the ClientHello message, the "extension_data" field of this extension contains a "PAKEShareClientHello" value:</t>
          <artwork><![CDATA[
  struct {
      opaque client_identity<0..2^16-1>;
      PAKEShareEntry client_shares<0..2^16-1>;
  } PAKEShareClientHello;
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>The "client_identity" field indicates a client's identity used in the PAKE algorithm.</t>
            </li>
            <li>
              <t>The "client_shares" field contains a list of offered PAKEShareEntry values in descending order of client preference.</t>
            </li>
          </ul>
          <t>The contents of "client_shares" field <bcp14>MAY</bcp14> be empty if the client is requesting a HelloRetryRequest. Each <tt>PAKEShareEntry</tt> value <bcp14>MUST</bcp14> correspond to a PAKE algorithm offered in the "pake_algorithms" extension and <bcp14>MUST</bcp14> appear in the same order. However, the values <bcp14>MAY</bcp14> be a non-contiguous subset of the "pake_algorithms" extension and <bcp14>MAY</bcp14> omit the most preferred PAKE algorithms. Such a situation could arise if the most preferred PAKE algorithms are new and unlikely to be supported in enough places to make pregenerating PAKE shares for them efficient.</t>
          <t>Clients can offer as many <tt>PAKEShareEntry</tt> values as the number of supported PAKE algorithms it is offering, each representing a single set of PAKE key exchange parameters. For instance, a client might offer shares for several PAKE algorithms. The "pake_message" values for each <tt>PAKEShareEntry</tt> <bcp14>MUST</bcp14> be generated independently. Clients <bcp14>MUST NOT</bcp14> offer multiple <tt>PAKEShareEntry</tt> values for the same PAKE algorithm. Clients <bcp14>MUST NOT</bcp14> offer any <tt>PAKEShareEntry</tt> values for PAKE algorithms not listed in the client’s "pake_algorithms" extension. Servers <bcp14>MAY</bcp14> check for violations of these rules and abort the handshake with an "illegal_parameter" alert if one is violated. In addition, servers <bcp14>MUST</bcp14> verify that (1) the list of client shares to see if there is one with the provided "client_identity" value, and (2) if the "pake_message" contents in the "client_shares" field are valid (e.g., valid group elements). If either of these checks fails, then servers <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert.</t>
          <t>(2) In a HelloRetryRequest message, the "extension_data" field of this extension contains a "PAKEShareHelloRetryRequest" value:</t>
          <artwork><![CDATA[
  struct {
      PAKEAlgorithm selected_pake_algorithm;
  } PAKEShareHelloRetryRequest;
]]></artwork>
          <t>If a client receives a second HelloRetryRequest in the same connection (i.e., where the ClientHello was itself in response to a HelloRetryRequest), it <bcp14>MUST</bcp14> abort the handshake with an "unexpected_message" alert. Upon receipt of this extension in a HelloRetryRequest, the client <bcp14>MUST</bcp14> verify that (1) the "selected_pake_algorithm" field corresponds to a PAKE algorithm which was provided in the "pake_algorithms" extension in the original ClientHello, and (2) the "selected_pake_algorithm" field does not correspond to a PAKE algorithm which was provided in the "pake_share" extension in the original ClientHello. If either of these checks fails, then the client <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert. Otherwise, when sending the new ClientHello, the client <bcp14>MUST</bcp14> replace the original "pake_share" extension with one containing only a new <tt>PAKEShareEntry</tt> for the PAKE algorithm indicated in the "selected_pake_algorithm" field of the triggering HelloRetryRequest.</t>
          <t>(3) In a ServerHello message, the "extension_data" field of this extension contains a PAKEShareServerHello value:</t>
          <artwork><![CDATA[
  struct {
      opaque server_identity<0..2^16-1>;
      PAKEShareEntry server_share;
  } PAKEShareServerHello;
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>The "server_identity" field indicates a server's identity used in the PAKE algorithm.</t>
            </li>
            <li>
              <t>The "server_share" field contains a single <tt>PAKEShareEntry</tt> value that is in the same PAKE algorithm as one of the client’s shares.</t>
            </li>
          </ul>
          <t>Upon receipt of the ClientHello message, servers use the "client_identity" value to determine if there is a PAKE registration record in their database, if not, servers <bcp14>MAY</bcp14> reply with a fake PAKE response to prevent active client enumeration attacks (see <xref target="enumeration_prevention"/>); if so, servers reply with a normal PAKE response containing a "pake_share" extension in the ServerHello message as described below.</t>
          <!-- MUST NOT send an extension of type "key_share", "pre_shared_key", or "early_data", and -->
<t>If using PAKE key establishment, servers offer exactly one <tt>PAKEShareEntry</tt> in the ServerHello. This value <bcp14>MUST</bcp14> be in the same PAKE algorithm as the <tt>PAKEShareEntry</tt> value offered by the client that the server has selected for the negotiated PAKE key exchange. Servers <bcp14>MUST NOT</bcp14> send a <tt>PAKEShareEntry</tt> for any PAKE algorithm not indicated in the client’s "pake_algorithms" extension. If using PAKE key establishment and a HelloRetryRequest containing a "pake_share" extension was received by the client, the client <bcp14>MUST</bcp14> verify that the selected <tt>PAKEAlgorithm</tt> in the ServerHello is the same as that in the HelloRetryRequest. If this check fails, the client <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert. In addition, the client <bcp14>MUST</bcp14> verify that (1) the "server_identity" value to see if it is the target server's name, and (2) if the "pake_message" content in the "server_share" field is valid (e.g., a valid group element). If either of these checks fails, then the client <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert.</t>
        </section>
        <section anchor="pake-authentication-modes">
          <name>PAKE Authentication Modes</name>
          <t>In order to use PAKE, clients <bcp14>MUST</bcp14> also send a "pake_auth_modes" extension. The semantics of this extension are that the client wants to identify which authentication modes will be used, and its content <bcp14>MAY</bcp14> be multiple authentication modes. The "extension_data" field of this extension contains a "PAKEAuthModes" value:</t>
          <artwork><![CDATA[
  enum {
      pake_auth (0),
      pake_certificate_auth (1),
      (255)
  } PAKEAuthMode;
]]></artwork>
          <artwork><![CDATA[
  struct {
      PAKEAuthMode auth_modes<1..255>;
  } PAKEAuthModes;
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>The "pake_auth" mode indicates PAKE-only authentication. In this mode, the server <bcp14>MUST NOT</bcp14> send the Certificate, CertificateVerify and CertificateRequest messages.</t>
            </li>
            <li>
              <t>The "pake_certificate_auth" mode indicates PAKE authentication combined with certificate authentication. In this mode, the server <bcp14>MUST</bcp14> send the Certificate and CertificateVerify messages to conduct certificate-based server authentication, and optionally sends the CertificateRequest message if certificate-based client authentication is desired.</t>
            </li>
          </ul>
          <t>A client <bcp14>MUST</bcp14> provide a "pake_auth_modes" extension if it offers "pake_algorithms" and "pake_share" extensions. If clients offer "pake_algorithms" and "pake_share" without a "pake_auth_modes" extension, servers <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert. Servers <bcp14>MUST</bcp14> provide only one authentication mode in the "pake_auth_modes" extension to unambiguously identify which mode was selected, but <bcp14>MUST NOT</bcp14> select an authentication mode that is not listed by the client. If servers offer "pake_share" without a "pake_auth_modes" extension, clients <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert.</t>
        </section>
        <section anchor="enumeration_prevention">
          <name>Enumeration Prevention</name>
          <t>If there is not a PAKE registration record on the server and the server directly aborts the handshake with an "illegal_parameter" alert, then this will provide an attacker with an oracle for client identities, that allows the attacker to learn whether there exists a PAKE registration record for the given "client_identity" value. To prevent this active client enumeration attack, the server can generate a fake PAKE response as follows.</t>
          <ul spacing="normal">
            <li>
              <t>Select the first <tt>pake_algorithm</tt> that is supported by both the client and the server.</t>
            </li>
            <li>
              <t>Offer a "pake_share" extension in the ServerHello message, which includes the "server_identity", the selected "pake_algorithm" and the associated "pake_message" values. Here, the "dh_share" field of the "pake_message" can be generated by picking a value at random from the set of all valid DH shares of the selected <tt>pake_algorithm</tt>; for OPAQUE, the "credential_message" field of the "pake_message" can be generated according to <xref section="6.3.2.2" sectionFormat="of" target="I-D.draft-irtf-cfrg-opaque-18"/> to contain a fake <tt>CredentialResponse</tt>.</t>
            </li>
            <li>
              <t>Complete the remainder of the protocol as usual.</t>
            </li>
          </ul>
          <t>As a result, the normal and fake PAKE responses are indistinguishable from one another, and the client cannot figure out whether the given "client_identity" value has a PAKE registration record on the server upon receiving the ServerHello and server's Finished messages. The verification of the server's Finished message will fail with overwhelming probability, since the server's DH share is a randomly picked value. However, the unsuccessful verification make the attacker only know whether a given (client_identity, password) pair is correct, and it cannot be used by the attacker to learn whether the <tt>client_identity</tt> is an unregistered client identity.</t>
        </section>
      </section>
      <section anchor="key-schedule">
        <name>Key Schedule</name>
        <t>Based on the PAKE parameters exchanged in the ClientHello and ServerHello, the client and server execute the negotiated PAKE protocol to derive a PAKE shared secret, which is denoted by <tt>pake_shared_secret</tt>.</t>
        <ul spacing="normal">
          <li>
            <t>For CPace, this secret indicates the value <tt>ISK</tt> in <xref section="6.2" sectionFormat="of" target="I-D.draft-irtf-cfrg-cpace-13"/>.</t>
          </li>
          <li>
            <t>For SPAKE2, this secret indicates the concatenated value <tt>Ke || Ka</tt> in <xref section="3.3" sectionFormat="of" target="RFC9382"/>.</t>
          </li>
          <li>
            <t>For OPAQUE, this secret indicates the concatenated value <tt>Km2 || Km3 || session_key</tt> in Section <xref target="I-D.draft-irtf-cfrg-opaque-18" section="6.4.3" sectionFormat="bare"/> and Section <xref target="I-D.draft-irtf-cfrg-opaque-18" section="6.4.4" sectionFormat="bare"/> of <xref target="I-D.draft-irtf-cfrg-opaque-18"/>.</t>
          </li>
          <li>
            <t>For SPAKE2+, this secret indicates the value <tt>K_main</tt> in <xref section="3.3" sectionFormat="of" target="RFC9383"/>.</t>
          </li>
        </ul>
        <t>As shown below, the "pake_shared_secret" value is used as the "(EC)DHE" input to the TLS 1.3 key schedule, and the remaining process of the key schedule is unchanged.</t>
        <artwork><![CDATA[
                                0
                                |
                                v
                   PSK -> HKDF-Extract = Early Secret
                                |
                                +-----> Derive-Secret(...)
                                +-----> Derive-Secret(...)
                                +-----> Derive-Secret(...)
                                |
                                v
                          Derive-Secret(., "derived", "")
                                |
                                v
    pake_shared_secret -> 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>
      </section>
      <section anchor="authentication-messages">
        <name>Authentication Messages</name>
        <t>In this mechanism, PAKEs are used for both password authentication and key establishment, the derived PAKE shared secret is fed into the TLS 1.3 key schedule, and PAKE-based authentication is finally confirmed by the validation of the Finished message.</t>
        <t>Note that PAKE-based authentication is compatible with server-side certificate authentication. If the client specifies a "pake_auth" mode in the "pake_auth_modes" extension, then the server does not need to send Certificate and CertificateVerify messages, and only needs to send a Finished message to perform server-side PAKE authentication. If the client specifies a "pake_certificate_auth" mode in the "pake_auth_modes" extension, or specifies "pake_auth" and "pake_certificate_auth" modes and the server selects the latter one, then the server needs to send Certificate and CertificateVerify messages to conduct server-side certificate authentication, and send a Finished message to perform server-side PAKE authentication.</t>
        <t>PAKE-based authentication is also compatible with client-side certificate authentication, because the server can optionally send a CertificateRequest message to the client. If the client receives a CertificateRequest message, it needs to send Certificate and CertificateVerify messages to conduct client-side certificate authentication, and send a Finished message to perform client-side PAKE authentication; otherwise only the Finished message needs to be sent.</t>
        <!-- In the CPace protocol {{I-D.draft-irtf-cfrg-cpace-13}}  -->

</section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="client-enumeration">
        <name>Client Enumeration</name>
        <t>Client enumeration denotes attacks where the attacker attempts to learn whether a given client identity has a PAKE registration record on a server. These attacks are migrated by requiring servers to process non-existent client identities in a way that is indistinguishable from their behavior with registered clients.</t>
      </section>
      <section anchor="key-confirmation">
        <name>Key Confirmation</name>
        <t>Because the key exchange transcript specified in TLS 1.3 is a superset of the transcript as defined in PAKEs, the explicit key confirmation of PAKEs can be achieved by the TLS 1.3 Finished messages without generating and verifying the PAKEs' own key confirmation MACs additionally.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <!-- This document has no IANA actions. -->

<t>This document defines three new TLS extension types "pake_algorithms", "pake_share" and "pake_auths" with the following contents (see <xref target="ref-to-tab1"/>), and requests that IANA add the three values to the "TLS ExtensionType Values" Registry defined in <xref target="RFC8446"/> and <xref target="RFC8447"/>.</t>
      <table anchor="ref-to-tab1">
        <name>New TLS Extension Types</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Extension Name</th>
            <th align="left">TLS 1.3</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD1</td>
            <td align="left">pake_algorithms</td>
            <td align="left">CH, EE</td>
            <td align="left">PRF XXXX</td>
          </tr>
          <tr>
            <td align="left">TBD2</td>
            <td align="left">pake_share</td>
            <td align="left">CH, SH, HRR</td>
            <td align="left">PRF XXXX</td>
          </tr>
          <tr>
            <td align="left">TBD3</td>
            <td align="left">pake_auth_modes</td>
            <td align="left">CH, SH</td>
            <td align="left">PRF XXXX</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8446">
          <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="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="RFC8492">
          <front>
            <title>Secure Password Ciphersuites for Transport Layer Security (TLS)</title>
            <author fullname="D. Harkins" initials="D." role="editor" surname="Harkins"/>
            <date month="February" year="2019"/>
            <abstract>
              <t>This memo defines several new ciphersuites for the Transport Layer Security (TLS) protocol to support certificateless, secure authentication using only a simple, low-entropy password. The exchange is called "TLS-PWD". The ciphersuites are all based on an authentication and key exchange protocol, named "dragonfly", that is resistant to offline dictionary attacks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8492"/>
          <seriesInfo name="DOI" value="10.17487/RFC8492"/>
        </reference>
        <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="RFC9382">
          <front>
            <title>SPAKE2, a Password-Authenticated Key Exchange</title>
            <author fullname="W. Ladd" initials="W." surname="Ladd"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes SPAKE2, which is a protocol for two parties that share a password to derive a strong shared key without disclosing the password. This method is compatible with any group, is computationally efficient, and has a security proof. This document predated the Crypto Forum Research Group (CFRG) password-authenticated key exchange (PAKE) competition, and it was not selected; however, given existing use of variants in Kerberos and other applications, it was felt that publication was beneficial. Applications that need a symmetric PAKE, but are unable to hash onto an elliptic curve at execution time, can use SPAKE2. This document is a product of the Crypto Forum Research Group in the Internet Research Task Force (IRTF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9382"/>
          <seriesInfo name="DOI" value="10.17487/RFC9382"/>
        </reference>
        <reference anchor="RFC8447">
          <front>
            <title>IANA Registry Updates for TLS and DTLS</title>
            <author fullname="J. Salowey" initials="J." surname="Salowey"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document describes a number of changes to TLS and DTLS IANA registries that range from adding notes to the registry all the way to changing the registration policy. These changes were mostly motivated by WG review of the TLS- and DTLS-related registries undertaken as part of the TLS 1.3 development process.</t>
              <t>This document updates the following RFCs: 3749, 5077, 4680, 5246, 5705, 5878, 6520, and 7301.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8447"/>
          <seriesInfo name="DOI" value="10.17487/RFC8447"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.draft-irtf-cfrg-opaque-18">
          <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="I-D.draft-sullivan-tls-opaque-01">
          <front>
            <title>OPAQUE with TLS 1.3</title>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Hugo Krawczyk" initials="H." surname="Krawczyk">
              <organization>IBM Research</organization>
            </author>
            <author fullname="Owen Friel" initials="O." surname="Friel">
              <organization>Cisco</organization>
            </author>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="22" month="February" year="2021"/>
            <abstract>
              <t>   This document describes two mechanisms for enabling the use of the
   OPAQUE password-authenticated key exchange in TLS 1.3.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-sullivan-tls-opaque-01"/>
        </reference>
        <reference anchor="I-D.draft-barnes-tls-pake-04">
          <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="I-D.draft-irtf-cfrg-cpace-13">
          <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="14" month="October" year="2024"/>
            <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-13"/>
        </reference>
      </references>
    </references>
    <?line 342?>

<!-- # Acknowledgements
{:numbered="false"}

The authors would like to thank... -->



  </back>
  <!-- ##markdown-source:
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
E54HLHf/DSbXvyaEXAAA

-->

</rfc>
