Internet Draft V. Torvinen Document: draft-torvinen-http-eap-00.txt J. Arkko Expires: January, 2002 Ericsson A. Niemi Nokia June 2001 HTTP Authentication with EAP Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC 2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet- Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. Abstract This document describes HTTP authentication scheme using PPP Extensible Authentication Protocol (EAP). HTTP EAP authentication enables HTTP connections to be authenticated using any of the authentication schemes supported through EAP. EAP performs the authentication without sending the password in the clear text format (which is the biggest weakness of the Basic HTTP authentication scheme, for example). It is useful for HTTP protocol because it opens up several new authentication schemes without additional specification work. The same benefits can be reached by any other protocol, which apply the HTTP authentication scheme, such as Session Initiation Protocol (SIP). Torvinen et al Informational HTTP Authentication with EAP June 2001 Table of Contents Status of this Memo 1 Abstract 1 Table of Contents 2 Conventions used in this document 2 1 Introduction 3 2 HTTP EAP Authentication Scheme 3 2.1 The WWW-Authenticate Response Header 5 2.2 The Authorization Request Header 7 2.3 Authentication-Info Response Header 7 3 Security Considerations 8 References 11 Author's Addresses 11 Conventions used in this document 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 RFC-2119 [1]. Torvinen et al Informational HTTP Authentication with EAP June 2001 1 Introduction HTTP Authentication framework includes two authentication schemes: Basic and Digest [2]. In the Basic scheme, the client authenticates itself with a user-ID and a password for each realm. Basic scheme is perceived as insecure since the user credentials are transformed across the public network in a cleartext format. The Digest scheme is based on cryptographic hashes and it is perceived consequently as more secure authentication scheme than Basic, but is limited to the use of passwords. See [2] for detailed information about the general HTTP authentication protocol. The PPP Extensible Authentication Protocol (EAP) is a general protocol for PPP authentication [3]. Even though EAP was originally developed as a link layer protocol, it can be applied at application layer, too. EAP supports multiple authentication mechanism (e.g. smart cards, Kerberos, Public Key, One Time Passwords, and others) and it can, by definition, be easily extended to support new authentication mechanisms [see e.g. 4, 5, 6, 7]. EAP packets are defined in a binary format, and their contents depend highly on the used authentication scheme. HTTP EAP Authentication Scheme supplements HTTP Authentication with EAP functionality. This opens up several new authentication schemes for HTTP Authentication without additional specification work. 2 HTTP EAP Authentication Scheme HTTP EAP Authentication Scheme delivers base64 encoded EAP packets within HTTP Authentication headers (e.g. Authorization Request headers and WWW-Authenticate Response headers). EAP packets include all relevant information about the required authentication scheme, e.g. authentication scheme, packet type (request, response, success or failure) and/or challenge. The content of these packets is up to the chosen EAP authentication scheme. The progression of an authentication procedure depends also on the chosen authentication mechanism. Typically, the authenticator sends an initial Identity Request followed by one or more Requests for authentication information. The peer sends a Response packet in reply to each Request. As with the Request packet, the Response packet contains a type field, which corresponds to the type field of the Request. The authenticator ends the authentication phase with a Success or Failure packet. See Figure 1. Torvinen et al Informational HTTP Authentication with EAP June 2001 User agent Server GET --------------------------------------------------------> 401 Unauthorized, WWW-Authenticate: EAP <-------------------------------------------------------- Authorization: EAP --------------------------------------------------------> 401 Unauthorized, WWW-Authenticate: EAP <-------------------------------------------------------- Authorization: EAP --------------------------------------------------------> 200 OK, Authentication-Info: EAP <-------------------------------------------------------- Figure 1. HTTP EAP Authentication message flow This message flow above represents only the typical situation. Variations of the flow are also possible in the following situations: - The chosen authentication mechanism requires more than the single challenge-response message pair shown. Any number of message exchanges are allowed here. - Error situations result in terminating the flow from the server's side with an error response. This response could be one of 401 Unauthorized, 403 Forbidden, or 407 Proxy Authentication Required. For 401 and 407, the client distinguishes the error situation from the continuation of the EAP exchange by the existence of EAP FAILURE payload, or the lack of any EAP payload. - Error situations from the client's side result in terminating the communications with the server. - Certain EAP authentication mechanisms such as [7] allow an optimized flow where identity request does not need to be sent. In these cases, if the client knows it will be demanded EAP authentication, it can include an unsolicited EAP ID RESP already in the GET message. This would enable the server to start the actual authentication exchange immediately. Torvinen et al Informational HTTP Authentication with EAP June 2001 - EAP authentication was shown to be run towards the server which responds with 401 Unauthorized responses. It is also possible to run towards a proxy, which responds with 407 Proxy Authentication Required responses. In this document, we define three new header types for HTTP authentication framework. These headers, WWW-Authenticate Response Header, Authorization Request Header and Authentication-Info Response Header, are needed for making EAP as an independent HTTP authentication scheme. 2.1 The WWW-Authenticate Response Header The general HTTP authentication framework uses an extensible, case- insensitive token to identify the authentication scheme. Authentication scheme identifier is followed by a comma-separated list of attribute-value pairs, which carry the parameters necessary for achieving authentication via that scheme. auth-scheme = token auth-param = token "=" ( token | quoted-string ) If a server receives a request for an access-protected object without acceptable Authorization header, the server responds with a "401 Unauthorized" status code, a WWW-Authenticate header and at least one challenge applicable to the requested resource. Proxy acts in the same way but it uses "407 Proxy Authentication Required" status code instead. challenge = auth-scheme 1*SP 1#auth-param The authentication parameter realm is defined for all authentication schemes: realm = "realm" "=" realm-value realm-value = quoted-string The realm value and the canonical root URL of the server being accessed define the protection space. The realm value (case- sensitive) is a string, which may have additional semantics specific to the authentication scheme. For HTTP EAP Authentication, the framework above is utilized as follows: Torvinen et al Informational HTTP Authentication with EAP June 2001 challenge = "eap" eap-challenge eap-challenge = 1#([realm] | eap-param) realm = "realm" "=" realm-value realm-value = quoted-string eap-param = "eap-p" "=" eap-packet eap-packet = Realm is made optional because EAP notification mechanism can be used as well [3]. If realm value is present, it should be considered as an opaque string, which can only be compared for equality with other realms on that server. The server will service the request only if it can validate the user credentials for the protection space of the Request-URI. EAP packets have a general structure consisting of four basic fields: code, identifier, length and data. Code field is one octet and it identifies the type of EAP packet. Packet type is a request, response, success, or failure. Identifier field is also one octet and it is used for matching responses with corresponding requests. Length field is two octets and it indicates the whole EAP packet including code, identifier, length and data fields. Data field is zero or more octets and its format depends on the content of code field. Example below demonstrates the general structure of EAP packets. 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Code | Identifier | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data ... +-+-+-+-+ All these fields (Code, Identifier, Length, and Data) are included in the eap-packet in base64 form. Note that since the packets are self-identifying and self-delimiting it is allowed to include multiple EAP packets within one eap-packet, should some EAP mechanism be able to benefit from this. Example below demonstrates how WWW-Authenticate Response Header using EAP authentication would look like: WWW-Authenticate: eap realm="BollyWorld", eap-p=QWxh4ZGRpb2jpvcGVuNlctZQ== Torvinen et al Informational HTTP Authentication with EAP June 2001 where "BollyWorld" is the string assigned by the server to identify the protection space of the Request-URI. A proxy may respond with the same challenge using the Proxy- Authenticate header field. 2.2 The Authorization Request Header In the general HTTP authentication framework, a user agent that wishes to authenticate itself with an origin server or a proxy MAY do so by including an Authorization header or a Proxy- Authorization header field with the request. The authorization field value(s) consists of credentials containing the authentication information of the client for the realm of the resource being requested. The user agent must apply the strongest authentication scheme it understands and request credentials from the user based upon corresponding challenge. credentials = auth-scheme #auth-param For HTTP EAP Authentication, the framework above is utilized as follows: credentials = "eap" eap-packet eap-packet = Example below demonstrates how the Authorization Request Header using EAP authentication would look like: Authorization: eap QWxhZGRpbjpvcGVuIHNlc2FtZQ== Rules for handling potential user identifiers, passwords, challenges and so on, are defined in EAP protocol [3]. 2.3 Authentication-Info Response Header The Authentication-Info header is used by the server to communicate information back to the client. This can be either the successful authentication in the response, or the continuation of the EAP mechanism. Torvinen et al Informational HTTP Authentication with EAP June 2001 auth-info = #auth-param For HTTP EAP authentication the framework above is utilized as follows: auth-info = eap-packet eap-packet = Example below demonstrates how the Authentication-Info Response Header using EAP authentication would look like: Authentication-Info: QWxhZGRpbjpvcGVuIHNlc2FtZQ== The semantics of Proxy-Authentication-Info follow those of Authentication-Info. Proxy-Authentication-Info is used by proxy servers in conjunction with the "407 Proxy Authentication Required" response, and the consequent client authorization request. 3 Security Considerations Very little about the security of HTTP EAP Authentication can be stated without knowing the chosen EAP authentication scheme. Generally speaking, depending on the chosen EAP authentication scheme, HTTP EAP is subject to the same security threats as HTTP Authentication. However, there are some general aspects, which SHOULD be considered when analyzing the security of HTTP EAP Authentication: 1) Authentication of clients: All EAP mechanisms authenticate the client, using a method dependent on the mechanism. 2) Authentication of servers: Some EAP mechanisms perform also mutual authentication. 3) Using the strongest authentication mechanism: Servers and clients accepting multiple authentication mechanisms should be aware of the possibility of `bidding-down' attacks where a man- in-the-middle modifies authentication offers until the peers agree on an easily breakable mechanism. In general, we expect HTTP EAP _based servers to require a predefined authentication mechanism from a particular client in any case, which avoids this problem. For instance, the user data base at a server indicates that user A has a particular public key. The server should then insist on using the EAP TLS [4] mechanism to authenticate the user. 4) Confidentiality: Each EAP mechanism offers its specific protection schemes for the exchanged credentials. For instance, Torvinen et al Informational HTTP Authentication with EAP June 2001 the EAP AKA [7] mechanism sends secure cryptographic hashes rather than cleartext passwords like HTTP Basic Authentication does, even if both are based on the concept of a shared secret. As in EAP in general, HTTP EAP does not protect against revealing the identity of the client since the EAP ID RESP packets are not encrypted. Confidentiality and integrity of the HTTP requests themselves beyond on the authentication parameters is not within the scope of HTTP EAP, but is discussed below under item 7. 5) Replay protection: Each EAP mechanism offers its specific protection schemes for preventing the replay of the credentials. For instance, the EAP AKA mechanism uses a cryptographically strong sequence number scheme. This is in contrast to the replay possibilities that exist for the HTTP Basic Authentication, and is similar to the use of nonces in the HTTP Digest Authentication. 6) Integrity protection: Again, each EAP mechanism offers its specific protection against a man-in-the-middle modifying the authentication credentials. Mechanisms based on secure hashes prevent any modifications to the authentication parameters themselves. Again, integrity of the HTTP requests themselves beyond the authentication parameters is a separate issue and is discussed below. 7) Integrity and confidentiality protection of the HTTP request itself is also an important issue. Without such protection, it is possible for a man-in-the-middle to read and modify the actual contents of the request, regardless of any authentication that was performed Currently, there is no such authentication scheme in HTTP authentication, which would fully protect the integrity of HTTP messages. HTTP Basic Authentication scheme provides no integrity protection. HTTP Digest Authentication provides only limited (and optional) protection. Most header fields and their values could be modified as a part of a man-in-the-middle attack. It should also be noted that HTTP EAP does not inherently provide the integrity protection qualities present in Digest, namely the protection of Request-URI and request- method (and possibly the payload). Even though HTTP EAP Authentication scheme does not include a protection mechanism, it can be used for setting up one. Chosen EAP authentication scheme may be used to generate session keys, which together with some additional security protocol can provide e.g. integrity protection. Torvinen et al Informational HTTP Authentication with EAP June 2001 However, such protection should include the protection of original HTTP requests as well. This is not trivial because session protection keys are generated during the authentication, which takes place after submitting the request. In practice, full protection is only possible if the request is repeated at the end of the authentication procedure. This is, however, already the behavior in many typical usage situations. For instance, when authenticating a SIP REGISTER message, the authentication procedure takes a few message rounds, and on each round the REGISTER message is repeated until the session keys are available and the procedure is completed. The last such message can then use integrity protection. Servers that want to avoid man-in-the-middle attacks MUST NOT act on requests until both the authentication procedure has completed and the messages have been received under integrity protection. Torvinen et al Informational 1 HTTP Authentication with EAP June 2001 References 1 RFC 2119 Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997 2 Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A. and Stewart, L. "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999. 3 Blunk, L. and Vollbrecht, J. "PPP Extensible Authentication Protocol (EAP)" RFC 2284, March 1998. 4 Aboba, B. and Simon, D. "PPP EAP TLS Authentication Protocol" RFC 2716, October 1999. 5 Aboba, B. "EAP GSS Authentication Protocol" Internet Draft, draft-aboba-pppext-eapgss-03.txt, February 2001. 6 Carlson, J. "PPP EAP SRP-SHA1 Authentication Protocol" Internet Draft, draft-ietf-pppext-eap-srp-01.txt, May 2001. 7 Arkko, J. and Haverinen, H. "EAP AKA Authentication" Internet Draft, draft-arkko-pppext-eap-aka-00.txt, May 2001. Acknowledgements The authors wish to thank Henry Haverinen and Bernard Aboba for interesting discussions in this problem space. Author's Addresses Jari Arkko Ericsson 02420 Jorvas Phone: +358 40 5079256 Finland Email: jari.arkko@ericsson.fi Vesa Torvinen Ericsson 02420 Jorvas Phone: +358 40 7230822 Finland Email: vesa.torvinen@ericsson.fi Aki Niemi Nokia Networks P.O. Box 301 00045 Nokia Group Phone: +358 50 3891644 Finland E-mail: aki.niemi@nokia.com