<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.38 (Ruby 3.3.11) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC2104 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2104.xml">
<!ENTITY RFC3629 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3629.xml">
<!ENTITY RFC4086 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4086.xml">
<!ENTITY RFC4422 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4422.xml">
<!ENTITY RFC5056 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5056.xml">
<!ENTITY RFC5234 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml">
<!ENTITY RFC5929 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5929.xml">
<!ENTITY RFC6920 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6920.xml">
<!ENTITY RFC7627 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7627.xml">
<!ENTITY RFC8446 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
<!ENTITY RFC9266 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9266.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC5802 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5802.xml">
<!ENTITY RFC8126 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
]>


<rfc ipr="trust200902" docName="draft-ietf-kitten-sasl-ht-02" category="std" consensus="true">
  <front>
    <title>The Hashed Token SASL Mechanism</title>

    <author initials="F." surname="Schmaus" fullname="Florian Schmaus">
      <organization>Friedrich-Alexander-Universität Erlangen-Nürnberg</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>flow@cs.fau.de</email>
      </address>
    </author>
    <author initials="T." surname="Molitor" fullname="Thilo Molitor">
      <organization>Monal Instant Messenger</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>thilo+ietf@eightysoft.de</email>
      </address>
    </author>
    <author initials="C." surname="Egger" fullname="Christoph Egger">
      <organization>Chalmers University of Technology</organization>
      <address>
        <postal>
          <country>Sweden</country>
        </postal>
        <email>christoph.egger@chalmers.se</email>
      </address>
    </author>

    <date year="2026" month="June" day="22"/>

    <area>Security</area>
    <workgroup>Common Authentication Technology Next Generation (kitten)</workgroup>
    

    <abstract>


<?line 79?>

<t>This document specifies the family of Hashed Token SASL mechanisms, which enable a proof-of-possession-based authentication scheme and are meant to quickly re-authenticate a previous session.
The Hashed Token SASL mechanism's authentication sequence consists of only one round-trip.
The usage of short-lived, exclusively ephemeral hashed tokens is achieving the single round-trip property.
The SASL mechanism specified herein further provides hash agility, mutual authentication, support for channel binding, and the capability to exchange authenticated key/value pairs.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-kitten-sasl-ht/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/flowdalic/xeps/tree/master/draft-ietf-kitten-sasl-ht"/>.</t>
    </note>


  </front>

  <middle>


<?line 86?>

<section anchor="introduction"><name>Introduction</name>

<t>This specification describes the family of Hashed Token (HT) Simple Authentication and Security Layer (SASL) <xref target="RFC4422"/> mechanisms, which enable a proof-of-possession-based authentication scheme.
The HT mechanism is designed to be used with short-lived, exclusively ephemeral tokens, called SASL-HT tokens, and allow for quick, one round-trip re-authentication of a previous session.</t>

<t>Further properties of the HT mechanism are 1) hash agility, 2) mutual authentication, 3) support for channel binding, and 4) the optional exchange of authenticated key/value pairs.</t>

<t>The ability to include arbitrary key/value pairs allows the initiator and responder to negotiate session parameters or exchange context-specific data concurrently with the authentication exchange, with cryptographic guarantees regarding their integrity and authenticity.
An example use case for these key/value pairs is transmitting a downgrade protection hash of the initially offered SASL mechanisms and channel-binding types (see <xref target="XEP-0474"/>).</t>

<t>Clients should request SASL-HT tokens from the server after being authenticated using a "strong" SASL mechanism like SCRAM <xref target="RFC5802"/>.
Hence a typical sequence of actions using HT may look like the following:</t>

<figure name="Example sequence using the Hashed Token (HT) SASL mechanism"><artwork><![CDATA[
A) Client authenticates using a strong mechanism (e.g., SCRAM)
B) Client requests secret SASL-HT token
C) Service returns SASL-HT token
   <normal client-server interaction here>
D) Connection between client and server gets interrupted,
   for example because of a WiFi ↔ GSM switch
E) Client resumes the previous session using HT and token from C)
F) Service revokes the successfully used SASL-HT token
   [goto B]
]]></artwork></figure>

<t>The HT mechanism requires an accompanying, application-protocol-specific extension, which allows clients to request a new SASL-HT token (see <xref target="requirements-for-the-applicationprotocol-extension">Section 5</xref>).
Examples of such an application-protocol-specific extension based on HT are <xref target="XEP-0397"/> and <xref target="XEP-0484"/>.</t>

