<?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.6.17 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-reitzenstein-kitten-opaque-02" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.3 -->
  <front>
    <title abbrev="OPAQUE Authentication">A SASL and GSS-API Mechanism using the asymmetric password-authenticated key agreement OPAQUE</title>
    <seriesInfo name="Internet-Draft" value="draft-reitzenstein-kitten-opaque-02"/>
    <author initials="N." surname="von Reitzenstein Čerpnjak" fullname="Nadja von Reitzenstein Čerpnjak">
      <organization/>
      <address>
        <email>me@dequbed.space</email>
      </address>
    </author>
    <date year="2023" month="January" day="16"/>
    <area>AREA</area>
    <workgroup>WG Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This specification describes a Simple Authentication and Security Layer (SASL, RFC4422) authentication mechanisms based on the OPAQUE asymmetric password-authenticated key agreement (PAKE) protocol.</t>
      <t>The mechanism offers two distinct advantages over the SCRAM family of mechanisms. The underlying OPAQUE protocol provides the ability for clients to register without the server having to have access to the clear text password of an user, preventing password exfiltration at registration. Secondly a successful authentication produces a long-term secret key specific to the user that can be used to access encrypted server-side data without needing to share keys between clients via side-band mechanisms.</t>
      <t>When used in combination with TLS or an equivalent security layer these mechanisms allow for secure channel binding.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Common Authentication Technology Next Generation Working Group mailing list (kitten@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/kitten/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/dequbed/draft-reitzenstein-auth-opaque"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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>
    </section>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This specification describes an authentication mechanism called OPAQUE, based on the asymmetric PAKE of the same name. The mechanisms provide strong mutual authentication and allow binding the authentication to an pre-existing underlying encrypted transport.</t>
      <t>The mechanism specified in this document is a Simple Authentication and Security Layer (SASL) mechanism compatible to the bridge between SASL and the Generic Security Services Application Programming Interface (GSS-API) called "GS2" <xref target="RFC5801"/>. This means that the mechanism can be used as either a SASL mechanism or a GSS-API mechanism.</t>
      <t>The OPAQUE algorithm provides the following features which this mechanism makes use of:</t>
      <ul spacing="normal">
        <li>The authentication information stored in an authentication database on the server is not sufficient to impersonate the client. It is additionally salted and bound to a private key of the server, making pre-stored dictionary attack impossible.</li>
        <li>Successful authentication does not grant the server enough information to impersonate the client.</li>
        <li>Mutual authentication is implicit and required. A successful authentication always strongly authenticates both sides of the exchange.</li>
        <li>A successful authentication provides both parties with an ephemeral shared secret. This secret has high entropy and can be used to establish a trusted encrypted channel without deriving trust from a 3rd party.</li>
        <li>A successful authentication additionally provides the client with a constant secret. This secret is only known to the client and the same for every authentication. It can be used to e.g. store encrypted data on the server without having to manage keys locally.</li>
      </ul>
    </section>
    <section anchor="opaque-algorithm-overview">
      <name>OPAQUE Algorithm Overview</name>
      <t>The Authenticated Key Exchange defined by OPAQUE consists of three messages -- KE1, KE2 and KE3 -- send by the client (KE1, KE3) and server (KE2) respectively. A client knows the outcome of the authentication after receiving KE2, the server after receiving KE3.</t>
      <t>The following is a description of a full SASL OPAQUE-A255SHA authentication exchange. Nothing in OPAQUE-A255SHA prevents sending the first client response with the SASL authentication request as defined by an application protocol ("initial client response"). See <xref target="RFC4422"/> for more details.</t>
      <t>The OPAQUE client starts by being in possession of an username and password. It uses the password to generate a KE1, and sends this message and the username to the server.</t>
      <t>The server retrieves the corresponding authentication information, i.e. registration record, OPRF seed, server private key, and the key-stretching function (KSF) parameters that were used at registration. It uses the first three to generate a KE2 message as per <xref target="OPAQUE"/> and sends that, channel binding data (if any) and the KSF parameters to the client.</t>
      <t>The client authenticates the server using KE2 and the KSF parameters, also showing the integrity of the channel binding data in the process, and generates a final KE3 message it can return to the server.</t>
      <t>The three messages KE1, KE2 and KE3 are generated using the following functions specified in <xref target="OPAQUE"/> with the configuration specified in Section <xref format="counter" target="opaque-3dh-configuration-for-opaque-a255sha-plus"/>:</t>
      <artwork><![CDATA[
KE1 := ClientInit(password)

KE2 := ServerInit(
         server_identity, server_private_key, server_public_key,
         record, credential_identifier, oprf_seed, KE1, client_identity
       )

KE3 := ClientFinish(client_identity, server_identity, KE2)
]]></artwork>
      <t>The values of <tt>client_identity</tt> and <tt>server_identity</tt> are set to the byte sequences:</t>
      <artwork><![CDATA[
client_identity := client-first-message + "," + client_public_key

server_identity := server-message-bare + "," + server_public_key
]]></artwork>
      <t>With the values and encodings of the remaining parameters per the OPAQUE specification, <tt>client_</tt>- and <tt>server_public_key</tt> being encoded as raw bytes, and <tt>+</tt> indicating concatenation.</t>
      <t>Upon receipt of KE3 the server can validate the authentication exchange including integrity of the channel binding data it sent previously, and extract a session key that strongly authenticates the client to the server.</t>
    </section>
    <section anchor="opaque-mechanism-name">
      <name>OPAQUE Mechanism Name</name>
      <t>The name of the mechanism specified in this document is "OPAQUE-A255SHA" or "OPAQUE-A255SHA-PLUS" respectively. The "-PLUS" suffix is only used when the authenticating parties support and intent to use channel binding. If the server supports channel binding it <bcp14>SHOULD</bcp14> advertise both the bare and the plus version of this mechanism. If the server does not it will only advertise the bare version.</t>
    </section>
    <section anchor="opaque-3dh-configuration-for-opaque-a255sha-plus">
      <name>OPAQUE-3DH configuration for OPAQUE-A255SHA(-PLUS)</name>
      <t>The OPAQUE-3DH configuration according to Section 7 of <xref target="OPAQUE"/> used by the OPAQUE-A255SHA mechanism is made up of the following cryptographic primitives:</t>
      <ul spacing="normal">
        <li>OPRF(ristretto255, SHA-512) as specified in <xref section="4.1" sectionFormat="of" target="I-D.irtf-cfrg-voprf-17"/></li>
        <li>HKDF <xref target="RFC5869"/> using SHA-512 as KDF</li>
        <li>HMAC <xref target="RFC2104"/> using SHA-512 as MAC</li>
        <li>SHA-512 as Hash</li>
        <li>Argon2id <xref target="RFC9106"/> as KSF, with the remaining parameters being set during an authentication exchange</li>
        <li>The same ristretto255 group used by the OPRF as Group</li>
        <li>The ASCII-String "SASL-OPAQUE-A255SHA" as Context</li>
      </ul>
      <t>Implementations of this mechanism <bcp14>SHOULD</bcp14> default to Argon2id parameters of (t=1, p=4, m=2^21).</t>
    </section>
    <section anchor="opaque-authentication-exchange">
      <name>OPAQUE Authentication Exchange</name>
      <t>An example of an OPAQUE-A255SHA authentication exchange consisting of three messages, send by the client, server and client respectively:</t>
      <!-- TODO: replace ke1, ke2 & ke3 with values -->

<artwork><![CDATA[
C: n,,n=user,r=<ke1>
S: c=biws,i=bT0yMDk3MTUyLHQ9MSxwPTQ=,v=<ke2>
C: p=<ke3>
]]></artwork>
      <t>First, the client sends the "client-first-message" containing:</t>
      <ul spacing="normal">
        <li>A GS2 header consisting of a flag indicating channel binding support and usage, and an optional SASL authorization identity.</li>
        <li>The authentication ID (AuthID) of the user.</li>
        <li>OPAQUE KE1, containing the OPRF credential request, a nonce, and an ephemeral public key.</li>
      </ul>
      <t>In response the server sends the "server-message" containing:</t>
      <ul spacing="normal">
        <li>An encoding of requested channel binding data</li>
        <li>Parameters for the KSF that needs to be used by the client</li>
        <li>OPAQUE KE2, containing the OPRF credential response, a nonce, and an ephemeral public key.</li>
        <li>A MAC proving the integrity of the exchange so far and cryptographically authenticating the server to the client (also contained in KE2)</li>
      </ul>
      <t>The client then recovers a client-only export key and a shared secret specific to this session from the OPRF response using the defined KSF with the user-provided password and parameters sent by the server.</t>
      <t>To finalize the authentication a client sends a "client-final-message" containing itself a MAC over the exchange (in KE3), thus cryptographically authenticating the client to the server.</t>
      <section anchor="opaque-attributes">
        <name>OPAQUE Attributes</name>
        <t>This section details all attributes permissible in messages, their use and their value format. All Attribute keys are a single US-ASCII letter and case-sensitive. The selection of letters used for attribute keys is based on SCRAM <xref target="RFC5802"/> to make it easier to adapt extensions defined for SCRAM to this mechanism.</t>
        <t>The order of attributes is fixed for all messages, except for extension attributes which are limited to designated positions but may appear in any order. Implementations <bcp14>MUST NOT</bcp14> assume a specific ordering of extensions.</t>
        <ul spacing="normal">
          <li>a: This is an optional attribute and is part of the GS2 <xref target="RFC5801"/> bridge between GSS-API and SASL. Its specification and usage is the same as defined in <xref section="5.1" sectionFormat="comma" target="RFC5802"/>.</li>
          <li>n: This attribute specifies the name of the user whose password is used for authentication (aka "authentication identity" <xref target="RFC4422"/>). Its encoding, preparation, and usage is the same as defined in <xref section="5.1" sectionFormat="comma" target="RFC5802"/>.</li>
          <li>m: This attribute is reserved for future extensibility. In this version of OPAQUE its presence in a client or server message <bcp14>MUST</bcp14> cause authentication failure when the attribute is parsed by the other end.</li>
          <li>r: This attribute specifies a base64-encoded serialization of the KE1 message as specified by <xref target="OPAQUE"/>.</li>
          <li>c: This <bcp14>REQUIRED</bcp14> attribute specifies the base64-encoded GS2 header and channel binding data. Its specification is the same as defined in <xref section="5.1" sectionFormat="comma" target="RFC5802"/>, however it is sent by the server to the client instead of the other way around as in SCRAM.</li>
          <li>i: This attribute specifies base64-encoded parameters for the KSF to be used. The format of the parameters is specific in Section <xref format="counter" target="ksf-parameter-encoding"/>.</li>
          <li>v: This attribute specifies a base64-encoded serialization of the KE2 message as specified by <xref target="OPAQUE"/>.</li>
          <li>p: This attribute specifies a base64-encoded serialization of the KE3 message as specified by <xref target="OPAQUE"/>.</li>
          <li>Further as of now unspecified mandatory and optional extensions. Mandatory extensions are encoded using the "m" attribute, optional attributes may use any unassigned attribute name. Unknown optional attributes <bcp14>MUST</bcp14> be ignored upon receipt.</li>
        </ul>
        <section anchor="ksf-parameter-encoding">
          <name>KSF parameter encoding</name>
          <t>The Argon2id <xref target="RFC9106"/> algorithm as used by OPAQUE-A255SHA requires the three parameters t, p, and m to be additionally transferred from server to client for an authentication exchange. The values for these parameters are fixed at registration time, but may be different for each user.</t>
          <t><cref anchor="_1" source="Nadja">Note: Argon2 may get a PKCS#5 parameter encoding, e.g. <eref target="https://github.com/P-H-C/phc-winner-argon2/issues/348"/> ; should we wait on that or specify our own format?</cref></t>
          <t>The limits and interpretation of the parameters set in <xref target="RFC9106"/> apply. Parameters are encoded as a sequence of ASCII key-value pairs separated by ASCII commas. The key and value in each pair are separated by a single ASCII equals sign ('='). The keys for the parameters are the single letter identifiers assigned by <xref target="RFC9106"/>, the values are encoded as decimal numbers with no digit delimiters or separators.</t>
          <t>Example of the encoding of the parameters number of passes = 1, degree of parallelism = 4 and memory size = 2 GiB (i.e. 2^21 KiB) using the above rules:</t>
          <artwork><![CDATA[
m=2097152,t=1,p=4
]]></artwork>
        </section>
      </section>
      <section anchor="sasl-mechanism-requirements">
        <name>SASL Mechanism Requirements</name>
        <t>This section describes the required information for SASL mechanisms as laid out in <xref section="5" sectionFormat="comma" target="RFC4422"/>.</t>
        <t>1) "OPAQUE-A255SHA" and "OPAQUE-A255SHA-PLUS"</t>
        <t>2a) OPAQUE is a client-first mechanism</t>
        <t>2b) OPAQUE does not send any additional data to indicate a successful outcome. All authentication exchanges take 3 messages regardless of success.</t>
        <t>3) OPAQUE can transfer authorization identities from the client to the server.</t>
        <t>4) OPAQUE does not offer security layers but allows channel binding.</t>
        <t>5) OPAQUE uses a MAC to protect the integrity of the entire authentication exchange including the authzid.</t>
      </section>
    </section>
    <section anchor="channel-binding">
      <name>Channel Binding</name>
      <t>OPAQUE supports binding the authentication to an underlying secure transport. Support for channel binding is optional, therefore the usage of channel binding is negotiable.</t>
      <t>The negotiation of channel binding is performed as defined in <xref section="6" sectionFormat="comma" target="RFC5802"/> with the following differences:</t>
      <ul spacing="normal">
        <li>The non-PLUS and PLUS variants of the mechanism are instead named OPAQUE-&lt;variant&gt; and OPAQUE-&lt;variant&gt;-PLUS respectively.</li>
        <li>As it is the server who sends the channel binding data the client is responsible to verify this data by constructing the expected value of the "c=" attribute and comparing it to the received one. This comparison <bcp14>SHOULD</bcp14> be implemented to be constant-time.</li>
      </ul>
      <section anchor="default-channel-binding">
        <name>Default Channel Binding</name>
        <t>'tls-exporter' is the default channel binding type for any application that do not specify one.</t>
        <t>Servers <bcp14>MUST</bcp14> implement the 'tls-exporter' <xref target="RFC9266"/> channel binding type if they implement any channel binding and make use of TLS-1.3 <xref target="RFC8446"/>. Clients <bcp14>SHOULD</bcp14> implement the 'tls-exporter' <xref target="RFC9266"/> channel binding type if they implement any channel binding and make use of TLS-1.3.</t>
        <t>Server and clients <bcp14>SHOULD</bcp14> implement the 'tls-unique' <xref target="RFC5929"/> channel binding if they implement channel binding and make use of TLS-1.2. If a server or client implements 'tls-unique' they <bcp14>MUST</bcp14> ensure appropriate protection from the <xref target="TripleHandshake"/> vulnerability using e.g. the Extended Master Secret Extension <xref target="RFC7627"/>.</t>
        <t>Servers <bcp14>MUST</bcp14> use the channel binding type indicated by the client, or fail authentication if they do not support it.</t>
      </section>
    </section>
    <section anchor="formal-syntax">
      <name>Formal Syntax</name>
      <t>The following syntax specification is written in Augmented Backus-Naur Form (ABNF) notation as specified in <xref target="RFC5234"/>. The non-terminals "UTF8-2", "UTF8-3" and "UTF8-4" are defined in <xref target="RFC3629"/>.</t>
      <t>The syntax is based in large parts on <xref section="7" sectionFormat="comma" target="RFC5802"/>, which may be referenced for clarification. If this specification and <xref target="RFC5802"/> are in conflict, this specification takes priority.</t>
      <t>Used definitions from <xref target="RFC5802"/> are reproduced here for convenience:</t>
      <artwork><![CDATA[
ALPHA = <as defined in RFC 5234 appendix B.1>
DIGIT = <as defined in RFC 5234 appendix B.1>
UTF8-2 = <as defined in RFC 3629 (STD 63)>
UTF8-3 = <as defined in RFC 3629 (STD 63)>
UTF8-4 = <as defined in RFC 3629 (STD 63)>

attr-val        = ALPHA "=" value
                 ;; Generic syntax of any attribute sent
                 ;; by server or client

value           = 1*value-char

value-safe-char = %x01-2B / %x2D-3C / %x3E-7F /
                 UTF8-2 / UTF8-3 / UTF8-4
                 ;; UTF8-char except NUL, "=", and ",".

value-char      = value-safe-char / "="

printable       = %x21-2B / %x2D-7E
                 ;; Printable ASCII except ",".
                 ;; Note that any "printable" is also
                 ;; a valid "value".

base64-char     = ALPHA / DIGIT / "/" / "+"

base64-4        = 4base64-char

base64-3        = 3base64-char "="

base64-2        = 2base64-char "=="

base64          = *base64-4 [base64-3 / base64-2]

posit-number    = %x31-39 *DIGIT
                 ;; A positive number.

saslname        = 1*(value-safe-char / "=2C" / "=3D")
                 ;; Conforms to <value>.

authzid         = "a=" saslname
                 ;; Protocol specific.

cb-name         = 1*(ALPHA / DIGIT / "." / "-")
                  ;; See RFC 5056, Section 7.
                  ;; E.g., "tls-server-end-point" or
                  ;; "tls-unique".

gs2-cbind-flag  = ("p=" cb-name) / "n" / "y"
                  ;; "n" -> client doesn't support channel binding.
                  ;; "y" -> client does support channel binding
                  ;;        but thinks the server does not.
                  ;; "p" -> client requires channel binding.
                  ;; The selected channel binding follows "p=".

gs2-header      = gs2-cbind-flag "," [ authzid ] ","
                  ;; GS2 header for OPAQUE

username        = "n=" saslname
                  ;; Usernames are prepared using SASLprep.

reserved-mext   = "m=" 1*(value-char)
                  ;; Reserved for signaling mandatory extensions.
                  ;; The exact syntax will be defined in
                  ;; the future.

channel-binding = "c=" base64
                  ;; base64 encoding of cbind-input.

cbind-data      = 1*OCTET

cbind-input     = gs2-header [ cbind-data ]
                  ;; cbind-data MUST be present for
                  ;; gs2-cbind-flag of "p" and MUST be absent
                  ;; for "y" or "n".
]]></artwork>
      <t>The following definitions are specific to OPAQUE:</t>
      <artwork><![CDATA[
ke1             = "r=" base64
                  ;; base64 encoding of the OPAQUE KE1 message struct
ke2             = "v=" base64
                  ;; base64 encoding of the OPAQUE KE2 message struct
ke3             = "p=" base64
                  ;; base64 encoding of the OPAQUE KE3 message struct

ksf-params      = "i=" base64
                  ;; base64 encoding of KSF parameters

client-first-message-bare =
            [reserved-mext ","] username "," ke1 ["," extensions]

client-first-message =
            gs2-header client-first-message-bare

server-message-bare =
            [reserved-mext ","] channel-binding "," ksf-params
            ["," extensions]

server-message  = server-message-bare "," ke2

client-final-message = ke3
]]></artwork>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The KSF parameters and channel bindings aren't authenticated before KSF usage, allowing a DoS of a client by an malicious actor posing as the server, as it can send excessively expensive KSF parameters.</t>
      <t>If not used with a secure channel providing confidentiality this mechanism leaks the authid and authzid of an authenticating user to any passive observer.</t>
      <t>The cryptographic security of this mechanism is not increased over the one provided by the underlying OPAQUE protocol, so all security considerations listed in the <xref target="OPAQUE"/> specification also apply to this one.</t>
    </section>
    <section anchor="open-issues">
      <name>Open Issues</name>
      <ul spacing="normal">
        <li>With the current design the KSF parameters can not be MAC-verified until after they have been used. This is bad. The only other option is using the ephemeral keypair to generate a MAC key and use that. This may impact security.</li>
        <li>This mechanism should be extended to also become a GSS-API mechanism like SCRAM is.</li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>A future revision of this document will request a new registry for the OPAQUE family of SASL mechanism, outlining all required details on the primitives used by the 'OPAQUE-A255SHA' variant.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC5801">
          <front>
            <title>Using Generic Security Service Application Program Interface (GSS-API) Mechanisms in Simple Authentication and Security Layer (SASL): The GS2 Mechanism Family</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <author fullname="N. Williams" initials="N." surname="Williams">
              <organization/>
            </author>
            <date month="July" year="2010"/>
            <abstract>
              <t>This document describes how to use a Generic Security Service Application Program Interface (GSS-API) mechanism in the Simple Authentication and Security Layer (SASL) framework.  This is done by defining a new SASL mechanism family, called GS2.  This mechanism family offers a number of improvements over the previous "SASL/ GSSAPI" mechanism: it is more general, uses fewer messages for the authentication phase in some cases, and supports negotiable use of channel binding.  Only GSS-API mechanisms that support channel binding and mutual authentication are supported.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5801"/>
          <seriesInfo name="DOI" value="10.17487/RFC5801"/>
        </reference>
        <reference anchor="RFC5802">
          <front>
            <title>Salted Challenge Response Authentication Mechanism (SCRAM) SASL and GSS-API Mechanisms</title>
            <author fullname="C. Newman" initials="C." surname="Newman">
              <organization/>
            </author>
            <author fullname="A. Menon-Sen" initials="A." surname="Menon-Sen">
              <organization/>
            </author>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov">
              <organization/>
            </author>
            <author fullname="N. Williams" initials="N." surname="Williams">
              <organization/>
            </author>
            <date month="July" year="2010"/>
            <abstract>
              <t>The secure authentication mechanism most widely deployed and used by Internet application protocols is the transmission of clear-text passwords over a channel protected by Transport Layer Security (TLS). There are some significant security concerns with that mechanism, which could be addressed by the use of a challenge response authentication mechanism protected by TLS.  Unfortunately, the challenge response mechanisms presently on the standards track all fail to meet requirements necessary for widespread deployment, and have had success only in limited use.</t>
              <t>This specification describes a family of Simple Authentication and Security Layer (SASL; RFC 4422) authentication mechanisms called the Salted Challenge Response Authentication Mechanism (SCRAM), which addresses the security concerns and meets the deployability requirements.  When used in combination with TLS or an equivalent security layer, a mechanism from this family could improve the status quo for application protocol authentication and provide a suitable choice for a mandatory-to-implement mechanism for future application protocol standards.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5802"/>
          <seriesInfo name="DOI" value="10.17487/RFC5802"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau">
              <organization/>
            </author>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems.  The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo.  UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values.  This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC9106">
          <front>
            <title>Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications</title>
            <author fullname="A. Biryukov" initials="A." surname="Biryukov">
              <organization/>
            </author>
            <author fullname="D. Dinu" initials="D." surname="Dinu">
              <organization/>
            </author>
            <author fullname="D. Khovratovich" initials="D." surname="Khovratovich">
              <organization/>
            </author>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document describes the Argon2 memory-hard function for password hashing and proof-of-work applications.  We provide an implementer-oriented description with test vectors.  The purpose is to simplify adoption of Argon2 for Internet protocols.  This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9106"/>
          <seriesInfo name="DOI" value="10.17487/RFC9106"/>
        </reference>
        <reference anchor="RFC9266">
          <front>
            <title>Channel Bindings for TLS 1.3</title>
            <author fullname="S. Whited" initials="S." surname="Whited">
              <organization/>
            </author>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document defines a channel binding type, tls-exporter, that is compatible with TLS 1.3 in accordance with RFC 5056, "On the Use of Channel Bindings to Secure Channels".  Furthermore, it updates the default channel binding to the new binding for versions of TLS greater than 1.2.  This document updates RFCs 5801, 5802, 5929, and 7677.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9266"/>
          <seriesInfo name="DOI" value="10.17487/RFC9266"/>
        </reference>
        <reference anchor="OPAQUE" target="https://github.com/cfrg/draft-irtf-cfrg-opaque">
          <front>
            <title>The OPAQUE Asymmetric PAKE Protocol</title>
            <author initials="D." surname="Bourdrez" fullname="Daniel Bourdrez">
              <organization/>
            </author>
            <author initials="H." surname="Krawczyk" fullname="Hugo Krawczyk">
              <organization>Algorand Foundation</organization>
            </author>
            <author initials="K." surname="Lewi" fullname="Kevin Lewi">
              <organization>Novi Research</organization>
            </author>
            <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date year="2023" month="January" day="12"/>
          </front>
          <seriesInfo name="I-D" value="draft-irtf-cfrg-opaque-latest"/>
          <format type="HTML" target="https://cfrg.github.io/draft-irtf-cfrg-opaque/draft-irtf-cfrg-opaque.html"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.irtf-cfrg-voprf-17">
          <front>
            <title>Oblivious Pseudorandom Functions (OPRFs) using Prime-Order Groups</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Armando Faz-Hernandez" initials="A." surname="Faz-Hernandez">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="9" month="January" year="2023"/>
            <abstract>
              <t>   An Oblivious Pseudorandom Function (OPRF) is a two-party protocol
   between client and server for computing the output of a Pseudorandom
   Function (PRF).  The server provides the PRF secret key, and the
   client provides the PRF input.  At the end of the protocol, the
   client learns the PRF output without learning anything about the PRF
   secret key, and the server learns neither the PRF input nor output.
   An OPRF can also satisfy a notion of 'verifiability', called a VOPRF.
   A VOPRF ensures clients can verify that the server used a specific
   private key during the execution of the protocol.  A VOPRF can also
   be partially-oblivious, called a POPRF.  A POPRF allows clients and
   servers to provide public input to the PRF computation.  This
   document specifies an OPRF, VOPRF, and POPRF instantiated within
   standard prime-order groups, including elliptic curves.  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-voprf-17"/>
        </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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk">
              <organization/>
            </author>
            <author fullname="P. Eronen" initials="P." surname="Eronen">
              <organization/>
            </author>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications.  The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk">
              <organization/>
            </author>
            <author fullname="M. Bellare" initials="M." surname="Bellare">
              <organization/>
            </author>
            <author fullname="R. Canetti" initials="R." surname="Canetti">
              <organization/>
            </author>
            <date month="February" year="1997"/>
            <abstract>
              <t>This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key.  The cryptographic strength of HMAC depends on the properties of the underlying hash function.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC4422">
          <front>
            <title>Simple Authentication and Security Layer (SASL)</title>
            <author fullname="A. Melnikov" initials="A." role="editor" surname="Melnikov">
              <organization/>
            </author>
            <author fullname="K. Zeilenga" initials="K." role="editor" surname="Zeilenga">
              <organization/>
            </author>
            <date month="June" year="2006"/>
            <abstract>
              <t>The Simple Authentication and Security Layer (SASL) is a framework for providing authentication and data security services in connection-oriented protocols via replaceable mechanisms.  It provides a structured interface between protocols and mechanisms.  The resulting framework allows new protocols to reuse existing mechanisms and allows old protocols to make use of new mechanisms.  The framework also provides a protocol for securing subsequent protocol exchanges within a data security layer.</t>
              <t>This document describes how a SASL mechanism is structured, describes how protocols include support for SASL, and defines the protocol for carrying a data security layer over a connection.  In addition, this document defines one SASL mechanism, the EXTERNAL mechanism.</t>
              <t>This document obsoletes RFC 2222.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4422"/>
          <seriesInfo name="DOI" value="10.17487/RFC4422"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <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="RFC5929">
          <front>
            <title>Channel Bindings for TLS</title>
            <author fullname="J. Altman" initials="J." surname="Altman">
              <organization/>
            </author>
            <author fullname="N. Williams" initials="N." surname="Williams">
              <organization/>
            </author>
            <author fullname="L. Zhu" initials="L." surname="Zhu">
              <organization/>
            </author>
            <date month="July" year="2010"/>
            <abstract>
              <t>This document defines three channel binding types for Transport Layer Security (TLS), tls-unique, tls-server-end-point, and tls-unique-for-telnet, in accordance with RFC 5056 (On Channel Binding).</t>
              <t>Note that based on implementation experience, this document changes the original definition of 'tls-unique' channel binding type in the channel binding type IANA registry.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5929"/>
          <seriesInfo name="DOI" value="10.17487/RFC5929"/>
        </reference>
        <reference anchor="RFC7627">
          <front>
            <title>Transport Layer Security (TLS) Session Hash and Extended Master Secret Extension</title>
            <author fullname="K. Bhargavan" initials="K." role="editor" surname="Bhargavan">
              <organization/>
            </author>
            <author fullname="A. Delignat-Lavaud" initials="A." surname="Delignat-Lavaud">
              <organization/>
            </author>
            <author fullname="A. Pironti" initials="A." surname="Pironti">
              <organization/>
            </author>
            <author fullname="A. Langley" initials="A." surname="Langley">
              <organization/>
            </author>
            <author fullname="M. Ray" initials="M." surname="Ray">
              <organization/>
            </author>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Transport Layer Security (TLS) master secret is not cryptographically bound to important session parameters such as the server certificate.  Consequently, it is possible for an active attacker to set up two sessions, one with a client and another with a server, such that the master secrets on the two sessions are the same.  Thereafter, any mechanism that relies on the master secret for authentication, including session resumption, becomes vulnerable to a man-in-the-middle attack, where the attacker can simply forward messages back and forth between the client and server.  This specification defines a TLS extension that contextually binds the master secret to a log of the full handshake that computes it, thus preventing such attacks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7627"/>
          <seriesInfo name="DOI" value="10.17487/RFC7627"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="TripleHandshake" target="https://www.mitls.org/pages/attacks/3SHAKE">
          <front>
            <title>Triple Handshakes and Cookie Cutters: Breaking and Fixing Authentication over TLS</title>
            <author initials="K." surname="Bhargavan" fullname="Karthikeyan Bhargavan">
              <organization>INRIA Paris-Rocqencourt</organization>
            </author>
            <author initials="A." surname="Delignat-Lavaud" fullname="Antoine Delignat-Lavaud">
              <organization>INRIA Paris-Rocqencourt</organization>
            </author>
            <author initials="C." surname="Fournet" fullname="Cédric Fournet">
              <organization>Microsoft Research</organization>
            </author>
            <author initials="A." surname="Pironti" fullname="Alfredo Pironti">
              <organization>INRIA Paris-Rocqencourt</organization>
            </author>
            <author initials="P." surname="Strub" fullname="Pierre-Yves Strub">
              <organization>IMDEA Software Institute</organization>
            </author>
            <date year="2014" month="May"/>
          </front>
          <format type="PDF" target="https://www.mitls.org/downloads/tlsauth.pdf"/>
          <refcontent>miTLS</refcontent>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thank you to Daniel Bourdrez, Hugo Krawczyk, Kevin Lewi, and C. A. Wood for their work on the OPAQUE PAKE that this mechanism is based on.
Thank you to Abhijit Menon-Sen, Alexey Melnikov, Nicolas Williams, and Chris Newman for their work on the SCRAM RFC, most of which this draft oh so blatanly steals for its own gain.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
