<?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-guo-tls-exported-pake-00" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="TLS Exported PAKE">PAKE Extension for TLS Exported Authenticator</title>
    <seriesInfo name="Internet-Draft" value="draft-guo-tls-exported-pake-00"/>
    <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>
    <author initials="Y." surname="Li" fullname="Yong Li">
      <organization>Huawei Technologies</organization>
      <address>
        <email>Yong.Li1@huawei.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <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 enables the use of password-authenticated key exchange (PAKE) with TLS Exported Authenticator, and that supports PAKE algorithm negotiation.</t>
    </abstract>
  </front>
  <middle>
    <?line 58?>

<section anchor="intro">
      <name>Introduction</name>
      <t>In some cases, it is desirable to enable one party and its peers of a TLS or DTLS connection to authenticate mutually using password-authenticated key exchange (PAKE) protocols after the connection has been established. This not only can defend against password leakages caused by PKI failures (e.g., phishing attacks) when passwords are transmitted in plaintext over the (D)TLS connection, but also can make changes to the TLS layer as small as possible when compared to using PAKEs to establish the (D)TLS connection. This strategy is often called defense-in-depth, the security of application-layer password authentication is still guaranteed even if some failures occur at the underlying (D)TLS layer.</t>
      <t>Note that the use of OPAQUE <xref target="RFC9807"/> with Exported Authenticator <xref target="RFC9261"/> has been discussed in <xref target="I-D.draft-sullivan-tls-opaque-01"/>. However, it does 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. This document provides a mechanism that uses a PAKE extension for (D)TLS Exported Authenticator to execute application-layer password authentication at any time after the (D)TLS handshake has completed, which supports PAKE algorithm negotiation.</t>
      <t>The minimum version of TLS and DTLS required to implement the mechanism described in this document are TLS 1.2 <xref target="RFC5246"/> and DTLS 1.2 <xref target="RFC6347"/>. (These were obsoleted by TLS 1.3 <xref target="RFC8446"/> and DTLS 1.3 <xref target="RFC9147"/>.)</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="negotiation">
      <name>PAKE Algorithm Negotiation</name>
      <t>This document defines a new TLS extension type "pake_algorithm". This extension can only appear in ClientHello and EncryptedExtensions messages, otherwise peers <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert. 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 pake_algorithm_list<2..2^16-1>;
  } PAKEAlgorithmList;
]]></artwork>
      <t>In this document, two PAKE algorithms are considered: SPAKE2 <xref target="RFC9382"/> and SPAKE2+ <xref target="RFC9383"/>. The former is a symmetric PAKE algorithm and the latter is an asymmetric PAKE algorithm. 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 "0x01" and "0x41" represent SPAKE2 <xref target="RFC9382"/> 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>The "pake_algorithm" extension <bcp14>MAY</bcp14> be included by the client in its ClientHello message, and the corresponding "extension_data" field contains a list of PAKE algorithm suites supported by the client, ordered from most preferred to least preferred. After receiving a ClientHello message containing the "pake_algorithm" extension, the server <bcp14>MAY</bcp14> return a suitable PAKE algorithm selection response to the client. The server will ignore any algorithm that it does not support. The "pake_algorithm" extension <bcp14>MAY</bcp14> be returned by the server in its EncryptedExtensions message, and the corresponding "extension_data" field <bcp14>MUST</bcp14> contain exactly one "PAKEAlgorithm".</t>
      <t>Therefore, a full handshake with the "pake_algorithm" extension in the ClientHello and EncryptedExtensions messages has the following flow (see <xref target="ref-to-fig1"/>).</t>
      <figure anchor="ref-to-fig1">
        <name>Message Flow for a Full TLS Handshake with the pake_algorithm Extension</name>
        <artwork><![CDATA[
         Client                                              Server
    
Key   ^  ClientHello
Exch  |  + key_share*
      |  + pake_algorithm
      v    (list of algorithms)  -------->    
                                                      ServerHello  ^  Key
                                                     + key_share*  v  Exch
                                            {EncryptedExtensions}  ^  
                                                 + pake_algorithm  |  Server
                                             (selected algorithm)  |  Params
                                            {CertificateRequest*}  v  
                                                   {Certificate*}  ^
                                             {CertificateVerify*}  |  Auth
                                                       {Finished}  v
                                 <--------    [Application Data*]
      ^  {Certificate*}
Auth  |  {CertificateVerify*}
      v  {Finished}              -------->
         [Application Data]      <------->     [Application Data]
]]></artwork>
      </figure>
    </section>
    <section anchor="exported_pake">
      <name>PAKE with TLS Exported Authenticator</name>
      <section anchor="tls-certificaterequest-message-extension">
        <name>TLS CertificateRequest Message Extension</name>
        <t>This document also defines a new TLS extension type "pake_share". This extension can only appear in CertificateRequest (or ClientCertificateRequest) message during Exported Authenticator-based post-handshake authentication, otherwise peers <bcp14>MUST</bcp14> abort the handshake with an "illegal_parameter" alert.</t>
        <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 SPAKE2:
          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 SPAKE2, this field indicates the value <tt>pA</tt> or <tt>pB</tt> in <xref section="3.3" sectionFormat="of" target="RFC9382"/>; 2) 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>
        </ul>
        <t>(1) In a ClientCertificateRequest message, the "extension_data" field of this extension contains a "ClientPAKEShare" value.</t>
        <artwork><![CDATA[
  struct {
      opaque client_identity<0..2^16-1>;
      PAKEShareEntry client_share;
  } ClientPAKEShare;
]]></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_share" field contains a single "PAKEShareEntry" value, where the "pake_algorithm" field is set to the negotiated PAKE algorithm in the (D)TLS handshake.</t>
          </li>
        </ul>
        <t>(2) In a CertificateRequest message, the "extension_data" field of this extension contains a "ServerPAKEShare" value.</t>
        <artwork><![CDATA[
  struct {
      PAKEShareEntry server_share;
  } ServerPAKEShare;
]]></artwork>
        <ul spacing="normal">
          <li>
            <t>The "server_share" field contains a single "PAKEShareEntry" value, where the "pake_algorithm" field is also set to the negotiated PAKE algorithm in the (D)TLS handshake.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-sequence">
        <name>Message Sequence</name>
        <t>Note that two messages are defined in <xref target="RFC9261"/>: authenticator requests and authenticators. After the (D)TLS handshake (with the "pake_algorithm" extension) has completed, these messages can be combined in the following sequence to achieve PAKE-based mutual authentication at the application layer.</t>
        <ul spacing="normal">
          <li>
            <t>The client generates an authenticator request (<tt>ClientCertificateRequest</tt> with the "pake_share" extension).</t>
          </li>
          <li>
            <t>The server generates an authenticator request (<tt>CertificateRequest</tt> with the "pake_share" extension) and an authenticator (server <tt>Finished</tt>) corresponding to the client's authenticator request.</t>
          </li>
          <li>
            <t>The client validates the server's authenticator and generates an authenticator (client <tt>Finished</tt>) corresponding to the server's authenticator request.</t>
          </li>
          <li>
            <t>The server validates the client's authenticator.</t>
          </li>
        </ul>
        <t><xref target="ref-to-fig2"/> shows a full message sequence of using PAKE with TLS Exported Authenticator, followed by a detailed description.</t>
        <figure anchor="ref-to-fig2">
          <name>Message Sequence of Using PAKE with TLS Exported Authenticator</name>
          <artwork><![CDATA[
  Client                                                               Server
    |                                                                    |
    |               (D)TLS Handshake (with pake_algorithm)               |
    |<------------------------------------------------------------------>|
    |                                                                    |
    |                                                                    |
    |  Authenticator Request (ClientCertificateRequest with pake_share)  |
    |------------------------------------------------------------------->|
    |                                                                    |
    |     Authenticator Request (CertificateRequest with pake_share)     |
    |                 Authenticator (server Finished)                    |
    |<-------------------------------------------------------------------|
    |                                                                    |
    |                 Authenticator (client Finished)                    |
    |------------------------------------------------------------------->|
    |                                                                    |
]]></artwork>
        </figure>
        <t>(1) When PAKE-based mutual authentication at the application layer needs to be performed, it is <bcp14>REQUIRED</bcp14> to generate a <tt>ClientCertificateRequest</tt> message. The client sets the "certificate_request_context" field to a randomly generated string, and sets the "pake_share" extension to a "ClientPAKEShare" value, where the "client_identity" is its identity used to authenticate and the "client_share" field is constructed by setting the negotiated PAKE algorithm suite and computing its corresponding PAKE share. The computation of PAKE share <bcp14>SHOULD</bcp14> conform to the specification of the used PAKE algorithm. The client then sends the <tt>ClientCertificateRequest</tt> message to the server.</t>
        <t>(2) After receiving the <tt>ClientCertificateRequest</tt> message, the server first parses it to obtain "certificate_request_context", "client_identity" and "client_share" fields, uses the "client_identity" value to search a match password or password file. To generate a <tt>CertificateRequest</tt> message, the server sets the "certificate_request_context" field to a randomly generated string, and sets the "pake_share" extension to a "ServerPAKEShare" value, where the "server_share" field is constructed by setting the negotiated PAKE algorithm suite and computing its corresponding PAKE share. Based on the received client's share and its own secret, the server first derives a PAKE shared secret, and then derives two keys as follows.</t>
        <artwork><![CDATA[
client_key || server_key = KDF(pake_shared_secret, H(ClientCertificateRequest || CertificateRequest), "TLSExportedPAKE", L)
]]></artwork>
        <t>Here, <tt>KDF(ikm, salt, info, L)</tt> and <tt>H(.)</tt> indicate the key-derivation function (KDF) and the hash function, respectively, which are negotiated in the PAKE algorithm suite; the PAKE shared secrets for different PAKEs are defined as follows:</t>
        <ul spacing="normal">
          <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 SPAKE2+, this secret indicates the value <tt>K_main</tt> in <xref section="3.3" sectionFormat="of" target="RFC9383"/>.</t>
          </li>
        </ul>
        <t>Then, the server computes its "Finished" value as follows, where the Handshake Context, Finished MAC Key, <tt>Hash</tt> are defined in <xref section="5.1" sectionFormat="of" target="RFC9261"/> and <tt>HMAC</tt> is defined in <xref section="5.2.3" sectionFormat="of" target="RFC9261"/>. Finally, the server sends the <tt>CertificateRequest</tt> and server <tt>Finished</tt> messages to the client.</t>
        <artwork><![CDATA[
server Finished = HMAC(Hash(server Finished MAC Key || server_key), Hash(server Handshake Context || client authenticator request))
]]></artwork>
        <t>(3) After receiving the <tt>CertificateRequest</tt> and server <tt>Finished</tt> messages, the client first parses the former to obtain the "certificate_request_context" and "server_share" fields. Based on the received server's share and its own secret, the client derives a PAKE shared secret, and then derives two keys using the same way as the server side. The client then authenticates the server by verifying the server "Finished" value. If this verification succeeds, the client computes its "Finished" value as follows, and sends the client <tt>Finished</tt> message to the server.</t>
        <artwork><![CDATA[
client Finished = HMAC(Hash(client Finished MAC Key || client_key), Hash(client Handshake Context || server authenticator request))
]]></artwork>
        <t>Otherwise, the client <bcp14>MAY</bcp14> terminate the (D)TLS connection.</t>
        <t>(4) After receiving the client <tt>Finished</tt> message, the server authenticates the client by verifying the client "Finished" value. If this verification succeeds, the server accepts the client's request at the application layer, otherwise rejects.</t>
        <!-- # Security Considerations -->

