RFC 6331 INFORMATIONAL AUTHENTICATION · SASL · DEPRECATION

Moving DIGEST-MD5 to Historic

Why the DIGEST-MD5 login mechanism was declared obsolete and RFC 2831 moved to Historic.

On rfc-editor.org ↗
PUBLISHED
July 2011
AUTHORS
A. Melnikov
STREAM
IETF
BUILDS ON
RFC 2831 — DIGEST-MD5 SASL
IANA CHANGE
DIGEST-MD5 marked OBSOLETE in the SASL registry
SUGGESTED SUCCESSOR FAMILY
SCRAM (RFC 5802)
DOI
10.17487/RFC6331

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Internet Engineering Task Force (IETF)                       A. Melnikov
Request for Comments: 6331                                 Isode Limited
Obsoletes: 2831                                                July 2011
Category: Informational
ISSN: 2070-1721


                     Moving DIGEST-MD5 to Historic

Abstract

   This memo describes problems with the DIGEST-MD5 Simple
   Authentication and Security Layer (SASL) mechanism as specified in
   RFC 2831.  It marks DIGEST-MD5 as OBSOLETE in the IANA Registry of
   SASL mechanisms and moves RFC 2831 to Historic status.

Status of This Memo

   This document is not an Internet Standards Track specification; it is
   published for informational purposes.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Not all documents
   approved by the IESG are a candidate for any level of Internet
   Standard; see Section 2 of RFC 5741.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   http://www.rfc-editor.org/info/rfc6331.

Copyright Notice

   Copyright (c) 2011 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

   This document may contain material from IETF Documents or IETF
   Contributions published or made publicly available before November
   10, 2008.  The person(s) controlling the copyright in some of this
   material may not have granted the IETF Trust the right to allow
   modifications of such material outside the IETF Standards Process.
   Without obtaining an adequate license from the person(s) controlling
   the copyright in such materials, this document may not be modified
   outside the IETF Standards Process, and derivative works of it may
   not be created outside the IETF Standards Process, except to format
   it for publication as an RFC or to translate it into languages other
   than English.

Table of Contents

   1.    Introduction and Overview . . . . . . . . . . . . . . . . . . 2
   2.    Security Considerations . . . . . . . . . . . . . . . . . . . 5
   3.    IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5
   4.    Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . 5
   5.    References  . . . . . . . . . . . . . . . . . . . . . . . . . 5
   5.1.  Normative References  . . . . . . . . . . . . . . . . . . . . 5
   5.2.  Informative References  . . . . . . . . . . . . . . . . . . . 5

1.  Introduction and Overview

   [RFC2831] defines how HTTP Digest Authentication [RFC2617] can be
   used as a Simple Authentication and Security Layer (SASL) [RFC4422]
   mechanism for any protocol that has a SASL profile.  It was intended
   both as an improvement over CRAM-MD5 [RFC2195] and as a convenient
   way to support a single authentication mechanism for web, email, the
   Lightweight Directory Access Protocol (LDAP), and other protocols.
   While it can be argued that it is an improvement over CRAM-MD5, many
   implementors commented that the additional complexity of DIGEST-MD5
   makes it difficult to implement fully and securely.

   Below is an incomplete list of problems with the DIGEST-MD5 mechanism
   as specified in [RFC2831]:

   1.  The mechanism has too many options and modes.  Some of them are
       not well described and are not widely implemented.  For example,
       DIGEST-MD5 allows the "qop" directive to contain multiple values,
       but it also allows for multiple qop directives to be specified.
       The handling of multiple options is not specified, which results
       in minor interoperability problems.  Some implementations
       amalgamate multiple qop values into one, while others treat
       multiple qops as an error.  Another example is the use of an
       empty authorization identity.  In SASL, an empty authorization
       identity means that the client is willing to authorize as the
       authentication identity.  The document is not clear on whether
       the authzid must be omitted or if it can be specified with an
       empty value to convey this.  The requirement for backward
       compatibility with HTTP Digest means that the situation is even
       worse.  For example, DIGEST-MD5 requires all usernames/passwords
       that can be entirely represented in the ISO-8859-1 charset to be
       down converted from UTF-8 [RFC3629] to ISO-8859-1 [ISO-8859-1].
       Another example is the use of quoted strings.  Handling of
       characters that need escaping is not properly described, and the
       DIGEST-MD5 document has no examples to demonstrate correct
       behavior.

   2.  The DIGEST-MD5 document uses ABNF from RFC 822 [RFC0822], which
       allows an extra construct and allows for "implied folding
       whitespace" to be inserted in many places.  The difference from a
       more common ABNF defined in [RFC5234] is confusing for some
       implementors.  As a result, many implementations do not accept
       folding whitespace in many places where it is allowed.

   3.  The DIGEST-MD5 document uses the concept of a "realm" to define a
       collection of accounts.  A DIGEST-MD5 server can support one or
       more realms.  The DIGEST-MD5 document does not provide any
       guidance on how realms should be named and, more importantly, how
       they can be entered in User Interfaces (UIs).  As a result, many
       DIGEST-MD5 clients have confusing UIs, do not allow users to
       enter a realm, and/or do not allow users to pick one of the
       server-supported realms.

   4.  Use of username in the inner hash is problematic.  The inner hash
       of DIGEST-MD5 is an MD5 hash of colon-separated username, realm,
       and password.  Implementations may choose to store inner hashes
       instead of clear text passwords.  This has some useful
       properties, such as protection from compromise of authentication
       databases containing the same username and password on other
       servers if a server with the username and password is
       compromised; however, this is rarely done in practice.  First,
       the inner hash is not compatible with widely deployed Unix
       password databases, and second, changing the username would
       invalidate the inner hash.

   5.  Description of DES/3DES [DES] and RC4 security layers are
       inadequate to produce independently developed interoperable
       implementations.  In the DES/3DES case, this is partly a problem
       with existing DES APIs.

   6.  DIGEST-MD5 outer hash (the value of the "response" directive)
       does not protect the whole authentication exchange, which makes
       the mechanism vulnerable to "man-in-the-middle" (MITM) attacks,
       such as modification of the list of supported qops or ciphers.

   7.  The following features are missing from DIGEST-MD5, making it
       insecure or unsuitable for use in protocols:

       A.  Channel bindings [RFC5056].

       B.  Hash agility (i.e., no easy way to replace the MD5 hash
           function with another one).

       C.  Support for SASLPrep [RFC4013] or any other type of Unicode
           character normalization of usernames and passwords.  The
           original DIGEST-MD5 document predates SASLPrep and does not
           recommend any Unicode character normalization.

   8.  The cryptographic primitives in DIGEST-MD5 are not up to today's
       standards, in particular:

       A.  The MD5 hash is sufficiently weak to make a brute force
           attack on DIGEST-MD5 easy with common hardware [RFC6151].

       B.  The RC4 algorithm is prone to attack when used as the
           security layer without discarding the initial key stream
           output [RFC6229].

       C.  The DES cipher for the security layer is considered insecure
           due to its small key space [RFC3766].

   Note that most of the problems listed above are already present in
   the HTTP Digest authentication mechanism.

   Because DIGEST-MD5 is defined as an extensible mechanism, it is
   possible to fix most of the problems listed above.  However, this
   would increase implementation complexity of an already complex
   mechanism even further, so the effort is not worth the cost.  In
   addition, an implementation of a "fixed" DIGEST-MD5 specification
   would likely either not interoperate with any existing implementation
   of [RFC2831] or would be vulnerable to various downgrade attacks.

   Note that despite DIGEST-MD5 seeing some deployment on the Internet,
   this specification recommends obsoleting DIGEST-MD5 because DIGEST-
   MD5, as implemented, is not a reasonable candidate for further
   standardization and should be deprecated in favor of one or more new
   password-based mechanisms currently being designed.

   The Salted Challenge Response Authentication Mechanism (SCRAM) family
   of SASL mechanisms [RFC5802] has been developed to provide similar
   features as DIGEST-MD5 but with a better design.

2.  Security Considerations

   Security issues are discussed throughout this document.

3.  IANA Considerations

   IANA has changed the "Intended usage" of the DIGEST-MD5 mechanism
   registration in the SASL mechanism registry to OBSOLETE.  The SASL
   mechanism registry is specified in [RFC4422] and is currently
   available at:

      http://www.iana.org/assignments/sasl-mechanisms

4.  Acknowledgements

   The author gratefully acknowledges the feedback provided by Chris
   Newman, Simon Josefsson, Kurt Zeilenga, Sean Turner, and Abhijit
   Menon-Sen.  Various text was copied from other RFCs, in particular,
   from [RFC2831].

5.  References

5.1.  Normative References

   [RFC2617]     Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence,
                 S., Leach, P., Luotonen, A., and L. Stewart, "HTTP
                 Authentication: Basic and Digest Access
                 Authentication", RFC 2617, June 1999.

   [RFC2831]     Leach, P. and C. Newman, "Using Digest Authentication
                 as a SASL Mechanism", RFC 2831, May 2000.

5.2.  Informative References

   [DES]         National Institute of Standards and Technology, "Data
                 Encryption Standard (DES)", FIPS PUB 46-3,
                 October 1999.

   [ISO-8859-1]  International Organization for Standardization,
                 "Information technology - 8-bit single-byte coded
                 graphic character sets - Part 1: Latin alphabet No. 1",
                 ISO/IEC 8859-1, 1998.

   [RFC0822]     Crocker, D., "Standard for the format of ARPA Internet
                 text messages", STD 11, RFC 822, August 1982.

   [RFC2195]     Klensin, J., Catoe, R., and P. Krumviede, "IMAP/POP
                 AUTHorize Extension for Simple Challenge/Response",
                 RFC 2195, September 1997.

   [RFC3629]     Yergeau, F., "UTF-8, a transformation format of ISO
                 10646", STD 63, RFC 3629, November 2003.

   [RFC3766]     Orman, H. and P. Hoffman, "Determining Strengths For
                 Public Keys Used For Exchanging Symmetric Keys",
                 BCP 86, RFC 3766, April 2004.

   [RFC4013]     Zeilenga, K., "SASLprep: Stringprep Profile for User
                 Names and Passwords", RFC 4013, February 2005.

   [RFC4422]     Melnikov, A. and K. Zeilenga, "Simple Authentication
                 and Security Layer (SASL)", RFC 4422, June 2006.

   [RFC5056]     Williams, N., "On the Use of Channel Bindings to Secure
                 Channels", RFC 5056, November 2007.

   [RFC5234]     Crocker, D. and P. Overell, "Augmented BNF for Syntax
                 Specifications: ABNF", STD 68, RFC 5234, January 2008.

   [RFC5802]     Newman, C., Menon-Sen, A., Melnikov, A., and N.
                 Williams, "Salted Challenge Response Authentication
                 Mechanism (SCRAM) SASL and GSS-API Mechanisms",
                 RFC 5802, July 2010.

   [RFC6151]     Turner, S. and L. Chen, "Updated Security
                 Considerations for the MD5 Message-Digest and the HMAC-
                 MD5 Algorithms", RFC 6151, March 2011.

   [RFC6229]     Strombergson, J. and S. Josefsson, "Test Vectors for
                 the Stream Cipher RC4", RFC 6229, May 2011.

Author's Address

   Alexey Melnikov
   Isode Limited
   5 Castle Business Village
   36 Station Road
   Hampton, Middlesex  TW12 2BX
   UK

   EMail: Alexey.Melnikov@isode.com
   URI:   http://www.melnikov.ca/

AI ELI5

On this page
PROBLEMDIGEST-MD5, a SASL login mechanism defined in RFC 2831, turned out to be too complex to implement fully and securely, and its cryptography had aged badly.
MECHANISMThis memo lists the mechanism's problems, concludes that fixing them is not worth the cost, marks DIGEST-MD5 as OBSOLETE in the IANA SASL registry and moves RFC 2831 to Historic.
WHY IT FADEDDIGEST-MD5 is deprecated in favor of newer password-based mechanisms such as the SCRAM family.

§1What DIGEST-MD5 Was

RFC 2831 defined how HTTP Digest Authentication can serve as a SASL (Simple Authentication and Security Layer) mechanism for any protocol with a SASL profile. It was meant as an improvement over CRAM-MD5 and as a convenient single mechanism for web, email, LDAP and other protocols.

Many implementors reported that its extra complexity makes it difficult to implement fully and securely. RFC 6331 collects an incomplete list of problems and then retires the mechanism.

DIGEST-MD5 was a way for programs to prove who they are to a server. It was meant to be handy for everything, but it turned out to be hard to build correctly.

§1.1Complexity and Interoperability Problems

The mechanism has too many options and modes, some poorly described and rarely implemented. The qop directive may hold several values, and several qop directives may appear, but handling is unspecified: some implementations merge them, others treat it as an error. The document is also unclear on whether an empty authorization identity must be omitted or may be sent with an empty value.

Compatibility with HTTP Digest forces down-conversion of usernames and passwords from UTF-8 to ISO-8859-1 when they fit, and the handling of quoted strings and escaping is not properly described. The document uses the ABNF of RFC 822, with implied folding whitespace, which many implementations do not accept.

It also uses "realms" without saying how they should be named or entered in user interfaces, so many clients have confusing realm handling. Storing an inner hash of username, realm and password is rarely done, since it is not compatible with widely deployed Unix password databases and changing the username would invalidate it.

The rules had so many options and unclear parts that different programs understood them differently, so they sometimes could not talk to each other.

§2Security and Cryptography Problems

The descriptions of the DES/3DES and RC4 security layers are inadequate for independently developed interoperable implementations. The outer hash, the response directive, does not protect the whole exchange, so the mechanism is open to man-in-the-middle attacks such as modifying the list of supported qops or ciphers.

Missing features include channel bindings, hash agility (no easy way to replace MD5), and SASLprep or any other Unicode normalization of usernames and passwords.

The primitives are dated too. MD5 is weak enough that a brute force attack is easy with common hardware (RFC 6151). RC4 is prone to attack as a security layer unless the initial key stream is discarded (RFC 6229), and DES is considered insecure because of its small key space (RFC 3766). The memo notes that most of these problems are already present in HTTP Digest.

The lock was easy to pick, and an attacker standing in the middle could meddle with the settings the two sides agreed on. The ingredients were also old and weak.

§3The Decision and IANA Action

DIGEST-MD5 could in principle be fixed because it is extensible, but that would add complexity to an already complex mechanism. A "fixed" version would likely either not interoperate with existing RFC 2831 implementations or be vulnerable to downgrade attacks, so the effort is not worth the cost.

The memo accepts that DIGEST-MD5 has seen some deployment, but says that as implemented it is not a reasonable candidate for further standardization. IANA changed the "Intended usage" of the DIGEST-MD5 entry in the SASL mechanism registry to OBSOLETE.

Patching it would make an already messy machine even messier, so the authors decided it was better to retire it and replace it.

§4What to Use Instead

The memo says DIGEST-MD5 should be deprecated in favor of one or more new password-based mechanisms then being designed. The Salted Challenge Response Authentication Mechanism (SCRAM) family of SASL mechanisms, defined in RFC 5802, was developed to provide similar features with a better design.

The Security Considerations section says only that security issues are discussed throughout the document.

A newer, better handshake called SCRAM was built to do the same job without the old problems.

§6References