<?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-bmw-tls-pake13-01" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.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-01"/>
    <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="February" day="11"/>
    <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 both a <tt>signature_algorithms</tt> and <tt>supported_groups</tt> extensions</t>
          </li>
          <li>
            <t>includes a <tt>pake</tt> extension</t>
          </li>
        </ul>
        <t>If a client sends the <tt>pake</tt> extension, then it <bcp14>MAY</bcp14> also send the
<tt>key_share</tt> and <tt>pre_shared_key</tt> extensions, to allow the server to
choose an authentication mode. Unlike PSK-based authentication,
however, authentication with PAKE cannot be combined with the
normal TLS key exchange mechanism. Forward secrecy is provided by
the PAKE itself.</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>key_share</tt>, <tt>pre_shared_key</tt>, or <tt>early_data</tt>.</t>
        <t>Use of PAKE authentication is not compatible with standard
certificate-based authentication of both clients and servers. If use
of a PAKE is negotiated, then servers <bcp14>MUST NOT</bcp14> include a Certificate,
CertificateVerify, or CertificateRequest message in the handshake.</t>
      </section>
      <section anchor="key-schedule-modifications">
        <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 used as 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 populate 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 used as
input to the TLS 1.3 key schedule. Specifically, <tt>K_shared</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 -> 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="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>
  </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="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>
        <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>
      </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="15" month="September" year="2024"/>
            <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-22"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1c6XIbyZH+X09Rw/lh0gawvCSKnMsckhoxREq0QM2sY2Is
