Kerberos Working Group A. Perez-Mendez Internet-Draft R. Marin-Lopez Intended status: Experimental F. Pereniguez-Garcia Expires: March 5, 2013 G. Lopez-Millan University of Murcia Sep 2012 GSS-API pre-authentication for Kerberos draft-perez-krb-wg-gss-preauth-02 Abstract This document describes a pre-authentication mechanism for Kerberos based on the Generic Security Service Application Program Interface (GSS-API), which allows a Key Distribution Center (KDC) to authenticate clients by using a GSS mechanism. Status of this Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. 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." This Internet-Draft will expire on March 5, 2013. Copyright Notice Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as Perez-Mendez, et al. Expires March 5, 2013 [Page 1] Internet-Draft GSS preauth Sep 2012 described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 4 2. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3. Definition of the Kerberos GSS padata . . . . . . . . . . . . 4 4. GSS Pre-authentication Operation . . . . . . . . . . . . . . . 5 4.1. Generation of GSS preauth requests . . . . . . . . . . . . 5 4.2. Processing of GSS preauth requests . . . . . . . . . . . . 6 4.3. Generation of GSS preauth responses . . . . . . . . . . . 6 4.4. Processing of GSS preauth responses . . . . . . . . . . . 7 5. Data in the KDC_ERR_PREAUTH_REQUIRED . . . . . . . . . . . . . 7 6. Derivation of the reply key from the GSS context . . . . . . . 7 7. KDC state management . . . . . . . . . . . . . . . . . . . . . 8 8. Support for federated users . . . . . . . . . . . . . . . . . 8 9. GSS channel bindings . . . . . . . . . . . . . . . . . . . . . 9 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 9 11. Security Considerations . . . . . . . . . . . . . . . . . . . 9 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 13. Normative References . . . . . . . . . . . . . . . . . . . . . 9 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 10 Perez-Mendez, et al. Expires March 5, 2013 [Page 2] Internet-Draft GSS preauth Sep 2012 1. Introduction The GSS-API (Generic Security Service Application Programming Interface) [RFC2743] provides a generic toolset of functions that allow applications to establish security contexts in order to protect their communications through security services such as authentication, confidentiality and integrity protection. Thanks to the GSS-API, applications remain independent from the specific underlying mechanism used to establish the context and provide security. On the other hand, Kerberos [RFC4120] defines a process called pre- authentication. This feature is intended to avoid the security risk of providing tickets encrypted with the user's long-term key to attackers, by requiring clients to proof their knowledge over these credentials. The execution of a pre-authentication mechanism may require the exchange of several KRB_AS_REQ/KRB_ERROR messages before the KDC delivers the TGT requested by the client within a KRB_AS_REP. These messages transport authentication information by means of pre- authentication elements. There exists a variety of pre-authentication mechanisms, like PKINIT [RFC4556] and encrypted time-stamp [RFC4120]. Furthermore, [I-D.ietf-krb-wg-preauth-framework] provides a generic framework for Kerberos pre-authentication, which aims to describe the features that a pre-authentication mechanism may provide (e.g. mutual authentication, replace reply key, etc.). Additionally, in order to simplify the definition of new pre-authentication mechanisms, it defines a mechanism called FAST (Flexible Authentication Secure Tunneling), which provides a generic and secure transport for pre- authentication elements. More specifically, FAST establishes a secure tunnel providing confidentiality and integrity protection between the client and the KDC prior to the exchange of any specific pre-authentication data. Within this tunnel, different pre- authentication methods can be executed. This inner mechanism is called a FAST factor. It is important to note that FAST factors cannot usually be used outside the FAST pre-authentication method since they assume the underlying security layer provided by FAST. The aim of this draft is to define a new pre-authentication mechanism, following the recommendations of [I-D.ietf-krb-wg-preauth-framework], that relies on the GSS-API security services to pre-authenticate clients. This pre- authentication mechanism will allow the KDC to authenticate clients making use of any current or future GSS mechanism, as long as they satisfy the minimum security requirements described in this specification. The Kerberos client will play the role of the GSS initiator, while the Authentication Server (AS) in the KDC will play Perez-Mendez, et al. Expires March 5, 2013 [Page 3] Internet-Draft GSS preauth Sep 2012 the role of the GSS acceptor. 1.1. Requirements Language 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 [RFC2119]. 2. Motivation This work is mainly motivated by the necessity of a way to allow the KDC to make use of the technologies defined in the ABFAB WG to perform the access control of federated users. Specifically, the ABFAB architecture requires relying parties to make use of the GSS- EAP mechanism to perform authentication. [I-D.perez-abfab-eap-gss-preauth] defines how GSS-EAP is transported on top of the GSS pre-authentication mechanism defined in this document. 3. Definition of the Kerberos GSS padata To establish the security context, the GSS-API defines the exchange of GSS tokens between the initiator and the acceptor. These tokens, which contain mechanism-specific information, are completely opaque to the application. However, how these tokens are transported between the initiator and the responder depends on the specific application. Since GSS-API is defined as independent of the underlying communications service, its use does not require to implement any specific security feature for the transport. For instance, tokens could just be sent by means of plain UDP datagrams. For this reason, security and ordered delivery of information must be implemented by each specific GSS mechanism (if required). Therefore, GSS tokens are the atomic piece of information from the application point of view when using GSS-API, which require a proper transport between the initiator (Kerberos client) and the acceptor (AS). In particular, the proposed GSS-based pre-authentication mechanism defines a new pre-authentication element (hereafter padata) called PA-GSS, to transport a generic GSS token from the Kerberos client to the AS and vice-versa. This padata also transport state information required to maintain the KDC stateless (see section Section 7. PA-GSS To be defined (TBD) A PA-GSS padata element contains the ASN.1 DER encoding of the PA-GSS Perez-Mendez, et al. Expires March 5, 2013 [Page 4] Internet-Draft GSS preauth Sep 2012 structure: PA-GSS ::= SEQUENCE { sec-ctx-token [0] OCTET STRING, state [1] EncryptedData OPTIONAL -- contains PA-GSS-STATE } PA-GSS-STATE ::= SEQUENCE { timestamp [0] KerberosTime, exported-sec-ctx-token [1] OCTET STRING, ... } The sec-ctx-token element of the PA-GSS structure contains the output_token token returned by either, the GSS_Init_sec_context and the GSS_Accept_sec_context calls. The state element of the PA-GSS structure is optional, and will be absent in the first AS_REQ message from the client to the KDC and in the last AS_REP message from the KDC to the client. It contains a PA-GSS-STATE structure encrypted with the first krbtgt key and a key usage in the 512-1023 range (to be defined TBD). The state element is generated by the KDC, while the client just copy it from the previously received PA-GSS structure (if present). The PA-GSS-STATE contains a timestamp element, meant to detect possible replay situations, and a exported-sec-ctx-token element, representing the whole GSS security context state corresponding to the current authentication process. This value is generated by the KDC by calling to the GSS_Export_sec_context, when the GSS_Accept_sec_context returns GSS_S_CONTINUE_NEEDED. 4. GSS Pre-authentication Operation 4.1. Generation of GSS preauth requests The Kerberos client (initiator) starts by calling to the GSS_Init_sec_context function. In the first call to this function, the client provides GSS_C_NO_CTX as the value of the context_handle and NULL as the input_token, given that no context has been initiated yet. When using multi round-trip GSS mechanisms, in subsequent calls to this routine the client will use both, the context_handle value obtained after the first call, and the input_token received from the KDC. The mutual_req_flag, replay_det_req_flag and sequence_req_flag MUST be set, as the GSS token is meant to be tranported over cleartext channels. The GSS_Init_sec_context returns a context_handle, an output_token Perez-Mendez, et al. Expires March 5, 2013 [Page 5] Internet-Draft GSS preauth Sep 2012 and a status value. In this first call, the only acceptable status value is GSS_S_CONTINUE_NEEDED, as the KDC is expected to provide a token in order to continue with the context establishment process. The Kerberos client creates a new PA-GSS padata, with the obtained output_token as the sec-ctx-token element, and with the state element absent. The PA-GSS padata is sent to the KDC through a KRB_AS_REQ message. 4.2. Processing of GSS preauth requests When the KDC (GSS acceptor) receives a KRB_AS_REQ message containing a PA-GSS padata, but a state element (see Section 7) is not included, the KDC assumes that this is the first message of a context establishment, and thus GSS_C_NO_CTX is used as context_handle to invoke the GSS_Accept_sec_context routine. Conversely, if a state element is included, the KDC assumes that this message is part an ongoing authentication and the value of the state element is decrypted and used to recover the state of the authentication (see Section 7). In both cases, after receiving the message, the KDC calls to the GSS_Accept_sec_context function, using the adequate context_handle value and using the received token in the PA-GSS padata as input_token. Once the execution of the GSS_Accept_sec_context function is completed, the KDC obtains a context_handle, an output_token that MUST be sent to the initiator in order to continue with the authentication process, and a status value. If the obtained status is GSS_S_COMPLETE, the client is considered authenticated. If the status is GSS_S_CONTINUE_NEEDED, further information is required to complete the process. 4.3. Generation of GSS preauth responses Once the KDC has processed the input_token provided by the client (as described in Section 4.2), two main different situations may occur depending on the status value. If the client is successfully authenticated (GSS_S_COMPLETE), the KDC will reply to the client with a KRB_AS_REP message. This message will transport the final output_token in a PA-GSS padata type. This PA-GSS padata will not contain the state element. The reply key used to encrypt the enc- part field of the KRB_AS_REP message is derived from the GSS security context cryptographic material. Section 6 provides further details regarding this derivation. At this moment, the KDC also verifies that the cname provided in the AS_REQ matches the src_name obtained through the final GSS_Accept_sec_ctx call (except when WELLKNOWN/ FEDERATED is used as cname Section 8). On the contrary, if further data is required to complete the Perez-Mendez, et al. Expires March 5, 2013 [Page 6] Internet-Draft GSS preauth Sep 2012 establishment process (GSS_S_CONTINUE_NEEDED), the KDC will reply to the client with a KDC_ERR_MORE_PREAUTH_DATA_REQUIRED error message [I-D.ietf-krb-wg-preauth-framework]. In the e-data field of the message, the KDC will include the PA-GSS padata, containing both, the GSS token (sec-ctx-token) and the exported GSS security context (state) (see Section 7). 4.4. Processing of GSS preauth responses When the client receives a KDC_ERR_MORE_PREAUTH_DATA_REQUIRED error, it extracts the token from the PA-GSS element and invokes the GSS_Init_sec_context function, as described in section Section 4.1. If present, the state element of the PA-GSS padata is treated as an opaque element, and it is simply copied and included into the generated PA-GSS element without further processing. On the other hand, when the client receives a KRB_AS_REP, it knows the context establishment has finalized successfully. The client invokes the GSS_Init_sec_context function using the transported GSS token. Note that, to be consistent, this call MUST return GSS_S_COMPLETE and not generate any output_token, since the KDC does not expect further data from the client. If the context establishment is completed correctly, the client MUST use the same key derivation process followed by the KDC (Section 4.3) to obtain the reply key to decrypt the enc-part of the KRB_AS_REP. 5. Data in the KDC_ERR_PREAUTH_REQUIRED When the KDC sends a KDC_ERR_PREAUTH_REQUIRED error to the client, it includes a sequence of padata, each corresponding to an acceptable pre-authentication method. Optionally, these padata elements contain data valuable for the client to configure the selected mechanism. The data to be included in the padata for this message is described in this section. TBD. (For example, list of the OIDs of the GSS mechanisms supported by the KDC) 6. Derivation of the reply key from the GSS context The GSS pre-authentication mechanism proposed in this draft provides the "Replacing-reply-key" facility [I-D.ietf-krb-wg-preauth-framework]. After a successful authentication, client and KDC may decide to Perez-Mendez, et al. Expires March 5, 2013 [Page 7] Internet-Draft GSS preauth Sep 2012 completely replace the reply key used to encrypt the KRB_AS_REP by a new one that is cryptographically independent from the client's password stored in client password on the Kerberos users database. This additional keying material can be obtained by means of calls to the GSS_Pseudo_random [RFC4401] function, using "KRB-GSS" as the prf_in parameter. 7. KDC state management The Kerberos standard [RFC4120] defines the KDC as a stateless entity. This means that, if the GSS mechanism requires more than one round-trip, the client MUST provide enough data to the KDC in the following interactions to allow recovering the complete state of the ongoing authentication. This is specially relevant when the client switches from one KDC to different one (within the same realm) during a pre-authentication process. This second KDC must be able to continue with the process in a seamless way. The GSS-API manages the so-called security contexts. They represent the whole context of an authentication, including all the state and relevant data of the ongoing security context. Thus, this information MUST be serialized and sent to the client in order to ensure that the KDC receiving it will be able to reconstruct the associated state. In order to prevent attacks, this information must be confidentiality and integrity protected using a key shared amongst all the KDCs deployed in the realm, and must be sent along with a timestamp to prevent replay attacks. How this information is encoded is described in section Section 3. To generate the serialized security context information, the GSS_Export_sec_ctx() call is used. The main drawback of this approach is that the current GSS-API specifications does not allow the exportation of a security context which has not been completely established. Nevertheless, some GSS mechanisms do allow the exportation of partially established context (e.g. [I-D.ietf-abfab-gss-eap]), and we expect that other GSS mechanisms will do the same in the future. 8. Support for federated users This draft supports the authentication of users belonging to a different domain than the authenticating KDC. This is achieved by letting the GSS-API to provide both, the client name and the reply key to be used. That means that the requested username may not be present in the KDC's database. To avoid the generation of an error of type KDC_ERR_C_PRINCIPAL_UNKNOWN, when the Kerberos client knows Perez-Mendez, et al. Expires March 5, 2013 [Page 8] Internet-Draft GSS preauth Sep 2012 it is operating in a federated environment, it MUST set the value of the cname field of the KRB_AS_REQ message to a new wellknown value, WELLKNOWN/FEDERATED, following the model proposed in [RFC6111]. In this way, the KDC will be completely authenticated by the GSS-API calls, and thus no local verification of credentials should be done. 9. GSS channel bindings In order to link the GSS authentication with the actual Kerberos exchange transporting GSS tokens, the DER-encoded KDC-REQ-BODY from the AS-REQ is used as channel bindings. 10. Acknowledgements This work is supported by the project MULTIGIGABIT EUROPEAN ACADEMIC NETWORK (FP7-INFRASTRUCTURES-2009-1). It is also funded by a Seneca Foundation grant from the Human Resources Researching Training Program 2007. Authors finally thank the Funding Program for Research Groups of Excellence with code 04552/GERM/06 granted by the Fundacion Seneca. 11. Security Considerations Protection of Request/Responses with FAST, restriction on GSS mechanism, etc. TBD. 12. IANA Considerations This document has no actions for IANA. 13. Normative References [I-D.ietf-abfab-gss-eap] Hartman, S. and J. Howlett, "A GSS-API Mechanism for the Extensible Authentication Protocol", draft-ietf-abfab-gss-eap-09 (work in progress), August 2012. [I-D.ietf-krb-wg-preauth-framework] Hartman, S. and L. Zhu, "A Generalized Framework for Kerberos Pre-Authentication", draft-ietf-krb-wg-preauth-framework-17 (work in progress), June 2010. Perez-Mendez, et al. Expires March 5, 2013 [Page 9] Internet-Draft GSS preauth Sep 2012 [I-D.perez-abfab-eap-gss-preauth] Perez-Mendez, A., Lopez, R., Pereniguez-Garcia, F., and G. Lopez-Millan, "GSS-EAP pre-authentication for Kerberos", draft-perez-abfab-eap-gss-preauth-01 (work in progress), March 2012. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC2743] Linn, J., "Generic Security Service Application Program Interface Version 2, Update 1", RFC 2743, January 2000. [RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The Kerberos Network Authentication Service (V5)", RFC 4120, July 2005. [RFC4401] Williams, N., "A Pseudo-Random Function (PRF) API Extension for the Generic Security Service Application Program Interface (GSS-API)", RFC 4401, February 2006. [RFC4556] Zhu, L. and B. Tung, "Public Key Cryptography for Initial Authentication in Kerberos (PKINIT)", RFC 4556, June 2006. [RFC6111] Zhu, L., "Additional Kerberos Naming Constraints", RFC 6111, April 2011. Authors' Addresses Alejandro Perez-Mendez (Ed.) University of Murcia Campus de Espinardo S/N, Faculty of Computer Science Murcia, 30100 Spain Phone: +34 868 88 46 44 Email: alex@um.es Rafa Marin-Lopez University of Murcia Campus de Espinardo S/N, Faculty of Computer Science Murcia, 30100 Spain Phone: +34 868 88 85 01 Email: rafa@um.es Perez-Mendez, et al. Expires March 5, 2013 [Page 10] Internet-Draft GSS preauth Sep 2012 Fernando Pereniguez-Garcia University of Murcia Campus de Espinardo S/N, Faculty of Computer Science Murcia, 30100 Spain Phone: +34 868 88 78 82 Email: pereniguez@um.es Gabriel Lopez-Millan University of Murcia Campus de Espinardo S/N, Faculty of Computer Science Murcia, 30100 Spain Phone: +34 868 88 85 04 Email: gabilm@um.es Perez-Mendez, et al. Expires March 5, 2013 [Page 11]