Skip to content

State of Play #1

Open
Open

Description

@Neustradamus

Welcome, this page informs you about the security, all SCRAM variants and Channel Binding (-PLUS variants) too.

Important: 2019-07-15: SCRAM-SASL GitHub Project has been opened.


Like I inform all the World since a long time: SCRAM and Channel Binding are here for more security.

2025-08-21: Daniel Gultsch (@iNPUTmice), author of Conversations (an XMPP Client for Android) has done an announcement:

End-to-end encryption (E2EE) is important. However, on self-hosted or otherwise trusted servers, the client-to-server transport layer presents a much larger attack surface. It’s the first hurdle an adversary must overcome before they can attack E2EE. 

That’s why Conversations includes advanced MITM detection called Channel Binding. Turn it on today!

It’s optional for now because not all servers support it. Talk to your admins.

Neither Matrix nor Delta Chat offer comparable protection.

Conversations: SCRAM-SHA-1(-PLUS), SCRAM-SHA-256(-PLUS) and SCRAM-SHA-512(-PLUS):


Important: Channel Binding support (tls-unique, tls-server-end-point and tls-exporter) for PHP is in progress:

PHP SASL2 Library:


Attention: Slixmpp and other Python projects do not use tls-server-end-point and tls-exporter because it is not in CPython:

Fix connections to Snikket instances: Snikket decided to forbid PLAIN authentication, which is good but exposed a bug in slixmpp, which was trying to do SCRAM-SHA-1-PLUS authentication on TLSv1.3 using the tls-unique channel binding, which is forbidden by spec on this version of TLS as it has various known attacks. TLSv1.3 has the tls-exporter binding which replaces tls-unique, but we cannot currently use it in slixmpp because CPython does not support it.
For now, connections to Snikket instances will use SCRAM-SHA-1 without binding (note that the stanzas may say SCRAM-SHA-1-PLUS, but it is the SCRAM payload which is important here).

Only tls-unique (TLS =< 1.2):


For a better security and after several years since the initial ticket done 2019-01-26, more 7 years: Openfire 5.1.0 (2026-06-03) now supports Channel Binding and "SCRAM-SHA-1-PLUS" for the moment!

Thanks NLnet!


Important history:

CRAM-MD5 to Historic:

RFC6331: Moving DIGEST-MD5 to Historic:

RFC8600: https://tools.ietf.org/html/rfc8600 (2019-06-21): https://mailarchive.ietf.org/arch/msg/ietf-announce/suJMmeMhuAOmGn_PJYgX5Vm8lNA
When using the SASL SCRAM mechanism, the SCRAM-SHA-256-PLUS variant SHOULD be preferred over the SCRAM-SHA-256 variant, and SHA-256 variants [RFC7677] SHOULD be preferred over SHA-1 variants [RFC5802].

But in "Best practices for password hashing and storage" expired I-D:

- EXTERNAL
- SCRAM-SHA-256-PLUS
- SCRAM-SHA-1-PLUS
- SCRAM-SHA-256
- SCRAM-SHA-1
- PLAIN

About Channel Binding (for -PLUS variants):

Some important XEPs:

Little details, to know easily:

  • tls-unique for TLS =< 1.2 (RFC5929)
  • tls-server-end-point for TLS =< 1.2 + 1.3 (RFC5929)
  • tls-exporter for TLS = 1.3 (RFC9266)

After the jabber.ru MITM, Channel Binding is the solution:


SCRAM-SHA-1(-PLUS):

SCRAM-SHA-256(-PLUS):

SCRAM-SHA-512(-PLUS):

SCRAM-SHA3-512(-PLUS):

SCRAM BIS: Salted Challenge Response Authentication Mechanism (SCRAM) SASL and GSS-API Mechanisms:

SCRAM with Modular Crypt Format (SCRAM-MCF):

IMAP:

LDAP:

  • RFC5803: Lightweight Directory Access Protocol (LDAP) Schema for Storing Salted Challenge Response Authentication Mechanism (SCRAM) Secrets: https://tools.ietf.org/html/rfc5803 // July 2010

HTTP:

JMAP:

2FA:

IANA:

SASL2:

SCRAM with Modular Crypt Format (SCRAM-MCF):


Article: Convert old unsecured MD5 passwords to SCRAM-SHA-256 with PostgreSQL: https://info.crunchydata.com/blog/how-to-upgrade-postgresql-passwords-to-scram

Article: From MD5 to scram-sha-256 in PostgreSQL: https://www.cybertec-postgresql.com/en/from-md5-to-scram-sha-256-in-postgresql/

Article: SCRAM over SASL for SkySpark v3: https://www.alienfactory.co.uk/articles/skyspark-scram-over-sasl

