sleep some extra time before killing java pid so it will have a chance
[heimdal.git] / doc / standardisation / draft-ietf-krb-wg-preauth-framework-08.txt
blob96f996350fa6fad6f9d7df75e98356fc5cf23e48
1 \r
2 \r
3 Kerberos Working Group                                            L. Zhu\r
4 Internet-Draft                                     Microsoft Corporation\r
5 Updates: 4120 (if approved)                                   S. Hartman\r
6 Intended status: Standards Track                       Painless Security\r
7 Expires: January 15, 2009                                  July 14, 2008\r
8 \r
9 \r
10         A Generalized Framework for Kerberos Pre-Authentication\r
11                  draft-ietf-krb-wg-preauth-framework-08\r
13 Status of this Memo\r
15    By submitting this Internet-Draft, each author represents that any\r
16    applicable patent or other IPR claims of which he or she is aware\r
17    have been or will be disclosed, and any of which he or she becomes\r
18    aware will be disclosed, in accordance with Section 6 of BCP 79.\r
20    Internet-Drafts are working documents of the Internet Engineering\r
21    Task Force (IETF), its areas, and its working groups.  Note that\r
22    other groups may also distribute working documents as Internet-\r
23    Drafts.\r
25    Internet-Drafts are draft documents valid for a maximum of six months\r
26    and may be updated, replaced, or obsoleted by other documents at any\r
27    time.  It is inappropriate to use Internet-Drafts as reference\r
28    material or to cite them other than as "work in progress."\r
30    The list of current Internet-Drafts can be accessed at\r
31    http://www.ietf.org/ietf/1id-abstracts.txt.\r
33    The list of Internet-Draft Shadow Directories can be accessed at\r
34    http://www.ietf.org/shadow.html.\r
36    This Internet-Draft will expire on January 15, 2009.\r
38 Abstract\r
40    Kerberos is a protocol for verifying the identity of principals\r
41    (e.g., a workstation user or a network server) on an open network.\r
42    The Kerberos protocol provides a mechanism called pre-authentication\r
43    for proving the identity of a principal and for better protecting the\r
44    long-term secret of the principal.\r
46    This document describes a model for Kerberos pre-authentication\r
47    mechanisms.  The model describes what state in the Kerberos request a\r
48    pre-authentication mechanism is likely to change.  It also describes\r
49    how multiple pre-authentication mechanisms used in the same request\r
50    will interact.\r
54 Zhu & Hartman           Expires January 15, 2009                [Page 1]\r
55 \f\r
56 Internet-Draft         Kerberos Preauth Framework              July 2008\r
59    This document also provides common tools needed by multiple pre-\r
60    authentication mechanisms.  One of these tools is a secure channel\r
61    between the client and the KDC with a reply key delivery mechanism;\r
62    this secure channel can be used to protect the authentication\r
63    exchange thus eliminate offline dictionary attacks.  With these\r
64    tools, it is relatively straightforward to chain multiple\r
65    authentication mechanisms, utilize a different key management system,\r
66    or support a new key agreement algorithm.\r
69 Table of Contents\r
71    1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  4\r
72    2.  Conventions and Terminology Used in This Document  . . . . . .  5\r
73    3.  Model for Pre-Authentication . . . . . . . . . . . . . . . . .  5\r
74      3.1.  Information Managed by the Pre-authentication Model  . . .  6\r
75      3.2.  Initial Pre-authentication Required Error  . . . . . . . .  8\r
76      3.3.  Client to KDC  . . . . . . . . . . . . . . . . . . . . . .  9\r
77      3.4.  KDC to Client  . . . . . . . . . . . . . . . . . . . . . . 10\r
78    4.  Pre-Authentication Facilities  . . . . . . . . . . . . . . . . 10\r
79      4.1.  Client-authentication Facility . . . . . . . . . . . . . . 12\r
80      4.2.  Strengthening-reply-key Facility . . . . . . . . . . . . . 12\r
81      4.3.  Replacing-reply-key Facility . . . . . . . . . . . . . . . 13\r
82      4.4.  KDC-authentication Facility  . . . . . . . . . . . . . . . 14\r
83    5.  Requirements for Pre-Authentication Mechanisms . . . . . . . . 14\r
84    6.  Tools for Use in Pre-Authentication Mechanisms . . . . . . . . 15\r
85      6.1.  Combining Keys . . . . . . . . . . . . . . . . . . . . . . 15\r
86      6.2.  Protecting Requests/Responses  . . . . . . . . . . . . . . 16\r
87      6.3.  Managing States for the KDC  . . . . . . . . . . . . . . . 17\r
88      6.4.  Pre-authentication Set . . . . . . . . . . . . . . . . . . 19\r
89      6.5.  Definition of Kerberos FAST Padata . . . . . . . . . . . . 22\r
90        6.5.1.  FAST Armors  . . . . . . . . . . . . . . . . . . . . . 23\r
91        6.5.2.  FAST Request . . . . . . . . . . . . . . . . . . . . . 24\r
92        6.5.3.  FAST Response  . . . . . . . . . . . . . . . . . . . . 28\r
93        6.5.4.  Authenticated Kerberos Error Messages using\r
94                Kerberos FAST  . . . . . . . . . . . . . . . . . . . . 30\r
95        6.5.5.  The Encrypted Challenge FAST Factor  . . . . . . . . . 31\r
96      6.6.  Authentication Strength Indication . . . . . . . . . . . . 32\r
97    7.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 33\r
98    8.  Security Considerations  . . . . . . . . . . . . . . . . . . . 33\r
99    9.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 34\r
100    10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 34\r
101      10.1. Normative References . . . . . . . . . . . . . . . . . . . 34\r
102      10.2. Informative References . . . . . . . . . . . . . . . . . . 34\r
103    Appendix A.  Change History  . . . . . . . . . . . . . . . . . . . 35\r
104      A.1.  Changes since 07 . . . . . . . . . . . . . . . . . . . . . 35\r
105      A.2.  Changes since 06 . . . . . . . . . . . . . . . . . . . . . 35\r
106    Appendix B.  ASN.1 module  . . . . . . . . . . . . . . . . . . . . 35\r
110 Zhu & Hartman           Expires January 15, 2009                [Page 2]\r
111 \f\r
112 Internet-Draft         Kerberos Preauth Framework              July 2008\r
115    Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 39\r
116    Intellectual Property and Copyright Statements . . . . . . . . . . 40\r
166 Zhu & Hartman           Expires January 15, 2009                [Page 3]\r
167 \f\r
168 Internet-Draft         Kerberos Preauth Framework              July 2008\r
171 1.  Introduction\r
173    The core Kerberos specification [RFC4120] treats pre-authentication\r
174    data as an opaque typed hole in the messages to the KDC that may\r
175    influence the reply key used to encrypt the KDC reply.  This\r
176    generality has been useful: pre-authentication data is used for a\r
177    variety of extensions to the protocol, many outside the expectations\r
178    of the initial designers.  However, this generality makes designing\r
179    more common types of pre-authentication mechanisms difficult.  Each\r
180    mechanism needs to specify how it interacts with other mechanisms.\r
181    Also, problems like combining a key with the long-term secret or\r
182    proving the identity of the user are common to multiple mechanisms.\r
183    Where there are generally well-accepted solutions to these problems,\r
184    it is desirable to standardize one of these solutions so mechanisms\r
185    can avoid duplication of work.  In other cases, a modular approach to\r
186    these problems is appropriate.  The modular approach will allow new\r
187    and better solutions to common pre-authentication problems to be used\r
188    by existing mechanisms as they are developed.\r
190    This document specifies a framework for Kerberos pre-authentication\r
191    mechanisms.  It defines the common set of functions that pre-\r
192    authentication mechanisms perform as well as how these functions\r
193    affect the state of the request and reply.  In addition several\r
194    common tools needed by pre-authentication mechanisms are provided.\r
195    Unlike [RFC3961], this framework is not complete--it does not\r
196    describe all the inputs and outputs for the pre-authentication\r
197    mechanisms.  Pre-Authentication mechanism designers should try to be\r
198    consistent with this framework because doing so will make their\r
199    mechanisms easier to implement.  Kerberos implementations are likely\r
200    to have plugin architectures for pre-authentication; such\r
201    architectures are likely to support mechanisms that follow this\r
202    framework plus commonly used extensions.\r
204    One of these common tools is the flexible authentication secure\r
205    tunneling (FAST) padata type.  FAST provides a protected channel\r
206    between the client and the KDC, and it can optionally deliver a reply\r
207    key within the protected channel.  Based on FAST, pre-authentication\r
208    mechanisms can extend Kerberos with ease, to support, for example,\r
209    password authenticated key exchange (PAKE) protocols with zero\r
210    knowledge password proof (ZKPP) [EKE] [IEEE1363.2].  Any pre-\r
211    authentication mechanism can be encapsulated in the FAST messages as\r
212    defined in Section 6.5.  A pre-authentication type carried within\r
213    FAST is called a FAST factor.  Creating a FAST factor is the easiest\r
214    path to create a new pre-authentication mechanism.  FAST factors are\r
215    significantly easier to analyze from a security standpoint than other\r
216    pre-authentication mechanisms.\r
218    Mechanism designers should design FAST factors, instead of new pre-\r
222 Zhu & Hartman           Expires January 15, 2009                [Page 4]\r
223 \f\r
224 Internet-Draft         Kerberos Preauth Framework              July 2008\r
227    authentication mechanisms outside of FAST.\r
230 2.  Conventions and Terminology Used in This Document\r
232    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",\r
233    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this\r
234    document are to be interpreted as described in [RFC2119].\r
236    The word padata is used as a shorthand for pre-authentication data.\r
238    A conversation is the set of all authentication messages exchanged\r
239    between the client and the KDCs in order to authenticate the client\r
240    principal.  A conversation as defined here consists of all messages\r
241    that are necessary to complete the authentication between the client\r
242    and the KDC.\r
244    Lastly, this document should be read only after reading the documents\r
245    describing the Kerberos cryptography framework [RFC3961] and the core\r
246    Kerberos protocol [RFC4120].  This document may freely use\r
247    terminology and notation from these documents without reference or\r
248    further explanation.\r
251 3.  Model for Pre-Authentication\r
253    When a Kerberos client wishes to obtain a ticket using the\r
254    authentication server, it sends an initial Authentication Service\r
255    (AS) request.  If pre-authentication is required but not being used,\r
256    then the KDC will respond with a KDC_ERR_PREAUTH_REQUIRED error.\r
257    Alternatively, if the client knows what pre-authentication to use, it\r
258    MAY optimize away a round-trip and send an initial request with\r
259    padata included in the initial request.  If the client includes the\r
260    padata computed using the wrong pre-authentication mechanism or\r
261    incorrect keys, the KDC MAY return KDC_ERR_PREAUTH_FAILED with no\r
262    indication of what padata should have been included.  In that case,\r
263    the client MUST retry with no padata and examine the error data of\r
264    the KDC_ERR_PREAUTH_REQUIRED error.  If the KDC includes pre-\r
265    authentication information in the accompanying error data of\r
266    KDC_ERR_PREAUTH_FAILED, the client SHOULD process the error data, and\r
267    then retry.\r
269    The conventional KDC maintains no state between two requests;\r
270    subsequent requests may even be processed by a different KDC.  On the\r
271    other hand, the client treats a series of exchanges with KDCs as a\r
272    single conversation.  Each exchange accumulates state and hopefully\r
273    brings the client closer to a successful authentication.\r
278 Zhu & Hartman           Expires January 15, 2009                [Page 5]\r
279 \f\r
280 Internet-Draft         Kerberos Preauth Framework              July 2008\r
283    These models for state management are in apparent conflict.  For many\r
284    of the simpler pre-authentication scenarios, the client uses one\r
285    round trip to find out what mechanisms the KDC supports.  Then the\r
286    next request contains sufficient pre-authentication for the KDC to be\r
287    able to return a successful reply.  For these simple scenarios, the\r
288    client only sends one request with pre-authentication data and so the\r
289    conversation is trivial.  For more complex conversations, the KDC\r
290    needs to provide the client with a cookie to include in future\r
291    requests to capture the current state of the authentication session.\r
292    Handling of multiple round-trip mechanisms is discussed in\r
293    Section 6.3.\r
295    This framework specifies the behavior of Kerberos pre-authentication\r
296    mechanisms used to identify users or to modify the reply key used to\r
297    encrypt the KDC reply.  The PA-DATA typed hole may be used to carry\r
298    extensions to Kerberos that have nothing to do with proving the\r
299    identity of the user or establishing a reply key.  Such extensions\r
300    are outside the scope of this framework.  However mechanisms that do\r
301    accomplish these goals should follow this framework.\r
303    This framework specifies the minimum state that a Kerberos\r
304    implementation needs to maintain while handling a request in order to\r
305    process pre-authentication.  It also specifies how Kerberos\r
306    implementations process the padata at each step of the AS request\r
307    process.\r
309 3.1.  Information Managed by the Pre-authentication Model\r
311    The following information is maintained by the client and KDC as each\r
312    request is being processed:\r
314    o  The reply key used to encrypt the KDC reply\r
316    o  How strongly the identity of the client has been authenticated\r
318    o  Whether the reply key has been used in this conversation\r
320    o  Whether the reply key has been replaced in this conversation\r
322    o  Whether the contents of the KDC reply can be verified by the\r
323       client principal\r
326    Conceptually, the reply key is initially the long-term key of the\r
327    principal.  However, principals can have multiple long-term keys\r
328    because of support for multiple encryption types, salts and\r
329    string2key parameters.  As described in Section 5.2.7.5 of the\r
330    Kerberos protocol [RFC4120], the KDC sends PA-ETYPE-INFO2 to notify\r
334 Zhu & Hartman           Expires January 15, 2009                [Page 6]\r
335 \f\r
336 Internet-Draft         Kerberos Preauth Framework              July 2008\r
339    the client what types of keys are available.  Thus in full\r
340    generality, the reply key in the pre-authentication model is actually\r
341    a set of keys.  At the beginning of a request, it is initialized to\r
342    the set of long-term keys advertised in the PA-ETYPE-INFO2 element on\r
343    the KDC.  If multiple reply keys are available, the client chooses\r
344    which one to use.  Thus the client does not need to treat the reply\r
345    key as a set.  At the beginning of a request, the client picks a\r
346    reply key to use.\r
348    KDC implementations MAY choose to offer only one key in the PA-ETYPE-\r
349    INFO2 element.  Since the KDC already knows the client's list of\r
350    supported enctypes from the request, no interoperability problems are\r
351    created by choosing a single possible reply key.  This way, the KDC\r
352    implementation avoids the complexity of treating the reply key as a\r
353    set.\r
355    When the padata in the request is verified by the KDC, then the\r
356    client is known to have that key, therefore the KDC SHOULD pick the\r
357    same key as the reply key.\r
359    At the beginning of handling a message on both the client and the\r
360    KDC, the client's identity is not authenticated.  A mechanism may\r
361    indicate that it has successfully authenticated the client's\r
362    identity.  This information is useful to keep track of on the client\r
363    in order to know what pre-authentication mechanisms should be used.\r
364    The KDC needs to keep track of whether the client is authenticated\r
365    because the primary purpose of pre-authentication is to authenticate\r
366    the client identity before issuing a ticket.  The handling of\r
367    authentication strength using various authentication mechanisms is\r
368    discussed in Section 6.6.\r
370    Initially the reply key has not been used.  A pre-authentication\r
371    mechanism that uses the reply key to encrypt or checksum some data in\r
372    the generation of new keys MUST indicate that the reply key is used.\r
373    This state is maintained by the client and the KDC to enforce the\r
374    security requirement stated in Section 4.3 that the reply key cannot\r
375    be replaced after it is used.\r
377    Initially the reply key has not been replaced.  If a mechanism\r
378    implements the Replace Reply Key facility discussed in Section 4.3,\r
379    then the state MUST be updated to indicate that the reply key has\r
380    been replaced.  Once the reply key has been replaced, knowledge of\r
381    the reply key is insufficient to authenticate the client.  The reply\r
382    key is marked replaced in exactly the same situations as the KDC\r
383    reply is marked as not being verified to the client principal.\r
384    However, while mechanisms can verify the KDC reply to the client,\r
385    once the reply key is replaced, then the reply key remains replaced\r
386    for the remainder of the conversation.\r
390 Zhu & Hartman           Expires January 15, 2009                [Page 7]\r
391 \f\r
392 Internet-Draft         Kerberos Preauth Framework              July 2008\r
395    Without pre-authentication, the client knows that the KDC reply is\r
396    authentic and has not been modified because it is encrypted in a\r
397    long-term key of the client.  Only the KDC and the client know that\r
398    key.  So at the start of a conversation, the KDC reply is presumed to\r
399    be verified using the client principal's long-term key.  Any pre-\r
400    authentication mechanism that sets a new reply key not based on the\r
401    principal's long-term secret MUST either verify the KDC reply some\r
402    other way or indicate that the reply is not verified.  If a mechanism\r
403    indicates that the reply is not verified then the client\r
404    implementation MUST return an error unless a subsequent mechanism\r
405    verifies the reply.  The KDC needs to track this state so it can\r
406    avoid generating a reply that is not verified.\r
408    The typical Kerberos request does not provide a way for the client\r
409    machine to know that it is talking to the correct KDC.  Someone who\r
410    can inject packets into the network between the client machine and\r
411    the KDC and who knows the password that the user will give to the\r
412    client machine can generate a KDC reply that will decrypt properly.\r
413    So, if the client machine needs to authenticate that the user is in\r
414    fact the named principal, then the client machine needs to do a TGS\r
415    request for itself as a service.  Some pre-authentication mechanisms\r
416    may provide a way for the client to authenticate the KDC.  Examples\r
417    of this include signing the reply that can be verified using a well-\r
418    known public key or providing a ticket for the client machine as a\r
419    service.\r
421 3.2.  Initial Pre-authentication Required Error\r
423    Typically a client starts a conversation by sending an initial\r
424    request with no pre-authentication.  If the KDC requires pre-\r
425    authentication, then it returns a KDC_ERR_PREAUTH_REQUIRED message.\r
426    After the first reply with the KDC_ERR_PREAUTH_REQUIRED error code,\r
427    the KDC returns the error code KDC_ERR_MORE_PREAUTH_DATA_NEEDED\r
428    (defined in Section 6.3) for pre-authentication configurations that\r
429    use multi-round-trip mechanisms; see Section 3.4 for details of that\r
430    case.\r
432    The KDC needs to choose which mechanisms to offer the client.  The\r
433    client needs to be able to choose what mechanisms to use from the\r
434    first message.  For example consider the KDC that will accept\r
435    mechanism A followed by mechanism B or alternatively the single\r
436    mechanism C. A client that supports A and C needs to know that it\r
437    should not bother trying A.\r
439    Mechanisms can either be sufficient on their own or can be part of an\r
440    authentication set--a group of mechanisms that all need to\r
441    successfully complete in order to authenticate a client.  Some\r
442    mechanisms may only be useful in authentication sets; others may be\r
446 Zhu & Hartman           Expires January 15, 2009                [Page 8]\r
447 \f\r
448 Internet-Draft         Kerberos Preauth Framework              July 2008\r
451    useful alone or in authentication sets.  For the second group of\r
452    mechanisms, KDC policy dictates whether the mechanism will be part of\r
453    an authentication set or offered alone.  For each mechanism that is\r
454    offered alone, the KDC includes the pre-authentication type ID of the\r
455    mechanism in the padata sequence returned in the\r
456    KDC_ERR_PREAUTH_REQUIRED error.\r
458    The KDC SHOULD NOT send data that is encrypted in the long-term\r
459    password-based key of the principal.  Doing so has the same security\r
460    exposures as the Kerberos protocol without pre-authentication.  There\r
461    are few situations where pre-authentication is desirable and where\r
462    the KDC needs to expose cipher text encrypted in a weak key before\r
463    the client has proven knowledge of that key.\r
465 3.3.  Client to KDC\r
467    This description assumes that a client has already received a\r
468    KDC_ERR_PREAUTH_REQUIRED from the KDC.  If the client performs\r
469    optimistic pre-authentication then the client needs to optimistically\r
470    guess values for the information it would normally receive from that\r
471    error response.\r
473    The client starts by initializing the pre-authentication state as\r
474    specified.  It then processes the padata in the\r
475    KDC_ERR_PREAUTH_REQUIRED.\r
477    When processing the response to the KDC_ERR_PREAUTH_REQUIRED, the\r
478    client MAY ignore any padata it chooses unless doing so violates a\r
479    specification to which the client conforms.  Clients conforming to\r
480    this specification MUST NOT ignore the padata defined in Section 6.3.\r
481    Clients SHOULD process padata unrelated to this framework or other\r
482    means of authenticating the user.  Clients SHOULD choose one\r
483    authentication set or mechanism that could lead to authenticating the\r
484    user and ignore the rest.  Since the list of mechanisms offered by\r
485    the KDC is in the decreasing preference order, clients typically\r
486    choose the first mechanism or authentication set that the client can\r
487    usefully perform.  If a client chooses to ignore a padata it MUST NOT\r
488    process the padata, allow the padata to affect the pre-authentication\r
489    state, nor respond to the padata.\r
491    For each padata the client chooses to process, the client processes\r
492    the padata and modifies the pre-authentication state as required by\r
493    that mechanism.  Padata are processed in the order received from the\r
494    KDC.\r
496    After processing the padata in the KDC error, the client generates a\r
497    new request.  It processes the pre-authentication mechanisms in the\r
498    order in which they will appear in the next request, updating the\r
502 Zhu & Hartman           Expires January 15, 2009                [Page 9]\r
503 \f\r
504 Internet-Draft         Kerberos Preauth Framework              July 2008\r
507    state as appropriate.  The request is sent when it is complete.\r
509 3.4.  KDC to Client\r
511    When a KDC receives an AS request from a client, it needs to\r
512    determine whether it will respond with an error or an AS reply.\r
513    There are many causes for an error to be generated that have nothing\r
514    to do with pre-authentication; they are discussed in the core\r
515    Kerberos specification.\r
517    From the standpoint of evaluating the pre-authentication, the KDC\r
518    first starts by initializing the pre-authentication state.  It then\r
519    processes the padata in the request.  As mentioned in Section 3.3,\r
520    the KDC MAY ignore padata that is inappropriate for the configuration\r
521    and MUST ignore padata of an unknown type.  The KDC MUST NOT ignore\r
522    padata of types used in previous messages.  For example, if a KDC\r
523    issues a KDC_ERR_PREAUTH_REQUIRED error including padata of type x,\r
524    then the KDC cannot ignore padata of type x received in an AS-REQ\r
525    message from the client.\r
527    At this point the KDC decides whether it will issue an error or a\r
528    reply.  Typically a KDC will issue a reply if the client's identity\r
529    has been authenticated to a sufficient degree.\r
531    In the case of a KDC_ERR_MORE_PREAUTH_DATA_NEEDED error, the KDC\r
532    first starts by initializing the pre-authentication state.  Then it\r
533    processes any padata in the client's request in the order provided by\r
534    the client.  Mechanisms that are not understood by the KDC are\r
535    ignored.  Next, it generates padata for the error response, modifying\r
536    the pre-authentication state appropriately as each mechanism is\r
537    processed.  The KDC chooses the order in which it will generate\r
538    padata (and thus the order of padata in the response), but it needs\r
539    to modify the pre-authentication state consistently with the choice\r
540    of order.  For example, if some mechanism establishes an\r
541    authenticated client identity, then the subsequent mechanisms in the\r
542    generated response receive this state as input.  After the padata is\r
543    generated, the error response is sent.  Typically the errors with the\r
544    code KDC_ERR_MORE_PREAUTH_DATA_NEEDED in a converstation will include\r
545    KDC state as discussed in Section 6.3.\r
547    To generate a final reply, the KDC generates the padata modifying the\r
548    pre-authentication state as necessary.  Then it generates the final\r
549    response, encrypting it in the current pre-authentication reply key.\r
552 4.  Pre-Authentication Facilities\r
554    Pre-Authentication mechanisms can be thought of as providing various\r
558 Zhu & Hartman           Expires January 15, 2009               [Page 10]\r
559 \f\r
560 Internet-Draft         Kerberos Preauth Framework              July 2008\r
563    conceptual facilities.  This serves two useful purposes.  First,\r
564    mechanism authors can choose only to solve one specific small\r
565    problem.  It is often useful for a mechanism designed to offer key\r
566    management not to directly provide client authentication but instead\r
567    to allow one or more other mechanisms to handle this need.  Secondly,\r
568    thinking about the abstract services that a mechanism provides yields\r
569    a minimum set of security requirements that all mechanisms providing\r
570    that facility must meet.  These security requirements are not\r
571    complete; mechanisms will have additional security requirements based\r
572    on the specific protocol they employ.\r
574    A mechanism is not constrained to only offering one of these\r
575    facilities.  While such mechanisms can be designed and are sometimes\r
576    useful, many pre-authentication mechanisms implement several\r
577    facilities.  By combining multiple facilities in a single mechanism,\r
578    it is often easier to construct a secure, simple solution than by\r
579    solving the problem in full generality.  Even when mechanisms provide\r
580    multiple facilities, they need to meet the security requirements for\r
581    all the facilities they provide.  If the FAST factor approach is\r
582    used, it is likely that one or a small number of facilities can be\r
583    provided by a single mechanism without complicating the security\r
584    analysis.\r
586    According to Kerberos extensibility rules (Section 1.5 of the\r
587    Kerberos specification [RFC4120]), an extension MUST NOT change the\r
588    semantics of a message unless a recipient is known to understand that\r
589    extension.  Because a client does not know that the KDC supports a\r
590    particular pre-authentication mechanism when it sends an initial\r
591    request, a pre-authentication mechanism MUST NOT change the semantics\r
592    of the request in a way that will break a KDC that does not\r
593    understand that mechanism.  Similarly, KDCs MUST NOT send messages to\r
594    clients that affect the core semantics unless the client has\r
595    indicated support for the message.\r
597    The only state in this model that would break the interpretation of a\r
598    message is changing the expected reply key.  If one mechanism changed\r
599    the reply key and a later mechanism used that reply key, then a KDC\r
600    that interpreted the second mechanism but not the first would fail to\r
601    interpret the request correctly.  In order to avoid this problem,\r
602    extensions that change core semantics are typically divided into two\r
603    parts.  The first part proposes a change to the core semantic--for\r
604    example proposes a new reply key.  The second part acknowledges that\r
605    the extension is understood and that the change takes effect.\r
606    Section 4.2 discusses how to design mechanisms that modify the reply\r
607    key to be split into a proposal and acceptance without requiring\r
608    additional round trips to use the new reply key in subsequent pre-\r
609    authentication.  Other changes in the state described in Section 3.1\r
610    can safely be ignored by a KDC that does not understand a mechanism.\r
614 Zhu & Hartman           Expires January 15, 2009               [Page 11]\r
615 \f\r
616 Internet-Draft         Kerberos Preauth Framework              July 2008\r
619    Mechanisms that modify the behavior of the request outside the scope\r
620    of this framework need to carefully consider the Kerberos\r
621    extensibility rules to avoid similar problems.\r
623 4.1.  Client-authentication Facility\r
625    The client authentication facility proves the identity of a user to\r
626    the KDC before a ticket is issued.  Examples of mechanisms\r
627    implementing this facility include the encrypted timestamp facility\r
628    defined in Section 5.2.7.2 of the Kerberos specification [RFC4120].\r
629    Mechanisms that provide this facility are expected to mark the client\r
630    as authenticated.\r
632    Mechanisms implementing this facility SHOULD require the client to\r
633    prove knowledge of the reply key before transmitting a successful KDC\r
634    reply.  Otherwise, an attacker can intercept the pre-authentication\r
635    exchange and get a reply to attack.  One way of proving the client\r
636    knows the reply key is to implement the Replace Reply Key facility\r
637    along with this facility.  The PKINIT mechanism [RFC4556] implements\r
638    Client Authentication alongside Replace Reply Key.\r
640    If the reply key has been replaced, then mechanisms such as\r
641    encrypted-timestamp that rely on knowledge of the reply key to\r
642    authenticate the client MUST NOT be used.\r
644 4.2.  Strengthening-reply-key Facility\r
646    Particularly, when dealing with keys based on passwords, it is\r
647    desirable to increase the strength of the key by adding additional\r
648    secrets to it.  Examples of sources of additional secrets include the\r
649    results of a Diffie-Hellman key exchange or key bits from the output\r
650    of a smart card [KRB-WG.SAM].  Typically these additional secrets can\r
651    be first combined with the existing reply key and then converted to a\r
652    protocol key using tools defined in Section 6.1.\r
654    Typically a mechanism implementing this facility will know that the\r
655    other side of the exchange supports the facility before the reply key\r
656    is changed.  For example, a mechanism might need to learn the\r
657    certificate for a KDC before encrypting a new key in the public key\r
658    belonging to that certificate.  However, if a mechanism implementing\r
659    this facility wishes to modify the reply key before knowing that the\r
660    other party in the exchange supports the mechanism, it proposes\r
661    modifying the reply key.  The other party then includes a message\r
662    indicating that the proposal is accepted if it is understood and\r
663    meets policy.  In many cases it is desirable to use the new reply key\r
664    for client authentication and for other facilities.  Waiting for the\r
665    other party to accept the proposal and actually modify the reply key\r
666    state would add an additional round trip to the exchange.  Instead,\r
670 Zhu & Hartman           Expires January 15, 2009               [Page 12]\r
671 \f\r
672 Internet-Draft         Kerberos Preauth Framework              July 2008\r
675    mechanism designers are encouraged to include a typed hole for\r
676    additional padata in the message that proposes the reply key change.\r
677    The padata included in the typed hole are generated assuming the new\r
678    reply key.  If the other party accepts the proposal, then these\r
679    padata are considered as an inner level.  As with the outer level,\r
680    one authentication set or mechanism is typically chosen for client\r
681    authentication, along with auxiliary mechanisms such as KDC cookies,\r
682    and other mechanisms are ignored.  When mechanisms include such a\r
683    container, the hint provided for use in authentication sets MUST\r
684    contain a sequence of inner mechanisms along with hints for those\r
685    mechanisms.  The party generating the proposal can determine whether\r
686    the padata were processed based on whether the proposal for the reply\r
687    key is accepted.\r
689    The specific formats of the proposal message, including where padata\r
690    are included is a matter for the mechanism specification.  Similarly,\r
691    the format of the message accepting the proposal is mechanism-\r
692    specific.\r
694    Mechanisms implementing this facility and including a typed hole for\r
695    additional padata MUST checksum that padata using a keyed checksum or\r
696    encrypt the padata.  This requirement protects against modification\r
697    of the contents of the typed hole.  By modifying these contents an\r
698    attacker might be able to choose which mechanism is used to\r
699    authenticate the client, or to convince a party to provide text\r
700    encrypted in a key that the attacker had manipulated.  It is\r
701    important that mechanisms strengthen the reply key enough that using\r
702    it to checksum padata is appropriate.\r
704 4.3.  Replacing-reply-key Facility\r
706    The Replace Reply Key facility replaces the key in which a successful\r
707    AS reply will be encrypted.  This facility can only be used in cases\r
708    where knowledge of the reply key is not used to authenticate the\r
709    client.  The new reply key MUST be communicated to the client and the\r
710    KDC in a secure manner.  Mechanisms implementing this facility MUST\r
711    mark the reply key as replaced in the pre-authentication state.\r
712    Mechanisms implementing this facility MUST either provide a mechanism\r
713    to verify the KDC reply to the client or mark the reply as unverified\r
714    in the pre-authentication state.  Mechanisms implementing this\r
715    facility SHOULD NOT be used if a previous mechanism has used the\r
716    reply key.\r
718    As with the strengthening-reply-key facility, Kerberos extensibility\r
719    rules require that the reply key not be changed unless both sides of\r
720    the exchange understand the extension.  In the case of this facility\r
721    it will likely be the case for both sides to know that the facility\r
722    is available by the time that the new key is available to be used.\r
726 Zhu & Hartman           Expires January 15, 2009               [Page 13]\r
727 \f\r
728 Internet-Draft         Kerberos Preauth Framework              July 2008\r
731    However, mechanism designers can use a container for padata in a\r
732    proposal message as discussed in Section 4.2 if appropriate.\r
734 4.4.  KDC-authentication Facility\r
736    This facility verifies that the reply comes from the expected KDC.\r
737    In traditional Kerberos, the KDC and the client share a key, so if\r
738    the KDC reply can be decrypted then the client knows that a trusted\r
739    KDC responded.  Note that the client machine cannot trust the client\r
740    unless the machine is presented with a service ticket for it\r
741    (typically the machine can retrieve this ticket by itself).  However,\r
742    if the reply key is replaced, some mechanism is required to verify\r
743    the KDC.  Pre-authentication mechanisms providing this facility allow\r
744    a client to determine that the expected KDC has responded even after\r
745    the reply key is replaced.  They mark the pre-authentication state as\r
746    having been verified.\r
749 5.  Requirements for Pre-Authentication Mechanisms\r
751    This section lists requirements for specifications of pre-\r
752    authentication mechanisms.\r
754    For each message in the pre-authentication mechanism, the\r
755    specification describes the pa-type value to be used and the contents\r
756    of the message.  The processing of the message by the sender and\r
757    recipient is also specified.  This specification needs to include all\r
758    modifications to the pre-authentication state.\r
760    Generally mechanisms have a message that can be sent in the error\r
761    data of the KDC_ERR_PREAUTH_REQUIRED error message or in an\r
762    authentication set.  If the client needs information such as trusted\r
763    certificate authorities in order to determine if it can use the\r
764    mechanism, then this information should be in that message.  In\r
765    addition, such mechanisms should also define a pa-hint to be included\r
766    in authentication sets.  Often, the same information included in the\r
767    padata-value is appropriate to include in the pa-hint (as defined in\r
768    Section 6.4).\r
770    In order to ease security analysis the mechanism specification should\r
771    describe what facilities from this document are offered by the\r
772    mechanism.  For each facility, the security consideration section of\r
773    the mechanism specification should show that the security\r
774    requirements of that facility are met.  This requirement is\r
775    applicable to any FAST factor that provides authentication\r
776    information.\r
778    Significant problems have resulted in the specification of Kerberos\r
782 Zhu & Hartman           Expires January 15, 2009               [Page 14]\r
783 \f\r
784 Internet-Draft         Kerberos Preauth Framework              July 2008\r
787    protocols because much of the KDC exchange is not protected against\r
788    authentication.  The security considerations section should discuss\r
789    unauthenticated plaintext attacks.  It should either show that\r
790    plaintext is protected or discuss what harm an attacker could do by\r
791    modifying the plaintext.  It is generally acceptable for an attacker\r
792    to be able to cause the protocol negotiation to fail by modifying\r
793    plaintext.  More significant attacks should be evaluated carefully.\r
795    As discussed in Section 6.3, there is no guarantee that a client will\r
796    use the same KDCs for all messages in a conversation.  The mechanism\r
797    specification needs to show why the mechanism is secure in this\r
798    situation.  The hardest problem to deal with, especially for\r
799    challenge/response mechanisms is to make sure that the same response\r
800    cannot be replayed against two KDCs while allowing the client to talk\r
801    to any KDC.\r
804 6.  Tools for Use in Pre-Authentication Mechanisms\r
806    This section describes common tools needed by multiple pre-\r
807    authentication mechanisms.  By using these tools mechanism designers\r
808    can use a modular approach to specify mechanism details and ease\r
809    security analysis.\r
811 6.1.  Combining Keys\r
813    Frequently a weak key needs to be combined with a stronger key before\r
814    use.  For example, passwords are typically limited in size and\r
815    insufficiently random, therefore it is desirable to increase the\r
816    strength of the keys based on passwords by adding additional secrets.\r
817    Additional source of secrecy may come from hardware tokens.\r
819    This section provides standard ways to combine two keys into one.\r
821    KRB-FX-CF1() is defined to combine two pass-phrases.\r
823        KRB-FX-CF1(UTF-8 string, UTF-8 string) -> (UTF-8 string)\r
824        KRB-FX-CF1(x, y) -> x || y\r
826    Where || denotes concatenation.  The strength of the final key is\r
827    roughly the total strength of the individual keys being combined\r
828    assuming that the string_to_key() function [RFC3961] uses all its\r
829    input evenly.\r
831    An example usage of KRB-FX-CF1() is when a device provides random but\r
832    short passwords, the password is often combined with a personal\r
833    identification number (PIN).  The password and the PIN can be\r
834    combined using KRB-FX-CF1().\r
838 Zhu & Hartman           Expires January 15, 2009               [Page 15]\r
839 \f\r
840 Internet-Draft         Kerberos Preauth Framework              July 2008\r
843    KRB-FX-CF2() combines two protocol keys based on the pseudo-random()\r
844    function defined in [RFC3961].\r
846    Given two input keys, K1 and K2, where K1 and K2 can be of two\r
847    different enctypes, the output key of KRB-FX-CF2(), K3, is derived as\r
848    follows:\r
850        KRB-FX-CF2(protocol key, protocol key, octet string,\r
851                  octet string)  ->  (protocol key)\r
853        PRF+(K1, pepper1) -> octet-string-1\r
854        PRF+(K2, pepper2) -> octet-string-2\r
855        KRB-FX-CF2(K1, K2, pepper1, pepper2) ->\r
856               random-to-key(octet-string-1 ^ octet-string-2)\r
858    Where ^ denotes the exclusive-OR operation.  PRF+() is defined as\r
859    follows:\r
861     PRF+(protocol key, octet string) -> (octet string)\r
863     PRF+(key, shared-info) -> pseudo-random( key,  1 || shared-info ) ||\r
864                   pseudo-random( key, 2 || shared-info ) ||\r
865                   pseudo-random( key, 3 || shared-info ) || ...\r
867    Here the counter value 1, 2, 3 and so on are encoded as a one-octet\r
868    integer.  The pseudo-random() operation is specified by the enctype\r
869    of the protocol key.  PRF+() uses the counter to generate enough bits\r
870    as needed by the random-to-key() [RFC3961] function for the\r
871    encryption type specified for the resulting key; unneeded bits are\r
872    removed from the tail.\r
874    Mechanism designers MUST specify the values for the input parameter\r
875    pepper1 and pepper2 when combining two keys using KRB-FX-CF2().  The\r
876    pepper1 and pepper2 MUST be distinct so that if the two keys being\r
877    combined are the same, the resulting key is not a trivial key.\r
879 6.2.  Protecting Requests/Responses\r
881    Mechanism designers SHOULD protect clear text portions of pre-\r
882    authentication data.  Various denial of service attacks and downgrade\r
883    attacks against Kerberos are possible unless plaintexts are somehow\r
884    protected against modification.  An early design goal of Kerberos\r
885    Version 5 [RFC4120] was to avoid encrypting more of the\r
886    authentication exchange that was required.  (Version 4 doubly-\r
887    encrypted the encrypted part of a ticket in a KDC reply, for\r
888    example.)  This minimization of encryption reduces the load on the\r
889    KDC and busy servers.  Also, during the initial design of Version 5,\r
890    the existence of legal restrictions on the export of cryptography\r
894 Zhu & Hartman           Expires January 15, 2009               [Page 16]\r
895 \f\r
896 Internet-Draft         Kerberos Preauth Framework              July 2008\r
899    made it desirable to minimize of the number of uses of encryption in\r
900    the protocol.  Unfortunately, performing this minimization created\r
901    numerous instances of unauthenticated security-relevant plaintext\r
902    fields.\r
904    If there is more than one roundtrip for an authentication exchange,\r
905    mechanism designers need to allow either the client or the KDC to\r
906    provide a checksum of all the messages exchanged on the wire in the\r
907    conversation, and the checksum is then verified by the receiver.\r
909    New mechanisms MUST NOT be hard-wired to use a specific algorithm.\r
911    Primitives defined in [RFC3961] are RECOMMENDED for integrity\r
912    protection and confidentiality.  Mechanisms based on these primitives\r
913    are crypto-agile as the result of using [RFC3961] along with\r
914    [RFC4120].  The advantage afforded by crypto-agility is the ability\r
915    to avoid a multi-year standardization and deployment cycle to fix a\r
916    problem that is specific to a particular algorithm, when real attacks\r
917    do arise against that algorithm.\r
919    Note that data used by FAST factors (defined in Section 6.5) is\r
920    encrypted in a protected channel, thus they do not share the un-\r
921    authenticated-text issues with mechanisms designed as full-blown pre-\r
922    authentication mechanisms.\r
924 6.3.  Managing States for the KDC\r
926    Kerberos KDCs are stateless.  There is no requirement that clients\r
927    will choose the same KDC for the second request in a conversation.\r
928    Proxies or other intermediate nodes may also influence KDC selection.\r
929    So, each request from a client to a KDC must include sufficient\r
930    information that the KDC can regenerate any needed state.  This is\r
931    accomplished by giving the client a potentially long opaque cookie in\r
932    responses to include in future requests in the same conversation.\r
933    The KDC MAY respond that a conversation is too old and needs to\r
934    restart by responding with a KDC_ERR_PREAUTH_EXPIRED error.\r
936        KDC_ERR_PREAUTH_EXPIRED            TBA\r
938    When a client receives this error, the client SHOULD abort the\r
939    existing conversation, and restart a new one.\r
941    An example, where more than one message from the client is needed, is\r
942    when the client is authenticated based on a challenge-response\r
943    scheme.  In that case, the KDC needs to keep track of the challenge\r
944    issued for a client authentication request.\r
946    The PA-FX-COOKIE pdata type is defined in this section to facilitate\r
950 Zhu & Hartman           Expires January 15, 2009               [Page 17]\r
951 \f\r
952 Internet-Draft         Kerberos Preauth Framework              July 2008\r
955    state management.  This padata is sent by the KDC when the KDC\r
956    requires state for a future transaction.  The client includes this\r
957    opaque token in the next message in the conversation.  The token may\r
958    be relatively large; clients MUST be prepared for tokens somewhat\r
959    larger than the size of all messages in a conversation.\r
961        PA_FX_COOKIE                       TBA\r
962            -- Stateless cookie that is not tied to a specific KDC.\r
964    The corresponding padata-value field [RFC4120] contains the\r
965    Distinguished Encoding Rules (DER) [X60] [X690] encoding of the\r
966    following Abstract Syntax Notation One (ASN.1) type PA-FX-COOKIE:\r
968       PA-FX-COOKIE ::= SEQUENCE {\r
969           conversationId  [0] OCTET STRING,\r
970              -- Contains the identifier of this conversation. This field\r
971              -- must contain the same value for all the messages\r
972              -- within the same conversation.\r
973           enc-binding-key [1] EncryptedData OPTIONAL,\r
974                           -- EncryptionKey --\r
975              -- This field is present when and only when a FAST\r
976              -- padata as defined in Section 6.5 is included.\r
977              -- The encrypted data, when decrypted, contains an\r
978              -- EncryptionKey structure.\r
979              -- This encryption key is encrypted using the armor key\r
980              -- (defined in Section 6.5.1), and the key usage for the\r
981              -- encryption is KEY_USAGE_FAST_BINDING_KEY.\r
982              -- Present only once in a converstation.\r
983           cookie          [2] OCTET STRING OPTIONAL,\r
984              -- Opaque data, for use to associate all the messages in\r
985              -- a single conversation between the client and the KDC.\r
986              -- This is generated by the KDC and the client MUST copy\r
987              -- the exact cookie encapsulated in a PA_FX_COOKIE data\r
988              -- element into the next message of the same conversation.\r
989           ...\r
990       }\r
991       KEY_USAGE_FAST_BINDING_KEY         TBA\r
993    The conversationId field contains a sufficiently-long rand number\r
994    that uniquely identifies the conversation.  If a PA_FX_COOKIE padata\r
995    is present in one message, a PA_FX_COOKIE structure MUST be present\r
996    in all subsequent messages of the same converstation between the\r
997    client and the KDC, with the same conversationId value.\r
999    The enc-binding-key field is present when and only when a FAST padata\r
1000    (defined in Section 6.5) is included.  The enc-binding-key field is\r
1001    present only once in a conversation.  It MUST be ignored if it is\r
1002    present in a subsequent message of the same conversation.  The\r
1006 Zhu & Hartman           Expires January 15, 2009               [Page 18]\r
1007 \f\r
1008 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1011    encrypted data, when decrypted, contains an EncryptionKey structure\r
1012    that is called the binding key.  The binding key is encrypted using\r
1013    the armor key (defined in Section 6.5.1), and the key usage for the\r
1014    encryption is KEY_USAGE_FAST_BINDING_KEY.\r
1016    If a Kerberos FAST padata as defined in Section 6.5 is included in\r
1017    one message, it MUST be included in all subsequent messages of the\r
1018    same conversation.\r
1020    When FAST padata as defined Section 6.5 is included, the PA-FX-COOKIE\r
1021    padata MUST be included.\r
1023    The cookie token is generated by the KDC and the client MUST copy the\r
1024    exact cookie encapsulated in a PA_FX_COOKIE data element into the\r
1025    next message of the same conversation.  The content of the cookie\r
1026    field is a local matter of the KDC.  However the KDC MUST construct\r
1027    the cookie token in such a manner that a malicious client cannot\r
1028    subvert the authentication process by manipulating the token.  The\r
1029    KDC implementation needs to consider expiration of tokens, key\r
1030    rollover and other security issues in token design.  The content of\r
1031    the cookie field is likely specific to the pre-authentication\r
1032    mechanisms used to authenticate the client.  If a client\r
1033    authentication response can be replayed to multiple KDCs via the\r
1034    PA_FX_COOKIE mechanism, an expiration in the cookie is RECOMMENDED to\r
1035    prevent the response being presented indefinitely.\r
1037    If at least one more message for a mechanism or a mechanism set is\r
1038    expected by the KDC, the KDC returns a\r
1039    KDC_ERR_MORE_PREAUTH_DATA_NEEDED error with a PA_FX_COOKIE to\r
1040    identify the conversation with the client according to Section 6.5.4.\r
1042         KDC_ERR_MORE_PREAUTH_DATA_NEEDED   TBA\r
1044 6.4.  Pre-authentication Set\r
1046    If all mechanisms in a group need to successfully complete in order\r
1047    to authenticate a client, the client and the KDC SHOULD use the\r
1048    PA_AUTHENTICATION_SET padata element.\r
1050    A PA_AUTHENTICATION_SET padata element contains the ASN.1 DER\r
1051    encoding of the PA-AUTHENTICATION-SET structure:\r
1062 Zhu & Hartman           Expires January 15, 2009               [Page 19]\r
1063 \f\r
1064 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1067         PA-AUTHENTICATION-SET ::= SEQUENCE OF PA-AUTHENTICATION-SET-ELEM\r
1069         PA-AUTHENTICATION-SET-ELEM ::= SEQUENCE {\r
1070             pa-type      [0] Int32,\r
1071                 -- same as padata-type.\r
1072             pa-hint      [1] OCTET STRING OPTIONAL,\r
1073             pa-value  [2] OCTET STRING OPTIONAL,\r
1074             ...\r
1075         }\r
1077    The pa-type field of the PA-AUTHENTICATION-SET-ELEM structure\r
1078    contains the corresponding value of padata-type in PA-DATA [RFC4120].\r
1079    Associated with the pa-type is a pa-hint, which is an octet-string\r
1080    specified by the pre-authentication mechanism.  This hint may provide\r
1081    information for the client which helps it determine whether the\r
1082    mechanism can be used.  For example a public-key mechanism might\r
1083    include the certificate authorities it trusts in the hint info.  Most\r
1084    mechanisms today do not specify hint info; if a mechanism does not\r
1085    specify hint info the KDC MUST NOT send a hint for that mechanism.\r
1086    To allow future revisions of mechanism specifications to add hint\r
1087    info, clients MUST ignore hint info received for mechanisms that the\r
1088    client believes do not support hint info.  The pa-value element of\r
1089    the PA-AUTHENTICATION-SET-ELEM sequence is included to carry the\r
1090    first padata-value from the KDC to the client.  If the client chooses\r
1091    this authentication set then the client MUST process this pa-value.\r
1092    The pa-value element MUST be absent for all but the first entry in\r
1093    the authentication set.  Clients MUST ignore pa-value for the second\r
1094    and following entries in the authentication set.\r
1096    If the client chooses an authentication set, then its AS-REQ message\r
1097    MUST contain a PA_AUTHENTICATION_SET_SELECTED padata element.  This\r
1098    element contains the encoding of the PA-AUTHENTICATION-SET sequence\r
1099    received from the KDC corresponding to the authentication set that is\r
1100    chosen.  The client MUST use the same octet values received from the\r
1101    KDC; it cannot re-encode the sequence.  This allows KDCs to use bit-\r
1102    wise comparison to identify the selected authentication set.  The\r
1103    PA_AUTHENTICATION_SET_SELECTED padata element MUST come before any\r
1104    padata elements from the authentication set in the padata sequence in\r
1105    the AS-REQ message.  The client MAY cache authentication sets from\r
1106    prior messages and use them to construct an optimistic initial AS-\r
1107    REQ.  If the KDC receives a PA_AUTHENTICATION_SET_SELECTED padata\r
1108    element that does not correspond to an authentication set that it\r
1109    would offer, then the KDC returns the\r
1110    KDC_ERR_PREAUTH_BAD_AUTHENTICATION_SET error.  The edata in this\r
1111    error contains a sequence of padata just as for the\r
1112    KDC_ERR_PREAUTH_REQUIRED error.\r
1118 Zhu & Hartman           Expires January 15, 2009               [Page 20]\r
1119 \f\r
1120 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1123       PA_AUTHENTICATION_SET_SELECTED         TBA\r
1124       KDC_ERR_PREAUTH_BAD_AUTHENTICATION_SET TBA\r
1126    The PA-AUTHENTICATION-SET appears only in the first message from the\r
1127    KDC to the client.  In particular, the client MAY fail if the\r
1128    authentication mechanism sets change as the conversation progresses.\r
1129    Clients MAY assume that the hints provided in the authentication set\r
1130    contain enough information that the client knows what user interface\r
1131    elements need to be displayed during the entire authentication\r
1132    conversation.  Exceptional circumstances such as expired passwords or\r
1133    expired accounts may require that additional user interface be\r
1134    displayed.  Mechanism designers need to carefully consider the design\r
1135    of their hints so that the client has this information.  This way,\r
1136    clients can construct necessary dialogue boxes or wizards based on\r
1137    the authentication set and can present a coherent user interface.\r
1138    Current standards for user interface do not provide an acceptable\r
1139    experience when the client has to ask additional questions later in\r
1140    the conversation.\r
1142    When indicating which sets of pre-authentication mechanisms are\r
1143    supported, the KDC includes a PA-AUTHENTICATION-SET padata element\r
1144    for each pre-authentication mechanism set.\r
1146    The client sends the padata-value for the first mechanism it picks in\r
1147    the pre-authentication set, when the first mechanism completes, the\r
1148    client and the KDC will proceed with the second mechanism, and so on\r
1149    until all mechanisms complete successfully.  The PA_FX_COOKIE as\r
1150    defined in Section 6.3 MUST be sent by the KDC along with the first\r
1151    message that contains a PA-AUTHENTICATION-SET, in order to keep track\r
1152    of KDC states.\r
1154    Before the authentication succeeds and a ticket is returned, the\r
1155    message that the client sends is an AS_REQ and the message that the\r
1156    KDC sends is a KRB-ERROR message.  The error code in the KRB-ERROR\r
1157    message from the KDC is KDC_ERR_MORE_PREAUTH_DATA_NEEDED as defined\r
1158    in Section 6.3 and the accompanying e-data contains the DER encoding\r
1159    of ASN.1 type METHOD-DATA.  The KDC includes the padata elements in\r
1160    the METHOD-DATA.  If there is no padata, the e-data field is absent\r
1161    in the KRB-ERROR message.\r
1163    If the client sends the last message for a given mechanism, then the\r
1164    KDC sends the first message for the next mechanism.  If the next\r
1165    mechanism does not start with a KDC-side challenge, then the KDC\r
1166    includes a padata item with the appropriate pa-type and an empty pa-\r
1167    data.\r
1169    If the KDC sends the last message for a particular mechanism, the KDC\r
1170    also includes the first padata for the next mechanism.\r
1174 Zhu & Hartman           Expires January 15, 2009               [Page 21]\r
1175 \f\r
1176 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1179 6.5.  Definition of Kerberos FAST Padata\r
1181    As described in [RFC4120], Kerberos is vulnerable to offline\r
1182    dictionary attacks.  An attacker can request an AS-REP and try\r
1183    various passwords to see if they can decrypt the resulting ticket.\r
1184    RFC 4120 provides the entrypted timestap pre-authentication method\r
1185    that ameliorates the situation somewhat by requiring that an attacker\r
1186    observe a successful authentication.  However stronger security is\r
1187    desired in many environments.  The Kerberos FAST pre-authentication\r
1188    padata defined in this section provides a tool to significantly\r
1189    reduce vulnerability to offline dictionary attack.  When combined\r
1190    with encrypted timestamp, FAST requires an attacker to mount a\r
1191    successful man-in-the-middle attack to observe ciphertext.  When\r
1192    combined with host keys, FAST can even protect against active\r
1193    attacks.  FAST also provides solutions to common problems for pre-\r
1194    authentication mechanisms such as binding of the request and the\r
1195    reply, freshness guarantee of the authentication.  FAST itself,\r
1196    however, does not authenticate the client or the KDC, instead, it\r
1197    provides a typed hole to allow pre-authentication data be tunneled.\r
1198    A pre-authentication data element used within FAST is called a FAST\r
1199    factor.  A FAST factor captures the minimal work required for\r
1200    extending Kerberos to support a new pre-authentication scheme.\r
1202    A FAST factor MUST NOT be used outside of FAST unless its\r
1203    specification explicitly allows so.  The typed holes in FAST messages\r
1204    can also be used as generic holes for other padata that are not\r
1205    intended to prove the client's identity, or establish the reply key.\r
1207    New pre-authentication mechanisms SHOULD be designed as FAST factors,\r
1208    instead of full-blown pre-authentication mechanisms.\r
1210    FAST factors that are pre-authentication mechanisms MUST meet the\r
1211    requirements in Section 5.\r
1213    FAST employs an armoring scheme.  The armor can be a Ticket Granting\r
1214    Ticket (TGT) obtained by the client's machine using the host keys to\r
1215    pre-authenticate with the KDC, or an anonymous TGT obtained based on\r
1216    anonymous PKINIT [KRB-ANON] [RFC4556].\r
1218    The rest of this section describes the types of armors and the syntax\r
1219    of the messages used by FAST.  Conforming implementations MUST\r
1220    support Kerberos FAST padata.\r
1222    Any FAST armor scheme MUST provide a fresh armor key for each\r
1223    conversation.  Clients and KDCs can assume that if a message is\r
1224    encrypted and integrity protected with a given armor key then it is\r
1225    part of the conversation using that armor key.\r
1230 Zhu & Hartman           Expires January 15, 2009               [Page 22]\r
1231 \f\r
1232 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1235 6.5.1.  FAST Armors\r
1237    An armor key is used to encrypt pre-authentication data in the FAST\r
1238    request and the response.  The KrbFastArmor structure is defined to\r
1239    identify the armor key.  This structure contains the following two\r
1240    fields: the armor-type identifies the type of armors, and the armor-\r
1241    value as an OCTET STRING contains the description of the armor scheme\r
1242    and the armor key.\r
1244         KrbFastArmor ::= SEQUENCE {\r
1245             armor-type   [0] Int32,\r
1246                 -- Type of the armor.\r
1247             armor-value  [1] OCTET STRING,\r
1248                 -- Value of the armor.\r
1249             ...\r
1250         }\r
1252    The value of the armor key is a matter of the armor type\r
1253    specification.  Only one armor type is defined in this document.\r
1255         FX_FAST_ARMOR_AP_REQUEST           TBA\r
1257    The FX_FAST_ARMOR_AP_REQUEST armor is based on Kerberos tickets.\r
1259    Conforming implementations MUST implement the\r
1260    FX_FAST_ARMOR_AP_REQUEST armor type.\r
1262 6.5.1.1.  Ticket-based Armors\r
1264    This is a ticket-based armoring scheme.  The armor-type is\r
1265    FX_FAST_ARMOR_AP_REQUEST, the armor-value contains an ASN.1 DER\r
1266    encoded AP-REQ.  The ticket in the AP-REQ is called an armor ticket\r
1267    or an armor TGT.  The subkey field in the AP-REQ MUST be present.\r
1268    The armor key is the subkey in the AP-REQ authenticator.\r
1270    The server name field of the armor ticket MUST identify the TGS of\r
1271    the target realm.  Here are three ways in the decreasing preference\r
1272    order how an armor TGT SHOULD be obtained:\r
1274    1.  If the client is authenticating from a host machine whose\r
1275        Kerberos realm has a trust path to the client's realm, the host\r
1276        machine obtains a TGT by pre-authenticating intitialy the realm\r
1277        of the host machine using the host keys.  If the client's realm\r
1278        is different than the realm of the local host, the machine then\r
1279        obtains a cross-realm TGT to the client's realm as the armor\r
1280        ticket.  Otherwise, the host's primary TGT is the armor ticket.\r
1286 Zhu & Hartman           Expires January 15, 2009               [Page 23]\r
1287 \f\r
1288 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1291    2.  If the client's host machine cannot obtain a host ticket strictly\r
1292        based on RFC4120, but the KDC has an asymmetric signing key that\r
1293        the client can verify the binding between the public key of the\r
1294        signing key and the expected KDC, the client can use anonymous\r
1295        PKINIT [KRB-ANON] [RFC4556] to authenticate the KDC and obtain an\r
1296        anonymous TGT as the armor ticket.  The armor key can be a cross-\r
1297        team TGT obtained based on the initial primary TGT obtained using\r
1298        anonymous PKINIT with KDC authentication.\r
1300    3.  Otherwise, the client uses anonymous PKINIT to get an anonymous\r
1301        TGT without KDC authentication and that TGT is the armor ticket.\r
1302        Note that this mode of operation is vulnerable to man-in-the-\r
1303        middle attacks at the time of obtaining the initial anonymous\r
1304        armor TGT.  The armor key can be a cross-team TGT obtained based\r
1305        on the initial primary TGT obtained using anonymous PKINIT\r
1306        without KDC authentication.\r
1308    Because the KDC does not know if the client is able to trust the\r
1309    ticket it has, the KDC MUST initialize the pre-authentication state\r
1310    to an unverified KDC.\r
1312 6.5.2.  FAST Request\r
1314    A padata type PA_FX_FAST is defined for the Kerberos FAST pre-\r
1315    authentication padata.  The corresponding padata-value field\r
1316    [RFC4120] contains the DER encoding of the ASN.1 type PA-FX-FAST-\r
1317    REQUEST.\r
1342 Zhu & Hartman           Expires January 15, 2009               [Page 24]\r
1343 \f\r
1344 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1347        PA_FX_FAST                         TBA\r
1348            -- Padata type for Kerberos FAST\r
1350        PA-FX-FAST-REQUEST ::= CHOICE {\r
1351            armored-data [0] KrbFastArmoredReq,\r
1352            ...\r
1353        }\r
1355        KrbFastArmoredReq ::= SEQUENCE {\r
1356            armor        [0] KrbFastArmor OPTIONAL,\r
1357                -- Contains the armor that identifies the armor key.\r
1358                -- MUST be present in AS-REQ.\r
1359                -- MUST be absent in TGS-REQ.\r
1360            req-checksum [1] Checksum,\r
1361                -- Checksum performed over the type KDC-REQ-BODY for\r
1362                -- the req-body field of the KDC-REQ structure defined in\r
1363                -- [RFC4120]\r
1364                -- The checksum key is the armor key, the checksum\r
1365                -- type is the required checksum type for the enctype of\r
1366                -- the armor key, and the key usage number is\r
1367                -- KEY_USAGE_FAST_REA_CHKSUM.\r
1368            enc-fast-req [2] EncryptedData, -- KrbFastReq --\r
1369                -- The encryption key is the armor key, and the key usage\r
1370                -- number is KEY_USAGE_FAST_ENC.\r
1371            ...\r
1372        }\r
1374        KEY_USAGE_FAST_REA_CHKSUM          TBA\r
1375        KEY_USAGE_FAST_ENC                 TBA\r
1377    The PA-FX-FAST-REQUEST structure contains a KrbFastArmoredReq type.\r
1378    The KrbFastArmoredReq encapsulates the encrypted padata.\r
1380    The enc-fast-req field contains an encrypted KrbFastReq structure.\r
1381    The armor key is used to encrypt the KrbFastReq structure, and the\r
1382    key usage number for that encryption is KEY_USAGE_FAST_ARMOR.\r
1384         KEY_USAGE_FAST_ARMOR               TBA\r
1386    The armor key is selected as follows:\r
1388    o  In an AS request, the armor field in the KrbFastArmoredReq\r
1389       structure MUST be present and the armor key is identified\r
1390       according to the specification of the armor type.\r
1392    o  In a TGS request, the armor field in the KrbFastArmoredReq\r
1393       structure MUST NOT be present and the subkey in the AP-REQ\r
1394       authenticator in the PA-TGS-REQ PA-DATA MUST be present.  In this\r
1398 Zhu & Hartman           Expires January 15, 2009               [Page 25]\r
1399 \f\r
1400 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1403       case, the armor key is that subkey in the AP-REQ authenticator.\r
1405    The req-checksum field contains a checksum that is performed over the\r
1406    type KDC-REQ-BODY for the req-body field of the KDC-REQ [RFC4120]\r
1407    structure of the containing message.  The checksum key is the armor\r
1408    key, and the checksum type is the required checksum type for the\r
1409    enctype of the armor key per [RFC3961].  This checksum is included in\r
1410    order to bind the FAST data to the outer request.  A KDC that\r
1411    implements FAST will ignore the outer request, but including a\r
1412    checksum is relatively cheap and may prevent confusing behavior.\r
1414    The KrbFastReq structure contains the following information:\r
1416         KrbFastReq ::= SEQUENCE {\r
1417             fast-options [0] FastOptions,\r
1418                 -- Additional options.\r
1419             padata       [1] SEQUENCE OF PA-DATA,\r
1420                 -- padata typed holes.\r
1421             req-body     [2] KDC-REQ-BODY,\r
1422                 -- Contains the KDC request body as defined in Section\r
1423                 -- 5.4.1 of [RFC4120].\r
1424                 -- This req-body field is preferred over the outer field\r
1425                 -- in the KDC request.\r
1426              ...\r
1427         }\r
1429    The fast-options field indicates various options that are to modify\r
1430    the behavior of the KDC.  The following options are defined:\r
1432         FastOptions ::= KerberosFlags\r
1433             -- reserved(0),\r
1434             -- anonymous(1),\r
1435             -- kdc-referrals(16)\r
1438       Bits    Name          Description\r
1439      -----------------------------------------------------------------\r
1440       0     RESERVED        Reserved for future expansion of this field.\r
1441       1     anonymous       Requesting the KDC to hide client names in\r
1442                             the KDC response, as described next in this\r
1443                             section.\r
1444       16    kdc-referrals   Requesting the KDC to follow referrals, as\r
1445                             described next in this section.\r
1447    Bits 1 through 15 (with bit 2 and bit 15 included) are critical\r
1448    options.  If the KDC does not support a critical option, it MUST fail\r
1449    the request with KDC_ERR_UNKNOWN_CRITICAL_FAST_OPTIONS (there is no\r
1450    accompanying e-data defined in this document for this error code).\r
1454 Zhu & Hartman           Expires January 15, 2009               [Page 26]\r
1455 \f\r
1456 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1459    Bit 16 and onward (with bit 16 included) are non-critical options.\r
1460    KDCs conforming to this specification ignores unknown non-critical\r
1461    options.\r
1463         KDC_ERR_UNKNOWN_FAST_OPTIONS       TBA\r
1465    The anonymous Option\r
1467       The Kerberos response defined in [RFC4120] contains the client\r
1468       identity in clear text, This makes traffic analysis\r
1469       straightforward.  The anonymous option is designed to complicate\r
1470       traffic analysis.  If the anonymous option is set, the KDC\r
1471       implementing PA_FX_FAST MUST identify the client as the anonymous\r
1472       principal [KRB-ANON] in the KDC reply and the error response.\r
1473       Hence this option is set by the client if it wishes to conceal the\r
1474       client identity in the KDC response.  A conforming KD ignores the\r
1475       client principal name in the outer KDC-REQ-BODY field, and\r
1476       identifies the client using the cname and crealm fields in the\r
1477       req-body field of the KrbFastReq structure.\r
1479    The kdc-referrals Option\r
1481       The Kerberos client described in [RFC4120] has to request referral\r
1482       TGTs along the authentication path in order to get a service\r
1483       ticket for the target service.  The Kerberos client described in\r
1484       the [REFERRALS] need to contact the AS specified in the error\r
1485       response in order to complete client referrals.  The kdc-referrals\r
1486       option is designed to minimize the number of messages that need to\r
1487       be processed by the client.  This option is useful when, for\r
1488       example, the client may contact the KDC via a satellite link that\r
1489       has high network latency, or the client has limited computational\r
1490       capabilities.  If the kdc-referrals option is set, the KDC that\r
1491       honors this option acts as the client to follow AS referrals and\r
1492       TGS referrals [REFERRALS], and return the service ticket to the\r
1493       named server principal in the client request using the reply key\r
1494       expected by the client.  The kdc-referrals option can be\r
1495       implemented when the KDC knows the reply key.  The KDC can ignore\r
1496       kdc-referrals option when it does not understand it or it does not\r
1497       allow this option based on local policy.  The client SHOULD be\r
1498       able to process the KDC responses when this option is not honored\r
1499       by the KDC.\r
1501    The padata field contains a list of PA-DATA structures as described\r
1502    in Section 5.2.7 of [RFC4120].  These PA-DATA structures can contain\r
1503    FAST factors.  They can also be used as generic typed-holes to\r
1504    contain data not intended for proving the client's identity or\r
1505    establishing a reply key, but for protocol extensibility.\r
1510 Zhu & Hartman           Expires January 15, 2009               [Page 27]\r
1511 \f\r
1512 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1515    The KDC-REQ-BODY in the FAST structure is used in preference to the\r
1516    KDC-REQ-BODY outside of the FAST pre-authentication.  The outer KDC-\r
1517    REQ-BODY structure SHOULD be filled in for backwards compatibility\r
1518    with KDCs that do not support FAST.  A conforming KDC ignores the\r
1519    outer KDC-REQ-BODY field in the KDC request.\r
1521 6.5.3.  FAST Response\r
1523    The KDC that supports the PA_FX_FAST padata MUST include a PA_FX_FAST\r
1524    padata element in the KDC reply.  In the case of an error, the\r
1525    PA_FX_FAST padata is included in the KDC responses according to\r
1526    Section 6.5.4.\r
1528    The corresponding padata-value field [RFC4120] for the PA_FX_FAST in\r
1529    the KDC response contains the DER encoding of the ASN.1 type PA-FX-\r
1530    FAST-REPLY.\r
1532       PA-FX-FAST-REPLY ::= CHOICE {\r
1533           armored-data [0] KrbFastArmoredRep,\r
1534           ...\r
1535       }\r
1537       KrbFastArmoredRep ::= SEQUENCE {\r
1538           enc-fast-rep      [0] EncryptedData, -- KrbFastResponse --\r
1539               -- The encryption key is the armor key in the request, and\r
1540               -- the key usage number is KEY_USAGE_FAST_REP.\r
1541           ...\r
1542       }\r
1543       KEY_USAGE_FAST_REP                 TBA\r
1545    The PA-FX-FAST-REPLY structure contains a KrbFastArmoredRep\r
1546    structure.  The KrbFastArmoredRep structure encapsulates the padata\r
1547    in the KDC reply in the encrypted form.  The KrbFastResponse is\r
1548    encrypted with the armor key used in the corresponding request, and\r
1549    the key usage number is KEY_USAGE_FAST_REP.\r
1551    The Kerberos client who does not receive a PA-FX-FAST-REPLY in the\r
1552    KDC response MUST support a local policy that rejects the response.\r
1553    Clients MAY also support policies that fall back to other mechanisms\r
1554    or that do not use pre-authentication when FAST is unavailable.  It\r
1555    is important to consider the potential downgrade attacks when\r
1556    deploying such a policy.\r
1558    The KrbFastResponse structure contains the following information:\r
1566 Zhu & Hartman           Expires January 15, 2009               [Page 28]\r
1567 \f\r
1568 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1571      KrbFastResponse ::= SEQUENCE {\r
1572          padata      [0] SEQUENCE OF PA-DATA,\r
1573              -- padata typed holes.\r
1574          rep-key     [1] EncryptionKey OPTIONAL,\r
1575              -- This, if present, replaces the reply key for AS and TGS.\r
1576              -- MUST be absent in KRB-ERROR.\r
1577          finished    [2] KrbFastFinished OPTIONAL,\r
1578              -- MUST be present if the client is authenticated,\r
1579              -- absent otherwise.\r
1580              -- Typically this is present if and only if the containing\r
1581              -- message is the last one in a conversation.\r
1582          ...\r
1583      }\r
1585    The padata field in the KrbFastResponse structure contains a list of\r
1586    PA-DATA structures as described in Section 5.2.7 of [RFC4120].  These\r
1587    PA-DATA structures are used to carry data advancing the exchange\r
1588    specific for the FAST factors.  They can also be used as generic\r
1589    typed-holes for protocol extensibility.\r
1591    The rep-key field, if present, contains the reply key that is used to\r
1592    encrypted the KDC reply.  The rep-key field MUST be absent in the\r
1593    case where an error occurs.  The enctype of the rep-key is the\r
1594    strongest mutually supported by the KDC and the client.\r
1596    The finished field contains a KrbFastFinished structure.  It is\r
1597    filled by the KDC in the final message in the conversation; it MUST\r
1598    be absent otherwise.  In other words, this field can only be present\r
1599    in an AS-REP or a TGS-REP when a ticket is returned.\r
1601    The KrbFastFinished structure contains the following information:\r
1603         KrbFastFinished ::= SEQUENCE {\r
1604             timestamp   [0] KerberosTime,\r
1605             usec        [1] Microseconds,\r
1606                 -- timestamp and usec represent the time on the KDC when\r
1607                 -- the reply was generated.\r
1608             crealm      [2] Realm,\r
1609             cname       [3] PrincipalName,\r
1610                 -- Contains the client realm and the client name.\r
1611             checksum    [4] Checksum,\r
1612                 -- Checksum performed over all the messages in the\r
1613                 -- conversation, except the containing message.\r
1614                 -- The checksum key is the binding key as defined in\r
1615                 -- Section 6.3, and the checksum type is the required\r
1616                 -- checksum type of the binding key.\r
1617             ...\r
1618         }\r
1622 Zhu & Hartman           Expires January 15, 2009               [Page 29]\r
1623 \f\r
1624 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1627         KEY_USAGE_FAST_FINISHED            TBA\r
1629    The timestamp and usec fields represent the time on the KDC when the\r
1630    reply ticket was generated, these fields have the same semantics as\r
1631    the corresponding-identically-named fields in Section 5.6.1 of\r
1632    [RFC4120].  The client MUST use the KDC's time in these fields\r
1633    thereafter when using the returned ticket.  Note that the KDC's time\r
1634    in AS-REP may not match the authtime in the reply ticket if the kdc-\r
1635    referrals option is requested and honored by the KDC.\r
1637    The cname and crealm fields identify the authenticated client.\r
1639    The checksum field contains a checksum of all the messages in the\r
1640    conversation prior to the containing message (the containing message\r
1641    is excluded).  The checksum key is the binding key as defined in\r
1642    Section 6.3, and the checksum type is the required checksum type of\r
1643    the enctype of that key, and the key usage number is\r
1644    KEY_USAGE_FAST_FINISHED. [[anchor9: Examples would be good here; what\r
1645    all goes into the checksum?]]\r
1647    When FAST padata is included, the PA-FX-COOKIE padata as defined in\r
1648    Section 6.3 MUST also be included if the KDC expects at least one\r
1649    more message from the client in order to complete the authentication.\r
1651 6.5.4.  Authenticated Kerberos Error Messages using Kerberos FAST\r
1653    If the Kerberos FAST padata was included in the request, unless\r
1654    otherwise specified, the e-data field of the KRB-ERROR message\r
1655    [RFC4120] contains the ASN.1 DER encoding of the type METHOD-DATA\r
1656    [RFC4120] and a PA_FX_FAST is included in the METHOD-DATA.  The KDC\r
1657    MUST include all the padata elements such as PA-ETYPE-INFO2 and\r
1658    padata elments that indicate acceptable pre-authentication mechanisms\r
1659    [RFC4120] and in the KrbFastResponse structure.\r
1661    If the Kerberos FAST padata is included in the request but not\r
1662    included in the error reply, it is a matter of the local policy on\r
1663    the client to accept the information in the error message without\r
1664    integrity protection.  The Kerberos client MAY process an error\r
1665    message without a PA-FX-FAST-REPLY, if that is only intended to\r
1666    return better error information to the application, typically for\r
1667    trouble-shooting purposes.\r
1669    In the cases where the e-data field of the KRB-ERROR message is\r
1670    expected to carry a TYPED-DATA [RFC4120] element, the\r
1671    PA_FX_TYPED_DATA padata is included in the KrbFastResponse structure\r
1672    to encapsulate the TYPED-DATA [RFC4120] elements.  For example, the\r
1673    TD_TRUSTED_CERTIFIERS structure is expected to be in the KRB-ERROR\r
1674    message when the error code is KDC_ERR_CANT_VERIFY_CERTIFICATE\r
1678 Zhu & Hartman           Expires January 15, 2009               [Page 30]\r
1679 \f\r
1680 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1683    [RFC4556].\r
1685         PA_FX_TYPED_DATA                   TBA\r
1686             -- This is the padata element that encapsulates a TYPED-DATA\r
1687             -- structure.\r
1689    The corresponding padata-value for the PA_FX_TYPED_DATA padata type\r
1690    contains the DER encoding of the ASN.1 type TYPED-DATA [RFC4120].\r
1692 6.5.5.  The Encrypted Challenge FAST Factor\r
1694    The encrypted challenge FAST factor authenticates a client using the\r
1695    client's long-term key.  This factor works similarly to the encrypted\r
1696    time stamp pre-authentication option described in [RFC4120].  The\r
1697    client encrypts a structure containing a timestamp in the challenge\r
1698    key.  The challenge key is KRB-FX-CF2(long_term_key, armor_key,\r
1699    "challengelongterm", "challengearmor").  Because the armor key is\r
1700    fresh and random, the challenge key is fresh and random.  The only\r
1701    purpose of the timestamp is to limit the validity of the\r
1702    authentication so that a request cannot be replayed.  A client MAY\r
1703    base the timestamp based on the KDC time in a KDC error and need not\r
1704    maintain accurate time synchronization itself.  If a client bases its\r
1705    time on an untrusted source, an attacker may trick the client into\r
1706    producing an authentication request that is valid at some future\r
1707    time.  The attacker may be able to use this authentication request to\r
1708    make it appear that a client has authenticated at that future time.\r
1709    If ticket-based armor is used, then the lifetime of the ticket will\r
1710    limit the window in which an attacker can make the client appear to\r
1711    have authenticated.  For many situations, the ability of an attacker\r
1712    to cause a client to appear to have authenticated is not a\r
1713    significant concern; the ability to avoid requiring time\r
1714    synchronization on clients is more valuable.\r
1716    The client sends a padata of type PA_ENCRYPTED_CHALLENGE the\r
1717    corresponding padata-value contains the DER encoding of ASN.1 type\r
1718    EncryptedChallenge.\r
1720       EncryptedChallenge ::= EncryptedData\r
1721               -- Encrypted PA-ENC-TS-ENC, encrypted in the challenge key\r
1722               -- using key usage KEY_USAGE_ENC_CHALLENGE_CLIENT for the\r
1723               --  client and KEY_USAGE_ENC_CHALLENGE_KDC for the KDC.\r
1725       PA_ENCRYPTED_CHALLENGE          TBA\r
1726       KEY_USAGE_ENC_CHALLENGE_CLIENT  TBA\r
1727       KEY_USAGE_ENC_CHALLENGE_KDC     TBA\r
1729    The client includes some time stamp reasonably close to the KDC's\r
1730    current time and encrypts it in the challenge key.  Clients MAY use\r
1734 Zhu & Hartman           Expires January 15, 2009               [Page 31]\r
1735 \f\r
1736 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1739    the current time; doing so prevents the exposure where an attacker\r
1740    can cause a client to appear to authenticate in the future.  The\r
1741    client sends the request including this factor.\r
1743    On receiving an AS-REQ containing the PA_ENCRYPTED_CHALLENGE fast\r
1744    factor, the KDC decrypts the timestamp.  If the decryption fails the\r
1745    KDC SHOULD return KDC_ERR_PREAUTH_FAILED, including etype-info2 in\r
1746    the error [[anchor11: Or should this be KRB_APP_ERR_MODIFIED?]].  The\r
1747    KDC confirms that the timestamp falls within its current clock skew\r
1748    returning KRB_APP_ERR_SKEW if not.  The KDC then SHOULD check to see\r
1749    if the encrypted challenge is a replay.  The KDC MUST NOT consider\r
1750    two encrypted challenges replays simply because the time stamps are\r
1751    the same; to be a replay, the ciphertext MUST be identical.  It is\r
1752    not clear that RFC 3961 prevents encryption systems for which an\r
1753    attacker can transform one ciphertext into a different ciphertext\r
1754    yielding an identical plaintext.  So, it may not be safe to base\r
1755    replay detection on the ciphertext in the general case.  However the\r
1756    FAST tunnel provides integrity protection so requiring ciphertext be\r
1757    identical is secure in this instance.  Allowing clients to re-use\r
1758    time stamps avoids requiring that clients maintain state about which\r
1759    time stamps have been used.\r
1761    If the KDC accepts the encrypted challenge, it MUST include a padata\r
1762    element of type PA_ENCRYPTED_CHALLENGE.  The KDC encrypts its current\r
1763    time in the challenge key.  The KDC MUST replace the reply key before\r
1764    issuing a ticket. [[anchor12: I'd like to say that the KDC replaces\r
1765    its reply key by this point.  However we need to decide at what\r
1766    points the FAST mechanism for replacing the reply key can be used and\r
1767    how that interacts with this.]]The client MUST check that the\r
1768    timestamp decrypts properly.  The client MAY check that the timestamp\r
1769    is in some reasonable skew of the current time.  The client MUST NOT\r
1770    require that the timestamp be identical to the timestamp in the\r
1771    issued credentials or the returned message.\r
1773    The encrypted challenge FAST factor provides the following\r
1774    facilities: client-authentication, KDC authentication.  It does not\r
1775    provide the strengthening-reply-key facility.  The security\r
1776    considerations section of this document provides an explanation why\r
1777    the security requirements are met.\r
1779    Conforming implementations MUST support the encrypted challenge FAST\r
1780    factor.\r
1782 6.6.  Authentication Strength Indication\r
1784    Implementations that have pre-authentication mechanisms offering\r
1785    significantly different strengths of client authentication MAY choose\r
1786    to keep track of the strength of the authentication used as an input\r
1790 Zhu & Hartman           Expires January 15, 2009               [Page 32]\r
1791 \f\r
1792 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1795    into policy decisions.  For example, some principals might require\r
1796    strong pre-authentication, while less sensitive principals can use\r
1797    relatively weak forms of pre-authentication like encrypted timestamp.\r
1799    An AuthorizationData data type AD-Authentication-Strength is defined\r
1800    for this purpose.\r
1802         AD-authentication-strength         TBA\r
1804    The corresponding ad-data field contains the DER encoding of the pre-\r
1805    authentication data set as defined in Section 6.4.  This set contains\r
1806    all the pre-authentication mechanisms that were used to authenticate\r
1807    the client.  If only one pre-authentication mechanism was used to\r
1808    authenticate the client, the pre-authentication set contains one\r
1809    element.\r
1811    The AD-authentication-strength element MUST be included in the AD-IF-\r
1812    RELEVANT, thus it can be ignored if it is unknown to the receiver.\r
1815 7.  IANA Considerations\r
1817    This document defines several new pa-data types, key usages and error\r
1818    codes.  In addition it would be good to track which pa-data items are\r
1819    only to be used as FAST factors.\r
1822 8.  Security Considerations\r
1824    The kdc-referrals option in the Kerberos FAST padata requests the KDC\r
1825    to act as the client to follow referrals.  This can overload the KDC.\r
1826    To limit the damages of denied of service using this option, KDCs MAY\r
1827    restrict the number of simultaneous active requests with this option\r
1828    for any given client principal.\r
1830    Because the client secrets are known only to the client and the KDC,\r
1831    the verification of the authenticated timestamp proves the client's\r
1832    identity, the verification of the authenticated timestamp in the KDC\r
1833    reply proves that the expected KDC responded.  The encrypted reply\r
1834    key is contained in the rep-key in the PA-FX-FAST-REPLY.  Therefore,\r
1835    the authenticated timestamp FAST factor as a pre-authentication\r
1836    mechanism offers the following facilities: client-authentication,\r
1837    replacing-reply-key, KDC-authentication.  There is no un-\r
1838    authenticated clear text introduced by the authenticated timestamp\r
1839    FAST factor.\r
1846 Zhu & Hartman           Expires January 15, 2009               [Page 33]\r
1847 \f\r
1848 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1851 9.  Acknowledgements\r
1853    Sam Hartman would like to thank the MIT Kerberos Consortium for its\r
1854    funding of his time on this project prior to April 2008.\r
1856    Several suggestions from Jeffery Hutzman based on early revisions of\r
1857    this documents led to significant improvements of this document.\r
1859    The proposal to ask one KDC to chase down the referrals and return\r
1860    the final ticket is based on requirements in [ID.CROSS].\r
1862    Joel Webber had a proposal for a mechanism similar to FAST that\r
1863    created a protected tunnel for Kerberos pre-authentication.\r
1866 10.  References\r
1868 10.1.  Normative References\r
1870    [KRB-ANON]\r
1871               Zhu, L. and P. Leach, "Kerberos Anonymity Support",\r
1872               draft-ietf-krb-wg-anon-04.txt (work in progress), 2007.\r
1874    [REFERRALS]\r
1875               Raeburn, K. and L. Zhu, "Generating KDC Referrals to\r
1876               Locate Kerberos Realms",\r
1877               draft-ietf-krb-wg-kerberos-referrals-10.txt (work in\r
1878               progress), 2007.\r
1880    [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate\r
1881               Requirement Levels", BCP 14, RFC 2119, March 1997.\r
1883    [RFC3961]  Raeburn, K., "Encryption and Checksum Specifications for\r
1884               Kerberos 5", RFC 3961, February 2005.\r
1886    [RFC4120]  Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The\r
1887               Kerberos Network Authentication Service (V5)", RFC 4120,\r
1888               July 2005.\r
1890    [RFC4556]  Zhu, L. and B. Tung, "Public Key Cryptography for Initial\r
1891               Authentication in Kerberos (PKINIT)", RFC 4556, June 2006.\r
1894 Zhu & Hartman           Expires January 15, 2009               [Page 34]\r
1895 \f\r
1896 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1899    [SHA2]     National Institute of Standards and Technology, "Secure \r
1900               Hash Standard (SHS)", Federal Information Processing \r
1901               Standards Publication 180-2, August 2002.  \r
1903    [X680]     ITU-T Recommendation X.680 (2002) | ISO/IEC 8824-1:2002,\r
1904               Information technology - Abstract Syntax Notation One\r
1905               (ASN.1): Specification of basic notation.\r
1906    \r
1907    [X690]     ITU-T Recommendation X.690 (2002) | ISO/IEC 8825-1:2002,\r
1908               Information technology - ASN.1 encoding Rules:\r
1909               Specification of Basic Encoding Rules (BER), Canonical\r
1910               Encoding Rules (CER) and Distinguished Encoding Rules\r
1911               (DER).              \r
1913 10.2.  Informative References\r
1915    [EKE]      Bellovin, S. M. and M. Merritt. "Augmented \r
1916               Encrypted Key Exchange: A Password-Based Protocol Secure \r
1917               Against Dictionary Attacks and Password File Compromise". \r
1918               Proceedings of the 1st ACM Conference on Computer and \r
1919               Communications Security, ACM Press, November 1993.\r
1920    \r
1921    [HKDF]     Dang, Q. and P. Polk, draft-dang-nistkdf, work in \r
1922               progress.\r
1924    [IEEE1363.2] \r
1925               IEEE P1363.2: Password-Based Public-Key Cryptography, \r
1926               2004.\r
1928    [ID.CROSS]\r
1929               Sakane, S., Zrelli, S., and M. Ishiyama , "Problem\r
1930               Statement on the Operation of Kerberos in a Specific\r
1931               System", draft-sakane-krb-cross-problem-statement-02.txt\r
1932               (work in progress), April 2007.\r
1934    [KRB-WG.SAM]\r
1936               Hornstein, K., Renard, K., Neuman, C., and G. Zorn,\r
1937               "Integrating Single-use Authentication Mechanisms with\r
1938               Kerberos", draft-ietf-krb-wg-kerberos-sam-02.txt (work in\r
1939               progress), October 2003.\r
1942 Appendix A.  Change History\r
1944    RFC editor, please remove this section before publication.\r
1946 A.1.  Changes since 07\r
1948       Propose replacement of authenticated timestamp with encrypted\r
1949       challenge.  The desire to avoid clients needing time\r
1950       synchronization and to simply the factor.\r
1951       Add a requirement that any FAST armor scheme must provide a fresh\r
1952       key for each conversation.  This allows us to assume that anything\r
1953       encrypted/integrity protected in the right key is fresh and not\r
1954       subject to cross-conversation cut&paste.\r
1955       Removed heartbeat padata.  The KDC will double up messages if it\r
1956       needs to; the client simply sends its message and waits for the\r
1957       next response.\r
1958       Define PA_AUTHENTICATION_SET_SELECTED\r
1959       Clarify a KDC cannot ignore padata is has clamed to support\r
1961 A.2.  Changes since 06\r
1963       Note that even for replace reply key it is likely that the side\r
1964       using the mechanism will know that the other side supports it.\r
1965       Since it is reasonablly unlikely we'll need a container mechanism\r
1966       other than FAST itself, we don't need to optimize for that case.\r
1967       So, we want to optimize for implementation simplicity.  Thus if\r
1968       you do have such a container mechanism interacting with\r
1969       authentication sets we'll assume that the hint need to describe\r
1970       hints for all contained mechanisms.  This closes out a long-\r
1971       standing issue.\r
1972       Write up what Sam believes is the consensus on UI and prompts in\r
1973       the authentication set: clients MAY assume that they have all the\r
1974       UI information they need.\r
1977 Appendix B.  ASN.1 module\r
1979      KerberosPreauthFramework {\r
1980            iso(1) identified-organization(3) dod(6) internet(1)\r
1984 Zhu & Hartman           Expires January 15, 2009               [Page 35]\r
1985 \f\r
1986 Internet-Draft         Kerberos Preauth Framework              July 2008\r
1989            security(5) kerberosV5(2) modules(4) preauth-framework(3)\r
1990      } DEFINITIONS EXPLICIT TAGS ::= BEGIN\r
1992      IMPORTS\r
1993           KerberosTime, PrincipalName, Realm, EncryptionKey, Checksum,\r
1994           Int32, EncryptedData, PA-ENC-TS-ENC, PA-DATA, KDC-REQ-BODY,\r
1995           Microseconds, KerberosFlags\r
1996                FROM KerberosV5Spec2 { iso(1) identified-organization(3)\r
1997                  dod(6) internet(1) security(5) kerberosV5(2)\r
1998                  modules(4) krb5spec2(2) };\r
1999                  -- as defined in RFC 4120.\r
2001      PA-FX-COOKIE ::= SEQUENCE {\r
2002          conversationId  [0] OCTET STRING,\r
2003             -- Contains the identifier of this conversation. This field\r
2004             -- must contain the same value for all the messages\r
2005             -- within the same conversation.\r
2006          enc-binding-key [1] EncryptedData OPTIONAL,\r
2007                          -- EncryptionKey --\r
2008             -- This field is present when and only when a FAST\r
2009             -- padata as defined in Section 6.5 is included.\r
2010             -- The encrypted data, when decrypted, contains an\r
2011             -- EncryptionKey structure.\r
2012             -- This encryption key is encrypted using the armor key\r
2013             -- (defined in Section 6.5.1), and the key usage for the\r
2014             -- encryption is KEY_USAGE_FAST_BINDING_KEY.\r
2015             -- Present only once in a converstation.\r
2016          cookie          [2] OCTET STRING OPTIONAL,\r
2017             -- Opaque data, for use to associate all the messages in\r
2018             -- a single conversation between the client and the KDC.\r
2019             -- This is generated by the KDC and the client MUST copy\r
2020             -- the exact cookie encapsulated in a PA_FX_COOKIE data\r
2021             -- element into the next message of the same conversation.\r
2022          ...\r
2023      }\r
2025      PA-AUTHENTICATION-SET ::= SEQUENCE OF PA-AUTHENTICATION-SET-ELEM\r
2027      PA-AUTHENTICATION-SET-ELEM ::= SEQUENCE {\r
2028          pa-type      [0] Int32,\r
2029              -- same as padata-type.\r
2030          pa-hint      [1] OCTET STRING OPTIONAL,\r
2031          pa-value  [2] OCTET STRING OPTIONAL,\r
2032          ...\r
2033      }\r
2035      KrbFastArmor ::= SEQUENCE {\r
2036          armor-type   [0] Int32,\r
2040 Zhu & Hartman           Expires January 15, 2009               [Page 36]\r
2041 \f\r
2042 Internet-Draft         Kerberos Preauth Framework              July 2008\r
2045              -- Type of the armor.\r
2046          armor-value  [1] OCTET STRING,\r
2047              -- Value of the armor.\r
2048          ...\r
2049      }\r
2051      PA-FX-FAST-REQUEST ::= CHOICE {\r
2052          armored-data [0] KrbFastArmoredReq,\r
2053          ...\r
2054      }\r
2056      KrbFastArmoredReq ::= SEQUENCE {\r
2057          armor        [0] KrbFastArmor OPTIONAL,\r
2058              -- Contains the armor that identifies the armor key.\r
2059              -- MUST be present in AS-REQ.\r
2060              -- MUST be absent in TGS-REQ.\r
2061          req-checksum [1] Checksum,\r
2062              -- Checksum performed over the type KDC-REQ-BODY for\r
2063              -- the req-body field of the KDC-REQ structure defined in\r
2064              -- [RFC4120]\r
2065              -- The checksum key is the armor key, the checksum\r
2066              -- type is the required checksum type for the enctype of\r
2067              -- the armor key, and the key usage number is\r
2068              -- KEY_USAGE_FAST_REA_CHKSUM.\r
2069          enc-fast-req [2] EncryptedData, -- KrbFastReq --\r
2070              -- The encryption key is the armor key, and the key usage\r
2071              -- number is KEY_USAGE_FAST_ENC.\r
2072          ...\r
2073      }\r
2075      KrbFastReq ::= SEQUENCE {\r
2076          fast-options [0] FastOptions,\r
2077              -- Additional options.\r
2078          padata       [1] SEQUENCE OF PA-DATA,\r
2079              -- padata typed holes.\r
2080          req-body     [2] KDC-REQ-BODY,\r
2081              -- Contains the KDC request body as defined in Section\r
2082              -- 5.4.1 of [RFC4120].\r
2083              -- This req-body field is preferred over the outer field\r
2084              -- in the KDC request.\r
2085           ...\r
2086      }\r
2088      FastOptions ::= KerberosFlags\r
2089          -- reserved(0),\r
2090          -- anonymous(1),\r
2091          -- kdc-referrals(16)\r
2096 Zhu & Hartman           Expires January 15, 2009               [Page 37]\r
2097 \f\r
2098 Internet-Draft         Kerberos Preauth Framework              July 2008\r
2101      PA-FX-FAST-REPLY ::= CHOICE {\r
2102          armored-data [0] KrbFastArmoredRep,\r
2103          ...\r
2104      }\r
2106      KrbFastArmoredRep ::= SEQUENCE {\r
2107          enc-fast-rep      [0] EncryptedData, -- KrbFastResponse --\r
2108              -- The encryption key is the armor key in the request, and\r
2109              -- the key usage number is KEY_USAGE_FAST_REP.\r
2110          ...\r
2111      }\r
2113      KrbFastResponse ::= SEQUENCE {\r
2114          padata      [0] SEQUENCE OF PA-DATA,\r
2115              -- padata typed holes.\r
2116          rep-key     [1] EncryptionKey OPTIONAL,\r
2117              -- This, if present, replaces the reply key for AS and TGS.\r
2118              -- MUST be absent in KRB-ERROR.\r
2119          finished    [2] KrbFastFinished OPTIONAL,\r
2120              -- MUST be present if the client is authenticated,\r
2121              -- absent otherwise.\r
2122              -- Typically this is present if and only if the containing\r
2123              -- message is the last one in a conversation.\r
2124          ...\r
2125      }\r
2127      KrbFastFinished ::= SEQUENCE {\r
2128          timestamp   [0] KerberosTime,\r
2129          usec        [1] Microseconds,\r
2130              -- timestamp and usec represent the time on the KDC when\r
2131              -- the reply was generated.\r
2132          crealm      [2] Realm,\r
2133          cname       [3] PrincipalName,\r
2134              -- Contains the client realm and the client name.\r
2135          checksum    [4] Checksum,\r
2136              -- Checksum performed over all the messages in the\r
2137              -- conversation, except the containing message.\r
2138              -- The checksum key is the binding key as defined in\r
2139              -- Section 6.3, and the checksum type is the required\r
2140              -- checksum type of the binding key.\r
2141          ...\r
2142      }\r
2144      EncryptedChallenge ::= EncryptedData\r
2145              -- Encrypted PA-ENC-TS-ENC, encrypted in the challenge key\r
2146              -- using key usage KEY_USAGE_ENC_CHALLENGE_CLIENT for the\r
2147              --  client and KEY_USAGE_ENC_CHALLENGE_KDC for the KDC.\r
2148      END\r
2152 Zhu & Hartman           Expires January 15, 2009               [Page 38]\r
2153 \f\r
2154 Internet-Draft         Kerberos Preauth Framework              July 2008\r
2157 Authors' Addresses\r
2159    Larry Zhu\r
2160    Microsoft Corporation\r
2161    One Microsoft Way\r
2162    Redmond, WA  98052\r
2163    US\r
2165    Email: lzhu@microsoft.com\r
2168    Sam hartman\r
2169    Painless Security\r
2171    Email: hartmans-ietf@mit.edu\r
2208 Zhu & Hartman           Expires January 15, 2009               [Page 39]\r
2209 \f\r
2210 Internet-Draft         Kerberos Preauth Framework              July 2008\r
2213 Full Copyright Statement\r
2215    Copyright (C) The IETF Trust (2008).\r
2217    This document is subject to the rights, licenses and restrictions\r
2218    contained in BCP 78, and except as set forth therein, the authors\r
2219    retain all their rights.\r
2221    This document and the information contained herein are provided on an\r
2222    "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\r
2223    OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\r
2224    THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\r
2225    OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\r
2226    THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\r
2227    WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\r
2230 Intellectual Property\r
2232    The IETF takes no position regarding the validity or scope of any\r
2233    Intellectual Property Rights or other rights that might be claimed to\r
2234    pertain to the implementation or use of the technology described in\r
2235    this document or the extent to which any license under such rights\r
2236    might or might not be available; nor does it represent that it has\r
2237    made any independent effort to identify any such rights.  Information\r
2238    on the procedures with respect to rights in RFC documents can be\r
2239    found in BCP 78 and BCP 79.\r
2241    Copies of IPR disclosures made to the IETF Secretariat and any\r
2242    assurances of licenses to be made available, or the result of an\r
2243    attempt made to obtain a general license or permission for the use of\r
2244    such proprietary rights by implementers or users of this\r
2245    specification can be obtained from the IETF on-line IPR repository at\r
2246    http://www.ietf.org/ipr.\r
2248    The IETF invites any interested party to bring to its attention any\r
2249    copyrights, patents or patent applications, or other proprietary\r
2250    rights that may cover technology that may be required to implement\r
2251    this standard.  Please address the information to the IETF at\r
2252    ietf-ipr@ietf.org.\r
2264 Zhu & Hartman           Expires January 15, 2009               [Page 40]\r
2265 \f\r