</section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document defines two new TLS extension types "pake_algorithm" and "pake_share" with the following contents (see <xref target="ref-to-tab1"/>), and requests that IANA add the two 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_algorithm</td>
            <td align="left">CH, EE</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">TBD2</td>
            <td align="left">pake_share</td>
            <td align="left">CR</td>
            <td align="left">RFC 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="RFC9807">
          <front>
            <title>The OPAQUE Augmented Password-Authenticated Key Exchange (aPAKE) Protocol</title>
            <author fullname="D. Bourdrez" initials="D." surname="Bourdrez"/>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="K. Lewi" initials="K." surname="Lewi"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="July" year="2025"/>
            <abstract>
              <t>This document describes the OPAQUE protocol, an Augmented (or Asymmetric) Password-Authenticated Key Exchange (aPAKE) protocol 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="RFC" value="9807"/>
          <seriesInfo name="DOI" value="10.17487/RFC9807"/>
        </reference>
        <reference anchor="RFC9261">
          <front>
            <title>Exported Authenticators in TLS</title>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document describes a mechanism that builds on Transport Layer Security (TLS) or Datagram Transport Layer Security (DTLS) and enables peers to provide proof of ownership of an identity, such as an X.509 certificate. This proof can be exported by one peer, transmitted out of band to the other peer, and verified by the receiving peer.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9261"/>
          <seriesInfo name="DOI" value="10.17487/RFC9261"/>
        </reference>
        <reference anchor="RFC5246">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
            <author fullname="T. Dierks" initials="T." surname="Dierks"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2008"/>
            <abstract>
              <t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol. The TLS protocol provides communications security over the Internet. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5246"/>
          <seriesInfo name="DOI" value="10.17487/RFC5246"/>
        </reference>
        <reference anchor="RFC6347">
          <front>
            <title>Datagram Transport Layer Security Version 1.2</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="January" year="2012"/>
            <abstract>
              <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol. The DTLS protocol provides communications privacy for datagram protocols. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees. Datagram semantics of the underlying transport are preserved by the DTLS protocol. This document updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6347"/>
          <seriesInfo name="DOI" value="10.17487/RFC6347"/>
        </reference>
        <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="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="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="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="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-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>
      </references>
    </references>
    <?line 273?>

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

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

<section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>Hui Ye <br/>
  Huawei Technologies <br/>
  yehui.ustc@huawei.com</t>
      <t>Feng Geng <br/>
  Huawei Technologies <br/>
  gengfeng@huawei.com</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
/90OAGXIdCLKPy39P1s5QTEkPQAA

-->

</rfc>