<t>Since the SASL-HT token is not salted, and only one hash iteration is used, the HT mechanism is not suitable to protect long-lived shared secrets (e.g., "passwords").
You may want to look at <xref target="RFC5802"/> for that.</t>

<section anchor="conventions-and-terminology"><name>Conventions and Terminology</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" 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.
These words may also appear in this document in
lower case as plain English words, absent their normative meanings.
<?line -8?></t>

</section>
<section anchor="applicability"><name>Applicability</name>

<t>Because this mechanism transports information that an attacker should not control, the HT mechanism <strong>MUST</strong> only be used over channels protected by Transport Layer Security (TLS, see <xref target="RFC8446"/>) or over similar integrity-protected and authenticated channels.
Also, the application-protocol-specific extension that requests a new SASL-HT token <strong>SHOULD</strong> only be used over similarly protected channels.</t>

<t>The family of HT mechanisms is not applicable for proxy authentication since they cannot carry an authorization identity string (authzid).</t>

</section>
</section>
<section anchor="the-ht-family-of-mechanisms"><name>The HT Family of Mechanisms</name>

<t>Each mechanism in this family differs by choice of the hash algorithm and the selection of the channel binding <xref target="RFC5929"/> type.</t>

<t>An HT mechanism name is a string beginning with "HT2-" followed by the capitalized name of the used hash, followed by "-", and suffixed by one of 'ENDP', 'UNIQ', 'EXPR' or 'NONE'.</t>

<t>Hence, each HT mechanism has a name of the following form:</t>

<figure><artwork><![CDATA[
HT2-<hash-alg>-<cb-type>
]]></artwork></figure>

<t>Where &lt;hash-alg&gt; is the capitalized "Hash Name String" of the IANA "Named Information Hash Algorithm Registry" <xref target="iana-hash-alg"/> as specified in <xref target="RFC6920"/>, and &lt;cb-type&gt; is one of 'ENDP', 'UNIQ', 'EXPR' or 'NONE' denoting the channel binding type.
In the case of 'ENDP', the tls-server-end-point channel binding type is used.
In the case of 'UNIQ', the tls-unique channel binding type is used.
In the case of 'EXPR', the tls-exporter <xref target="RFC9266"/> channel binding type is used.
Valid channel binding types are defined in the IANA "Channel-Binding Types" registry <xref target="iana-cbt"/> as specified in <xref target="RFC5056"/>.</t>

<t>In the special case of 'NONE' no channel binding will be used.
In this case, cb-data is to be an empty string.</t>

<texttable title="Mapping of cb-type to Channel Binding Types">
      <ttcol align='left'>cb-type</ttcol>
      <ttcol align='left'>Channel Binding Type</ttcol>
      <c>ENDP</c>
      <c>tls-server-end-point</c>
      <c>UNIQ</c>
      <c>tls-unique</c>
      <c>EXPR</c>
      <c>tls-exporter</c>
      <c>NONE</c>
      <c><em>No</em> Channel Binding</c>
</texttable>

<t>The following table lists some examples of HT SASL mechanisms registered by this document.</t>

<texttable title="Examples of HT SASL mechanisms">
      <ttcol align='left'>Mechanism Name</ttcol>
      <ttcol align='left'>HT Hash Algorithm</ttcol>
      <ttcol align='left'>Channel-binding unique prefix</ttcol>
      <c>HT2-SHA-512-ENDP</c>
      <c>SHA-512</c>
      <c>tls-server-end-point</c>
      <c>HT2-SHA-512-UNIQ</c>
      <c>SHA-512</c>
      <c>tls-unique</c>
      <c>HT2-SHA3-512-ENDP</c>
      <c>SHA3-512</c>
      <c>tls-server-end-point</c>
      <c>HT2-SHA-256-UNIQ</c>
      <c>SHA-256</c>
      <c>tls-unique</c>
      <c>HT2-SHA-256-NONE</c>
      <c>SHA-256</c>
      <c>N/A</c>
</texttable>

</section>
<section anchor="the-ht-authentication-exchange"><name>The HT Authentication Exchange</name>

<t>The mechanism consists of a simple exchange of precisely two messages between the initiator and responder.
Both messages allow the inclusion of arbitrary key/value pairs.</t>