FroLQFuNbrirQQqm5GfZZ9kn2zzqbIAcjdf7YyOscHiIPqqyMrMyvzyq+/2+
aIu21EfyWF4pY+7qJpfHi3aqq7bIVKtz+VIv5dmHbKqqiYY/Wl2Zoq7kuG7k
9cVQ7gz2hBqNGn175H7Lq+OXZyKvs0rNYOS8UeO2P5rd9dvS9Ofqvd7Z65cw
tmkFTjGpm+WRLKpxLUQxb45k2yxMu7u9fbi9K1Sj1ZEc6mzRFO1SvNdLJPFI
nletbird9k9xdCFMq6r8nSrrCmZcaiPmxZH8ua2znjR10zZ6bOCv5Qz/+EUI
BUusmyMh+xJmNkfyYiC/V4uZqoSEf0z4hVo0Kr5cNxNVFX9XLTAAODafl7oH
lGQDuqtnqiiPZPluRG/8UeH9QVbPcBaaZOMUZtHVX9WsqDaEn2fjVN0WeXon
nWrjh7qelFpeXJzQXTtVju+NdPXHCd1O5hoO5KWu6ipMM4TBm3Dx0cXYCQy+
8m6Gr6xZzslAHg/kT3Wdh0lOpk1h2no+1U1883Mmy9TdH6dazYtqMipaMwDp
CiH6/b5UI9M2KoOf11Mt543umykoRi5BHeRMo24WZibVLYyjRsCnovK6WBhZ
1a00i6LFWwL1dmEU6PJd0U5lWd/1Qdeber7E0VBJFtlUKiPndjsYqVHXYLbR
Et7UjRkAGTAsKPgCWNPKXJusKUbaSFVJ7XdIO1UtvIuzGvih8WVZj4UbuK+S
fYZr0W6fzZsadLcuDVNpFzOw/JgVeQ5LEV/iNmjqfJEhX4U4PR+eXByfX569
OZKXuIx6DBMDqS1QhZzI6nkBU42beibv7797fv5meN0/fXP8/Pqb8/7pYKRg
Sxm/TT99ErCp8L2iogUAVZk2BocdaRCTXMxzpH0giSHwPyVhZe/7RdWHZycN
PkzbX+JAU2UEymKpQR5aV9IUk6oYw/orvMBbHJ5U5dIUZgC7XgOV7sanTzQI
XEDaduflwvThHhCJIp3VjSYb0sxIyYBV5zBBPdMSFRd5DFdBvAUxAkRWNKQq
bW1lBLRnZYHyxGlAzre6EXA3lhI+DRYGnqhb1PCFQS6oRIsi9bxV5UL3hNMo
RerTd+rk9IBJnTcFLAPmRN0hFoPQeyy+8aIiCasSGQRsBPZrfKWG/U+KKVA8
BQw8aWihLHnNhlPLN3pWA/XewqOB9jomN4dvrrYE6MOb5ydPtp/sf/qEAtXS
zHWG4pFwPxncKXyOigEvSXwLDL7mvVbMZjovgF3lkrdDjnxzG3KkM4U7AQTR
aGA4rJW0S5ww9xN/g6IYkijS6zPQLNjDIM+7aQHcrWoBpn8Cj+kPYH+QLt4v
3gy0RpdjxzKURbAbqD+RlHGFuOtEamiM3LwavjRbA/mivtNAUU/ib5RpzruU
ZOW5Wmmdo/6MtNwYL8rSKchGz7MAJTQqqhzIJlWxgwE9okMPbBEciG7DmLN6
gXoq84L1ooFt07Yqe295iZQNxLBG7pQ8j/fNw5fR0oFgZxmJDfikAd6iOYHd
u5jN7fRwkR5gdvMmsvqhc9pVQCIK31F5B+STVq5sKkk8BUpBPdKtA9u50S1I
7Qx3JG4tpBr3YJ6TLSEOI+eQIKnHYw3rv0U9a/TfFkVjDS28JWCBOUz0nnf4
B9gHLW7xx4yvQT4UZopGXWziHtny4rQmbp3NJyKD2b9B83QjyPqj2DLVgHjA
TipQCTSfKK2EJpwJVRUnCOPAj4mudFMAhCmsN2E2x5rAowP5wvuOyAqSyGaL
si3A4YK2AMMapB5nBAP7E8xuQMiaRhdsgmBQpy8RD9cK8q4oSzkCUwhP3mrx
vqrvSp1PtLM+jtng/mnKvrcoVt1B80F81iGhDfBvbOrBZAC7coLc1myxDOuM
FTUZ4rlqWuImzk0jAExYqNJPvcWmLJvWRUZ0kenDNajKD4W2uAH4AnbZ0KIE
cFh/QLcB4HgZFN0a/PPjV8fIOXBfzsoDN49RF8ZFQ7DWaGu7I40ZFxXpS1ZX
qOfBy5OYWB9weFzGEOnc/UPHUt/ffwHm9nDv2R7YaPT/17oBxFiX9WTJ4AgV
mVHLxuXb4TUYG/qvfPWa/n5z9qe352/OTvHv4Yvjiwv/h7BPDF+8fntxGv4K
b568vrw8e3XKL8NVmVwSG5fHf4Y7yNqN11fX569fHV9ssObGbMCtz1YRPUoz
R0aAMIxInMr3J1f//V87+3bBuzs7h+D++ceznQPwUGRfeDZSCv4JnFsK8Pda
NTiKAvXMAFC2qgRPAW7TTOu7SoLn1sC93/+MnPnlSH49yuY7+9/aC7jg5KLj
WXKReLZ6ZeVlZuKaS2um8dxMrnc4ndJ7/Ofkt+N7dPHr78CQatnfefbdt4J1
xJt/k3ryjqBKUxN2ov116mI9q4I7+wefPoEnW7SkvBj/ATYBd6zZKkCcBQaC
RMO+HwxiUy8m03rRkuYOdbuYE/IBbdVkdpxLDDYwbLwueT1rd9koicgood/F
0dAkERgjn4/DoZ4Fm7QJZDv7w1tYqJghgPaRGEKKugOZNs2WNSy5biHoMA5p
i+6EsTFG1fcWED2AAlfK9qiEIBggxAwVGmNejln86q3GMhJiE4UzZvWiAZ7R
Sr2Vh9AMYuFMe5rQ3oyLyYLBm+i6h+AVmJdgyRiJGTlTS1aDZAYBAAocZ1sg
/AIgxGgJt5ucFPiTBUFSptWdR9CRIzPr7IzOEjxp5JSteMfsUQTCY6AMQdbW
eebCRiaJt8KZv7SLgKgaiAe/BlMCdselAuKZz+uGFVelU/ViT2cAuaK9Zo8e
1NJNyjO80GVp/TAHAzc4YnTvhtXrSIh//OMfQlcLiL0oYYDDbm5/uH59+nqr
JzefPnmy92RLfApJluvlXH9Fb3Hgq5ZlrXLnXS2VYbdgYIA3xjXMeofErJAi
IJCGaBFiAiYnJYidztXF2+G7H3ckkPaf8G+rByThjWE21TOgx45h3wl37Ire
GfscZUzm6m8LvONuWuD+9c5gsPuXnaf9nW+/csMjKuyOHt7n1b6zurf8ejsa
IH2S1e/hJ/1kbkzCoyZ5jkmKOPeV5RYJYlXCnq242SB4bWn3AVRzVMDqC4gX
CeszhkYvb0WImC4JMzGPNTHwLgJkjGc8cHGGwtA2CGP8zjD0cJERQwo0MDRn
SbqZqPpAnFgcUi5J7cGShGWA2SlR+RttgQv6aKtZBnQnYZ3A9GFMJ7OXrWqP
yUC0RlESRi0GcE7WxrrjFzbwYzvWwejXQd09Q12o5O3FQJ63ZLIQvEHgsoSh
Orpgh7Ke4rcNFem2HWa3P1qCsHgYYFjjdmYqKveulUy6HHrUycyB+qIC6wrB
/t+1S7tYiYnrtTjcLySSWlbPZhgM1oSCvFAMXgEndYte01kQsADa2mcOI81X
mKBJki+DSPVZZjc8nUsO3fg5bnBKUBNZzMBdoLfm5AtMLZzt9e6KgT0uptKT
usW0gdsgjAjs8LCvKItVjymqDMZePq8b7/QgVBqHRA4GBSb2+QhX0LPSBIJ4
3wZ9sLQZCrPqRZmTB4A/G+DbvK5yt4csJ90WE1ZlxqvOI1lmuitwuxNglYg6
MeLARDVDHZAciLwCY1ACgCpwmyqKPBgrWWjyCkKWnBZBYw7kZd3oGjMTceDt
MC0vhvJkEO1VtCEDVTaBoTHluzqyANg3tM76cLCLev4FuNydvW8QkO/vPwVA
7tCK4VBV4atFHjtJMVtQaiYrF2DZdEEpNHSvjWZDkr+D8CVytBg3Yngp4CEM
thSapnfBBt6Q3txYucHrE4CYcxONADGuXZhQeV7EqbGuV+/ALUYClb5zQSJl
BYqHVydpdQZU3YwxHSNLkFlLbOYZRfDLNaVV0I7+3vHDPMqJ+DkKuP9pjpju
lB1sI86jDcRKvI5bVn9hp0AMwiCR9AvXeQO08zIsOQ8uC7dBzdYi3ohgJyBg
rw3m/7qZuVmdg6a/rcriPaW5+iOFVjN9qiemLke3JrHHRjfkq8BUjsjDuU0g
KkTIJaHKJC3vIyeyOneqyTlnlS0lp/6SfCxNw4lHaz279pp2V3jPmroOughe
mSID8J5/rQEOu6SJagOgcHJD12VHtYPa2AE39jkYMsuNzeGr8y024wyaba41
gOZjLxOcCFaqAeKvUxz4C4tXGq2nYWuNIQSIN8e8Ct4SYJs5c3gH6+pjGIK1
A0x+qwYktChVQwYcV/IQnLAFHfFbjGWEM5z1RZ9BE8HAMLjIF1wk0PHDmJdE
g+aCT6SpFyuqGpG/SBwS545BcTcgStMTVb7zyaUNUHXdYPx7/uuLjHiUzEn7
zoD2Gj+EWDdEzPmw1sKQRUp9Gu5BV/HwpiNihPdtlgSf6XfeHHNp1qxSiJW8
bVy8FEEeh0WsD3QDk68ipibARzBw/CyW2pGmVG+JZAk0WEjkXZ2lp0sEgA4T
OVAPHiPEFV3zSB3VvqxBCSnXi1bJSVY0elJgBdNGwCH+XiMjcjfatJGIDAsI
Vg4ODN70cUMyLuxNLCahqFDCTkaCCiKJBqHFNgVAE+XTz5KnQovbSQoBBuRH
YQ5EgUP7i0Jd/5ZFlEY+DCldaYKJ+J1h+OV4tRZwnjutpTUY73UtxWHxyfIK
tm/WEoH1ZeAiRkvr+GyY3jVgRUUvsAkky2tzx2zLfDolygMYF+5HL9lwv2fx
xNJmdGUXbaKGMnG4wV0057jTieYiz5CUJCjOA5XwxIUIDomLIzaOX1djd7IZ
Vq0Nx+A2IA9rSqLf+FnrwdbPHocErlAHDhQUU4ywVrUaKmGeHmCE44bXlTRM
orKIstkfr4K2buHD4fiVgYU10Q63M6ewIYCaBDSrSkSYFNa6nAMiCiintwJx
yMHcaAWB9ztU8Rug4K2JChApKrFNCmCg5nABi3FkpKipBUCGyMDEUaG81Wvx
DlXkERbaFF5kqgxZBFgxOgm72XE6F2zldtH26bByh9OVPAmz90T040fdgH7T
UqOrb6z96qhuJzuH1Vy0zPkCFntZ5/wy4VPxkzPIq5GumjQaKz9uJRwjYjLY
Fmq5hOgSu8IVllYTihRr24TZzdnJ6YvNs60bIHYOIWJUAsOUN0JAY2kdyFOb
8fXl0mRiFOGiDfneUo/deMLnfjv5Adfo4PsaIJoaU1Ab5Y5HNRAGqJY8k6sO
3aqmwOaJek4bwgBvj23LiONdqie3BWD7ICvT61ok9BhpaTQSxAIullKNW7Sy
LT1vEWGe7D3xvACQDAzz+0+STP0G9NoXN8ZwAv2xsjzVmUP5xG7O0N5B3gQi
6TE1gzxCoOwSSNUheOMOw35BzR13BVCFUblmkEQVXHTEFfAhZREPmyDooXea
8v7LyINSGjpyvmNEjIkHTkRCXjzJ6VLMOCS/kQKcANxsemBl99AiObQZwCDn
doOvDYZXnWGPHKECxpH77OBNRr1MOfu0JLu3kka5iVNiN+DKam/WA0H+vuDN
Bts2zjJZPxtncGhuCxSAqEVV4BYqKR5vgAqwBmgSLKHkNue1MWRyLW5em8Pj
XW6QbVe6wTEtVjOtL3Y74xIxWXwfdXp4Z8ae8y7y/+sITRZma2p/hafFo4rM
mx+TQHdTXc6Q1UDYSI0K7B0adAO6OS+GdSyo6eqakKtYzcMamaLKar9u+tgG
xZGWymwHCUxr8zpcDNp0ULkXavKUDBdUmQKdyFpyUcohxW6AQW0i9kl6k+u8
8BA9UoKXrSDeWjIpI72sCT1g3xSQTWWok+BYSa5Xrr0uLUBSX4Xy7nd93qNT
MeKklsV63HBmlrBPPrAJxyqa71VysCb4IUoO8BCciEj8fzvVIZ+POZKAzMEf
3IJZlcfeqyStWQ50Wsuqogi74wpp36KnIyJc0iAtI9kiJ5me4zQFzChc+243
h75Z8dJaaGiy+AoGOolhdXfDh9SyinNsv+m9BL/+Hru21iMBV0uUjKwoTMHc
k5PbV1SUDQOAIwYXnxqKsFGakMaf13M280Tn5tnJ1umLszUYI8EXpJEuV9mz
WrlOMXzDZJSfdH2DAmBLL6XM+DoOd8DqpLOUYZ+VPlrbOLdFlWdgJYS2MKVv
IIqGdllPriLFBPWomw1zQ/NSkwKdXKkM4c4XJ1fHJ2fUd1o07bifjZtJP5vD
zU+f0MVZiLPZjUYjlLSVNMTAS6+vjv/09gxbW/mvzuhcI4Qnsf/Ajh8Xp8FT
h9EfrFHHAIzrDghlHsss2175AYVP7tVYBTtr/CIUYr+J+n06ra/tYg5AMaWL
roa2JguFEpvTLCrTEyuttHB5ZTT/ju1N8vV7hjrOinIvR8I9Sx4HjKFPI4by
TY190TM1d1vhBsaDGzZnTMFFgT/5QZfGtNxLrF6PwJPrBQz9C1wH4+YHl951
uW0R/FInK8t22teMbi0hcvNum+7c7YA7xFyLTZ3d3wdxgU5SiqQoMfTr+ahq
PSUu/dcpba5SJBKKkrSPRS2OuIvHabNG0QgGJTanSd1TZGRK7TrQVvSU0w12
Ohf8OJqE4xKHnmsSU0RiD5jH7L3YkuvbXCgRFJWb9rjcFC9DPtDwfT1Nsrfs
j/BZtxRsw136Rjym3/f9wUrqjCLigGVDW0jIHPH1Yqb7jBuowiJvfoCYP2uW
87YGazKfQpQH0cfUt27Lmxfw86ZHwSRFp7YDx99/efr8hnnjXH63B7gGx3xz
eXwCcPnYOghMefd8seE3LBzbFNBysSgvad5XCO6wfSqqhjsOuPycE8t+Vygd
k3DmLUZiFtDK2Cp2cONpJdLBiMdLIb7PQkRuOFn/TdLNcuPBl71LIPzqBtE6
x+xkfBPF21uzxpWEoIfoj6wgQiJRMSfuFPmnV/Cj/PiRLUsz+xHUqxjoQc/d
s6bU36bOU9DwivM+6dLlry39B8LzgXFUaOR5krapyMZjYwtllzg5xZOJl+9m
EEbyO01dty53Ek6Z+ECq4xgDgWv0D0WzccJtAhtrNoHt5wjmxsbJcQKBmi9s
3stvMeF6D7oEgoWrkL55izkwSvVwt4jN6HhyV4glW2qjR9EGu9rZfdEEkc1A
HVMm9icdZOTAQc83hecUEtKYdwUWt2ECL3vgw4roKF9JgTpL60ERx5LFhzkd
duMOCvhEm1iXWkuhrxw6p45WLR7MDiNcvm49lo4HS/XlYLCzrmch6gkeaYh1
BtyiJz/j3/ZnPfXxs566ffCpbdn/VsoX4Br6Zx/oCJz8Rp4htMCTPbBn/oVU
/KGP/76Vp5Q67fP4m4PBYOv/wev/W0bzv87kPblh88jY8b7xf02JU3eUeUfk
L3xx+UGx/8X++62U/Ftu/yJKttfI7VJhbuTfe/VzX6ca46u65QNJK4lw52bY
/VBOmZENQwVOb/waUBDg1jLtjlLlgMhq18BO83mEaWGZc1WhwcPhsLjBjuKf
JYw6wEojR0OhNufpHGMerefLdLaWEToe0i4SCBFBkymqeKebpg7dDtdrfbHN
iKooOPA848OlSKMl5kr8RnzVrVLx6du1wZgtVxE/1Vi3S18hBrDV1Cqb8ukA
hDTZElN62ELR2DbR+y/nfANChZOHml2xL4cr15UHZllpD/6sCx1CT6D4iU5F
cpK+XHopd7uzkNyy0SpfphP0+9Tuz8dSuB736jxK98D9KOXRoVdXJE/K+ecW
kiWnFwSjYYMYcWELdA+uRWLfhSrNqgSoZQTDc9hjotItnssOCXbqAGUG9ORs
gUfmymXnTGRClbGxD7b0ukotChUY8t5Fxd0O7ZgEuULCrWqWA5E27yo8fY9n
JCFg7ZxA5KqjKxzS4XOX2+aatuv6EN502GaCLlkgVmojCafWG13qW8V6BNAZ
RzeYE2n0uhZpG0fwOT7dYObhODpiHh2T5QQLcIjbIbAQU+oZ2R1XFMJFnnmV
iJtlAeO+2Io/J1A73fkVlUBdxbih8MDYtnbd338HY3JOVLdjOuevTVXYs4Tu
Ixur29E35VCMf7py6HgG6j3h00W+4kVC8TlqWL/PrifHRNcdAMZ0V9AT5JYt
U5E97M6+gfFLo+calZYKaC0GYZwAE5MFnxvW6w8an6z2S3ijTJWnsDR4aKJQ
VVdPXcPmeKOVqfk7AvErLpjEuma/LPAWVk/TxI6l2ED0PpvX9pMC2CFTj8Fq
FjMsQ7d3eOLfPyn9WJgUBeUc8ekD9C8YbvnnMC6NHgWWtKqU/AJ1hNgnI17Y
9bdg+Vo+u0E0UM3NVtPpZEsVmrGiBAcVCD0daxfqw9uwJV1grW+LemHwyK2r
MkQ6PvAH4B4jkZsCVvIuYX9EBHaP2XcJ9PXZkJrlHoiUGb466aqxwlftXP+J
bRGQrxF7RLgm6qjtDuJ7E8jFPEAp9vKNNHOCG1qCBQ0pOevWV1LN4JSEuIy6
N/2GBVs1xz6R6BhhVDIsS9thE6rpaRnMfh7EYH+vtytZalfG9lS4CHUkmxJ2
cCSUveh7JH3/oOsOVDE8rH5HDcr1pHIHZ7x+URk5pHycVV9zjm9tn3vcOPkw
VqvEw+2p2OTMZzFVp8ODKutcVOcqOvU6xEcsgUrbO4eKHnlEPmQT2Ur83ASV
w30VPtU0Zo3xtXnHH/RgJX5PSXEFxTdh++4D0EfqQp364jAGOPYoRKegQtma
yk+XP9x72sn2YX94fGTujtt3/DAjCyl9IQQfAAtrmwiEc+eG6y/O+9FXa3JC
9Iu2DDFC9LkT7msM7Q/JBzIebYellh+bYHzEgaagWYhOt1fnAGwdjrtGlUb7
DRX+BEGoM4rU88eHpB3CST7dcst9V94y2QlEqEdWnbIRXsEcPXqnBosGwPjl
Eb3sPpJAuTcbWDAQyKYam359KXJ1VNzs4LdLlUVHL2iJXQtogmzjT6esfTQE
iaBrJyHtSV8S8enUnrD5yeRQDTF1XX7bpWdDOjVKLIMS/Pzz66uzV/J8OHx7
dsQy8B8kGfNZEvdZI/poBzNq8Msv9A0n/JpEqjKi84Up2xNuDx/x5yfy3Lc5
haSqSM4Oyzdch1sG9oamDndE40iIj/JHGudj9H03PCkCF1z0+xHGomPi4L4+
io9HFMP33X/9P3/hKLp1BC9IPucM4f9HOggc5QM+ypMXPXDp+Ndmor9bmA8B
5tI3hs5Oz69fvzmSV3iuymuO3MBhN5wpp7YY2SY9PIKZ5L/XAT4AOdizlUo7
TGfmjfA6Tm4Rlh+DOJ7sNJKlPfBuqzi2Crr8DGlm5L+lsgfOrNQwEQ5gYiMa
1Gx8piyRm1FFKZGfxBSLieTYkWQiOyfqSIYfOyfFV+UGU/zHMQovdDy4h5My
F7evrh5cf7guK4uW2kh+AE3o7z55io05ykyPQIGO+efL0+dHnIjzl8ASwCX4
f3dJJAVUTAZRTzgSYWuhvtLN30p7sO7pSsMgJ6oh+LIafrAIm57wrJY//EAk
YxfNrabOGFd01xU8bcsPl/Ibsb377NlTvTs+PADl3H+qnzwZqcM8P9jd331y
cDjePTzcGz3d1ztP9Xgvz9To8Ika5/uHB3t7e/mzsdrZHQvxCseBn6NR/jR7
uneYPd093DsYbe/nh4cH471n2d7BwfbBDl3PD7Z39mEAtbs/2h8fPhspGONw
d7R/yDm5L+Vx5uI26usR90e8J3T+zcZYlUZv2MIuf1rRcCutpGN6tFtUxR3/
dVNMigoton0QGHp/H32Kzn7RjZuROBhCa4kBZBE6D4LXC8565XMhwu9P8T9k
nLMS61IAAA==

-->

</rfc>
