SASL Mechanism for External Authentication using Channel Bindings:
EXTERNAL-CHANNEL
SJDsimon@josefsson.orgThis document describes a way to perform end-user authentication
in the Simple Authentication and Security Layer (SASL) framework
which re-use an external security layer (such as the Transport
Layer Security (TLS) protocol) that may have already completed
end-user authentication. In comparison with the existing EXTERNAL
mechanism, this mechanism offers a way to cryptographically bind
the authentication to the security layer via a channel binding.
The EXTERNAL-CHANNEL mechanism alleviates the a priori assumptions
made by the design of the EXTERNAL mechanism.See <http://josefsson.org/external-channel/> for more
information.The EXTERNAL mechanism, described in Appendix A of
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,
TLS or IP
Security services.The EXTERNAL mechanism requires some a prior agreement between
the client and the server regarding which external channel, and
consequently which external credentials, should be used for
authentication. In practice this has often meant that the
EXTERNAL mechanism is only used when there is tight out of band
interaction between the server administration and client user.
This has an impact of the interoperability of the EXTERNAL
mechanism.The EXTERNAL-CHANNEL mechanism, specified in this document, is
similar to the EXTERNAL mechanism in that it relies on an external
channel to perform the user authentication. However,
EXTERNAL-CHANNEL provides a way for the client to provide an
identifier of the external channel that provides the user
credentials. The intention is that the server need not rely on a
priori arrangement to identify the secure channel that was used,
but can automatically find the intended channel and re-use its
credentials for the SASL authentication.In the EXTERNAL-CHANNEL mechanism the external channel is
identified using the "Channel binding unique prefix" string as
defined in . A channel bindings is
transferred, so that the server can verify that the client is a
peer of the same secure channel as the server.Binding authentication to a specific encrypted session can
protect from certain attacks. It can
also help to improve performance by having peers agree to re-use a
secure channel rather than to set up a new.The name of this mechanism is "EXTERNAL-CHANNEL".The mechanism does not provide a security layer. It provides
similar functionality by relying on an external channel.The mechanism is capable of transferring a channel binding and an
authorization identity string. If the authorization identity
string is empty, the client is requesting to act as the identity
the server has associated with the client's credentials. If the
authorization identity string is non-empty, the client is
requesting to act as the identity represented by the string. The
channel binding name cannot be empty.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 channel
binding name, a base64 encoded
channel bindings, and a UTF-8
encoding of the requested authorization identity string.The authorization identity is non-empty when the client is
requesting to act as the identity represented by the (non-empty)
string. The authorization identity is empty when the client is
requesting to act as the identity the server associates with the
external 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)
notation.There are no additional challenges and responses.Hence, the server is to return the outcome of the authentication
exchange.The exchange fails if- the cb-name denote an (to the server implementation) unknown or
end-point channel binding type,- the client has not established its credentials via the
indicated external channel,- the channel bindings data does not match,- 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.This section provides examples of EXTERNAL-CHANNEL 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) is used in the examples because ACAP sends the SASL
tokens without additional encoding.The first example shows use of EXTERNAL-CHANNEL with an empty
authorization identity bound to an external "tls-unique" channel.
In this example, the initial response is not sent in the client's
request to initiate the authentication exchange.Note how the string ends with a " ", it needs to be present even
if the authorization identity is empty.The second example shows use of EXTERNAL-CHANNEL with an
authorization identity of "simon" bound to an external
"tls-unique" channel. In this example, the initial response is
sent with the client's request to initiate the authentication
exchange. This saves a round-trip.Note how the server rejects the authentication attempt with an
authorization-related error message. Presumably the client
credentials presented in the TLS session does not give the client
authority to assume the identity of "simon".The server may use any mechanism to make authorization decisions.
For illustration, we want to give some ideas on how this may work
in practice. This section is not normative.Typically the external channel will not use authentication
identities that can be used by the application protocol that uses
the SASL EXTERNAL-CHANNEL mechanism. Thus, a mapping is normally
required. There may be mappings from the external credential to a
set of permitted identifiers, and a "default" identifier can be
provided in the mapping table if the client do not specify a
particular authorization identity.For example, when mapping from X.509 credentials used in TLS
connections to simple usernames, a table stored on the server can
contain hex-encoded hashes of client X.509 certificates and a set
of usernames.The server could extract a successfully authenticated X.509
client certificate from the TLS stack, hash it and look it up in
the mapping table. Each of the usernames given would be permitted
authorization identities. The first username given may be the
default username if the client does not provide an authorization
identity.When mapping from OpenPGP credentials used
in TLS, the mapping table could consist of verified OpenPGP
fingerprints and a set of permitted usernames, such as the
following table.When SRP authentication with TLS is
used, the username provided may be the same as the application
username, and no mapping would be necessary.The IANA is request to add to the SASL mechanisms registry the
following entry.The EXTERNAL-CHANNEL mechanism does not authenticate users
itself, it relies on implementation to perform the authentication
as part of the external channel. Care must be taken to ensure
that the client credential has been authenticated, rather than
just blindly accepted as part of a leap-of-faith setup.The security of external channel is critical to the security of
this mechanism. The connection between the authentication and the
external channel is made via a channel binding, thus the security
considerations related to channel bindings are also critical, see
.We claim that by appropriately using a channel binding an
application can protect itself from the attacks in
. To guarantee this property, the derived
data is only to be used for the intended purpose.The EXTERNAL-CHANNEL mechanism, and significant amount of text in
this document, is based on the EXTERNAL mechanism in Appendix A
of SASL.Man-in-the-Middle in Tunneled Authentication