<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bmw-tls-pake13-00" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <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-00"/>
    <author initials="L." surname="Bauman" fullname="Laura Bauman">
      <organization>Apple, Inc.</organization>
      <address>
        <email>l_bauman@apple.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="2024" month="October" day="21"/>
    <area>Security</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 29?>

<t>The pre-shared key mechanism available in TLS 1.3 is not suitable
for usage with low-entropy keys, such as passwords entered by users.
This document describes an extension that enables the use of
password-authenticated key exchange protocols with TLS 1.3.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Transport Layer Security Working Group mailing list (tls@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tls/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/chris-wood/draft-bmw-tls-pake13"/>.</t>
    </note>
  </front>
  <middle>
    <?line 37?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>DISCLAIMER: Most of this text is copied from draft-barnes-tls-pake-04
and is in the process of being updated.</t>
      <t>DISCLAIMER: This is a work-in-progress draft and has not yet
seen significant security analysis. It should not be used as a basis
for building production systems.</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),
} NamedPAKE;

struct {
    NamedPAKE   named_pake;
    opaque      client_identity<0..2^16-1>;
    opaque      server_identity<0..2^16-1>;
    opaque      pake_message<1..2^16-1>;
} PAKEShare;

struct {
    PAKEShare client_shares<0..2^16-1>;
} PAKEClientHello;
]]></artwork>
        <t>The <tt>PAKEClientHello</tt> structure is a list of PAKE algorithm and
identity pairs under which the client can authenticate, and for each
pair, the client's first message for the 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 NamedPAKE algorithm.</t>
          </dd>
          <dt>named_pake</dt>
          <dd>
            <t>The 2-byte identifier of the PAKE algorithm.</t>
          </dd>
          <dt>client_identity</dt>
          <dd>
            <t>The client identity used for the PAKE.</t>
          </dd>
          <dt>server_identity</dt>
          <dd>
            <t>The server identity used for the PAKE.</t>
          </dd>
          <dt>pake_message</dt>
          <dd>
            <t>The client PAKE message used to initialize the protocol.</t>
          </dd>
        </dl>
        <t>The client <bcp14>MUST</bcp14> use the same client identity and server identity
in each PAKEShare it sends to the server. This is required to
prevent client enumeration attacks; see <xref target="security"/>.</t>
        <t>The <tt>NamedPAKE</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.</t>
        <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 there are duplicate PAKEShare values
in the PAKEClientHello structure, where a duplicate is defined as two
PAKEShare values that share the same NamedPAKE, client identity,
and server identity values, the server aborts the handshake with an
"illegal_parameter" alert. Moreover, if there are different client identity
or server identity values carried in the PAKEShare values, the <tt>pake</tt>
extension is considered to be malformed. This check is done to prevent client
enumeration attacks; see <xref target="security"/>.</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 that the server can use
based on its local database of PAKE registration information. If one does not
exist, the server simulates 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"/>. Otherwise, the server <bcp14>MUST</bcp14> abort the protocol
with an "illegal_parameter" alert.</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 and identity value for the
registration record 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, the chosen client and server identity
values, 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 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 random identity supplied by the client.</t>
          </li>
          <li>
            <t>Include the <tt>pake</tt> extension in its ServerHello, containing a PAKEShare value with
the randomly selected <tt>identity</tt> and corresponding <tt>pake</tt>. To generate the <tt>pake_message</tt>
for this <tt>PAKEShare</tt> value, the server should select a value uniformly at random from
the set of possible values of the PAKE algorithm shares. For example, for SPAKE2+,
this would be a random point on the elliptic curve group.</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>NamedPAKE</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 NamedPake 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 NamedPake 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 NamedPAKE value <tt>SPAKE2PLUS_V1</tt>, the client and server identities
the client was configured with, 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 NamedPAKE value <tt>SPAKE2PLUS_V1</tt> and the client and server
identities chosen from the PAKEClientHello list of PAKEShare values, as well
as the value <tt>shareV</tt> 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+ is "TLS-SPAKE2PLUS_V1". 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>confirmP</tt> and <tt>confirmV</tt>
values (for key confirmation). These are then concatenated and then used as
input to the TLS 1.3 key schedule. Specifically, they use <tt>confirmP || confirmV</tt>
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
                      PSK ->  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 client and server do not additionally compute or verify the key
confirmation messages 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>
      <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 any of the identities 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 any of the identities in a set.</t>
      <t>Alternatively, if the server wishes to hide the fact that these client