<t>The following syntax specifications use the Augmented Backus-Naur form (ABNF) notation as specified in <xref target="RFC5234"/>.</t>

<section anchor="initiator-first-message"><name>Initiator First Message</name>

<t>The HT mechanism starts with the initiator-msg, which is sent by the initiator to the responder.
The following lists the ABNF grammar for SASL-HT in general and initiator-msg in particular:</t>

<figure><artwork><![CDATA[
initiator-msg          = authcid
                         NUL extra-initiator-values
                         NUL initiator-hashed-token
authcid                = 1*255SAFE ;; MUST accept up to 255 octets
extra-initiator-values = key-value-pairs
key-value-pairs        = [ key-value-pair *( "," key-value-pair ) ]
key-value-pair         = 1*key-value-char "=" 1*key-value-char
initiator-hashed-token = 1*OCTET

key-value-char     = ALPHA / DIGIT / "/" / "+" / "-" / "_"

NUL    = %0x00 ;; The null octet
SAFE   = UTF1 / UTF2 / UTF3 / UTF4
         ;; any UTF-8 encoded Unicode character except NUL

UTF1   = %x01-7F ;; except NUL
UTF2   = %xC2-DF UTF0
UTF3   = %xE0 %xA0-BF UTF0 / %xE1-EC 2(UTF0) /
         %xED %x80-9F UTF0 / %xEE-EF 2(UTF0)
UTF4   = %xF0 %x90-BF 2(UTF0) / %xF1-F3 3(UTF0) /
         %xF4 %x80-8F 2(UTF0)
UTF0   = %x80-BF
]]></artwork></figure>

<t>The initiator's first message starts with the authentication identity (authcid, see<xref target="RFC4422"/>) as UTF-8 <xref target="RFC3629"/> encoded string and its terminating null octet followed by an optional set of comma-separated key/value pairs (extra-initiator-values).
This, in turn, is followed by another null octet and the initiator-hashed-token.</t>

<t>The extra-initiator-values allow the initiator to pass arbitrary key/value pairs to the responder during the initial exchange.
Because these key/value pairs are appended to the initiator-hmac-message before the HMAC calculation, their integrity and authenticity are guaranteed by the resulting initiator-hashed-token.
If no extra values are being sent, the extra-initiator-values field remains empty, resulting in two consecutive null octets between the authcid and the initiator-hashed-token.</t>

<t>The value of the initiator-hashed-token is defined as follows:</t>

<figure><artwork><![CDATA[
initiator-hashed-token := HMAC(token, initiator-hmac-message)
initiator-hmac-message := "Initiator"
                          || cb-data
                          || extra-initiator-values
]]></artwork></figure>

<t>HMAC() is the function defined in <xref target="RFC2104"/> with H being the selected HT hash algorithm, 'cb-data' represents the data provided by the selected channel binding type, and 'token' are the UTF-8 encoded octets of the SASL-HT token string, which acts as a shared secret between initiator and responder.</t>

<t>The initiator-msg <strong>MAY</strong> be included in TLS 1.3 0-RTT early data, as specified in <xref target="RFC8446"/>.
If this is the case, then the initiating entity <strong>MUST NOT</strong> contain any further application protocol payload in the early data besides the HT initiator-msg and potentially required framing of the SASL profile.
The responder <strong>MUST</strong> abort the SASL authentication if the early data contains an additional application-protocol payload.</t>

<ul empty="true"><li>
  <t>SASL-HT allows exploiting TLS 1.3 early data for "0.5 Round Trip Time (RTT)" re-authentication of the application protocol's session.
Using TLS early data requires extra care when implementing: The early data should only contain the SASL-HT payload, i.e., the initiator-msg, and not an application-protocol-specific payload.
The reason for this is that another entity could replay the early data.
Therefore, the early data needs must represent an idempotent operation.
On the other hand, if the responding entity can verify the early data, it can send an additional application-protocol-specific payload together with the "re-authentication successful" response to the initiating entity.</t>
</li></ul>

</section>
<section anchor="initiator-authentication"><name>Initiator Authentication</name>

<t>Upon receiving the initiator-msg, the responder calculates the value of initiator-hashed-token and compares it with the received value found in the initiator-msg.
If both values are equal, then the initiator has been successfully authenticated.
Otherwise, if both values are not equal, then authentication <strong>MUST</strong> fail.</t>

