<?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-01" 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="May" day="11"/>

    <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 "HT-" 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[
HT-<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>HT-SHA-512-ENDP</c>
      <c>SHA-512</c>
      <c>tls-server-end-point</c>
      <c>HT-SHA-512-UNIQ</c>
      <c>SHA-512</c>
      <c>tls-unique</c>
      <c>HT-SHA3-512-ENDP</c>
      <c>SHA3-512</c>
      <c>tls-server-end-point</c>
      <c>HT-SHA-256-UNIQ</c>
      <c>SHA-256</c>
      <c>tls-unique</c>
      <c>HT-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*SAFE ;; 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>"HT-SHA-256-ENDP", "HT-SHA-256-UNIQ", "HT-SHA3-512-ENDP", "HT-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): HT-*</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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
RgAA

-->

</rfc>