identities are unrecognized, the server <bcp14>MAY</bcp14> simulate the protocol as
if an identity was recognized, but then reject the client's
Finished message with a "decrypt_error" alert, as if 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 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="named-pake-registry">
        <name>Named PAKE registry</name>
        <t>This document requests that IANA create a new registry called
"Named PAKE Algorithms" with the following contents:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Named PAKE</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 NamedPAKE 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>
  </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="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>
        <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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="27" month="September" 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-17"/>
        </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+1c6XIbR5L+X09Rpn8M6QGwvCSKlI+BSdpkSJQ4gmTvhMMj
FLoLRI8a3ZiuBimMpHmWfZZ9ss2jzgZIy7GzPzZiGA6LaHRVZWVmZX55FPv9
vmiLttQnciivlTF3dZPL4bKd6aotMtXqXD7TK3n+Ppup6kbDL62uTFFXclo3
8vXzkdwbHAg1mTT69sR9ltfDZ+cir7NKzWHmvFHTtj+Z3/Xb0vQX6p3eO+jv
7gqc/qZuVieyqKa1EMWiOZFtszTt/u7u8e6+UI1WJ3Kks2VTtCvxTq+QvBN5
WbW6qXTbP8OZhTCtqvK3qqwrWG2ljVgUJ/KXts560tRN2+ipgd9Wc/zlVyEU
bK9uToTsS1jZnMjnA/m9Ws5VJST8MNHP1bJR8eO6uVFV8Q/VwuaBW4tFqXtA
STagb/VcFeWJLN9OaMSfFH4/yOo5rkKLjAbySlc1TcZLjNS8aMLDBxew8xsc
8naOQzYscTqQw4H8ua7zsMjprClMWy9muom//JzFMnX3p5lWi6K6mRStGQDH
hRD9fl+qiWkblcHH1zMtF43umxkIK5cgIjnXqCuFmUt1C/OoSamBPK8bhZFV
3UqzLFr8SqAeLY0C3bor2pks67s+6F5TL1Y4Gwpumc2kMnJh1dNIjfKH1SYr
GKkbMwAyYFpQuCWwppW5NllTTLSRqpLaa2w7Uy2MxVUNfNA4WNZT4Sbuq0Tv
cS/a6f2iqUGf6tIwlXYzA8uPeZHnsBXxJapmU+fLDPkqxNnl6PT58PLq/NWJ
vKpNC6vBwkBqC1QhJ7J6UcBS06aeu2OiQLONPyn93UMByo3vFhURDZRk2hic
aqJBNHK5yJHeQboccQT+UxK29q5fVH0YeNPgSFpI4qwzxcJYgWSN1pU0xU1V
TIEBwEVjzx28qcqVKcxAXsLTWb0scxo1IQ7mKBslJwreIGFOlkWZI2ELzwk4
fKbVcxCUuIQP9VxL1F5kNHwLMi6IGyC3oiF9aWsrKJg5KwsUKtILwr7VjYBv
Y1Hh23D04Y26RTVfGlxdJaoU6eitKpe6J5xaKdKhvtMppwxM6qIpYEewJioQ
8Rwk32MZTpcVbU6VyCRk5QRZCLu+LXLSToHyKmDim4Y2yuLXbNG0fKXnNVDv
zS5aTa9ocnv06npHfPjw3asfTh/tPjr89Gkg8bSZhc5QRBK+TyZ3Wp+jpsAg
iaPACmuWcTGf67wAdpUrPhM58s2dyonOFB4HEESjgeGwV1I3ccrcT5wAimJE
okifz0G74CCDPO9mBXC3qgXY5Bt4Tb8HI4R08aHxtqA1upw6lqEsgvFAVYqk
jDvEoydSa2Pk9vXomdkZyIv6TgNFPYmfWTHpqJKsPFcrrXPUH9DdremyLJ2C
bPU8C1BCk6LKgWxSFTsZ0CM69MAx8YcA5pzXS9RTmResFw0cnbZV2TvLS6Rs
IEY1cqfkdbzDHD2Ltg4EO/NIbMA3DfAWbQqc4OV8YZeHh/QCs5sPkdUPndOp
AhLjo3oH5JNWrh0qSTwFSkE90qMDdqDRLUjtHE8kHi2kGs9gnpM9IQ4j55Ag
qadTDfu/RT1r9N+XRWOtLYwSsMEcFnrHJ/w9nIMWj/hDFtggHwozQ8sutvGM
7HhxDuS9hp+IDLZ/jMZ0LMgFoNgy1YB4wHAqUAm0pyithCZcCVUVFwjzwIcb
XemmAGxRWJfCbI41gWcH8oV3IAhxmjnrDYpsvizbArwuaAswrEHqcUUwsj/D
6gaErGl2wSYIJnX6EvFwoyDvirKUEzCF8OatFu+q+q7U+Y121scxGzAALdn3
FsWqO2g+iM96JbQBfsS2HtwM4FTeILc1WyzDOmNFTYZ4oZqWuIlr0wyAFZaq
9EvvsCnLZnWREV1k+nAPqvJToS1uAMOAXTa0KQEc1u/RbQBiXQVFtwb/cvhi
iJwDF+asPHBziLowLRrTClRPa7sjjZkWFelLVleo58HVk5hYH3B63MYI6dz/
Y8dSf/jwBZjb44MnB2CjEQS81s28qOqyvlkxQkJFZuiydfVm9BqMDf0rX7yk
31+d//nN5avzM/x9dDF8/tz/Iuwbo4uXb56fhd/CyNOXV1fnL854MDyVySOx
dTX8C3yDrN16ef368uWL4fMt1tyYDXj02SqiR2kWyAh07CJxKt+fXv/3f+0d
2g3v7+0df/pkPzzZOwIPRfaFVyOl4I/AuZUAf69Vg7MoUM8MUGWrSvAU4DYB
UtxVEjy3Bu599Qty5tcT+fUkW+wdfmsf4IaTh45nyUPi2fqTtcHMxA2PNizj
uZk873A6pXf4l+Sz43v08OvvwJBq2d978t23gnXEm3+TevKOoEpTE3ai83Xm
AjCrgnuHR58+gSdbtqS8GJQBNgF3rNkqQAAEBoJEw74fDGJTL28A07WkuSPd
LheEfEBbNZkd5xKDDQwHr0tez9pdNkoiMkrod3E2NEkExsjn43SoZ8EmbQPZ
zv7wERYqZghAfiSGkKLuQKZts2MNS65biDyMg9uiu2BsjFH1vQVED6DAlbI9
KiE6BQgxR4XGYJQDF797q7GMhNhE4YpZvWyAZ7RTb+UhPoMgNdOeJrQ30+Jm
yeBNdN1D8ArMS7BkjMSMnKsVq0GyggAABY6zLRB+ARBitITHTd4U+JEFQVKm
3V1G0JHDM+vsjM4SPGnkjK14x+xRSMJzoAxB1tZ55sKGKom3wpW/tJuQ32sg
HvwaLAnYHbcKiGexgGCdcV+6VC/2dAaQK9pr9uhBLd2ivMKFLkvrhzkYGOOM
0XdjVq8TIf75z38KXS3n8gNF8jjt9u771y/PXu705PbjR48OHu2ITyHz8Xq1
0E9pFEe/alXWKnfe1VIZTgsGBvjFtIZV75CYNVIERNMQKEFMwOSkBLHTuX7+
ZvT2pz0JpP0n/Oz0gKQX4B1z/PapsFPYIf4LmwbI3+KunnIeY6H+vtSSfpjY
t1Z1Vl/vDgb7f9173N/7dv1d1p/PexdXe2ujga/3ohc/kWBHCDW7NPsvHFUE
SE2yDg+PWPfUsosksS5iz1eOhMuCQ/ANp9ttC0gHrCCXBP8ZVkdSRZgXQ1R2
dYQTwGoIHBvr6h8MIw8XGHkwT9OXpJmJog/EqUUh5YomAjsS9gBGp0TVb7SF
LRR6s14Z0JyEbwIzevGGmbdsU3ts5RCrUYyEMYsBlAPCCKrjGQQnNyiROCEL
u9+frAArMduAsMbp/9rQjo7Z8Zahnu0uxPJzwMiOxtmR1qE8ODLWv3RBIs+J
w8H1ogK7CWH8P7TLsFhpiGgkoRDnDA3wY20PkbvzNINR8g6FJVA4E2YhvbXL
PmHj0W9bo9+6DT5AolHQ1mRzZGmewngNGMwlawiB0mHwghyz4rj80diTMkYo
Bqojizk4EPTfnI7BlZ019g6MoT5usdI3dYuJBHc+GCPY6cGtUXKrnlKcGcy/
/KFuvBuE4GkaUjsYJpgYBSCAQV9LCwiSWWCV8xSGAi/KRiFD4dcG9H5RV7k7
V7RLE86n1Y7LaGkrCuRLx5/Q+atwDcBz7HBpGYwDxgDo+ZyNiSVjEBR/zt/C
V9EscNQwUkY+x1sADkPwUxvMpXSzHPM6B269qcriHaUM+hNFWbbkrZ6YuXzH
hiQJq3mI/bN6PiF7YTMiWlSINkry0Eme06NQktedanKO/7OV5DRKktuiZTiJ
Y9WuezrJ3oRxVkk6hjrYOEJZYIv+VgO0cAGoatctMYIgO6ud1OIwVPtLUAHL
je3Ri8sdPgAMQGzeKgCQoZcJLgQ71QCXNgEM+E3NKViEHbOeIxwD8eYYo+JX
ArSaszB3sK8+QjqdDyQmEiEkLrJlqRpSfcxTarbkS86D6jUjLX6LWZhmo2mi
SSiL6n1De1eL7rS8T872eFPmjUWva9V6YoNZ824kUmk1oTOZHHrrXSqxBdhY
36jyrQ/pt+BQ6KYdyKu60TUpcsqXDgAOJhVO82ZyCO4VqZalXi+cc5GkdECY
BiZjq4sHBs6GEx7Z5Wyms3fEXPSZ8E5qmcXnWuZLdpL3+eWO5iT8JWtk4Ewb
P4XYNEWsj4GlhSFvT7KPJkVAA8ZbsIlBZoAIyzoD04C5MXzsAVOjbwos+9iI
wccroN9TmtylmgVlexPiTQGOBPTTOGjPlhrtXyfcBYbxuzAzsmxkPxGI96Ms
+80DntElXZmCPxh2I25XG6QjXyKr7gpOEnnSye+TcifgQFjVlverthN3ozn/
jZsHIRX5Oj+TFQs2X9bQgHHlgExA7AsQrVzmNqLp2qeCxccWjmyFTbOxqfKR
ZxQyGRcZRYNsZNSzke7KJr9Cjq5j3C32Eol+gB1FRx7tCuMg3gsqtqryRDod
oFxUwb/EyV5aDdTO7yVF+DEa5sDgnhDDQkvDgYiNSgILkrAiftduefPqMbRy
JRBwp3Aq4HyB+ViHx5gBNTZFZn/fkND1ls+ZsTXmJaiW8tMUkxdVODEWbbrA
RMRDHCay6y2xrMCEppgjICKbkWNEBPY9KCGyBgJkGUGk3ho+6mHueawVxEBv
8USOgYI3kanpQBpbMgYUs4AHWBWhw0dlf0AoIoPTRlXLVm8ES1QrxYS4zaVE
zDVkvdAE1lNnm3A5h3Fzu2n7dtg5n0R0vqdhddiWiD6+AiivE61O3SMjEiyh
jcDB5EvY2FWd82DEjkL8jGtvTvOrm0Zjut1RzTAcM3C2OsZ1G5dNEy6bv57F
cUVc8o7np2cX2+c7YyB2ASg8qjtgnhGxorG0DuSZTbP5GlWyMIpr2YYkW6mn
bj7hE26dcBGMF1llNG37i3JpPn2i2ZOE3aQGwgD+kolwKflb1RRYta4XpPxY
ah7aYr3jXaoTtwUEAUFWKZixhXGR1qMiQSzhYSnVtMXz2dL7Fjrm6Tn7AYJL
AwzzZ02STP1h85oWtyRw1vKhWigV90LO2h7EUFMnRycmGkbqBwmUXQIpJQ8j
7jCyErXziYiKcBH0BlQ2w7AGwEOVsoinTaD2yPtz+eHLyLlT7s8BAyzSIGBM
wEEiEkIXSSINjPxXsAi6FMQGcDZAw71zwiixLELK2FH2Fba50NHdFPVtcKI9
cqAK2ERutwO4uCiNUzEBWJiyXk6OHTEcJaYBKq8MTq32FjtQ5JIXY8FnC05p
HLdbBx0DrJkNhC03mLZlVeC5wZJu6xiEdkDwSHKji9oYsqkWP27M4/DRNhzE
YxxE/UJImz1/PUFEktKgqnh5LCiSs1gM2FksQFUkgK5b8FRNvVygRK51g3TS
O412fTJRKY6OI0asoFnfR3V67wHZO99FGGPT5hOW2YrI3+Bt8eCJYCuCMQrE
W+XctrZM1KTAzo9BN4Rc8GZYWYO+r+8pa7l2ihUORXWxft30sYkFl6gbldn6
PyyLx9Cn8rd9cBYqqpS4FBTLgJZlLfk15dCwOz/ceUXlI+XelD5tuYKX6JUS
XHMFgd+KSZnoVU2QA7tegGwqIpwGb0y6cu06pNLyEVXFlffZmzMtnXy/mC+N
K7SsuF3IrOAIvmdfgDUQ32nisFBwaJSO4Ck49ZGAhnamQzoWszIh+gDHcgv2
WQ69e0oaaxwOtiZaRTF9x6eSSUCXSUS4NEVaBLAlKrJhwyRbxzha+1YlFw+w
3qWFrFAhfwrznMZAv2tJQhZQySSD/jvGJRD5K2y52YwoXCFI+riyRXDrxfaU
cu5hAnDoABVS2xPOSRMytYt6we6C6Nw+P905uzjfgFUSnEIKqfK8sCC2vk8v
fMebzcHOCSxy05cA+NNLKQupFu5h1ElvIENFK3w043EyjcqGwEqIs2FJ3/0R
TW2AODNd2SJATBDZXWGNMOnP6bXKEDZ9cXo9PD3/5rJ/NiiadtrPps1NP1vA
l58+oau0UGm7G3BHaGsn6WaAQS+vh39+cw5Pv+PfOrNz1QfexOKxnT+uLILH
D7PfW2CMgRyniBESRUZzzU3b7uMBRWhuaKyCnT1+Eapo30TNGvHm+waL3wA4
U7roacjKW0iVmJxmWRnOkyXzweO12fwY21jii68MmZwR5UJ8wj1LHsekocge
hwRNjZ2tc7VwR2EM88EXNkn9E0QCWKoZ2xdd3tRyLzF6PQJhrpErFJ+pPmcr
1y6f7JLpIrilTuTKZtqn928tIXL7bpe+udsDb4gJA7KxNbAxiAt0krJARYnh
Ys9HYpspcZm1bhZzjSKRUJTkLiwQcsQ9f5g2axSNYEwCqkc0YOsLGZlSu/ah
NT3ljIZdzgVRjibhuMTh6obsCpHYA+Yxe5/vyM09CpTrAlUf2XN3MNhHFsXb
4JY0ihWixB7rGrsmBOch3+N2gi2UK99ExeT7ni3YSJ1REB1Acijph1QWPy/m
us+ogWChHP84BuTdrBZtDcZkMQPUCEHMzLfdyvEFfBz3KCalINd2T/jvn539
MGbWOIff7d+swS2Pr4anAMOH1j8AClv1iNTft29MIaPdYkFe0bIvENlh50tU
oXQMcAlIJ5TDrkg6BuHc24vEKKCNsWXK4MQxGdsNU36rmMA5cNMaYU1uKATz
BOOkD2Gc9GSsJ6sKbeI+UwTmncMaoJudnyD89VjSq5g6INud6O3BBiatZTg9
wH+ABRGQiYpPjgXy81jgN7DeoR644NJ6SfollsD9NXrFxQBhUzMxm37qskn+
Fpt+pMghMBkdgp3qPlFicYCSX5w748XEs7dziIV5TFPXrUv3hOsJPmTr+OBA
4AZlRzFunXLxeGvDiQO7ugVer5+IYIstaBwy2tpZ59SB4ayQlkUbmwpkdqqY
HTzkIEHP9/HmFAfSnHcFluBgAS+GyWqdi5TZpHifGXcvt2MmyzHR1MydpOzH
n8bCOSfcGVo++w1tiLvfDBfQWnZAFeZlKt+iRU9twk9sSvGl0FmOHCgobUcK
NVwE+uTHjzIQ55KIm4F5PHOqEUeDPZTfF0DD3gHisyeHh4+xk9F3h040xE0D
btaSn/Gz+1lvffyst27veQub9vvfSnkBjqZ//p5uRMlv5DniFLzjAafiX0jF
H/v48608o3xun+ffHgwGO/8Phv/vGO1+Oov35JZNbmPv89b/NSXPbAUDZd4R
+YUveN8r9r/an99Lyb/l9i+iZHeD3K4UJlr+fVY/dzjVRF/UbdRIsO7IbA5R
RYDa+zW+TFdwXoMuyMT+y+eHfi946FaNwG9n9wQ1tnxEMFFNdbvyxVy1AOyi
shm3SCNIyFaYGqPOENsZ9+HLBX8BoPv0AezLXeUUgbr6nb39sAkC+rTGQPxM
V8M4112uvGPuNrwguWWjVb5KF+j3oyYYro+9uIzSJvB9lDro0KsrCrcodZ5b
kJO0cAuGegZhxtIWzO7di8QWDVWadQlg5YjCXFAvAGotXlANeWrQrMoyoCfn
S7w3VK46F8MSqowNArCL0VVOUajAkHcuvOy2asYkyDUSblWzGoi0X1HhPWS8
KAahX+caFlcBXSGPruS6FDHXk10/hwinJqn1x2KlBpG4G7TUt4r1CMAozm64
7UtsaH3BrjgqviDu0w1G8MPonm10V5ATFcAh7lzAekap564fyIv+3KtEJGMB
8O5iJ75YXTvd+Q2VQF1FJF60afcrXnOFOTm3qNspXX/WpirshSr3JwDWj6Pv
3xHiCu+O+QjQDoCNLbDIG128iNL0ZWnL46Eqluae7Q1rg41gnogsJWJq79GJ
kLy1eRhnu0Kume90+xddT5iSUZGz+gO1IdY3FTYkR5uKjmunuOl0YcMViI1t
rb63CTtbfWvT72rbu7RXf9ylutAHiGUtrmhxCYtKmPHtFKDSNsdgZ3R0jrgb
OSpa4U1dqkX5Eli0kOeRuYdJBZfZsVw1LPEvRijOZrpOw1AINDNunJv5Og3i
A3daje4kOJ3BXFaehnyNr76y3YmKsUcUtujP/B1X5v00E/ZOlS1NPtxN4NKe
AKjo/L3VTVM7IXElv3PpE5crKlckFM7OGE6wumNJf2Qgx7QQOMuyqJwmR5fR
uTcqlDeT68sPtvRRb4AN6x842ak3F6LTFtK5nlSHy0hRKcHecOcLoqGQIFKT
FF9hc6Y3uVh/yw0aPodjFxCh4FB18sL4BNNw4JTgeClKga1OuAhur7Cuhe+C
ukyjGwDrs6LWNXpRqixq5qYtdjXDBNnGF9s3vurhmQLNPQ0ZDrrn7TMnPWGv
mXP7hOGMBTF1U1bJ5bVD5iRK54AS/PLLy+vzF/JyNHpzfsIy8NfFp9yd7v7w
BF2pZkYNfv2V/swG3vVNVUZ0/ghIw81Xtt+ZLwfnuW+NCFkPkdzskq840b4K
7A1FW9f0fSLER/kTzfMx+pM4mC+EBy6T8hHmoh7mDJ6KjyeEq/vuX//jH5xE
X53AAMm30ACSf6QbVRFG/yhPL3pydIG/bSf6u4MxCjCX/gLE+dnl65evTuQ1
GFHjNUdu4bRbzltQ2Vu2SY2e00zhNjW4GeRgz5Yi7DSdlbfCcFwccMkE/YGb
gzienDSS5ZecZk16YlefIUxAotw3VOk7P05iokrnYiuac+iaWMzWZ8oUuRpN
kMhRYvhjInl2JJrI0Ik8kuXHzn2+dfnBEv8xRCGG0qZ7OU5Ic7vb+u3C+wsw
smipXPwjKER//9FjLMArMzsBPRryR4iOTzhG9o/AIMAj+L97JJJKCXaKUb8o
EmGrHr6ihebygQqHqwGBvCi913M5bfyrEtjcgK1Dvo+bSObGIe48ssU1XcHb
NjN4Jb8Ru/tPnjzW+9PjI9DRw8f60aOJOs7zo/3D/UdHx9P94+ODyeNDvfdY
Tw/yTE2OH6lpfnh8dHBwkD+Zqr39KYS4OA98nEzyx9njg+Ps8f7xwdFk9zA/
Pj6aHjzJDo6Odo/26Hl+tLt3CBOo/cPJ4fT4yUTBHMf7k8NjIul/ACnLBLpi
SwAA

-->

</rfc>