</section>
<section anchor="final-responder-message"><name>Final Responder Message</name>

<t>After the responder authenticated the initiator, the responder continues the SASL authentication by sending the responder-msg to the initiator.</t>

<t>The ABNF for responder-msg is:</t>

<figure><artwork><![CDATA[
responder-msg          = success-response / failure-response
success-response       = NUL extra-responder-values
                         NUL responder-hashed-token
extra-responder-values = key-value-pairs
responder-hashed-token = 1*OCTET
failure-response       = %x01 failure-description
]]></artwork></figure>

<section anchor="success-response"><name>Success Response</name>

<t>A success response starts with an octet whose value is set to zero (null), followed by an optional set of comma-separated key/value pairs (extra-responder-values).
This is followed by another null octet and the octet string of the result of the HMAC function (responder-hashed-token).</t>

<figure><artwork><![CDATA[
responder-hashed-token := HMAC(token, responder-hmac-message)
responder-hmac-message := "Responder"
                          || cb-data
                          || extra-responder-values
]]></artwork></figure>

<t>Similar to the initiator's message, the responder can use extra-responder-values to return arbitrary data.
Because these values are incorporated into the responder-hmac-message prior to calculating the HMAC, the initiating entity can mutually authenticate the responder while simultaneously verifying the integrity of the provided key/value pairs.</t>

<t>The initiating entity <strong>MUST</strong> verify the responder-msg to achieve mutual authentication.</t>

</section>
<section anchor="failure-response"><name>Failure Response</name>

<t>A failure response starts with an octet whose value is set to one (0x01), followed by an octet string describing the reason for the failure (failure-description).</t>

<figure><artwork><![CDATA[
failure-description     = "unknown-user" /
                          "invalid-token" /
                          "other-error"/
                          failure-description-ext
failure-description-ext = 1*SAFE ;; additional custom failure reasons
]]></artwork></figure>

<t>Unrecognized failure descriptions should be treated as "other-error".
The responder may substitute the actual failure cause with "other-error" to prevent information disclosure.</t>

</section>
</section>
</section>
<section anchor="compliance-with-sasl-mechanism-requirements"><name>Compliance with SASL Mechanism Requirements</name>

<t>This section describes compliance with SASL mechanism requirements specified in Section 5 of <xref target="RFC4422"/>.</t>

<t><list style="numbers" type="1">
  <t>"HT2-SHA-256-ENDP", "HT2-SHA-256-UNIQ", "HT2-SHA3-512-ENDP", "HT2-SHA3-512-UNIQ", ….</t>
  <t>Definition of server-challenges and client-responses:
a)  HT is a client-first mechanism.
b)  HT does send additional data with success (the responder-msg).</t>
  <t>HT is not capable of transferring authorization identities from the client to the server.</t>
  <t>HT does not offer any security layers (HT offers channel binding instead).</t>
  <t>HT does not protect the authorization identity.</t>
</list></t>

</section>
<section anchor="requirements-for-the-applicationprotocol-extension"><name>Requirements for the Application-Protocol Extension</name>

<t>It is <strong>REQUIRED</strong> that the application-protocol-specific extension provides a mechanism to request a SASL-HT token in the form of a Unicode string.
The returned token <strong>MUST</strong> have been newly generated by a cryptographically secure random number generator, and it MUST contain at least 128 bits of entropy.</t>

<t>It is <strong>RECOMMENDED</strong> that the protocol allows the requestor to signal the name of the SASL mechanism that the requestor intends to use with the token.
If a token is used with a mechanism different from the one signaled upon requesting the token, then the authentication <strong>MUST</strong> fail.
This requirement allows pinning the token to a SASL mechanism, which increases the security because it makes it impossible for an attacker to downgrade the SASL mechanism.</t>

<t>It is <strong>RECOMMENDED</strong> that the protocol defines a way for a client to request rotation or revocation of a token.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The HT mechanism <strong>MUST</strong> be used over a TLS channel that has the session hash extension <xref target="RFC7627"/> negotiated.</t>

<t>It is <strong>RECOMMENDED</strong> that implementations periodically require a full authentication using a strong SASL mechanism that does not use the SASL-HT token.</t>

<t>A cryptographically secure random generator must generate the SASL-HT token.
See <xref target="RFC4086"/> for more information about Randomness Requirements for Security. 
In addition, a comparison of the initiator's HMAC with the responder's calculated HMAC <strong>SHOULD</strong> be performed via constant-time comparison functions to protect against timing attacks.</t>