Since PostgreSQL 10, MD5 -> SCRAM-SHA-256:
SCRAM-SHA-256 has been added in PostgreSQL 10
SCRAM-SHA-256-PLUS variant (with TLS Binding) has been added in PostgreSQL 13
SCRAM-SHA-256 is selected by default in PostgreSQL 14


SCRAM-SHA-1(-PLUS) and SCRAM-SHA-256(-PLUS):

SCRAM-SHA-1 and SCRAM-SHA-256:

SCRAM-SHA-256(-PLUS):

SCRAM-SHA-256:

SCRAM-SHA-256 and SCRAM-SHA-512:

SCRAM-SHA-224, SCRAM-SHA-256, SCRAM-SHA-384, SCRAM-SHA-512:

SCRAM-SHA-1, SCRAM-SHA-224, SCRAM-SHA-256, SCRAM-SHA-384, SCRAM-SHA-512 and SCRAM-SHA3-512:

SCRAM-SHA-1(-PLUS), SCRAM-SHA-224(-PLUS), SCRAM-SHA-256(-PLUS), SCRAM-SHA-384(-PLUS), SCRAM-SHA-512(-PLUS) and SCRAM-SHA3-512(-PLUS):

SCRAM-SHA-1, SCRAM-SHA-256, SCRAM-SHA-512 and SCRAM-SHA3-512:

SCRAM-SHA-1(-PLUS), SCRAM-SHA-256(-PLUS), SCRAM-SHA-512(-PLUS) and SCRAM-SHA3-512(-PLUS):

SCRAM-SHA-1, SCRAM-SHA-256 and SCRAM-SHA-512:

SCRAM-SHA-1(-PLUS), SCRAM-SHA-256(-PLUS) and SCRAM-SHA-512(-PLUS):

SCRAM-SHA-1, SCRAM-SHA-256, SCRAM-SHA-384 and SCRAM-SHA-512:

SCRAM-SHA-1, SCRAM-SHA-224, SCRAM-SHA-256, SCRAM-SHA-384 and SCRAM-SHA-512:

SCRAM-SHA-1(-PLUS), SCRAM-SHA-224(-PLUS), SCRAM-SHA-256(-PLUS), SCRAM-SHA-384(-PLUS) and SCRAM-SHA-512(-PLUS):

SCRAM-SHA-1(-PLUS), SCRAM-SHA-256(-PLUS), SCRAM-SHA-384(-PLUS) and SCRAM-SHA-512(-PLUS):

SCRAM-SHA-1, SCRAM-SHA-256(-PLUS) and SCRAM-SHA-512(-PLUS):

SCRAM-SHA-1(-PLUS):

SCRAM-SHA-1 and SCRAM-SHA-1-PLUS (but only with tls-unique TLS =< 1.2)

Python linked too:

SCRAM-SHA-1:

NOTHING:

UNKNOWN:

Activity

  1. pinned this issue on Jul 15, 2019
  2. Neustradamus commented on Feb 22, 2022

    @Neustradamus
    MemberAuthor

    Important information: Cyrus SASL 2.1.28 has been released.

  3. Neustradamus commented on Mar 27, 2022

    @Neustradamus
    MemberAuthor

    2022-03-14: Prosody 0.12 has been released with SCRAM-SHA-256 (in more SCRAM-SHA-1):

  4. Neustradamus commented on May 28, 2022

    @Neustradamus
    MemberAuthor

    Gajim 1.4.x and python-nbxmpp 3.x support now SCRAM-SHA-512 (in more SCRAM-SHA-1, SCRAM-SHA-256):

  5. Neustradamus commented on Jul 27, 2022

    @Neustradamus
    MemberAuthor

    RFC 9266: Channel Bindings for TLS 1.3: https://tools.ietf.org/html/rfc9266

  6. 8 remaining items

  7. Neustradamus commented on May 21, 2026

    @Neustradamus
    MemberAuthor

    IMPORTANT ANNOUNCEMENT

    After several years since the initial ticket done 2019-01-26:

    A very good news, Ignite Realtime Openfire, in the next version, 5.1.0, will support, SCRAM-SHA-1-PLUS and SCRAM-SHA-256(-PLUS) in more current SCRAM-SHA-1.

    Linked to:

    Big improvements for security of all, administrators, users, ...

    We can thank the Ignite Realtime for this work on security.

  8. Neustradamus commented on Jun 3, 2026

    @Neustradamus
    MemberAuthor

    It is official, Openfire 5.1.0 has been released (2026-06-03) with Channel Binding support and SCRAM-SHA-1-PLUS.

    Thanks NLnet!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions