datatracker.ietf.org
Sign in
Version 5.7.1.p2, 2014-10-29
Report a bug

Simple Authentication and Security Layer (SASL)
RFC 4422

Document type: RFC - Proposed Standard (June 2006; No errata)
Obsoletes RFC 2222
Document stream: IETF
Last updated: 2013-03-02
Other versions: plain text, pdf, html

IETF State: (None)
Consensus: Unknown
Document shepherd: No shepherd assigned

IESG State: RFC 4422 (Proposed Standard)
Responsible AD: Sam Hartman
Send notices to: tlyu@mit.edu, kurt@openLDAP.org

Network Working Group                                   A. Melnikov, Ed.
Request for Comments: 4422                                 Isode Limited
Obsoletes: 2222                                         K. Zeilenga, Ed.
Category: Standards Track                            OpenLDAP Foundation
                                                               June 2006

            Simple Authentication and Security Layer (SASL)

Status of This Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2006).

Abstract

   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.

   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.

   This document obsoletes RFC 2222.

Melnikov & Zeilenga         Standards Track                     [Page 1]
RFC 4422                          SASL                         June 2006

Table of Contents

   1. Introduction ....................................................3
      1.1. Document Audiences .........................................4
      1.2. Relationship to Other Documents ............................4
      1.3. Conventions ................................................5
   2. Identity Concepts ...............................................5
   3. The Authentication Exchange .....................................6
      3.1. Mechanism Naming ...........................................8
      3.2. Mechanism Negotiation ......................................9
      3.3. Request Authentication Exchange ............................9
      3.4. Challenges and Responses ...................................9
           3.4.1. Authorization Identity String ......................10
      3.5. Aborting Authentication Exchanges .........................10
      3.6. Authentication Outcome ....................................11
      3.7. Security Layers ...........................................12
      3.8. Multiple Authentications ..................................12
   4. Protocol Requirements ..........................................13
   5. Mechanism Requirements .........................................16
   6. Security Considerations ........................................18
      6.1. Active Attacks ............................................19
           6.1.1. Hijack Attacks .....................................19
           6.1.2. Downgrade Attacks ..................................19
           6.1.3. Replay Attacks .....................................20
           6.1.4. Truncation Attacks .................................20
           6.1.5. Other Active Attacks ...............................20
      6.2. Passive Attacks ...........................................20
      6.3. Re-keying .................................................21
      6.4. Other Considerations ......................................21
   7. IANA Considerations ............................................22
      7.1. SASL Mechanism Registry ...................................22
      7.2. Registration Changes ......................................26
   8. References .....................................................26
      8.1. Normative References ......................................26
      8.2. Informative References ....................................27
   9. Acknowledgements ...............................................28
   Appendix A.  The SASL EXTERNAL Mechanism ..........................29
      A.1. EXTERNAL Technical Specification ..........................29
      A.2. SASL EXTERNAL Examples ....................................30
      A.3. Security Considerations ...................................31
   Appendix B.  Changes since RFC 2222 ...............................31

Melnikov & Zeilenga         Standards Track                     [Page 2]
RFC 4422                          SASL                         June 2006

1.  Introduction

   The Simple Authentication and Security Layer (SASL) is a framework
   for providing authentication and data security services in
   connection-oriented protocols via replaceable mechanisms.  SASL
   provides a structured interface between protocols and mechanisms.
   SASL also provides a protocol for securing subsequent protocol
   exchanges within a data security layer.  The data security layer can
   provide data integrity, data confidentiality, and other services.

   SASL's design is intended to allow new protocols to reuse existing
   mechanisms without requiring redesign of the mechanisms and allows
   existing protocols to make use of new mechanisms without redesign of
   protocols.

   SASL is conceptually a framework that provides an abstraction layer
   between protocols and mechanisms as illustrated in the following
   diagram.

                  SMTP    LDAP    XMPP   Other protocols ...
                     \       |    |      /
                      \      |    |     /
                     SASL abstraction layer
                      /      |    |     \
                     /       |    |      \
              EXTERNAL   GSSAPI  PLAIN   Other mechanisms ...

   It is through the interfaces of this abstraction layer that the
   framework allows any protocol to utilize any mechanism.  While this
   layer does generally hide the particulars of protocols from
   mechanisms and the particulars of mechanisms from protocols, this
   layer does not generally hide the particulars of mechanisms from
   protocol implementations.  For example, different mechanisms require
   different information to operate, some of them use password-based
   authentication, some of then require realm information, others make
   use of Kerberos tickets, certificates, etc.  Also, in order to
   perform authorization, server implementations generally have to
   implement identity mapping between authentication identities, whose
   form is mechanism specific, and authorization identities, whose form
   is application protocol specific.  Section 2 discusses identity
   concepts.

   It is possible to design and implement this framework in ways that do
   abstract away particulars of similar mechanisms.  Such a framework
   implementation, as well as mechanisms implementations, could be
   designed not only to be shared by multiple implementations of a
   particular protocol but to be shared by implementations of multiple
   protocols.

Melnikov & Zeilenga         Standards Track                     [Page 3]
RFC 4422                          SASL                         June 2006

   The framework incorporates interfaces with both protocols and
   mechanisms in which authentication exchanges are carried out.
   Section 3 discusses SASL authentication exchanges.

   To use SASL, each protocol (amongst other items) provides a method
   for identifying which mechanism is to be used, a method for exchange
   of mechanism-specific server-challenges and client-responses, and a
   method for communicating the outcome of the authentication exchange.
   Section 4 discusses SASL protocol requirements.

   Each SASL mechanism defines (amongst other items) a series of
   server-challenges and client-responses that provide authentication
   services and negotiate data security services.  Section 5 discusses
   SASL mechanism requirements.

   Section 6 discusses security considerations.  Section 7 discusses
   IANA considerations.  Appendix A defines the SASL EXTERNAL mechanism.

1.1.  Document Audiences

   This document is written to serve several different audiences:

      -  protocol designers using this specification to support
         authentication in their protocol,

      -  mechanism designers that define new SASL mechanisms, and

      -  implementors of clients or servers for those protocols that
         support SASL.

   While the document organization is intended to allow readers to focus
   on details relevant to their engineering, readers are encouraged to
   read and understand all aspects of this document.

1.2.  Relationship to Other Documents

   This document obsoletes RFC 2222.  It replaces all portions of RFC
   2222 excepting sections 7.1 (the KERBEROS_IV mechanism), 7.2 (the
   GSSAPI mechanism), 7.3 (the SKEY mechanism).  The KERBEROS_IV and
   SKEY mechanisms are now viewed as obsolete and their specifications
   provided in RFC 2222 are Historic.  The GSSAPI mechanism is now
   separately specified [SASL-GSSAPI].

   Appendix B provides a summary of changes since RFC 2222.

Melnikov & Zeilenga         Standards Track                     [Page 4]
RFC 4422                          SASL                         June 2006

1.3.  Conventions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in BCP 14 [RFC2119].

   Character names in this document use the notation for code points and
   names from the Unicode Standard [Unicode].  For example, the letter
   "a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>.

   Note: a glossary of terms used in Unicode can be found in [Glossary].
   Information on the Unicode character encoding model can be found in
   [CharModel].

   In examples, "C:" and "S:" indicate lines of data to be sent by the
   client and server, respectively.  Lines have been wrapped for
   improved readability.

2.  Identity Concepts

   In practice, authentication and authorization may involve multiple
   identities, possibly in different forms (simple username, Kerberos
   principal, X.500 Distinguished Name, etc.), possibly with different
   representations (e.g., ABNF-described UTF-8 encoded Unicode character
   string, BER-encoded Distinguished Name).  While technical
   specifications often prescribe both the identity form and
   representation used on the network, different identity forms and/or
   representations may be (and often are) used within implementations.
   How identities of different forms relate to each other is, generally,
   a local matter.  In addition, the forms and representations used
   within an implementation are a local matter.

   However, conceptually, the SASL framework involves two identities:

      1) an identity associated with the authentication credentials
         (termed the authentication identity), and

      2) an identity to act as (termed the authorization identity).

   SASL mechanism specifications describe the credential form(s) (e.g.,
   X.509 certificates, Kerberos tickets, simple username/password) used
   to authenticate the client, including (where appropriate) the syntax
   and semantics of authentication identities carried in the
   credentials.  SASL protocol specifications describe the identity
   form(s) used in authorization and, in particular, prescribe the
   syntax and semantics of the authorization identity character string
   to be transferred by mechanisms.

Melnikov & Zeilenga         Standards Track                     [Page 5]
RFC 4422                          SASL                         June 2006

   The client provides its credentials (which include or imply an
   authentication identity) and, optionally, a character string
   representing the requested authorization identity as part of the SASL
   exchange.  When this character string is omitted or empty, the client
   is requesting to act as the identity associated with the credentials
   (e.g., the user is requesting to act as the authentication identity).

   The server is responsible for verifying the client's credentials and
   verifying that the identity it associates with the client's
   credentials (e.g., the authentication identity) is allowed to act as
   the authorization identity.  A SASL exchange fails if either (or
   both) of these verifications fails.  (The SASL exchange may fail for
   other reasons, such as service authorization failure.)

   However, the precise form(s) of the authentication identities (used
   within the server in its verifications, or otherwise) and the precise
   form(s) of the authorization identities (used in making authorization
   decisions, or otherwise) are beyond the scope of SASL and this
   specification.  In some circumstances, the precise identity forms
   used in some context outside of the SASL exchange may be dictated by
   other specifications.  For instance, an identity assumption
   authorization (proxy authorization) policy specification may dictate
   how authentication and authorization identities are represented in
   policy statements.

3.  The Authentication Exchange

   Each authentication exchange consists of a message from the client to
   the server requesting authentication via a particular mechanism,
   followed by one or more pairs of challenges from the server and
   responses from the client, followed by a message from the server
   indicating the outcome of the authentication exchange.  (Note:
   exchanges may also be aborted as discussed in Section 3.5.)

   The following illustration provides a high-level overview of an
   authentication exchange.

      C: Request authentication exchange
      S: Initial challenge
      C: Initial response
      <additional challenge/response messages>
      S: Outcome of authentication exchange

   If the outcome is successful and a security layer was negotiated,
   this layer is then installed (see Section 3.7).  This also applies to
   the following illustrations.

Melnikov & Zeilenga         Standards Track                     [Page 6]
RFC 4422                          SASL                         June 2006

   Some mechanisms specify that the first data sent in the
   authentication exchange is from the client to the server.  Protocols
   may provide an optional initial response field in the request message
   to carry this data.  Where the mechanism specifies that the first
   data sent in the exchange is from the client to the server, the
   protocol provides an optional initial response field, and the client
   uses this field, the exchange is shortened by one round-trip:

      C: Request authentication exchange + Initial response
      <additional challenge/response messages>
      S: Outcome of authentication exchange

   Where the mechanism specifies that the first data sent in the
   exchange is from the client to the server and this field is
   unavailable or unused, the client request is followed by an empty
   challenge.

      C: Request authentication exchange
      S: Empty Challenge
      C: Initial Response
      <additional challenge/response messages>
      S: Outcome of authentication exchange

   Should a client include an initial response in its request where the
   mechanism does not allow the client to send data first, the
   authentication exchange fails.

   Some mechanisms specify that the server is to send additional data to
   the client when indicating a successful outcome.  Protocols may
   provide an optional additional data field in the outcome message to
   carry this data.  Where the mechanism specifies that the server is to
   return additional data with the successful outcome, the protocol
   provides an optional additional data field in the outcome message,
   and the server uses this field, the exchange is shortened by one
   round-trip:

      C: Request authentication exchange
      S: Initial challenge
      C: Initial response
      <additional challenge/response messages>
      S: Outcome of authentication exchange with
         additional data with success

   Where the mechanism specifies that the server is to return additional
   data to the client with a successful outcome and this field is
   unavailable or unused, the additional data is sent as a challenge
   whose response is empty.  After receiving this response, the server
   then indicates the successful outcome.

Melnikov & Zeilenga         Standards Track                     [Page 7]
RFC 4422                          SASL                         June 2006

      C: Request authentication exchange
      S: Initial challenge
      C: Initial response
      <additional challenge/response messages>
      S: Additional data challenge
      C: Empty Response
      S: Outcome of authentication exchange

   Where mechanisms specify that the first data sent in the exchange is
   from the client to the server and additional data is sent to the
   client along with indicating a successful outcome, and the protocol
   provides fields supporting both, then the exchange takes two fewer
   round-trips:

      C: Request authentication exchange + Initial response
      <additional challenge/response messages>
      S: Outcome of authentication exchange
         with additional data with success

   instead of:

      C: Request authentication exchange
      S: Empty Challenge
      C: Initial Response
      <additional challenge/response messages>
      S: Additional data challenge
      C: Empty Response
      S: Outcome of authentication exchange

3.1.  Mechanism Naming

   SASL mechanisms are named by character strings, from 1 to 20
   characters in length, consisting of ASCII [ASCII] uppercase letters,
   digits, hyphens, and/or underscores.  In the following Augmented
   Backus-Naur Form (ABNF) [RFC4234] grammar, the <sasl-mech> production
   defines the syntax of a SASL mechanism name.

      sasl-mech    = 1*20mech-char
      mech-char    = UPPER-ALPHA / DIGIT / HYPHEN / UNDERSCORE
      ; mech-char is restricted to A-Z (uppercase only), 0-9, -, and _
      ; from ASCII character set.

      UPPER-ALPHA  = %x41-5A  ; A-Z (uppercase only)
      DIGIT        = %x30-39  ; 0-9
      HYPHEN       = %x2D ; hyphen (-)
      UNDERSCORE   = %x5F ; underscore (_)

   SASL mechanism names are registered as discussed in Section 7.1.

Melnikov & Zeilenga         Standards Track                     [Page 8]
RFC 4422                          SASL                         June 2006

3.2.  Mechanism Negotiation

   Mechanism negotiation is protocol specific.

   Commonly, a protocol will specify that the server advertises
   supported and available mechanisms to the client via some facility
   provided by the protocol, and the client will then select the "best"
   mechanism from this list that it supports and finds suitable.

   Note that the mechanism negotiation is not protected by the
   subsequent authentication exchange and hence is subject to downgrade
   attacks if not protected by other means.

   To detect downgrade attacks, a protocol can allow the client to
   discover available mechanisms subsequent to the authentication
   exchange and installation of data security layers with at least data
   integrity protection.  This allows the client to detect changes to
   the list of mechanisms supported by the server.

3.3.  Request Authentication Exchange

   The authentication exchange is initiated by the client by requesting
   authentication via a mechanism it specifies.  The client sends a
   message that contains the name of the mechanism to the server.  The
   particulars of the message are protocol specific.

   Note that the name of the mechanism is not protected by the
   mechanism, and hence is subject to alteration by an attacker if not
   integrity protected by other means.

   Where the mechanism is defined to allow the client to send data
   first, and the protocol's request message includes an optional
   initial response field, the client may include the response to the
   initial challenge in the authentication request message.

3.4.  Challenges and Responses

   The authentication exchange involves one or more pairs of server-
   challenges and client-responses, the particulars of which are
   mechanism specific.  These challenges and responses are enclosed in
   protocol messages, the particulars of which are protocol specific.

   Through these challenges and responses, the mechanism may:

      -  authenticate the client to the server,

      -  authenticate the server to the client,

Melnikov & Zeilenga         Standards Track                     [Page 9]
RFC 4422                          SASL                         June 2006

      -  transfer an authorization identity string,

      -  negotiate a security layer, and

      -  provide other services.

   The negotiation of the security layer may involve negotiation of the
   security services to be provided in the layer, how these services
   will be provided, and negotiation of a maximum cipher-text buffer
   size each side is able to receive in the layer (see Section 3.6).

   After receiving an authentication request or any client response, the
   server may issue a challenge, abort the exchange, or indicate the
   outcome of an exchange.  After receiving a challenge, a client
   mechanism may issue a response or abort the exchange.

3.4.1.  Authorization Identity String

   The authorization identity string is a sequence of zero or more
   Unicode [Unicode] characters, excluding the NUL (U+0000) character,
   representing the identity to act as.

   If the authorization identity string is absent, the client is
   requesting to act as the identity the server associates with the
   client's credentials.  An empty string is equivalent to an absent
   authorization identity.

   A non-empty authorization identity string indicates that the client
   wishes to act as the identity represented by the string.  In this
   case, the form of identity represented by the string, as well as the
   precise syntax and semantics of the string, is protocol specific.

   While the character encoding schema used to transfer the
   authorization identity string in the authentication exchange is
   mechanism specific, mechanisms are expected to be capable of carrying
   the entire Unicode repertoire (with the exception of the NUL
   character).

3.5.  Aborting Authentication Exchanges

   A client or server may desire to abort an authentication exchange if
   it is unwilling or unable to continue (or enter into).

   A client may abort the authentication exchange by sending a message,
   the particulars of which are protocol specific, to the server,
   indicating that the exchange is aborted.  The server may be required
   by the protocol to return a message in response to the client's abort
   message.

Melnikov & Zeilenga         Standards Track                    [Page 10]
RFC 4422                          SASL                         June 2006

   Likewise, a server may abort the authentication exchange by sending a
   message, the particulars of which are protocol specific, to the
   client, indicating that the exchange is aborted.

3.6.  Authentication Outcome

   At the conclusion of the authentication exchange, the server sends a
   message, the particulars of which are protocol specific, to the
   client indicating the outcome of the exchange.

   The outcome is not successful if

      -  the authentication exchange failed for any reason,

      -  the client's credentials could not be verified,

      -  the server cannot associate an identity with the client's
         credentials,

      -  the client-provided authorization identity string is malformed,

      -  the identity associated with the client's credentials is not
         authorized to act as the requested authorization identity,

      -  the negotiated security layer (or lack thereof) is not
         suitable, or

      -  the server is not willing to provide service to the client for
         any reason.

   The protocol may include an optional additional data field in this
   outcome message.  This field can only include additional data when
   the outcome is successful.

   If the outcome is successful and a security layer was negotiated,
   this layer is then installed.  If the outcome is unsuccessful, or a
   security layer was not negotiated, any existing security is left in
   place.

   The outcome message provided by the server can provide a way for the
   client to distinguish between errors that are best dealt with by re-
   prompting the user for her credentials, errors that are best dealt
   with by telling the user to try again later, and errors where the
   user must contact a system administrator for resolution (see the SYS
   and AUTH POP Response Codes [RFC3206] specification for an example).
   This distinction is particularly useful during scheduled server
   maintenance periods as it reduces support costs.  It is also
   important that the server can be configured such that the outcome

Melnikov & Zeilenga         Standards Track                    [Page 11]
RFC 4422                          SASL                         June 2006

   message will not distinguish between a valid user with invalid
   credentials and an invalid user.

3.7.  Security Layers

   SASL mechanisms may offer a wide range of services in security
   layers.  Typical services include data integrity and data
   confidentiality.  SASL mechanisms that do not provide a security
   layer are treated as negotiating no security layer.

   If use of a security layer is negotiated in the authentication
   protocol exchange, the layer is installed by the server after
   indicating the outcome of the authentication exchange and installed
   by the client upon receipt of the outcome indication.  In both cases,
   the layer is installed before transfer of further protocol data.  The
   precise position upon which the layer takes effect in the protocol
   data stream is protocol specific.

   Once the security layer is in effect in the protocol data stream, it
   remains in effect until either a subsequently negotiated security
   layer is installed or the underlying transport connection is closed.

   When in effect, the security layer processes protocol data into
   buffers of protected data.  If at any time the security layer is
   unable or unwilling to continue producing buffers protecting protocol
   data, the underlying transport connection MUST be closed.  If the
   security layer is not able to decode a received buffer, the
   underlying connection MUST be closed.  In both cases, the underlying
   transport connection SHOULD be closed gracefully.

   Each buffer of protected data is transferred over the underlying
   transport connection as a sequence of octets prepended with a four-
   octet field in network byte order that represents the length of the
   buffer.  The length of the protected data buffer MUST be no larger
   than the maximum size that the other side expects.  Upon the receipt
   of a length field whose value is greater than the maximum size, the
   receiver SHOULD close the connection, as this might be a sign of an
   attack.

   The maximum size that each side expects is fixed by the mechanism,
   either through negotiation or by its specification.

3.8.  Multiple Authentications

   Unless explicitly permitted in the protocol (as stated in the
   protocol's technical specification), only one successful SASL
   authentication exchange may occur in a protocol session.  In this

Melnikov & Zeilenga         Standards Track                    [Page 12]
RFC 4422                          SASL                         June 2006

   case, once an authentication exchange has successfully completed,
   further attempts to initiate an authentication exchange fail.

   Where multiple successful SASL authentication exchanges are permitted
   in the protocol, then in no case may multiple SASL security layers be
   simultaneously in effect.  If a security layer is in effect and a
   subsequent SASL negotiation selects a second security layer, then the
   second security layer replaces the first.  If a security layer is in
   effect and a subsequent SASL negotiation selects no security layer,
   the original security layer remains in effect.

   Where multiple successful SASL negotiations are permitted in the
   protocol, the effect of a failed SASL authentication exchange upon
   the previously established authentication and authorization state is
   protocol specific.  The protocol's technical specification should be
   consulted to determine whether the previous authentication and
   authorization state remains in force, or changed to an anonymous
   state, or otherwise was affected.  Regardless of the protocol-
   specific effect upon previously established authentication and
   authorization state, the previously negotiated security layer remains
   in effect.

4.  Protocol Requirements

   In order for a protocol to offer SASL services, its specification
   MUST supply the following information:

   1) A service name, to be selected from registry of "service" elements
      for the Generic Security Service Application Program Interface
      (GSSAPI) host-based service name form, as described in Section 4.1
      of [RFC2743].  Note that this registry is shared by all GSSAPI and
      SASL mechanisms.

   2) Detail any mechanism negotiation facility that the protocol
      provides (see Section 3.2).

      A protocol SHOULD specify a facility through which the client may
      discover, both before initiation of the SASL exchange and after
      installing security layers negotiated by the exchange, the names
      of the SASL mechanisms that the server makes available to the
      client.  The latter is important to allow the client to detect
      downgrade attacks.  This facility is typically provided through
      the protocol's extensions or capabilities discovery facility.

   3) Definition of the messages necessary for authentication exchange,
      including the following:

Melnikov & Zeilenga         Standards Track                    [Page 13]
RFC 4422                          SASL                         June 2006

      a) A message to initiate the authentication exchange (see Section
         3.3).

         This message MUST contain a field for carrying the name of the
         mechanism selected by the client.

         This message SHOULD contain an optional field for carrying an
         initial response.  If the message is defined with this field,
         the specification MUST describe how messages with an empty
         initial response are distinguished from messages with no
         initial response.  This field MUST be capable of carrying
         arbitrary sequences of octets (including zero-length sequences
         and sequences containing zero-valued octets).

      b) Messages to transfer server challenges and client responses
         (see Section 3.4).

         Each of these messages MUST be capable of carrying arbitrary
         sequences of octets (including zero-length sequences and
         sequences containing zero-valued octets).

      c) A message to indicate the outcome of the authentication
         exchange (see Section 3.6).

         This message SHOULD contain an optional field for carrying
         additional data with a successful outcome.  If the message is
         defined with this field, the specification MUST describe how
         messages with an empty additional data are distinguished from
         messages with no additional data.  This field MUST be capable
         of carrying arbitrary sequences of octets (including zero-
         length sequences and sequences containing zero-valued octets).

   4) Prescribe the syntax and semantics of non-empty authorization
      identity strings (see Section 3.4.1).

      In order to avoid interoperability problems due to differing
      normalizations, the protocol specification MUST detail precisely
      how and where (client or server) non-empty authorization identity
      strings are prepared, including all normalizations, for comparison
      and other applicable functions to ensure proper function.

      Specifications are encouraged to prescribe use of existing
      authorization identity forms as well as existing string
      representations, such as simple user names [RFC4013].

      Where the specification does not precisely prescribe how
      identities in SASL relate to identities used elsewhere in the
      protocol, for instance, in access control policy statements, it

Melnikov & Zeilenga         Standards Track                    [Page 14]
RFC 4422                          SASL                         June 2006

      may be appropriate for the protocol to provide a facility by which
      the client can discover information (such as the representation of
      the identity used in making access control decisions) about
      established identities for these uses.

   5) Detail any facility the protocol provides that allows the client
      and/or server to abort authentication exchange (see Section 3.5).

      Protocols that support multiple authentications typically allow a
      client to abort an ongoing authentication exchange by initiating a
      new authentication exchange.  Protocols that do not support
      multiple authentications may require the client to close the
      connection and start over to abort an ongoing authentication
      exchange.

      Protocols typically allow the server to abort ongoing
      authentication exchanges by returning a non-successful outcome
      message.

   6) Identify precisely where newly negotiated security layers start to
      take effect, in both directions (see Section 3.7).

      Typically, specifications require security layers to start taking
      effect on the first octet following the outcome message in data
      being sent by the server and on the first octet sent after receipt
      of the outcome message in data being sent by the client.

   7) If the protocol supports other layered security services, such as
      Transport Layer Security (TLS) [RFC4346], the specification MUST
      prescribe the order in which security layers are applied to
      protocol data.

      For instance, where a protocol supports both TLS and SASL security
      layers, the specification could prescribe any of the following:

      a) SASL security layer is always applied first to data being sent
         and, hence, applied last to received data,

      b) SASL security layer is always applied last to data being sent
         and, hence, applied first to received data,

      c) Layers are applied in the order in which they were installed,

      d) Layers are applied in the reverse order in which they were
         installed, or

      e) Both TLS and SASL security layers cannot be installed.

Melnikov & Zeilenga         Standards Track                    [Page 15]
RFC 4422                          SASL                         June 2006

   8) Indicate whether the protocol supports multiple authentications
      (see Section 3.8).  If so, the protocol MUST detail the effect a
      failed SASL authentication exchange will have upon a previously
      established authentication and authorization state.

   Protocol specifications SHOULD avoid stating implementation
   requirements that would hinder replacement of applicable mechanisms.
   In general, protocol specifications SHOULD be mechanism neutral.
   There are a number of reasonable exceptions to this recommendation,
   including

      -  detailing how credentials (which are mechanism specific) are
         managed in the protocol,

      -  detailing how authentication identities (which are mechanism
         specific) and authorization identities (which are protocol
         specific) relate to each other, and

      -  detailing which mechanisms are applicable to the protocol.

5.  Mechanism Requirements

   SASL mechanism specifications MUST supply the following information:

   1) The name of the mechanism (see Section 3.1).  This name MUST be
      registered as discussed in Section 7.1.

   2) A definition of the server-challenges and client-responses of the
      authentication exchange, as well as the following:

      a) An indication of whether the mechanism is client-first,
         variable, or server-first.  If a SASL mechanism is defined as
         client-first and the client does not send an initial response
         in the authentication request, then the first server challenge
         MUST be empty (the EXTERNAL mechanism is an example of this
         case).  If a SASL mechanism is defined as variable, then the
         specification needs to state how the server behaves when the
         initial client response in the authentication request is
         omitted (the DIGEST-MD5 mechanism [DIGEST-MD5] is an example of
         this case).  If a SASL mechanism is defined as server-first,
         then the client MUST NOT send an initial client response in the
         authentication request (the CRAM-MD5 mechanism [CRAM-MD5] is an
         example of this case).

      b) An indication of whether the server is expected to provide
         additional data when indicating a successful outcome.  If so,
         if the server sends the additional data as a challenge, the

Melnikov & Zeilenga         Standards Track                    [Page 16]
RFC 4422                          SASL                         June 2006

         specification MUST indicate that the response to this challenge
         is an empty response.

      SASL mechanisms SHOULD be designed to minimize the number of
      challenges and responses necessary to complete the exchange.

   3) An indication of whether the mechanism is capable of transferring
      authorization identity strings (see Section 3.4.1).  While some
      legacy mechanisms are incapable of transmitting an authorization
      identity (which means that for these mechanisms, the authorization
      identity is always the empty string), newly defined mechanisms
      SHOULD be capable of transferring authorization identity strings.
      The mechanism SHOULD NOT be capable of transferring both no
      authorization identity string and an empty authorization identity.

      Mechanisms that are capable of transferring an authorization
      identity string MUST be capable of transferring arbitrary non-
      empty sequences of Unicode characters, excluding those that
      contain the NUL (U+0000) character.  Mechanisms SHOULD use the
      UTF-8 [RFC3629] transformation format.  The specification MUST
      detail how any Unicode code points special to the mechanism that
      might appear in the authorization identity string are escaped to
      avoid ambiguity during decoding of the authorization identity
      string.  Typically, mechanisms that have special characters
      require these special characters to be escaped or encoded in the
      character string (after encoding it in a particular Unicode
      transformation format) using a data encoding scheme such as Base64
      [RFC3548].

   4) The specification MUST detail whether the mechanism offers a
      security layer.  If the mechanism does, the specification MUST
      detail the security and other services offered in the layer as
      well as how these services are to be implemented.

   5) If the underlying cryptographic technology used by a mechanism
      supports data integrity, then the mechanism specification MUST
      integrity protect the transmission of an authorization identity
      and the negotiation of the security layer.

   SASL mechanisms SHOULD be protocol neutral.

   SASL mechanisms SHOULD reuse existing credential and identity forms,
   as well as associated syntaxes and semantics.

   SASL mechanisms SHOULD use the UTF-8 transformation format [RFC3629]
   for encoding Unicode [Unicode] code points for transfer.

Melnikov & Zeilenga         Standards Track                    [Page 17]
RFC 4422                          SASL                         June 2006

   In order to avoid interoperability problems due to differing
   normalizations, when a mechanism calls for character data (other than
   the authorization identity string) to be used as input to a
   cryptographic and/or comparison function, the specification MUST
   detail precisely how and where (client or server) the character data
   is to be prepared, including all normalizations, for input into the
   function to ensure proper operation.

   For simple user names and/or passwords in authentication credentials,
   SASLprep [RFC4013] (a profile of the StringPrep [RFC3454] preparation
   algorithm), SHOULD be specified as the preparation algorithm.

   The mechanism SHOULD NOT use the authorization identity string in
   generation of any long-term cryptographic keys or hashes as there is
   no requirement that the authorization identity string be canonical.
   Long-term, here, means a term longer than the duration of the
   authentication exchange in which they were generated.  That is, as
   different clients (of the same or different protocol) may provide
   different authorization identity strings that are semantically
   equivalent, use of authorization identity strings in generation of
   cryptographic keys and hashes will likely lead to interoperability
   and other problems.

6.  Security Considerations

   Security issues are discussed throughout this memo.

   Many existing SASL mechanisms do not provide adequate protection
   against passive attacks, let alone active attacks, in the
   authentication exchange.  Many existing SASL mechanisms do not offer
   security layers.  It is hoped that future SASL mechanisms will
   provide strong protection against passive and active attacks in the
   authentication exchange, as well as security layers with strong basic
   data security features (e.g., data integrity and data
   confidentiality) services.  It is also hoped that future mechanisms
   will provide more advanced data security services like re-keying (see
   Section 6.3).

   Regardless, the SASL framework is susceptible to downgrade attacks.
   Section 6.1.2 offers a variety of approaches for preventing or
   detecting these attacks.  In some cases, it is appropriate to use
   data integrity protective services external to SASL (e.g., TLS) to
   protect against downgrade attacks in SASL.  Use of external
   protective security services is also important when the mechanisms
   available do not themselves offer adequate integrity and/or
   confidentiality protection of the authentication exchange and/or
   protocol data.

Melnikov & Zeilenga         Standards Track                    [Page 18]
RFC 4422                          SASL                         June 2006

6.1.  Active Attacks

6.1.1.  Hijack Attacks

   When the client selects a SASL security layer with at least integrity
   protection, this protection serves as a counter-measure against an
   active attacker hijacking the connection and modifying protocol data
   sent after establishment of the security layer.  Implementations
   SHOULD close the connection when the security services in a SASL
   security layer report protocol data report lack of data integrity.

6.1.2.  Downgrade Attacks

   It is important that any security-sensitive protocol negotiations be
   performed after installation of a security layer with data integrity
   protection.  Protocols should be designed such that negotiations
   performed prior to this installation should be revalidated after
   installation is complete.  Negotiation of the SASL mechanism is
   security sensitive.

   When a client negotiates the authentication mechanism with the server
   and/or other security features, it is possible for an active attacker
   to cause a party to use the least secure security services available.
   For instance, an attacker can modify the server-advertised mechanism
   list or can modify the client-advertised security feature list within
   a mechanism response.  To protect against this sort of attack,
   implementations SHOULD NOT advertise mechanisms and/or features that
   cannot meet their minimum security requirements, SHOULD NOT enter
   into or continue authentication exchanges that cannot meet their
   minimum security requirements, and SHOULD verify that completed
   authentication exchanges result in security services that meet their
   minimum security requirements.  Note that each endpoint needs to
   independently verify that its security requirements are met.

   In order to detect downgrade attacks to the least (or less) secure
   mechanism supported, the client can discover the SASL mechanisms that
   the server makes available both before the SASL authentication
   exchange and after the negotiated SASL security layer (with at least
   data integrity protection) has been installed through the protocol's
   mechanism discovery facility.  If the client finds that the
   integrity-protected list (the list obtained after the security layer
   was installed) contains a stronger mechanism than those in the
   previously obtained list, the client should assume that the
   previously obtained list was modified by an attacker and SHOULD close
   the underlying transport connection.

   The client's initiation of the SASL exchange, including the selection
   of a SASL mechanism, is done in the clear and may be modified by an

Melnikov & Zeilenga         Standards Track                    [Page 19]
RFC 4422                          SASL                         June 2006

   active attacker.  It is important for any new SASL mechanisms to be
   designed such that an active attacker cannot obtain an authentication
   with weaker security properties by modifying the SASL mechanism name
   and/or the challenges and responses.

   Multi-level negotiation of security features is prone to downgrade
   attack.  Protocol designers should avoid offering higher-level
   negotiation of security features in protocols (e.g., above SASL
   mechanism negotiation) and mechanism designers should avoid lower-
   level negotiation of security features in mechanisms (e.g., below
   SASL mechanism negotiation).

6.1.3.  Replay Attacks

   Some mechanisms may be subject to replay attacks unless protected by
   external data security services (e.g., TLS).

6.1.4.  Truncation Attacks

   Most existing SASL security layers do not themselves offer protection
   against truncation attack.  In a truncation attack, the active
   attacker causes the protocol session to be closed, causing a
   truncation of the possibly integrity-protected data stream that leads
   to behavior of one or both the protocol peers that inappropriately
   benefits the attacker.  Truncation attacks are fairly easy to defend
   against in connection-oriented application-level protocols.  A
   protocol can defend against these attacks by ensuring that each
   information exchange has a clear final result and that each protocol
   session has a graceful closure mechanism, and that these are
   integrity protected.

6.1.5.  Other Active Attacks

   When use of a security layer is negotiated by the authentication
   protocol exchange, the receiver SHOULD handle gracefully any
   protected data buffer larger than the defined/negotiated maximal
   size.  In particular, it MUST NOT blindly allocate the amount of
   memory specified in the buffer size field, as this might cause the
   "out of memory" condition.  If the receiver detects a large block, it
   SHOULD close the connection.

6.2.  Passive Attacks

   Many mechanisms are subject to various passive attacks, including
   simple eavesdropping of unprotected credential information as well as
   online and offline dictionary attacks of protected credential
   information.

Melnikov & Zeilenga         Standards Track                    [Page 20]
RFC 4422                          SASL                         June 2006

6.3.  Re-keying

   The secure or administratively permitted lifetimes of SASL
   mechanisms' security layers are finite.  Cryptographic keys weaken as
   they are used and as time passes; the more time and/or cipher-text
   that a cryptanalyst has after the first use of the a key, the easier
   it is for the cryptanalyst to mount attacks on the key.

   Administrative limits on a security layer's lifetime may take the
   form of time limits expressed in X.509 certificates, in Kerberos V
   tickets, or in directories, and are often desired.  In practice, one
   likely effect of administrative lifetime limits is that applications
   may find that security layers stop working in the middle of
   application protocol operation, such as, perhaps, during large data
   transfers.  As the result of this, the connection will be closed (see
   Section 3.7), which will result in an unpleasant user experience.

   Re-keying (key renegotiation process) is a way of addressing the
   weakening of cryptographic keys.  The SASL framework does not itself
   provide for re-keying; SASL mechanisms may.  Designers of future SASL
   mechanisms should consider providing re-keying services.

   Implementations that wish to re-key SASL security layers where the
   mechanism does not provide for re-keying SHOULD reauthenticate the
   same IDs and replace the expired or soon-to-expire security layers.
   This approach requires support for reauthentication in the
   application protocols (see Section 3.8).

6.4.  Other Considerations

   Protocol designers and implementors should understand the security
   considerations of mechanisms so they may select mechanisms that are
   applicable to their needs.

   Distributed server implementations need to be careful in how they
   trust other parties.  In particular, authentication secrets should
   only be disclosed to other parties that are trusted to manage and use
   those secrets in a manner acceptable to the disclosing party.
   Applications using SASL assume that SASL security layers providing
   data confidentiality are secure even when an attacker chooses the
   text to be protected by the security layer.  Similarly, applications
   assume that the SASL security layer is secure even if the attacker
   can manipulate the cipher-text output of the security layer.  New
   SASL mechanisms are expected to meet these assumptions.

Melnikov & Zeilenga         Standards Track                    [Page 21]
RFC 4422                          SASL                         June 2006

   Unicode security considerations [UTR36] apply to authorization
   identity strings, as well as UTF-8 [RFC3629] security considerations
   where UTF-8 is used.  SASLprep [RFC4013] and StringPrep [RFC3454]
   security considerations also apply where used.

7.  IANA Considerations

7.1.  SASL Mechanism Registry

   The SASL mechanism registry is maintained by IANA.  The registry is
   currently available at <http://www.iana.org/assignments/sasl-
   mechanisms>.

   The purpose of this registry is not only to ensure uniqueness of
   values used to name SASL mechanisms, but also to provide a definitive
   reference to technical specifications detailing each SASL mechanism
   available for use on the Internet.

   There is no naming convention for SASL mechanisms; any name that
   conforms to the syntax of a SASL mechanism name can be registered.

   The procedure detailed in Section 7.1.1 is to be used for
   registration of a value naming a specific individual mechanism.

   The procedure detailed in Section 7.1.2 is to be used for
   registration of a value naming a family of related mechanisms.

   Comments may be included in the registry as discussed in Section
   7.1.3 and may be changed as discussed in Section 7.1.4.

   The SASL mechanism registry has been updated to reflect that this
   document provides the definitive technical specification for SASL and
   that this section provides the registration procedures for this
   registry.

Melnikov & Zeilenga         Standards Track                    [Page 22]
RFC 4422                          SASL                         June 2006

7.1.1.  Mechanism Name Registration Procedure

   IANA will register new SASL mechanism names on a First Come First
   Served basis, as defined in BCP 26 [RFC2434].  IANA has the right to
   reject obviously bogus registration requests, but will perform no
   review of claims made in the registration form.

   Registration of a SASL mechanism is requested by filling in the
   following template:

      Subject: Registration of SASL mechanism X

      SASL mechanism name (or prefix for the family):

      Security considerations:

      Published specification (recommended):

      Person & email address to contact for further information:

      Intended usage: (One of COMMON, LIMITED USE, or OBSOLETE)

      Owner/Change controller:

      Note: (Any other information that the author deems relevant may be
      added here.)

   and sending it via electronic mail to IANA at <iana@iana.org>.

   While this registration procedure does not require expert review,
   authors of SASL mechanisms are encouraged to seek community review
   and comment whenever that is feasible.  Authors may seek community
   review by posting a specification of their proposed mechanism as an
   Internet-Draft.  SASL mechanisms intended for widespread use should
   be standardized through the normal IETF process, when appropriate.

Melnikov & Zeilenga         Standards Track                    [Page 23]
RFC 4422                          SASL                         June 2006

7.1.2.  Family Name Registration Procedure

   As noted above, there is no general naming convention for SASL
   mechanisms.  However, specifications may reserve a portion of the
   SASL mechanism namespace for a set of related SASL mechanisms, a
   "family" of SASL mechanisms.  Each family of SASL mechanisms is
   identified by a unique prefix, such as X-.  Registration of new SASL
   mechanism family names requires expert review as defined in BCP 26
   [RFC2434].

   Registration of a SASL family name is requested by filling in the
   following template:

      Subject: Registration of SASL mechanism family X

      SASL family name (or prefix for the family):

      Security considerations:

      Published specification (recommended):

      Person & email address to contact for further information:

      Intended usage: (One of COMMON, LIMITED USE, or OBSOLETE)

      Owner/Change controller:

      Note: (Any other information that the author deems relevant may be
      added here.)

   and sending it via electronic mail to the IETF SASL mailing list at
   <ietf-sasl@imc.org> and carbon copying IANA at <iana@iana.org>.
   After allowing two weeks for community input on the IETF SASL mailing
   list, the expert will determine the appropriateness of the
   registration request and either approve or disapprove the request
   with notice to the requestor, the mailing list, and IANA.

   The review should focus on the appropriateness of the requested
   family name for the proposed use and the appropriateness of the
   proposed naming and registration plan for existing and future
   mechanism names in the family.  The scope of this request review may
   entail consideration of relevant aspects of any provided technical
   specification, such as their IANA Considerations section.  However,
   this review is narrowly focused on the appropriateness of the
   requested registration and not on the overall soundness of any
   provided technical specification.

Melnikov & Zeilenga         Standards Track                    [Page 24]
RFC 4422                          SASL                         June 2006

   Authors are encouraged to pursue community review by posting the
   technical specification as an Internet-Draft and soliciting comment
   by posting to appropriate IETF mailing lists.

7.1.3.  Comments on SASL Mechanism Registrations

   Comments on a registered SASL mechanism/family should first be sent
   to the "owner" of the mechanism/family and/or to the <ietf-
   sasl@imc.org> mailing list.

   Submitters of comments may, after a reasonable attempt to contact the
   owner, request IANA to attach their comment to the SASL mechanism
   registration itself by sending mail to <iana@iana.org>.  At IANA's
   sole discretion, IANA may attach the comment to the SASL mechanism's
   registration.

7.1.4.  Change Control

   Once a SASL mechanism registration has been published by IANA, the
   author may request a change to its definition.  The change request
   follows the same procedure as the registration request.

   The owner of a SASL mechanism may pass responsibility for the SASL
   mechanism to another person or agency by informing IANA; this can be
   done without discussion or review.

   The IESG may reassign responsibility for a SASL mechanism.  The most
   common case of this will be to enable changes to be made to
   mechanisms where the author of the registration has died, has moved
   out of contact, or is otherwise unable to make changes that are
   important to the community.

   SASL mechanism registrations may not be deleted; mechanisms that are
   no longer believed appropriate for use can be declared OBSOLETE by a
   change to their "intended usage" field; such SASL mechanisms will be
   clearly marked in the lists published by IANA.

   The IESG is considered to be the owner of all SASL mechanisms that
   are on the IETF standards track.

Melnikov & Zeilenga         Standards Track                    [Page 25]
RFC 4422                          SASL                         June 2006

7.2.  Registration Changes

   The IANA has updated the SASL mechanisms registry as follows:

   1) Changed the "Intended usage" of the KERBEROS_V4 and SKEY mechanism
      registrations to OBSOLETE.

   2) Changed the "Published specification" of the EXTERNAL mechanism to
      this document as indicated below:

      Subject: Updated Registration of SASL mechanism EXTERNAL
      Family of SASL mechanisms: NO
      SASL mechanism name: EXTERNAL
      Security considerations: See A.3 of RFC 4422
      Published specification (optional, recommended): RFC 4422
      Person & email address to contact for further information:
          Alexey Melnikov <Alexey.Melnikov@isode.com>
      Intended usage: COMMON
      Owner/Change controller: IESG <iesg@ietf.org>
      Note: Updates existing entry for EXTERNAL

8.  References

8.1.  Normative References

   [RFC2119]     Bradner, S., "Key words for use in RFCs to Indicate
                 Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC2244]     Newman, C. and J. G. Myers, "ACAP -- Application
                 Configuration Access Protocol", RFC 2244, November
                 1997.

   [RFC2434]     Narten, T. and H. Alvestrand, "Guidelines for Writing
                 an IANA Considerations Section in RFCs", BCP 26, RFC
                 2434, October 1998.

   [RFC2743]     Linn, J., "Generic Security Service Application Program
                 Interface Version 2, Update 1", RFC 2743, January 2000.

   [RFC3454]     Hoffman, P. and M. Blanchet, "Preparation of
                 Internationalized Strings ("stringprep")", RFC 3454,
                 December 2002.

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

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

Melnikov & Zeilenga         Standards Track                    [Page 26]
RFC 4422                          SASL                         June 2006

   [RFC4234]     Crocker, D. and P. Overell, "Augmented BNF for Syntax
                 Specifications: ABNF", RFC 4234, October 2005.

   [ASCII]       Coded Character Set--7-bit American Standard Code for
                 Information Interchange, ANSI X3.4-1986.

   [Unicode]     The Unicode Consortium, "The Unicode Standard, Version
                 3.2.0" is defined by "The Unicode Standard, Version
                 3.0" (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-
                 61633-5), as amended by the "Unicode Standard Annex
                 #27: Unicode 3.1"
                 (http://www.unicode.org/reports/tr27/) and by the
                 "Unicode Standard Annex #28: Unicode 3.2"
                 (http://www.unicode.org/reports/tr28/).

   [CharModel]   Whistler, K. and M. Davis, "Unicode Technical Report
                 #17, Character Encoding Model", UTR17,
                 <http://www.unicode.org/unicode/reports/tr17/>, August
                 2000.

   [Glossary]    The Unicode Consortium, "Unicode Glossary",
                 <http://www.unicode.org/glossary/>.

8.2.  Informative References

   [RFC3206]     Gellens, R., "The SYS and AUTH POP Response Codes", RFC
                 3206, February 2002.

   [RFC3548]     Josefsson, S., "The Base16, Base32, and Base64 Data
                 Encodings", RFC 3548, July 2003.

   [RFC4301]     Kent, S. and K. Seo, "Security Architecture for the
                 Internet Protocol", RFC 4301, December 2005.

   [RFC4346]     Dierks, T. and E. Rescorla, "The Transport Layer
                 Security (TLS) Protocol Version 1.1", RFC 4346, April
                 2006.

   [SASL-GSSAPI] Melnikov, A. (Editor), "The Kerberos V5 ("GSSAPI") SASL
                 Mechanism", Work in Progress, May 2006.

   [UTR36]       Davis, M., "(Draft) Unicode Technical Report #36,
                 Character Encoding Model", UTR17,
                 <http://www.unicode.org/unicode/reports/tr36/>,
                 February 2005.

   [CRAM-MD5]    Nerenberg, L., "The CRAM-MD5 SASL Mechanism", Work in
                 Progress.

Melnikov & Zeilenga         Standards Track                    [Page 27]
RFC 4422                          SASL                         June 2006

   [DIGEST-MD5]  Leach, P., C. Newman, and A. Melnikov, "Using Digest
                 Authentication as a SASL Mechanism", Work in Progress,
                 March 2006.

9.  Acknowledgements

   This document is a revision of RFC 2222 written by John Myers.

   This revision is a product of the IETF Simple Authentication and
   Security Layer (SASL) Working Group.

   The following individuals contributed significantly to this revision:
   Abhijit Menon-Sen, Hallvard Furuseth, Jeffrey Hutzelman, John Myers,
   Luke Howard, Magnus Nystrom, Nicolas Williams, Peter Saint-Andre, RL
   'Bob' Morgan, Rob Siemborski, Sam Hartman, Simon Josefsson, Tim
   Alsop, and Tony Hansen.

Melnikov & Zeilenga         Standards Track                    [Page 28]
RFC 4422                          SASL                         June 2006

Appendix A.  The SASL EXTERNAL Mechanism

   This appendix is normative.

   The EXTERNAL mechanism allows a client to request the server to use
   credentials established by means external to the mechanism to
   authenticate the client.  The external means may be, for instance, IP
   Security [RFC4301] or TLS [RFC4346] services.  In absence of some a
   priori agreement between the client and the server, the client cannot
   make any assumption as to what external means the server has used to
   obtain the client's credentials, nor make an assumption as to the
   form of credentials.  For example, the client cannot assume that the
   server will use the credentials the client has established via TLS.

A.1.  EXTERNAL Technical Specification

   The name of this mechanism is "EXTERNAL".

   The mechanism does not provide a security layer.

   The mechanism is capable of transferring an authorization identity
   string.  If empty, the client is requesting to act as the identity
   the server has associated with the client's credentials.  If non-
   empty, the client is requesting to act as the identity represented by
   the string.

   The client is expected to send data first in the authentication
   exchange.  Where the client does not provide an initial response data
   in its request to initiate the authentication exchange, the server is
   to respond to the request with an empty initial challenge and then
   the client is to provide its initial response.

   The client sends the initial response containing the UTF-8 [RFC3629]
   encoding of the requested authorization identity string.  This
   response is non-empty when the client is requesting to act as the
   identity represented by the (non-empty) string.  This response is
   empty when the client is requesting to act as the identity the server
   associated with its authentication credentials.

   The syntax of the initial response is specified as a value of the
   <extern-initial-resp> production detailed below using the Augmented
   Backus-Naur Form (ABNF) [RFC4234] notation.

      external-initial-resp = authz-id-string
      authz-id-string       = *( UTF8-char-no-nul )
      UTF8-char-no-nul      = UTF8-1-no-nul / UTF8-2 / UTF8-3 / UTF8-4
      UTF8-1-no-nul         = %x01-7F

Melnikov & Zeilenga         Standards Track                    [Page 29]
RFC 4422                          SASL                         June 2006

   where the <UTF8-2>, <UTF8-3>, and <UTF8-4> productions are as defined
   in [RFC3629].

   There are no additional challenges and responses.

   Hence, the server is to return the outcome of the authentication
   exchange.

   The exchange fails if

   -  the client has not established its credentials via external means,

   -  the client's credentials are inadequate,

   -  the client provided an empty authorization identity string and the
      server is unwilling or unable to associate an authorization
      identity with the client's credentials,

   -  the client provided a non-empty authorization identity string that
      is invalid per the syntax requirements of the applicable
      application protocol specification,

   -  the client provided a non-empty authorization identity string
      representing an identity that the client is not allowed to act as,
      or

   -  the server is unwilling or unable to provide service to the client
      for any other reason.

   Otherwise the exchange is successful.  When indicating a successful
   outcome, additional data is not provided.

A.2.  SASL EXTERNAL Examples

   This section provides examples of EXTERNAL authentication exchanges.
   The examples are intended to help the readers understand the above
   text.  The examples are not definitive.  The Application
   Configuration Access Protocol (ACAP) [RFC2244] is used in the
   examples.

   The first example shows use of EXTERNAL with an empty authorization
   identity.  In this example, the initial response is not sent in the
   client's request to initiate the authentication exchange.

      S: * ACAP (SASL "DIGEST-MD5")
      C: a001 STARTTLS
      S: a001 OK "Begin TLS negotiation now"
      <TLS negotiation, further commands are under TLS layer>

Melnikov & Zeilenga         Standards Track                    [Page 30]
RFC 4422                          SASL                         June 2006

      S: * ACAP (SASL "DIGEST-MD5" "EXTERNAL")
      C: a002 AUTHENTICATE "EXTERNAL"
      S: + ""
      C: + ""
      S: a002 OK "Authenticated"

   The second example shows use of EXTERNAL with an authorization
   identity of "fred@example.com".  In this example, the initial
   response is sent with the client's request to initiate the
   authentication exchange.  This saves a round-trip.

      S: * ACAP (SASL "DIGEST-MD5")
      C: a001 STARTTLS
      S: a001 OK "Begin TLS negotiation now"
      <TLS negotiation, further commands are under TLS layer>
      S: * ACAP (SASL "DIGEST-MD5" "EXTERNAL")
      C: a002 AUTHENTICATE "EXTERNAL" {16+}
      C: fred@example.com
      S: a002 NO "Cannot assume requested authorization identity"

A.3.  Security Considerations

   The EXTERNAL mechanism provides no security protection; it is
   vulnerable to spoofing by either client or server, active attack, and
   eavesdropping.  It should only be used when adequate security
   services have been established.

Appendix B.  Changes since RFC 2222

   This appendix is non-normative.

   The material in RFC 2222 was significantly rewritten in the
   production of this document.

   RFC 2222, by not stating that the authorization identity string was a
   string of Unicode characters, let alone character data, implied that
   the authorization identity string was a string of octets.

   -  The authorization identity string is now defined as a string of
      Unicode characters.  The NUL (U+0000) character is prohibited.
      While protocol specifications are responsible for defining the
      authorization identity form, as well as the Unicode string syntax
      and related semantics, mechanism specifications are responsible
      for defining how the Unicode string is carried in the
      authentication exchange.

   -  Deleted "If so, when the client does not send data first, the
      initial challenge MUST be specified as being an empty challenge."

Melnikov & Zeilenga         Standards Track                    [Page 31]
RFC 4422                          SASL                         June 2006

   The following technical change was made to the EXTERNAL mechanism:

      - The authorization identity string is to be UTF-8 encoded.

      Note that protocol and mechanism specification requirements have
      been significantly tightened.  Existing protocol and mechanism
      specifications will need to be updated to meet these requirements.

Editors' Addresses

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

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

   Kurt D. Zeilenga
   OpenLDAP Foundation

   EMail: Kurt@OpenLDAP.org

Melnikov & Zeilenga         Standards Track                    [Page 32]
RFC 4422                          SASL                         June 2006

Full Copyright Statement

   Copyright (C) The Internet Society (2006).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.

Acknowledgement

   Funding for the RFC Editor function is provided by the IETF
   Administrative Support Activity (IASA).

Melnikov & Zeilenga         Standards Track                    [Page 33]