<t>The tokens used with HT mechanisms <strong>SHOULD</strong> have a limited lifetime, e.g., based on usage count or time elapsed since issuance.</t>

<t>Due to the additional security properties afforded by channel binding, it is <strong>RECOMMENDED</strong> that clients use HT mechanisms with channel binding whenever possible.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>IANA is requested to add the following family of SASL mechanisms to the SASL Mechanism registry established by <xref target="RFC4422"/>:</t>

<ul empty="true"><li>
  <t>To: iana@iana.org</t>

  <t>Subject: Registration of a new SASL family HT</t>

  <t>SASL mechanism name (or prefix for the family): HT2-*</t>

  <t>Security considerations:
  <xref target="security-considerations"></xref> of draft-ietf-kitten-sasl-ht</t>

  <t>Published specification (optional, recommended):
  draft-ietf-kitten-sasl-ht-XX (TODO)</t>

  <t>Person &amp; email address to contact for further information:
IETF SASL WG <eref target="mailto:kitten@ietf.org">kitten@ietf.org</eref></t>

  <t>Intended usage: COMMON</t>

  <t>Owner/Change controller: IESG <eref target="mailto:iesg@ietf.org">iesg@ietf.org</eref></t>

  <t>Note: Members of this family MUST be explicitly registered
using the "IETF Review" <xref target="RFC8126"/> registration procedure.
Reviews MUST be requested on the Kitten WG mailing list
<eref target="mailto:kitten@ietf.org">kitten@ietf.org</eref> (or a successor designated by the responsible
Security AD).</t>
</li></ul>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">

&RFC2104;
&RFC3629;
&RFC4086;
&RFC4422;
&RFC5056;
&RFC5234;
&RFC5929;
&RFC6920;
&RFC7627;
&RFC8446;
&RFC9266;
<reference anchor="iana-hash-alg" target="https://www.iana.org/assignments/named-information/named-information.xhtml#hash-alg">
  <front>
    <title>IANA Named Information Hash Algorithm Registry</title>
    <author initials="N." surname="Williams" fullname="Nicolas Williams">
      <organization>IANA</organization>
    </author>
    <date year="2010"/>
  </front>
</reference>
<reference anchor="iana-cbt" target="https://www.iana.org/assignments/channel-binding-types/channel-binding-types.xhtml">
  <front>
    <title>IANA Channel-Binding Types</title>
    <author initials="N." surname="Williams" fullname="Nicolas Williams">
      <organization>IANA</organization>
    </author>
    <date year="2010"/>
  </front>
</reference>
&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

&RFC5802;
&RFC8126;
<reference anchor="XEP-0397" target="https://xmpp.org/extensions/xep-0397.html">
  <front>
    <title>XEP-0397: Instant Stream Resumption</title>
    <author initials="F." surname="Schmaus" fullname="Florian Schmaus">
      <organization></organization>
    </author>
    <date year="2018" month="November" day="03"/>
  </front>
</reference>
<reference anchor="XEP-0474" target="https://xmpp.org/extensions/xep-0474.html">
  <front>
    <title>XEP-0474: SASL SCRAM Downgrade Protection</title>
    <author initials="T." surname="Molitor" fullname="Thilo Molitor">
      <organization></organization>
    </author>
    <date year="2025" month="October" day="25"/>
  </front>
</reference>
<reference anchor="XEP-0484" target="https://xmpp.org/extensions/xep-0484.html">
  <front>
    <title>XEP-0484: Fast Authentication Streamlining Tokens</title>
    <author initials="M." surname="Wild" fullname="Matthew Wild">
      <organization></organization>
    </author>
    <date year="2024" month="June" day="30"/>
  </front>
</reference>


    </references>

</references>


<?line 364?>

<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>This document benefited from discussions on the KITTEN WG mailing list.
The authors especially thank Thijs Alkemade, Sam Whited, and Alexey Melnikov for their comments.
Furthermore, we would like to thank Alexander Würstlein, who devised the idea to pin the token to a SASL mechanism for increased security.
And last but not least, thanks to Matthew Wild for working on the -NONE variant of SASL-HT.</t>

</section>


  </back>

<!-- ##markdown-source:
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
UxsG1G9GAAA=

-->

</rfc>

