2 draft-yu-krb-wg-kerberos-extensions-02.txt MIT
3 Expires: 25 April 2005 25 October 2004
6 The Kerberos Network Authentication Service (Version 5)
12 By submitting this Internet-Draft, I certify that any applicable
13 patent or other IPR claims of which I am aware have been disclosed,
14 or will be disclosed, and any of which I become aware will be
15 disclosed, in accordance with RFC 3668.
18 Internet-Drafts are working documents of the Internet Engineering
19 Task Force (IETF), its areas, and its working groups. Note that
20 other groups may also distribute working documents as Internet-
24 Internet-Drafts are draft documents valid for a maximum of six months
25 and may be updated, replaced, or obsoleted by other documents at any
26 time. It is inappropriate to use Internet-Drafts as reference
27 material or to cite them other than as "work in progress."
30 The list of current Internet-Drafts can be accessed at
33 http://www.ietf.org/ietf/1id-abstracts.txt
36 The list of Internet-Draft Shadow Directories can be accessed at
39 http://www.ietf.org/shadow.html
46 Copyright (C) The Internet Society (2004). All Rights Reserved.
52 This document describes version 5 of the Kerberos network
53 authentication protocol. It describes a framework to allow for
54 extensions to be made to the protocol without creating
55 interoperability problems.
58 Key Words for Requirements
61 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
62 "SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are
63 to be interpreted as described in RFC 2119.
69 Yu Expires: Apr 2005 [Page 1]
70 Internet-Draft yu-krb-extensions-02 25 Oct 2004
76 Status of This Memo .............................................. 1
77 Copyright Notice ................................................. 1
78 Abstract ......................................................... 1
79 Key Words for Requirements ....................................... 1
80 Table of Contents ................................................ 2
81 1. Introduction ................................................. 5
82 1.1. Kerberos Protocol Overview ................................. 5
83 1.2. Document Organization ...................................... 6
84 2. Compatibility Considerations ................................. 6
85 2.1. Extensibility .............................................. 7
86 2.2. Compatibility with RFC 1510 ................................ 7
87 2.3. Backwards Compatibility .................................... 7
88 2.4. 1.4.2. Sending Extensible Messages ......................... 8
89 2.5. Criticality ................................................ 8
90 2.6. Authenticating Cleartext Portions of Messages .............. 9
91 2.7. Capability Negotiation ..................................... 10
92 3. Use of ASN.1 in Kerberos ..................................... 10
93 3.1. Module Header .............................................. 11
94 3.2. Top-Level Type ............................................. 11
95 3.3. Previously Unused ASN.1 Notation (informative) ............. 12
96 3.3.1. Parameterized Types ...................................... 12
97 3.3.2. COMPONENTS OF Notation ................................... 12
98 3.3.3. Constraints .............................................. 12
99 3.4. New Types .................................................. 13
100 4. Basic Types .................................................. 14
101 4.1. Constrained Integer Types .................................. 14
102 4.2. KerberosTime ............................................... 15
103 4.3. KerberosString ............................................. 15
104 4.4. Language Tags .............................................. 16
105 4.5. KerberosFlags .............................................. 16
106 4.6. Typed Holes ................................................ 16
107 4.7. HostAddress and HostAddresses .............................. 17
108 4.7.1. Internet (IPv4) Addresses ................................ 17
109 4.7.2. Internet (IPv6) Addresses ................................ 17
110 4.7.3. DECnet Phase IV addresses ................................ 18
111 4.7.4. Netbios addresses ........................................ 18
112 4.7.5. Directional Addresses .................................... 18
113 5. Principals ................................................... 19
114 5.1. Name Types ................................................. 19
115 5.2. Principal Type Definition .................................. 19
116 5.3. Principal Name Reuse ....................................... 20
117 5.4. Realm Names ................................................ 20
118 5.5. Printable Representations of Principal Names ............... 21
119 5.6. Ticket-Granting Service Principal .......................... 21
120 5.6.1. Cross-Realm TGS Principals ............................... 21
121 6. Types Relating to Encryption ................................. 21
122 6.1. Assigned Numbers for Encryption ............................ 22
123 6.1.1. EType .................................................... 22
124 6.1.2. Key Usages ............................................... 22
127 Yu Expires: Apr 2005 [Page 2]
128 Internet-Draft yu-krb-extensions-02 25 Oct 2004
131 6.2. Which Key to Use ........................................... 23
132 6.3. EncryptionKey .............................................. 24
133 6.4. EncryptedData .............................................. 24
134 6.5. Checksums .................................................. 25
135 6.5.1. ChecksumOf ............................................... 26
136 6.5.2. Signed ................................................... 27
137 7. Tickets ...................................................... 27
138 7.1. Timestamps ................................................. 28
139 7.2. Ticket Flags ............................................... 28
140 7.2.1. Flags Relating to Initial Ticket Acquisition ............. 29
141 7.2.2. Invalid Tickets .......................................... 29
142 7.2.3. OK as Delegate ........................................... 30
143 7.2.4. Renewable Tickets ........................................ 30
144 7.2.5. Postdated Tickets ........................................ 31
145 7.2.6. Proxiable and Proxy Tickets .............................. 32
146 7.2.7. Forwarded and Forwardable Tickets ........................ 33
147 7.3. Transited Realms ........................................... 34
148 7.4. Authorization Data ......................................... 34
149 7.4.1. AD-IF-RELEVANT ........................................... 35
150 7.4.2. AD-KDCIssued ............................................. 35
151 7.4.3. AD-AND-OR ................................................ 37
152 7.4.4. AD-MANDATORY-FOR-KDC ..................................... 37
153 7.5. Encrypted Part of Ticket ................................... 37
154 7.6. Cleartext Part of Ticket ................................... 38
155 8. Credential Acquisition ....................................... 40
156 8.1. KDC-REQ .................................................... 40
157 8.2. PA-DATA .................................................... 46
158 8.3. KDC-REQ Processing ......................................... 46
159 8.3.1. Handling Replays ......................................... 46
160 8.3.2. Request Validation ....................................... 47
161 8.3.2.1. AS-REQ Authentication .................................. 47
162 8.3.2.2. TGS-REQ Authentication ................................. 47
163 8.3.2.3. Principal Validation ................................... 47
164 8.3.2.4. Checking For Revoked or Invalid Tickets ................ 48
165 8.3.3. Timestamp Handling ....................................... 48
166 8.3.3.1. AS-REQ Timestamp Processing ............................ 49
167 8.3.3.2. TGS-REQ Timestamp Processing ........................... 49
168 8.3.4. Handling Transited Realms ................................ 50
169 8.3.5. Address Processing ....................................... 50
170 8.3.6. Ticket Flag Processing ................................... 51
171 8.3.7. Key Selection ............................................ 52
172 8.3.7.1. Reply Key and Session Key Selection .................... 52
173 8.3.7.2. Ticket Key Selection ................................... 52
174 8.4. KDC-REP .................................................... 52
175 8.5. Reply Validation ........................................... 55
176 8.6. IP Transports .............................................. 55
177 8.6.1. UDP/IP transport ......................................... 55
178 8.6.2. TCP/IP transport ......................................... 56
179 8.6.3. KDC Discovery on IP Networks ............................. 57
180 8.6.3.1. DNS vs. Kerberos - Case Sensitivity of Realm Names ..... 57
181 8.6.3.2. DNS SRV records for KDC location ....................... 58
184 Yu Expires: Apr 2005 [Page 3]
185 Internet-Draft yu-krb-extensions-02 25 Oct 2004
188 8.6.3.3. KDC Discovery for Domain Style Realm Names on IP
189 Networks ............................................ 58
190 9. Errors ....................................................... 58
191 10. Session Key Exchange ........................................ 61
192 10.1. AP-REQ .................................................... 61
193 10.2. AP-REP .................................................... 63
194 11. Session Key Use ............................................. 65
195 11.1. KRB-SAFE .................................................. 65
196 11.2. KRB-PRIV .................................................. 65
197 11.3. KRB-CRED .................................................. 66
198 12. Security Considerations ..................................... 67
199 12.1. Time Synchronization ...................................... 67
200 12.2. Replays ................................................... 67
201 12.3. Principal Name Reuse ...................................... 67
202 12.4. Password Guessing ......................................... 67
203 12.5. Forward Secrecy ........................................... 67
204 12.6. Authorization ............................................. 68
205 12.7. Login Authentication ...................................... 68
206 13. IANA Considerations ......................................... 68
207 14. Acknowledgments ............................................. 69
208 Appendices ....................................................... 69
209 A. ASN.1 Module (Normative) ..................................... 69
210 B. Kerberos and Character Encodings (Informative) ...............103
211 C. Kerberos History (Informative) ...............................104
212 D. Notational Differences from [KCLAR] ..........................105
213 Normative References .............................................106
214 Informative References ...........................................106
215 Author's Address .................................................108
216 Full Copyright Statement .........................................108
241 Yu Expires: Apr 2005 [Page 4]
242 Internet-Draft yu-krb-extensions-02 25 Oct 2004
248 The Kerberos network authentication protocol is a trusted-third-party
249 protocol utilizing symmetric-key cryptography. It assumes that all
250 communications between parties in the protocol may be arbitrarily
251 tampered with or monitored, and that the security of the overall
252 system depends only on the effectiveness of the cryptographic
253 techniques and the secrecy of the cryptographic keys used. The
254 Kerberos protocol authenticates an application client's identity to
255 an application server, and likewise authenticates the application
256 server's identity to the application client. These assurances are
257 made possible by the client and the server sharing secrets with the
258 trusted third party: the Kerberos server, also known as the Key
259 Distribution Center (KDC). In addition, the protocol establishes an
260 ephemeral shared secret (the session key) between the client and the
261 server, allowing the protection of further communications between
265 The Kerberos protocol, as originally specified, provides insufficient
266 means for extending the protocol in a backwards-compatible way. This
267 deficiency has caused problems for interoperability. This document
268 describes a framework which enables backwards-compatible extensions
269 to the Kerberos protocol.
272 1.1. Kerberos Protocol Overview
275 Kerberos comprises three main sub-protocols: credentials acquisition,
276 session key exchange, and session key usage. A client acquires
277 credentials by asking the KDC for a credential for a service; the KDC
278 issues the credential, which contains a ticket and a session key.
279 The ticket, containing the client's identity, timestamps, expiration
280 time, and a session key, is a encrypted in a key known to the
281 application server. The KDC encrypts the credential using a key
282 known to the client, and transmits the credential to the client.
285 There are two means of requesting credentials: the Authentication
286 Service (AS) exchange, and the Ticket-Granting Service (TGS)
287 exchange. In the typical AS exchange, a client uses a password-
288 derived key to decrypt the response. In the TGS exchange, the KDC
289 behaves as an application server; the client authenticates to the TGS
290 by using a Ticket-Granting Ticket (TGT). The client usually obtains
291 the TGT by using the AS exchange.
294 Session key exchange consists of the client transmitting the ticket
295 to the application server, accompanied by an authenticator. The
296 authenticator contains a timestamp and additional data encrypted
297 using the ticket's session key. The application server decrypts the
298 ticket, extracting the session key. The application server then uses
299 the session key to decrypt the authenticator. Upon successful
300 decryption of the authenticator, the application server knows that
301 the data in the authenticator were sent by the client named in the
304 Yu Expires: Apr 2005 [Page 5]
305 Internet-Draft yu-krb-extensions-02 25 Oct 2004
308 associated ticket. Additionally, since authenticators expire more
309 quickly than tickets, the application server has some assurance that
310 the transaction is not a replay. The application server may send an
311 encrypted acknowledgment to the client, verifying its identity to the
315 Once session key exchange has occurred, the client and server may use
316 the established session key to protect further traffic. This
317 protection may consist of protection of integrity only, or of
318 protection of confidentiality and integrity. Additional measures
319 exist for a client to securely forward credentials to a server.
322 The entire scheme depends on loosely synchronized clocks.
323 Synchronization of the clock on the KDC with the application server
324 clock allows the application server to accurately determine whether a
325 credential is expired. Likewise, synchronization of the clock on the
326 client with the application server clock prevents replay attacks
327 utilizing the same credential. Careful design of the application
328 protocol may allow replay prevention without requiring client-server
329 clock synchronization.
332 After establishing a session key, application client and the
333 application server can exchange Kerberos protocol messages that use
334 the session key to protect the integrity or confidentiality of
335 communications between the client and the server. Additionally, the
336 client may forward credentials to the application server.
339 The credentials acquisition protocol takes place over specific,
340 defined transports (UDP and TCP). Application protocols define which
341 transport to use for the session key establishment protocol and for
342 messages using the session key; the application may choose to perform
343 its own encapsulation of the Kerberos messages, for example.
346 1.2. Document Organization
349 The remainder of this document begins by describing the general
350 frameworks for protocol extensibility, including whether to interpret
351 unknown extensions as critical. It then defines the protocol
352 messages and exchanges.
355 The definition of the Kerberos protocol uses Abstract Syntax Notation
356 One (ASN.1) [X680], which specifies notation for describing the
357 abstract content of protocol messages. This document defines a
358 number of base types using ASN.1; these base types subsequently
359 appear in multiple types which define actual protocol messages.
360 Definitions of principal names and of tickets, which are central to
361 the protocol, also appear preceding the protocol message definitions.
368 Yu Expires: Apr 2005 [Page 6]
369 Internet-Draft yu-krb-extensions-02 25 Oct 2004
372 2. Compatibility Considerations
378 In the past, significant interoperability problems have resulted from
379 conflicting assumptions about how the Kerberos protocol can be
380 extended. As the deployed base of Kerberos grows, the ability to
381 extend the Kerberos protocol becomes more important. In order to
382 ensure that vendors and the IETF can extend the protocol while
383 maintaining backwards compatibility, this document outlines a
384 framework for extending Kerberos.
387 Kerberos provides two general mechanisms for protocol extensibility.
388 Many protocol messages, including some defined in RFC 1510, contain
389 typed holes--sub-messages containing an octet string along with an
390 integer that identifies how to interpret the octet string. The
391 integer identifiers are registered centrally, but can be used both
392 for vendor extensions and for extensions standardized in the IETF.
393 This document adds typed holes to a number of messages which
394 previously lacked typed holes.
397 Many new messages defined in this document also contain ASN.1
398 extension markers. These markers allow future revisions of this
399 document to add additional elements to messages, for cases where
400 typed holes are inadequate for some reason. Because tag numbers and
401 position in a sequence need to be coordinated in order to maintain
402 interoperability, implementations MUST NOT include ASN.1 extensions
403 except when those extensions are specified by IETF standards-track
407 2.2. Compatibility with RFC 1510
410 Implementations of RFC 1510 did not use extensible ASN.1 types.
411 Sending additional fields not in RFC 1510 to these implementations
412 results in undefined behavior. Examples of this behavior are known
413 to include discarding messages with no error indications.
416 Where messages have been changed since RFC 1510, ASN.1 CHOICE types
417 are used; one alternative of the CHOICE provides a message which is
418 wire-encoding compatible with RFC 1510, and the other alternative
419 provides the new, extensible message.
422 Implementations sending new messages MUST ensure that the recipient
423 supports these new messages. Along with each extensible message is a
424 guideline for when that message MAY be used. IF that guideline is
425 followed, then the recipient is guaranteed to understand the message.
428 2.3. Backwards Compatibility
431 This document describes two sets (for the most part) of ASN.1 types.
432 The first set of types is wire-encoding compatible with RFC 1510 and
435 Yu Expires: Apr 2005 [Page 7]
436 Internet-Draft yu-krb-extensions-02 25 Oct 2004
439 [KCLAR]. The second set of types is the set of types enabling
440 extensibility. This second set may be referred to as
441 "extensibility-enabled types". [ need to make this consistent
445 A major difference between the new extensibility-enabled types and
446 the types for RFC 1510 compatibility is that the extensibility-
447 enabled types allow for the use of UTF-8 encodings in various
448 character strings in the protocol. Each party in the protocol must
449 have some knowledge of the capabilities of the other parties in the
450 protocol. There are methods for establishing this knowledge without
451 necessarily requiring explicit configuration.
454 An extensibility-enabled client can detect whether a KDC supports the
455 extensibility-enabled types by requesting an extensibility-enabled
456 reply. If the KDC replies with an extensibility-enabled reply, the
457 client knows that the KDC supports extensibility. If the KDC issues
458 an extensibility-enabled ticket, the client knows that the service
459 named in the ticket is extensibility-enabled.
462 2.4. 1.4.2. Sending Extensible Messages
465 Care must be taken to make sure that old implementations can
466 understand messages sent to them even if they do not understand an
467 extension that is used. Unless the sender knows the extension is
468 supported, the extension cannot change the semantics of the core
469 message or previously defined extensions.
472 For example, an extension including key information necessary to
473 decrypt the encrypted part of a KDC-REP could only be used in
474 situations where the recipient was known to support the extension.
475 Thus when designing such extensions it is important to provide a way
476 for the recipient to notify the sender of support for the extension.
477 For example in the case of an extension that changes the KDC-REP
478 reply key, the client could indicate support for the extension by
479 including a padata element in the AS-REQ sequence. The KDC should
480 only use the extension if this padata element is present in the AS-
481 REQ. Even if policy requires the use of the extension, it is better
482 to return an error indicating that the extension is required than to
483 use the extension when the recipient may not support it; debugging
484 why implementations do not interoperate is easier when errors are
491 Recipients of unknown message extensions (including typed holes, new
492 flags, and ASN.1 extension elements) should preserve the encoding of
493 the extension but otherwise ignore the presence of the extension;
494 i.e., unknown extensions SHOULD be treated as non-critical. If a
495 copy of the message is used later--for example, when a Ticket
496 received in a KDC-REP is later used in an AP-REQ--then the unknown
499 Yu Expires: Apr 2005 [Page 8]
500 Internet-Draft yu-krb-extensions-02 25 Oct 2004
503 extensions MUST be included.
506 An implementation SHOULD NOT reject a request merely because it does
507 not understand some element of the request. As a related
508 consequence, implementations SHOULD handle communicating with other
509 implementations which do not implement some requested options. This
510 may require designers of options to provide means to determine
511 whether an option has been rejected, not understood, or (perhaps
512 maliciously) deleted or modified in transit.
515 There is one exception to non-criticality described above: if an
516 unknown authorization data element is received by a server either in
517 an AP-REQ or in a Ticket contained in an AP-REQ, then the
518 authentication SHOULD fail. Authorization data is intended to
519 restrict the use of a ticket. If the service cannot determine
520 whether the restriction applies to that service then a security
521 weakness may result if authentication succeeds. Authorization
522 elements meant to be truly optional can be enclosed in the AD-IF-
526 Many RFC 1510 implementations ignore unknown authorization data
527 elements. Depending on these implementations to honor authorization
528 data restrictions may create a security weakness.
531 2.6. Authenticating Cleartext Portions of Messages
534 Various denial of service attacks and downgrade attacks against
535 Kerberos are possible unless plaintexts are somehow protected against
536 modification. An early design goal of Kerberos Version 5 was to
537 avoid encrypting more of the authentication exchange that was
538 required. (Version 4 doubly-encrypted the encrypted part of a ticket
539 in a KDC reply, for example.) This minimization of encryption
540 reduces the load on the KDC and busy servers. Also, during the
541 initial design of Version 5, the existence of legal restrictions on
542 the export of cryptography made it desirable to minimize of the
543 number of uses of encryption in the protocol. Unfortunately,
544 performing this minimization created numerous instances of
545 unauthenticated security-relevant plaintext fields.
548 The extensible variants of the messages described in this document
549 wrap the actual message in an ASN.1 sequence containing a keyed
550 checksum of the contents of the message. Guidelines in [XXX] section
551 3 specify when the checksum MUST be included and what key MUST be
552 used. Guidelines on when to include a checksum are never ambiguous:
553 a particular PDU is never correct both with and without a checksum.
554 With the exception of the KRB-ERROR message, receiving
555 implementations MUST reject messages where a checksum is included and
556 not expected or where a checksum is expected but not included. The
557 receiving implementation does not always have sufficient information
558 to know whether a KRB-ERROR should contain a checksum. Even so,
559 KRB-ERROR messages with invalid checksums MUST be rejected and
562 Yu Expires: Apr 2005 [Page 9]
563 Internet-Draft yu-krb-extensions-02 25 Oct 2004
566 implementations MAY consider the presence or absence of a checksum
567 when evaluating whether to trust the error.
570 This authenticated cleartext protection is provided only in the
571 extensible variants of the messages; it is never used when
572 communicating with an RFC 1510 implementation.
575 2.7. Capability Negotiation
578 Kerberos is a three-party protocol. Each of the three parties
579 involved needs a means of detecting the capabilities supported by the
580 others. Two of the parties, the KDC and the application server, do
581 not communicate directly in the Kerberos protocol. Communicating
582 capabilities from the KDC to the application server requires using a
583 ticket as an intermediary.
586 The main capability requiring negotiation is the support of the
587 extensibility framework described in this document. Negotiation of
588 this capability while remaining compatible with RFC 1510
589 implementations is possible. The main complication is that the
590 client needs to know whether the application server supports the
591 extensibility framework prior to sending any message to the
592 application server. This can be accomplished if the KDC has
593 knowledge of whether an application server supports the extensibility
597 Client software advertizes its capabilities when requesting
598 credentials from the KDC. If the KDC recognizes the capabilities, it
599 acknowledges this fact to the client in its reply. In addition, if
600 the KDC has knowledge that the application server supports certain
601 capabilities, it also communicates this knowledge to the client in
602 its reply. The KDC can encode its own capabilities in the ticket so
603 that the application server may discover these capabilities. The
604 client advertizes its capabilities to the application server when it
605 initiates authentication to the application server.
608 3. Use of ASN.1 in Kerberos
611 Kerberos uses the ASN.1 Distinguished Encoding Rules (DER) [X690].
612 Even though ASN.1 theoretically allows the description of protocol
613 messages to be independent of the encoding rules used to encode the
614 messages, Kerberos messages MUST be encoded with DER. Subtleties in
615 the semantics of the notation, such as whether tags carry any
616 semantic content to the application, may cause the use of other ASN.1
617 encoding rules to be problematic.
620 Implementors not using existing ASN.1 tools (e.g., compilers or
621 support libraries) are cautioned to thoroughly read and understand
622 the actual ASN.1 specification to ensure correct implementation
623 behavior. There is more complexity in the notation than is
624 immediately obvious, and some tutorials and guides to ASN.1 are
627 Yu Expires: Apr 2005 [Page 10]
628 Internet-Draft yu-krb-extensions-02 25 Oct 2004
631 misleading or erroneous. Recommended tutorials and guides include
632 [Dub00], [Lar99], though there is still no substitute for reading the
633 actual ASN.1 specification.
639 The type definitions in this document assume an ASN.1 module
640 definition of the following form:
644 iso(1) identified-organization(3) dod(6) internet(1)
645 security(5) kerberosV5(2) modules(4) krb5spec3(4)
646 } DEFINITIONS EXPLICIT TAGS ::= BEGIN
649 -- Rest of definitions here
655 This specifies that the tagging context for the module will be
656 explicit and that automatic tagging is not done.
659 Some other publications [RFC1510] [RFC1964] erroneously specify an
660 object identifier (OID) having an incorrect value of "5" for the
661 "dod" component of the OID. In the case of RFC 1964, use of the
662 "correct" OID value would result in a change in the wire protocol;
663 therefore, the RFC 1964 OID remains unchanged for now.
669 The ASN.1 type "KRB-PDU" is a CHOICE over all the types (Protocol
670 Data Units or PDUs) which an application may directly reference.
671 Applications SHOULD NOT transmit any types other than those which are
672 alternatives of the KRB-PDU CHOICE.
693 Yu Expires: Apr 2005 [Page 11]
694 Internet-Draft yu-krb-extensions-02 25 Oct 2004
699 -- Applications should not directly reference any types
700 -- other than KRB-PDU and its component types.
720 3.3. Previously Unused ASN.1 Notation (informative)
723 Some aspects of ASN.1 notation used in this document were not used in
724 [KCLAR], and may be unfamiliar to some readers. This subsection is
725 informative; for normative definitions of the notation, see the
726 actual ASN.1 specifications [X680], [X682], [X683].
729 3.3.1. Parameterized Types
732 This document uses ASN.1 parameterized types [X683] to make
733 definitions of types more readable. For some types, some or all of
734 the parameters are advisory, i.e., they are not encoded in any form
735 for transmission in a protocol message. These advisory parameters
736 can describe implementation behavior associated with the type.
739 3.3.2. COMPONENTS OF Notation
742 The "COMPONENTS OF" notation, used to define the RFC 1510
743 compatibility types, extracts all of the component types of an ASN.1
744 SEQUENCE type. The extension marker (the "..." notation) and any
745 extension components are not extracted by "COMPONENTS OF". The
746 "COMPONENTS OF" notation permits concise definition of multiple types
747 which have many components in common with each other.
753 This document uses ASN.1 constraints, including the
754 "UserDefinedConstraint" notation [X682]. Some constraints can be
755 handled automatically by tools that can parse them. Uses of the
758 Yu Expires: Apr 2005 [Page 12]
759 Internet-Draft yu-krb-extensions-02 25 Oct 2004
762 "UserDefinedConstraint" notation (the "CONSTRAINED BY" notation) will
763 typically need to have behavior manually coded; the notation provides
764 a formalized way of conveying intended implementation behavior.
767 The "WITH COMPONENTS" constraint notation allows constraints to apply
768 to component types of a SEQUENCE type. This constraint notation
769 effectively allows constraints to "reach into" a type to constrain
776 This document defines a number of ASN.1 types which are new since
777 [KCLAR]. The names of these types will typically have a suffix like
778 "Ext", indicating that the types are intended to support
779 extensibility. Types original to RFC 1510 and [KCLAR] have been
780 renamed to have a suffix like "1510". The "Ext" and "1510" types
781 often contain a number of common elements; these common elements have
782 a suffix like "Common". The "1510" types have various ASN.1
783 constraints applied to them; the constraints limit the possible
784 values of the "1510" types to those permitted by RFC 1510 or by
785 [KCLAR]. The "Ext" types may have different constraints, typically
786 to force string values to be sent as UTF-8.
789 For example, consider
792 -- example "common" type
793 Foo-Common ::= SEQUENCE {
802 -- example "RFC 1510 compatibility" type
803 Foo-1510 ::= SEQUENCE {
804 -- the COMPONENTS OF notation drops the extension marker
805 -- and all extension additions.
806 COMPONENTS OF Foo-Common
810 -- example "extensibility-enabled" type
811 Foo-Ext ::= Foo-Common
814 where "Foo-Common" is a common type used to define both the "1510"
815 and "Ext" versions of a type. "Foo-1510" is the RFC 1510 version of
816 the type, while "Foo-Ext" is the extensible version. "Foo-1510" does
817 not contain the extension marker, nor does it contain the extension
818 component "c". The type "Foo-1510" is equivalent to "Foo-1510-
823 Yu Expires: Apr 2005 [Page 13]
824 Internet-Draft yu-krb-extensions-02 25 Oct 2004
827 -- example type equivalent to Foo-1510
828 Foo-1510-Equiv ::= SEQUENCE {
838 These "basic" Kerberos ASN.1 types appear in multiple other Kerberos
842 4.1. Constrained Integer Types
845 In RFC 1510, many types contained references to the unconstrained
846 INTEGER type. Since an unconstrained INTEGER can contain almost any
847 possible abstract integer value, most of the unconstrained references
848 to INTEGER in RFC 1510 were constrained to 32 bits or smaller in
852 -- signed values representable in 32 bits
854 -- These are often used as assigned numbers for various things.
855 Int32 ::= INTEGER (-2147483648..2147483647)
858 The "Int32" type often contains an assigned number identifying the
859 contents of a typed hole. Unless otherwise stated, non-negative
860 values are registered, and negative values are available for local
864 -- unsigned 32 bit values
865 UInt32 ::= INTEGER (0..4294967295)
868 The "UInt32" type is used in some places where an unsigned 32-bit
872 -- unsigned 64 bit values
873 UInt64 ::= INTEGER (0..18446744073709551615)
876 The "UInt64" type is used in places where 32 bits of precision may
877 provide inadequate security.
884 Sequence numbers were constrained to 32 bits in [KCLAR], but this
885 document allows for 64-bit sequence numbers.
893 Yu Expires: Apr 2005 [Page 14]
894 Internet-Draft yu-krb-extensions-02 25 Oct 2004
897 Likewise, nonces were constrained to 32 bits in [KCLAR], but expanded
902 Microseconds ::= INTEGER (0..999999)
905 The "microseconds" type is intended to carry the microseconds part of
912 KerberosTime ::= GeneralizedTime (CONSTRAINED BY {
913 -- MUST NOT include fractional seconds
917 The timestamps used in Kerberos are encoded as GeneralizedTimes. A
918 KerberosTime value MUST NOT include any fractional portions of the
919 seconds. As required by the DER, it further MUST NOT include any
920 separators, and it specifies the UTC time zone (Z). Example: The
921 only valid format for UTC time 6 minutes, 27 seconds after 9 pm on 6
922 November 1985 is "19851106210627Z".
928 -- used for names and for error messages
929 KerberosString ::= CHOICE {
930 ia5 GeneralString (IA5String),
932 ... -- no extension may be sent
933 -- to an rfc1510 implementation --
937 The KerberosString type is used for character strings in various
938 places in the Kerberos protocol. For compatibility with RFC 1510,
939 GeneralString values constrained to IA5String (US-ASCII) are
940 permitted in messages exchanged with RFC 1510 implementations. The
941 new protocol messages contain strings encoded as UTF-8, and these
942 strings MUST be normalized using [SASLPREP]. KerberosString values
943 are present in principal names and in error messages. Control
944 characters SHOULD NOT be used in principal names, and used with
945 caution in error messages.
948 -- IA5 choice only; useful for constraints
949 KerberosStringIA5 ::= KerberosString
950 (WITH COMPONENTS { ia5 PRESENT })
953 -- IA5 excluded; useful for constraints
954 KerberosStringExt ::= KerberosString
955 (WITH COMPONENTS { ia5 ABSENT })
958 KerberosStringIA5 requires the use of the "ia5" alternative, while
961 Yu Expires: Apr 2005 [Page 15]
962 Internet-Draft yu-krb-extensions-02 25 Oct 2004
965 KerberosStringExt forbids it. These types appear in ASN.1
966 constraints on messages.
969 For detailed background regarding the history of character string use
970 in Kerberos, as well as discussion of some compatibility issues, see
977 -- used for language tags
978 LangTag ::= PrintableString
979 (FROM ("A".."Z" | "a".."z" | "0".."9" | "-"))
982 The "LangTag" type is used to specify language tags for localization
983 purposes, using the [RFC3066] format.
989 For several message types, a specific constrained bit string type,
990 KerberosFlags, is used.
993 KerberosFlags { NamedBits } ::= BIT STRING (SIZE (32..MAX))
995 -- MUST be a valid value of -- NamedBits
996 -- but if the value to be sent would be truncated to shorter
997 -- than 32 bits according to DER, the value MUST be padded
998 -- with trailing zero bits to 32 bits. Otherwise, no
999 -- trailing zero bits may be present.
1006 The actual bit string type encoded in Kerberos messages does not use
1007 named bits. The advisory parameter of the KerberosFlags type names a
1008 bit string type defined using named bits, whose value is encoded as
1009 if it were a bit string with unnamed bits. This practice is
1010 necessary because the DER require trailing zero bits to be removed
1011 when encoding bit strings defined using named bits. Existing
1012 implementations of Kerberos send exactly 32 bits rather than
1013 truncating, so the size constraint requires the transmission of at
1014 least 32 bits. Trailing zero bits beyond the first 32 bits are
1021 -- Typed hole identifiers
1024 rel-oid RELATIVE-OID
1029 Yu Expires: Apr 2005 [Page 16]
1030 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1033 The "TH-id" type is a generalized means to identify the contents of a
1034 typed hole. The "int32" alternative may be used for simple integer
1035 assignments, in the same manner as "Int32", while the "rel-oid"
1036 alternative may be used for hierarchical delegation.
1039 4.7. HostAddress and HostAddresses
1045 HostAddress ::= SEQUENCE {
1046 addr-type [0] AddrType,
1047 address [1] OCTET STRING
1051 -- NOTE: HostAddresses is always used as an OPTIONAL field and
1052 -- should not be a zero-length SEQUENCE OF.
1054 -- The extensible messages explicitly constrain this to be
1056 HostAddresses ::= SEQUENCE OF HostAddress
1061 This field specifies the type of address that follows.
1065 This field encodes a single address of the type identified by
1069 All negative values for the host address type are reserved for local
1070 use. All non-negative values are reserved for officially assigned
1071 type fields and interpretations.
1076 __________|______________
1086 4.7.1. Internet (IPv4) Addresses
1089 Internet (IPv4) addresses are 32-bit (4-octet) quantities, encoded in
1090 MSB order (most significant byte first). The IPv4 loopback address
1091 SHOULD NOT appear in a Kerberos PDU. The type of IPv4 addresses is
1096 Yu Expires: Apr 2005 [Page 17]
1097 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1100 4.7.2. Internet (IPv6) Addresses
1103 IPv6 addresses [RFC2373] are 128-bit (16-octet) quantities, encoded
1104 in MSB order (most significant byte first). The type of IPv6
1105 addresses is twenty-four (24). The following addresses MUST NOT
1106 appear in any Kerberos PDU:
1109 * the Unspecified Address
1112 * the Loopback Address
1115 * Link-Local addresses
1118 This restriction applies to the inclusion in the address fields of
1119 Kerberos PDUs, but not to the address fields of packets that might
1120 carry such PDUs. The restriction is necessary because the use of an
1121 address with non-global scope could allow the acceptance of a message
1122 sent from a node that may have the same address, but which is not the
1123 host intended by the entity that added the restriction. If the
1124 link-local address type needs to be used for communication, then the
1125 address restriction in tickets must not be used (i.e. addressless
1126 tickets must be used).
1129 IPv4-mapped IPv6 addresses MUST be represented as addresses of type
1133 4.7.3. DECnet Phase IV addresses
1136 DECnet Phase IV addresses are 16-bit addresses, encoded in LSB order.
1137 The type of DECnet Phase IV addresses is twelve (12).
1140 4.7.4. Netbios addresses
1143 Netbios addresses are 16-octet addresses typically composed of 1 to
1144 15 alphanumeric characters and padded with the US-ASCII SPC character
1145 (code 32). The 16th octet MUST be the US-ASCII NUL character (code
1146 0). The type of Netbios addresses is twenty (20).
1149 4.7.5. Directional Addresses
1152 In many environments, including the sender address in KRB-SAFE and
1153 KRB-PRIV messages is undesirable because the addresses may be changed
1154 in transport by network address translators. However, if these
1155 addresses are removed, the messages may be subject to a reflection
1156 attack in which a message is reflected back to its originator. The
1157 directional address type provides a way to avoid transport addresses
1158 and reflection attacks. Directional addresses are encoded as four
1159 byte unsigned integers in network byte order. If the message is
1160 originated by the party sending the original AP-REQ message, then an
1161 address of 0 SHOULD be used. If the message is originated by the
1162 party to whom that AP-REQ was sent, then the address 1 SHOULD be
1165 Yu Expires: Apr 2005 [Page 18]
1166 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1169 used. Applications involving multiple parties can specify the use of
1173 Directional addresses MUST only be used for the sender address field
1174 in the KRB-SAFE or KRB-PRIV messages. They MUST NOT be used as a
1175 ticket address or in a AP-REQ message. This address type SHOULD only
1176 be used in situations where the sending party knows that the
1177 receiving party supports the address type. This generally means that
1178 directional addresses may only be used when the application protocol
1179 requires their support. Directional addresses are type (3).
1185 Principals are participants in the Kerberos protocol. A "realm"
1186 consists of principals in one administrative domain, served by one
1187 KDC (or one replicated set of KDCs). Each principal name has an
1188 arbitrary number of components, though typical principal names will
1189 only have one or two components. A principal name is meant to be
1190 readable by and meaningful to humans, especially in a realm lacking a
1191 centrally adminstered authorization infrastructure.
1197 Each PrincipalName has NameType indicating what sort of name it is.
1198 The name-type SHOULD be treated as a hint. Ignoring the name type,
1199 no two names can be the same (i.e., at least one of the components,
1200 or the realm, must be different).
1203 -- assigned numbers for name types (used in principal names)
1207 -- Name type not known
1208 nt-unknown NameType ::= 0
1209 -- Just the name of the principal as in DCE, or for users
1210 nt-principal NameType ::= 1
1211 -- Service and other unique instance (krbtgt)
1212 nt-srv-inst NameType ::= 2
1213 -- Service with host name as instance (telnet, rcommands)
1214 nt-srv-hst NameType ::= 3
1215 -- Service with host as remaining components
1216 nt-srv-xhst NameType ::= 4
1218 nt-uid NameType ::= 5
1219 -- Encoded X.509 Distingished name [RFC 2253]
1220 nt-x500-principal NameType ::= 6
1221 -- Name in form of SMTP email name (e.g. user@foo.com)
1222 nt-smtp-name NameType ::= 7
1223 -- Enterprise name - may be mapped to principal name
1224 nt-enterprise NameType ::= 10
1229 Yu Expires: Apr 2005 [Page 19]
1230 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1233 5.2. Principal Type Definition
1236 PrincipalName ::= SEQUENCE {
1237 name-type [0] NameType,
1238 -- May have zero elements, or individual elements may be
1239 -- zero-length, but this is NOT RECOMMENDED.
1240 name-string [1] SEQUENCE OF KerberosString
1246 hint of the type of name that follows
1250 The "name-string" encodes a sequence of components that form a
1251 name, each component encoded as a KerberosString. Taken
1252 together, a PrincipalName and a Realm form a principal
1253 identifier. Most PrincipalNames will have only a few components
1254 (typically one or two).
1257 5.3. Principal Name Reuse
1260 Realm administrators SHOULD use extreme caution when considering
1261 reusing a principal name. A service administrator might explicitly
1262 enter principal names into a local access control list (ACL) for the
1263 service. If such local ACLs exist independently of a centrally
1264 administered authorization infrastructure, realm administrators
1265 SHOULD NOT reuse principal names until confirming that all extant ACL
1266 entries referencing that principal name have been updated. Failure
1267 to perform this check can result in a security vulnerability, as a
1268 new principal can inadvertently inherit unauthorized privileges upon
1269 receiving a reused principal name. An organization whose Kerberos-
1270 authenticated services all use a centrally-adminstered authorization
1271 infrastructure may not need to take these precautions regarding
1272 principal name reuse.
1278 Realm ::= KerberosString
1282 RealmIA5 ::= Realm (KerberosStringIA5)
1286 RealmExt ::= Realm (KerberosStringExt)
1290 Kerberos realm names are KerberosStrings. Realms MUST NOT contain a
1291 character with the code 0 (the US-ASCII NUL). Most realms will
1292 usually consist of several components separated by periods (.), in
1293 the style of Internet Domain Names, or separated by slashes (/) in
1296 Yu Expires: Apr 2005 [Page 20]
1297 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1300 the style of X.500 names.
1303 5.5. Printable Representations of Principal Names
1306 [ perhaps non-normative? ]
1309 The printable form of a principal name consists of the concatenation
1310 of components of the PrincipalName value using the slash character
1311 (/), followed by an at-sign (@), followed by the realm name. Any
1312 occurrence of a backslash (\), slash (/) or at-sign (@) in the
1313 PrincipalName value is quoted by a backslash.
1316 5.6. Ticket-Granting Service Principal
1319 The PrincipalName value corresponding to a ticket-granting service
1320 has two components: the first component is the string "krbtgt", and
1321 the second component is the realm name of the TGS which will accept a
1322 ticket-granting ticket having this service principal name. The realm
1323 name of service always indicates which realm issued the ticket. A
1324 ticket-granting ticket issued by "A.EXAMPLE.COM" which is valid for
1325 obtaining tickets in the same realm would have the following ASN.1
1326 values for its "realm" and "sname" components, respectively:
1329 -- Example Realm and PrincipalName for a TGS
1332 tgtRealm1 Realm ::= ia5 : "A.EXAMPLE.COM"
1335 tgtPrinc1 PrincipalName ::= {
1336 name-type nt-srv-inst,
1337 name-string { ia5 : "krbtgt", ia5 : "A.EXAMPLE.COM" }
1341 Its printable representation would be written as
1342 "krbtgt/A.EXAMPLE.COM@A.EXAMPLE.COM".
1345 5.6.1. Cross-Realm TGS Principals
1348 It is possible for a principal in one realm to authenticate to a
1349 service in another realm. A KDC can issue a cross-realm ticket-
1350 granting ticket to allow one of its principals to authenticate to a
1351 service in a foreign realm. For example, the TGS principal
1352 "krbtgt/B.EXAMPLE.COM@A.EXAMPLE.COM" is a principal that permits a
1353 client principal in the realm A.EXAMPLE.COM to authenticate to a
1354 service in the realm B.EXAMPLE.COM. When the KDC for B.EXAMPLE.COM
1355 issues a ticket to a client originating in A.EXAMPLE.COM, the
1356 client's realm name remains "A.EXAMPLE.COM", even though the service
1357 principal will have the realm "B.EXAMPLE.COM".
1364 Yu Expires: Apr 2005 [Page 21]
1365 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1368 6. Types Relating to Encryption
1371 Many Kerberos protocol messages contain encrypted encodings of
1372 various data types. Some Kerberos protocol messages also contain
1373 checksums (signatures) of encodings of various types.
1376 6.1. Assigned Numbers for Encryption
1379 Encryption algorithm identifiers and key usages both have assigned
1380 numbers, described in [KCRYPTO].
1386 EType is the integer type for assigned numbers for encryption
1387 algorithms. Defined in [KCRYPTO].
1390 -- Assigned numbers denoting encryption mechanisms.
1394 -- assigned numbers for encryption schemes
1395 et-des-cbc-crc EType ::= 1
1396 et-des-cbc-md4 EType ::= 2
1397 et-des-cbc-md5 EType ::= 3
1399 et-des3-cbc-md5 EType ::= 5
1401 et-des3-cbc-sha1 EType ::= 7
1402 et-dsaWithSHA1-CmsOID EType ::= 9
1403 et-md5WithRSAEncryption-CmsOID EType ::= 10
1404 et-sha1WithRSAEncryption-CmsOID EType ::= 11
1405 et-rc2CBC-EnvOID EType ::= 12
1406 et-rsaEncryption-EnvOID EType ::= 13
1407 et-rsaES-OAEP-ENV-OID EType ::= 14
1408 et-des-ede3-cbc-Env-OID EType ::= 15
1409 et-des3-cbc-sha1-kd EType ::= 16
1411 et-aes128-cts-hmac-sha1-96 EType ::= 17
1413 et-aes256-cts-hmac-sha1-96 EType ::= 18
1415 et-rc4-hmac EType ::= 23
1417 et-rc4-hmac-exp EType ::= 24
1418 -- opaque; PacketCable
1419 et-subkey-keymaterial EType ::= 65
1426 KeyUsage is the integer type for assigned numbers for key usages.
1427 Key usage values are inputs to the encryption and decryption
1430 Yu Expires: Apr 2005 [Page 22]
1431 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1434 functions described in [KCRYPTO].
1437 -- Assigned numbers denoting key usages.
1442 -- Actual identifier names are provisional and subject to
1445 ku-pa-enc-ts KeyUsage ::= 1
1446 ku-Ticket KeyUsage ::= 2
1447 ku-EncASRepPart KeyUsage ::= 3
1448 ku-TGSReqAuthData-sesskey KeyUsage ::= 4
1449 ku-TGSReqAuthData-subkey KeyUsage ::= 5
1450 ku-pa-TGSReq-cksum KeyUsage ::= 6
1451 ku-pa-TGSReq-authenticator KeyUsage ::= 7
1452 ku-EncTGSRepPart-sesskey KeyUsage ::= 8
1453 ku-EncTGSRepPart-subkey KeyUsage ::= 9
1454 ku-Authenticator-cksum KeyUsage ::= 10
1455 ku-APReq-authenticator KeyUsage ::= 11
1456 ku-EncAPRepPart KeyUsage ::= 12
1457 ku-EncKrbPrivPart KeyUsage ::= 13
1458 ku-EncKrbCredPart KeyUsage ::= 14
1459 ku-KrbSafe-cksum KeyUsage ::= 15
1460 ku-ad-KDCIssued-cksum KeyUsage ::= 19
1464 -- The following numbers are provisional...
1465 -- conflicts may exist elsewhere.
1466 ku-Ticket-cksum KeyUsage ::= 25
1467 ku-ASReq-cksum KeyUsage ::= 26
1468 ku-TGSReq-cksum KeyUsage ::= 27
1469 ku-ASRep-cksum KeyUsage ::= 28
1470 ku-TGSRep-cksum KeyUsage ::= 29
1471 ku-APReq-cksum KeyUsage ::= 30
1472 ku-APRep-cksum KeyUsage ::= 31
1473 ku-KrbCred-cksum KeyUsage ::= 32
1474 ku-KrbError-cksum KeyUsage ::= 33
1475 ku-KDCRep-cksum KeyUsage ::= 34
1479 6.2. Which Key to Use
1491 Yu Expires: Apr 2005 [Page 23]
1492 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1495 -- KeyToUse identifies which key is to be used to encrypt or
1496 -- sign a given value.
1498 -- Values of KeyToUse are never actually transmitted over the
1499 -- wire, or even used directly by the implementation in any
1500 -- way, as key usages are; it exists primarily to identify
1501 -- which key gets used for what purpose. Thus, the specific
1502 -- numeric values associated with this type are irrelevant.
1503 KeyToUse ::= ENUMERATED {
1506 -- server long term key
1508 -- client long term key
1510 -- key selected by KDC for encryption of a KDC-REP
1512 -- session key from ticket
1514 -- subsession key negotiated via AP-REQ/AP-REP
1524 The "EncryptionKey" type holds an encryption key.
1527 EncryptionKey ::= SEQUENCE {
1529 keyvalue [1] OCTET STRING
1535 This "EType" identifies the encryption algorithm, described in
1540 Contains the actual key.
1546 The "EncryptedData" type contains the encryption of another data
1547 type. The recipient uses fields within EncryptedData to determine
1548 which key to use for decryption.
1555 Yu Expires: Apr 2005 [Page 24]
1556 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1560 -- "Type" specifies which ASN.1 type is encrypted to the
1561 -- ciphertext in the EncryptedData. "Keys" specifies a set of
1562 -- keys of which one key may be used to encrypt the data.
1563 -- "KeyUsages" specifies a set of key usages, one of which may
1564 -- be used to encrypt.
1566 -- None of the parameters is transmitted over the wire.
1568 Type, KeyToUse:Keys, KeyUsage:KeyUsages
1571 kvno [1] UInt32 OPTIONAL,
1572 cipher [2] OCTET STRING (CONSTRAINED BY {
1573 -- must be encryption of --
1574 OCTET STRING (CONTAINING Type),
1575 -- with one of the keys -- KeyToUse:Keys,
1576 -- with key usage being one of --
1586 Advisory parameter indicating which key usage to use when
1587 encrypting the ciphertext. If "KeyUsages" indicate multiple
1588 "KeyUsage" values, the detailed description of the containing
1589 message will indicate which key to use under which conditions.
1593 Advisory parameter indicating the ASN.1 type whose DER encoding
1594 is the plaintext encrypted into the EncryptedData.
1598 Advisory parameter indicating which key to use to perform the
1599 encryption. If "Keys" indicate multiple "KeyToUse" values, the
1600 detailed description of the containing message will indicate
1601 which key to use under which conditions.
1605 Advisory parameter indicating which "KeyUsage" value is used to
1606 encrypt. If "KeyUsages" indicates multiple "KeyUsage" values,
1607 the detailed description of the containing message will indicate
1608 which key usage to use under which conditions.
1614 Several types contain checksums (actually signatures) of data.
1618 Yu Expires: Apr 2005 [Page 25]
1619 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1625 -- The parameters specify which key to use to produce the
1626 -- signature, as well as which key usage to use. The
1627 -- parameters are not actually sent over the wire.
1629 KeyToUse:Keys, KeyUsage:KeyUsages
1631 cksumtype [0] CksumType,
1632 checksum [1] OCTET STRING (CONSTRAINED BY {
1633 -- signed using one of the keys --
1635 -- with key usage being one of --
1643 Integer type for assigned numbers for signature algorithms.
1644 Defined in [KCRYPTO]
1656 Signature algorithm used to produce the signature.
1660 The actual checksum.
1666 ChecksumOf is similar to "Checksum", but specifies which type is
1670 -- a Checksum that must contain the checksum
1671 -- of a particular type
1673 Type, KeyToUse:Keys, KeyUsage:KeyUsages
1674 } ::= Checksum { Keys, KeyUsages } (WITH COMPONENTS {
1676 checksum (CONSTRAINED BY {
1677 -- must be checksum of --
1678 OCTET STRING (CONTAINING Type)
1684 Yu Expires: Apr 2005 [Page 26]
1685 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1689 Indicates the ASN.1 type whose DER encoding is signed.
1695 Signed is similar to "ChecksumOf", but contains an actual instance of
1696 the type being signed in addition to the signature.
1699 -- parameterized type for wrapping authenticated plaintext
1701 InnerType, KeyToUse:Keys, KeyUsage:KeyUsages
1703 cksum [0] ChecksumOf {
1704 InnerType, Keys, KeyUsages
1706 inner [1] InnerType,
1715 [ A large number of items described here are duplicated in the
1716 sections describing KDC-REQ processing. Should find a way to avoid
1720 A ticket binds a principal name to a session key. The important
1721 fields of a ticket are in the encrypted part. The components in
1722 common between the RFC 1510 and the extensible versions are
1725 EncTicketPartCommon ::= SEQUENCE {
1726 flags [0] TicketFlags,
1727 key [1] EncryptionKey,
1729 cname [3] PrincipalName,
1730 transited [4] TransitedEncoding,
1731 authtime [5] KerberosTime,
1732 starttime [6] KerberosTime OPTIONAL,
1733 endtime [7] KerberosTime,
1734 renew-till [8] KerberosTime OPTIONAL,
1735 caddr [9] HostAddresses OPTIONAL,
1736 authorization-data [10] AuthorizationData OPTIONAL,
1743 This field contains the client's realm.
1747 This field contains the client's name.
1750 Yu Expires: Apr 2005 [Page 27]
1751 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1755 This field lists the network addresses (if absent, all addresses
1756 are permitted) from which the ticket is valid.
1759 Descriptions of the other fields appear in the following sections.
1765 Three of the ticket timestamps may be requested from the KDC. The
1766 timestamps may differ from those requested, depending on site policy.
1770 The time at which the client authenticated, as recorded by the
1775 The earliest time when the ticket is valid. If not present, the
1776 ticket is valid starting at the authtime. This is requested as
1777 the "from" field of KDC-REQ-BODY-COMMON.
1781 This time is requested in the "till" field of KDC-REQ-BODY-
1782 COMMON. Contains the time after which the ticket will not be
1783 honored (its expiration time). Note that individual services
1784 MAY place their own limits on the life of a ticket and MAY
1785 reject tickets which have not yet expired. As such, this is
1786 really an upper bound on the expiration time for the ticket.
1790 This time is requested in the "rtime" field of KDC-REQ-BODY-
1791 COMMON. It is only present in tickets that have the "renewable"
1792 flag set in the flags field. It indicates the maximum endtime
1793 that may be included in a renewal. It can be thought of as the
1794 absolute expiration time for the ticket, including all renewals.
1800 A number of flags may be set in the ticket, further defining some of
1801 its capabilities. Some of these flags map to flags in a KDC request.
1816 Yu Expires: Apr 2005 [Page 28]
1817 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1820 TicketFlags ::= KerberosFlags { TicketFlagsBits }
1823 TicketFlagsBits ::= BIT STRING {
1836 transited-policy-checked (12),
1837 ok-as-delegate (13),
1839 cksummed-ticket (15)
1844 7.2.1. Flags Relating to Initial Ticket Acquisition
1847 [ adapted KCLAR 2.1. ]
1850 Several flags indicate the details of how the initial ticket was
1855 The "initial" flag indicates that a ticket was issued using the
1856 AS protocol, rather than issued based on a ticket-granting
1857 ticket. Application servers (e.g., a password-changing program)
1858 requiring a client's definite knowledge of its secret key can
1859 insist that this flag be set in any tickets they accept, thus
1860 being assured that the client's key was recently presented to
1861 the application client.
1865 The "pre-authent" flag indicates that some sort of pre-
1866 authentication was used during the AS exchange.
1870 The "hw-authent" flag indicates that some sort of hardware-based
1871 pre-authentication occurred during the AS exchange.
1874 Both the "pre-authent" and the "hw-authent" flags may be present with
1875 or without the "initial" flag; such tickets with the "initial" flag
1876 clear are ones which are derived from initial tickets with the "pre-
1877 authent" or "hw-authent" flags set.
1881 Yu Expires: Apr 2005 [Page 29]
1882 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1885 7.2.2. Invalid Tickets
1891 The "invalid" flag indicates that a ticket is invalid. Application
1892 servers MUST reject tickets which have this flag set. A postdated
1893 ticket will be issued in this form. Invalid tickets MUST be
1894 validated by the KDC before use, by presenting them to the KDC in a
1895 TGS request with the "validate" option specified. The KDC will only
1896 validate tickets after their starttime has passed. The validation is
1897 required so that postdated tickets which have been stolen before
1898 their starttime can be rendered permanently invalid (through a hot-
1899 list mechanism -- see Section 8.3.2.4).
1902 7.2.3. OK as Delegate
1908 The "ok-as-delegate" flag provides a way for a KDC to communicate
1909 local realm policy to a client regarding whether the service for
1910 which the ticket is issued is trusted to accept delegated
1911 credentials. For some applications, a client may need to delegate
1912 credentials to a service to act on its behalf in contacting other
1913 services. The ability of a client to obtain a service ticket for a
1914 service conveys no information to the client about whether the
1915 service should be trusted to accept delegated credentials.
1918 The copy of the ticket flags visible to the client may have the "ok-
1919 as-delegate" flag set to indicate to the client that the service
1920 specified in the ticket has been determined by policy of the realm to
1921 be a suitable recipient of delegation. A client can use the presence
1922 of this flag to help it make a decision whether to delegate
1923 credentials (either grant a proxy or a forwarded ticket-granting
1924 ticket) to this service. It is acceptable to ignore the value of
1925 this flag. When setting this flag, an administrator should consider
1926 the security and placement of the server on which the service will
1927 run, as well as whether the service requires the use of delegated
1931 7.2.4. Renewable Tickets
1934 [ adapted KCLAR 2.3. ]
1937 The "renewable" flag indicates whether the ticket may be renewed.
1940 Renewable tickets can be used to mitigate the consequences of ticket
1941 theft. Applications may desire to hold credentials which can be
1942 valid for long periods of time. However, this can expose the
1943 credentials to potential theft for equally long periods, and those
1944 stolen credentials would be valid until the expiration time of the
1945 ticket(s). Simply using short-lived tickets and obtaining new ones
1948 Yu Expires: Apr 2005 [Page 30]
1949 Internet-Draft yu-krb-extensions-02 25 Oct 2004
1952 periodically would require the application to have long-term access
1953 to the client's secret key, which is an even greater risk.
1956 Renewable tickets have two "expiration times": the first is when the
1957 current instance of the ticket expires, and the second is the latest
1958 permissible value for an individual expiration time. An application
1959 client must periodically present an unexpired renewable ticket to the
1960 KDC, setting the "renew" option in the KDC request. The KDC will
1961 issue a new ticket with a new session key and a later expiration
1962 time. All other fields of the ticket are left unmodified by the
1963 renewal process. When the latest permissible expiration time
1964 arrives, the ticket expires permanently. At each renewal, the KDC
1965 MAY consult a hot-list to determine if the ticket had been reported
1966 stolen since its last renewal; it will refuse to renew such stolen
1967 tickets, and thus the usable lifetime of stolen tickets is reduced.
1970 The "renewable" flag in a ticket is normally only interpreted by the
1971 ticket-granting service. It can usually be ignored by application
1972 servers. However, some particularly careful application servers MAY
1973 disallow renewable tickets.
1976 If a renewable ticket is not renewed by its expiration time, the KDC
1977 will not renew the ticket. The "renewable" flag is clear by default,
1978 but a client can request it be set by setting the "renewable" option
1979 in the AS-REQ message. If it is set, then the "renew-till" field in
1980 the ticket contains the time after which the ticket may not be
1984 7.2.5. Postdated Tickets
1988 indicates a ticket which has been postdated
1992 indicates that postdated tickets may be issued based on this
1999 Applications may occasionally need to obtain tickets for use much
2000 later, e.g., a batch submission system would need tickets to be valid
2001 at the time the batch job is serviced. However, it is dangerous to
2002 hold valid tickets in a batch queue, since they will be on-line
2003 longer and more prone to theft. Postdated tickets provide a way to
2004 obtain these tickets from the KDC at job submission time, but to
2005 leave them "dormant" until they are activated and validated by a
2006 further request of the KDC. If a ticket theft were reported in the
2007 interim, the KDC would refuse to validate the ticket, and the thief
2013 Yu Expires: Apr 2005 [Page 31]
2014 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2017 The "may-postdate" flag in a ticket is normally only interpreted by
2018 the TGS. It can be ignored by application servers. This flag MUST
2019 be set in a ticket-granting ticket in order for the KDC to issue a
2020 postdated ticket based on the presented ticket. It is reset by
2021 default; it MAY be requested by a client by setting the "allow-
2022 postdate" option in the AS-REQ [?also TGS-REQ?] message. This flag
2023 does not allow a client to obtain a postdated ticket-granting ticket;
2024 postdated ticket-granting tickets can only by obtained by requesting
2025 the postdating in the AS-REQ message. The life (endtime minus
2026 starttime) of a postdated ticket will be the remaining life of the
2027 ticket-granting ticket at the time of the request, unless the
2028 "renewable" option is also set, in which case it can be the full life
2029 (endtime minus starttime) of the ticket-granting ticket. The KDC MAY
2030 limit how far in the future a ticket may be postdated.
2033 The "postdated" flag indicates that a ticket has been postdated. The
2034 application server can check the authtime field in the ticket to see
2035 when the original authentication occurred. Some services MAY choose
2036 to reject postdated tickets, or they may only accept them within a
2037 certain period after the original authentication. When the KDC
2038 issues a "postdated" ticket, it will also be marked as "invalid", so
2039 that the application client MUST present the ticket to the KDC for
2040 validation before use.
2043 7.2.6. Proxiable and Proxy Tickets
2047 indicates a proxy ticket
2051 indicates that proxy tickets may be issued based on this ticket
2057 It may be necessary for a principal to allow a service to perform an
2058 operation on its behalf. The service must be able to take on the
2059 identity of the client, but only for a particular purpose. A
2060 principal can allow a service to take on the principal's identity for
2061 a particular purpose by granting it a proxy.
2064 The process of granting a proxy using the "proxy" and "proxiable"
2065 flags is used to provide credentials for use with specific services.
2066 Though conceptually also a proxy, users wishing to delegate their
2067 identity in a form usable for all purposes MUST use the ticket
2068 forwarding mechanism described in the next section to forward a
2069 ticket-granting ticket.
2072 The "proxiable" flag in a ticket is normally only interpreted by the
2073 ticket-granting service. It can be ignored by application servers.
2074 When set, this flag tells the ticket-granting server that it is OK to
2075 issue a new ticket (but not a ticket-granting ticket) with a
2078 Yu Expires: Apr 2005 [Page 32]
2079 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2082 different network address based on this ticket. This flag is set if
2083 requested by the client on initial authentication. By default, the
2084 client will request that it be set when requesting a ticket-granting
2085 ticket, and reset when requesting any other ticket.
2088 This flag allows a client to pass a proxy to a server to perform a
2089 remote request on its behalf (e.g. a print service client can give
2090 the print server a proxy to access the client's files on a particular
2091 file server in order to satisfy a print request).
2094 In order to complicate the use of stolen credentials, Kerberos
2095 tickets may contain a set of network addresses from which they are
2096 valid. When granting a proxy, the client MUST specify the new
2097 network address from which the proxy is to be used, or indicate that
2098 the proxy is to be issued for use from any address.
2101 The "proxy" flag is set in a ticket by the TGS when it issues a proxy
2102 ticket. Application servers MAY check this flag and at their option
2103 they MAY require additional authentication from the agent presenting
2104 the proxy in order to provide an audit trail.
2107 7.2.7. Forwarded and Forwardable Tickets
2111 indicates a forwarded ticket
2115 indicates that forwarded tickets may be issued based on this
2122 Authentication forwarding is an instance of a proxy where the service
2123 that is granted is complete use of the client's identity. An example
2124 where it might be used is when a user logs in to a remote system and
2125 wants authentication to work from that system as if the login were
2129 The "forwardable" flag in a ticket is normally only interpreted by
2130 the ticket-granting service. It can be ignored by application
2131 servers. The "forwardable" flag has an interpretation similar to
2132 that of the "proxiable" flag, except ticket-granting tickets may also
2133 be issued with different network addresses. This flag is reset by
2134 default, but users MAY request that it be set by setting the
2135 "forwardable" option in the AS request when they request their
2136 initial ticket-granting ticket.
2139 This flag allows for authentication forwarding without requiring the
2140 user to enter a password again. If the flag is not set, then
2141 authentication forwarding is not permitted, but the same result can
2142 still be achieved if the user engages in the AS exchange specifying
2145 Yu Expires: Apr 2005 [Page 33]
2146 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2149 the requested network addresses and supplies a password.
2152 The "forwarded" flag is set by the TGS when a client presents a
2153 ticket with the "forwardable" flag set and requests a forwarded
2154 ticket by specifying the "forwarded" KDC option and supplying a set
2155 of addresses for the new ticket. It is also set in all tickets
2156 issued based on tickets with the "forwarded" flag set. Application
2157 servers may choose to process "forwarded" tickets differently than
2158 non-forwarded tickets.
2161 If addressless tickets are forwarded from one system to another,
2162 clients SHOULD still use this option to obtain a new TGT in order to
2163 have different session keys on the different systems.
2166 7.3. Transited Realms
2169 [ KCLAR 2.7., plus new stuff ]
2172 7.4. Authorization Data
2181 AuthorizationData ::= SEQUENCE OF SEQUENCE {
2183 ad-data [1] OCTET STRING
2189 This field identifies the contents of the ad-data. All negative
2190 values are reserved for local use. Non-negative values are
2191 reserved for registered use.
2195 This field contains authorization data to be interpreted
2196 according to the value of the corresponding ad-type field.
2199 Each sequence of ADType and OCTET STRING is referred to as an
2200 authorization element. Elements MAY be application specific,
2201 however, there is a common set of recursive elements that should be
2202 understood by all implementations. These elements contain other
2203 AuthorizationData, and the interpretation of the encapsulating
2204 element determines which enclosed elements must be interpreted, and
2205 which may be ignored.
2208 Depending on the meaning of the encapsulating element, the
2209 encapsulated AuthorizationData may be ignored, interpreted as issued
2210 directly by the KDC, or be stored in a separate plaintext part of the
2211 ticket. The types of the encapsulating elements are specified as
2214 Yu Expires: Apr 2005 [Page 34]
2215 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2218 part of the Kerberos protocol because behavior based on these
2219 container elements should be understood across implementations, while
2220 other elements need only be understood by the applications which they
2224 Authorization data elements are considered critical if present in a
2225 ticket or authenticator. Unless encapsulated in a known
2226 authorization data element modifying the criticality of the elements
2227 it contains, an application server MUST reject the authentication of
2228 a client whose AP-REQ or ticket contains an unrecognized
2229 authorization data element. Authorization data is intended to
2230 restrict the use of a ticket. If the service cannot determine
2231 whether it is the target of a restriction, a security weakness may
2232 exist if the ticket can be used for that service. Authorization
2233 elements that are truly optional can be enclosed in AD-IF-RELEVANT
2238 ad-type | contents of ad-data
2239 ________|_______________________________________
2240 1 | DER encoding of AD-IF-RELEVANT
2241 4 | DER encoding of AD-KDCIssued
2242 5 | DER encoding of AD-AND-OR
2243 8 | DER encoding of AD-MANDATORY-FOR-KDC
2248 7.4.1. AD-IF-RELEVANT
2251 ad-if-relevant ADType ::= int32 : 1
2254 -- Encapsulates another AuthorizationData.
2255 -- Intended for application servers; receiving application servers
2257 AD-IF-RELEVANT ::= AuthorizationData
2260 AD elements encapsulated within the if-relevant element are intended
2261 for interpretation only by application servers that understand the
2262 particular ad-type of the embedded element. Application servers that
2263 do not understand the type of an element embedded within the if-
2264 relevant element MAY ignore the uninterpretable element. This element
2265 promotes interoperability across implementations which may have local
2266 extensions for authorization. The ad-type for AD-IF-RELEVANT is (1).
2278 Yu Expires: Apr 2005 [Page 35]
2279 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2282 -- KDC-issued privilege attributes
2283 ad-kdcissued ADType ::= int32 : 4
2286 AD-KDCIssued ::= SEQUENCE {
2287 ad-checksum [0] ChecksumOf {
2288 AuthorizationData, { key-session },
2289 { ku-ad-KDCIssued-cksum }},
2290 i-realm [1] Realm OPTIONAL,
2291 i-sname [2] PrincipalName OPTIONAL,
2292 elements [3] AuthorizationData
2298 A cryptographic checksum computed over the DER encoding of the
2299 AuthorizationData in the "elements" field, keyed with the
2300 session key. Its checksumtype is the mandatory checksum type
2301 for the encryption type of the session key, and its key usage
2306 The name of the issuing principal if different from the KDC
2307 itself. This field would be used when the KDC can verify the
2308 authenticity of elements signed by the issuing principal and it
2309 allows this KDC to notify the application server of the validity
2314 AuthorizationData issued by the KDC.
2317 The KDC-issued ad-data field is intended to provide a means for
2318 Kerberos credentials to embed within themselves privilege attributes
2319 and other mechanisms for positive authorization, amplifying the
2320 privileges of the principal beyond what it would have if using
2321 credentials without such an authorization-data element.
2324 This amplification of privileges cannot be provided without this
2325 element because the definition of the authorization-data field allows
2326 elements to be added at will by the bearer of a TGT at the time that
2327 they request service tickets and elements may also be added to a
2328 delegated ticket by inclusion in the authenticator.
2331 For KDC-issued elements this is prevented because the elements are
2332 signed by the KDC by including a checksum encrypted using the
2333 server's key (the same key used to encrypt the ticket -- or a key
2334 derived from that key). AuthorizationData encapsulated with in the
2335 AD-KDCIssued element MUST be ignored by the application server if
2336 this "signature" is not present. Further, AuthorizationData
2337 encapsulated within this element from a ticket-granting ticket MAY be
2338 interpreted by the KDC, and used as a basis according to policy for
2339 including new signed elements within derivative tickets, but they
2342 Yu Expires: Apr 2005 [Page 36]
2343 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2346 will not be copied to a derivative ticket directly. If they are
2347 copied directly to a derivative ticket by a KDC that is not aware of
2348 this element, the signature will not be correct for the application
2349 ticket elements, and the field will be ignored by the application
2353 This element and the elements it encapsulates MAY be safely ignored
2354 by applications, application servers, and KDCs that do not implement
2358 The ad-type for AD-KDC-ISSUED is (4).
2364 ad-and-or ADType ::= int32 : 5
2367 AD-AND-OR ::= SEQUENCE {
2368 condition-count [0] INTEGER,
2369 elements [1] AuthorizationData
2374 When restrictive AD elements are encapsulated within the and-or
2375 element, the and-or element is considered satisfied if and only if at
2376 least the number of encapsulated elements specified in condition-
2377 count are satisfied. Therefore, this element MAY be used to
2378 implement an "or" operation by setting the condition-count field to
2379 1, and it MAY specify an "and" operation by setting the condition
2380 count to the number of embedded elements. Application servers that do
2381 not implement this element MUST reject tickets that contain
2382 authorization data elements of this type.
2385 The ad-type for AD-AND-OR is (5).
2388 7.4.4. AD-MANDATORY-FOR-KDC
2391 -- KDCs MUST interpret any AuthorizationData wrapped in this.
2392 ad-mandatory-for-kdc ADType ::= int32 : 8
2393 AD-MANDATORY-FOR-KDC ::= AuthorizationData
2396 AD elements encapsulated within the mandatory-for-kdc element are to
2397 be interpreted by the KDC. KDCs that do not understand the type of
2398 an element embedded within the mandatory-for-kdc element MUST reject
2402 The ad-type for AD-MANDATORY-FOR-KDC is (8).
2405 7.5. Encrypted Part of Ticket
2408 The complete definition of the encrypted part is
2412 Yu Expires: Apr 2005 [Page 37]
2413 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2416 -- Encrypted part of ticket
2417 EncTicketPart ::= CHOICE {
2418 rfc1510 [APPLICATION 3] EncTicketPart1510,
2419 ext [APPLICATION 5] EncTicketPartExt
2423 with the common portion being
2426 EncTicketPartCommon ::= SEQUENCE {
2427 flags [0] TicketFlags,
2428 key [1] EncryptionKey,
2430 cname [3] PrincipalName,
2431 transited [4] TransitedEncoding,
2432 authtime [5] KerberosTime,
2433 starttime [6] KerberosTime OPTIONAL,
2434 endtime [7] KerberosTime,
2435 renew-till [8] KerberosTime OPTIONAL,
2436 caddr [9] HostAddresses OPTIONAL,
2437 authorization-data [10] AuthorizationData OPTIONAL,
2443 The encrypted part of the backwards-compatibility form of a ticket
2447 EncTicketPart1510 ::= SEQUENCE {
2448 COMPONENTS OF EncTicketPartCommon
2449 } (WITH COMPONENTS {
2451 -- explicitly force IA5 in strings
2453 cname (PrincipalNameIA5)
2457 The encrypted part of the extensible form of a ticket is:
2460 EncTicketPartExt ::= EncTicketPartCommon (WITH COMPONENTS {
2462 -- explicitly force UTF-8 in strings
2464 cname (PrincipalNameExt),
2465 -- explicitly constrain caddr to be non-empty if present
2466 caddr (SIZE (1..MAX)),
2467 -- forbid empty authorization-data encodings
2468 authorization-data (SIZE (1..MAX))
2475 Yu Expires: Apr 2005 [Page 38]
2476 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2479 7.6. Cleartext Part of Ticket
2482 The complete definition of Ticket is:
2486 rfc1510 [APPLICATION 1] Ticket1510,
2487 ext [APPLICATION 4] Signed {
2488 TicketExt, { key-server }, { ku-Ticket-cksum }
2493 with the common portion being:
2496 -- takes a parameter specifying which type gets encrypted
2497 TicketCommon { EncPart } ::= SEQUENCE {
2498 tkt-vno [0] INTEGER (5),
2500 sname [2] PrincipalName,
2501 enc-part [3] EncryptedData {
2502 EncPart, { key-server }, { ku-Ticket }
2505 extensions [4] TicketExtensions OPTIONAL,
2511 The "sname" field provides the name of the target service principal
2512 in cleartext, as a hint to aid the server in choosing the correct
2516 The backwards-compatibility form of Ticket is:
2519 Ticket1510 ::= SEQUENCE {
2520 COMPONENTS OF TicketCommon { EncTicketPart1510 }
2521 } (WITH COMPONENTS {
2523 -- explicitly force IA5 in strings
2525 sname (PrincipalNameIA5)
2529 The extensible form of Ticket is:
2540 Yu Expires: Apr 2005 [Page 39]
2541 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2544 -- APPLICATION tag goes inside Signed{} as well as outside,
2545 -- to prevent possible substitution attacks.
2546 TicketExt ::= [APPLICATION 4] TicketCommon {
2548 } (WITH COMPONENTS {
2550 -- explicitly force UTF-8 in strings
2552 sname (PrincipalNameExt)
2557 TicketExtensions, which may only be present in the extensible form of
2558 Ticket, are a cleartext typed hole for extension use.
2559 AuthorizationData already provides an encrypted typed hole.
2565 -- ticket extensions: for TicketExt only
2566 TicketExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
2568 te-data [1] OCTET STRING
2573 A client will only receive an extensible Ticket if the application
2574 server supports extensibility.
2577 8. Credential Acquisition
2580 There are two exchanges that can be used for acquiring credentials:
2581 the AS exchange and the TGS exchange. These exchanges have many
2582 similarities, and this document describes them in parallel, noting
2583 which behaviors are specific to one type of exchange. The AS request
2584 (AS-REQ) and TGS request (TGS-REQ) are both forms of KDC requests
2585 (KDC-REQ). Likewise, the AS reply (AS-REP) and TGS reply (TGS-REP)
2586 are forms of KDC replies (KDC-REP).
2589 The credentials acquisition protocol operates over specific
2590 transports. Additionally, specific methods exist to permit a client
2591 to discover the KDC host with which to communicate.
2597 The KDC-REQ has a large number of fields in common between the RFC
2598 1510 and the extensible versions. The KDC-REQ type itself is never
2599 directly encoded; it is always a part of a AS-REQ or a TGS-REQ.
2606 Yu Expires: Apr 2005 [Page 40]
2607 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2610 KDC-REQ-COMMON ::= SEQUENCE {
2611 -- NOTE: first tag is [1], not [0]
2612 pvno [1] INTEGER (5),
2613 msg-type [2] INTEGER (10 -- AS-REQ.rfc1510 --
2614 | 12 -- TGS-REQ.rfc1510 --
2615 | 6 -- AS-REQ.ext --
2616 | 8 -- TGS-REQ.ext -- ),
2617 padata [3] SEQUENCE OF PA-DATA OPTIONAL
2623 KDC-REQ-BODY-COMMON ::= SEQUENCE {
2624 kdc-options [0] KDCOptions,
2625 cname [1] PrincipalName OPTIONAL
2626 -- Used only in AS-REQ --,
2630 -- Server's realm; also client's in AS-REQ --,
2633 sname [3] PrincipalName OPTIONAL,
2634 from [4] KerberosTime OPTIONAL,
2635 till [5] KerberosTime OPTIONAL
2636 -- was required in rfc1510;
2637 -- still required for compat versions
2641 rtime [6] KerberosTime OPTIONAL,
2643 etype [8] SEQUENCE OF EType
2644 -- in preference order --,
2647 addresses [9] HostAddresses OPTIONAL,
2648 enc-authorization-data [10] EncryptedData {
2649 AuthorizationData, { key-session | key-subsession },
2650 { ku-TGSReqAuthData-subkey |
2651 ku-TGSReqAuthData-sesskey }
2655 additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
2656 -- NOTE: not empty --,
2658 lang-tags [5] SEQUENCE (SIZE (1..MAX)) OF
2665 Many fields of KDC-REQ-BODY-COMMON correspond directly to fields of
2666 an EncTicketPartCommon. The KDC copies most of them unchanged,
2667 provided that the requested values meet site policy.
2670 Yu Expires: Apr 2005 [Page 41]
2671 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2675 These flags do not correspond directly to "flags" in
2676 EncTicketPartCommon.
2680 This field is copied to the "cname" field in
2681 EncTicketPartCommon. The "cname" field is required in an AS-
2682 REQ; the client places its own name here. In a TGS-REQ, the
2683 "cname" in the ticket in the AP-REQ takes precedence.
2687 This field is the server's realm, and also holds the client's
2692 The "sname" field indicates the server's name. It may be absent
2693 in a TGS-REQ which requests user-to-user authentication, in
2694 which case the "sname" of the issued ticket will be taken from
2695 the included additional ticket.
2698 The "from", "till", and "rtime" fields correspond to the "starttime",
2699 "endtime", and "renew-till" fields of EncTicketPartCommon.
2703 This field corresponds to the "caddr" field of
2704 EncTicketPartCommon.
2707 enc-authorization-data
2708 For TGS-REQ, this field contains authorization data encrypted
2709 using either the TGT session key or the AP-REQ subsession key;
2710 the KDC may copy these into the "authorization-data" field of
2711 EncTicketPartCommon if policy permits.
2715 Only present in the extensible messages. Specifies the set of
2716 languages which the client is willing to accept in error
2720 KDC options used in a KDC-REQ are:
2735 Yu Expires: Apr 2005 [Page 42]
2736 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2739 KDCOptions ::= KerberosFlags { KDCOptionsBits }
2742 KDCOptionsBits ::= BIT STRING {
2757 requestanonymous (14),
2759 disable-transited-check (26),
2761 enc-tkt-in-skey (28),
2764 -- XXX need "need ticket1" flag?
2768 Different options apply to different phases of KDC-REQ processing.
2771 The backwards-compatibility form of a KDC-REQ is:
2774 KDC-REQ-1510 ::= SEQUENCE {
2775 COMPONENTS OF KDC-REQ-COMMON,
2776 req-body [4] KDC-REQ-BODY-1510
2777 } (WITH COMPONENTS { ..., msg-type (10 | 12) })
2780 The extensible form of a KDC-REQ is:
2783 -- APPLICATION tag goes inside Signed{} as well as outside,
2784 -- to prevent possible substitution attacks.
2785 KDC-REQ-EXT ::= SEQUENCE {
2786 COMPONENTS OF KDC-REQ-COMMON,
2787 req-body [4] KDC-REQ-BODY-EXT,
2789 } (WITH COMPONENTS {
2792 padata (SIZE (1..MAX))
2796 The backwards-compatibility form of a KDC-REQ-BODY is:
2799 Yu Expires: Apr 2005 [Page 43]
2800 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2803 KDC-REQ-BODY-1510 ::= SEQUENCE {
2804 COMPONENTS OF KDC-REQ-BODY-COMMON
2805 } (WITH COMPONENTS {
2807 cname (PrincipalNameIA5),
2809 sname (PrincipalNameIA5),
2815 The extensible form of a KDC-REQ-BODY is:
2818 KDC-REQ-BODY-EXT ::= KDC-REQ-BODY-COMMON
2821 cname (PrincipalNameExt),
2823 sname (PrincipalNameExt),
2824 addresses (SIZE (1..MAX)),
2825 enc-authorization-data (EncryptedData {
2826 AuthorizationData (SIZE (1..MAX)),
2827 { key-session | key-subsession },
2828 { ku-TGSReqAuthData-subkey |
2829 ku-TGSReqAuthData-sesskey }
2831 additional-tickets (SIZE (1..MAX))
2859 Yu Expires: Apr 2005 [Page 44]
2860 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2864 rfc1510 [APPLICATION 10] KDC-REQ-1510
2868 -- AS-REQ must include client name
2869 req-body (WITH COMPONENTS { ..., cname PRESENT })
2871 ext [APPLICATION 6] Signed {
2872 -- APPLICATION tag goes inside Signed{} as well as
2873 -- outside, to prevent possible substitution attacks.
2874 [APPLICATION 6] KDC-REQ-EXT,
2875 -- not sure this is correct key to use; do we even want
2883 -- AS-REQ must include client name
2884 req-body (WITH COMPONENTS { ..., cname PRESENT })
2889 A client SHOULD NOT send the extensible AS-REQ alternative to a KDC
2890 if the client does not know that the KDC supports the extensibility
2891 framework. A client SHOULD send the extensible AS-REQ alternative in
2892 a PA-AS-REQ PA-DATA. A KDC supporting extensibility will treat the
2893 AS-REQ contained within the PA-AS-REQ as the actual AS-REQ. [ XXX
2894 what if their contents conflict? ]
2918 Yu Expires: Apr 2005 [Page 45]
2919 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2922 TGS-REQ ::= CHOICE {
2923 rfc1510 [APPLICATION 12] KDC-REQ-1510
2927 -- client name optional in TGS-REQ
2928 req-body (WITH COMPONENTS { ..., cname ABSENT })
2930 ext [APPLICATION 8] Signed {
2931 -- APPLICATION tag goes inside Signed{} as well as
2932 -- outside, to prevent possible substitution attacks.
2933 [APPLICATION 8] KDC-REQ-EXT,
2934 { key-session }, { ku-TGSReq-cksum }
2939 -- client name optional in TGS-REQ
2940 req-body (WITH COMPONENTS { ..., cname ABSENT })
2949 PA-DATA have multiple uses in the Kerberos protocol. They may pre-
2950 authenticate an AS-REQ; they may also modify several of the
2951 encryption keys used in a KDC-REP. PA-DATA may also provide "hints"
2952 to the client about which long-term key (usually password-derived) to
2953 use. PA-DATA may also include "hints" about which pre-authentication
2954 mechanisms to use, or include data for input into a pre-
2955 authentication mechanism.
2958 [ XXX enumerate standard padata here ]
2961 8.3. KDC-REQ Processing
2964 Processing of a KDC-REQ proceeds through several steps. An
2965 implementation need not perform these steps exactly as described, as
2966 long as it behaves as if the steps were performed as described. The
2967 KDC performs replay handling upon receiving the request; it then
2968 validates the request, adjusts timestamps, and selects the keys used
2969 in the reply. It copies data from the request into the issued
2970 ticket, adjusting the values to conform with its policies. The KDC
2971 then transmits the reply to the client.
2974 8.3.1. Handling Replays
2977 Because Kerberos can run over unreliable transports such as UDP, the
2978 KDC MUST be prepared to retransmit responses in case they are lost.
2979 If a KDC receives a request identical to one it has recently
2982 Yu Expires: Apr 2005 [Page 46]
2983 Internet-Draft yu-krb-extensions-02 25 Oct 2004
2986 successfully processed, the KDC MUST respond with a KDC-REP message
2987 rather than a replay error. In order to reduce the amount of
2988 ciphertext given to a potential attacker, KDCs MAY send the same
2989 response generated when the request was first handled. KDCs MUST
2990 obey this replay behavior even if the actual transport in use is
2991 reliable. If the AP-REQ which authenticates a TGS-REQ is a replay,
2992 and the entire request is not identical to a recently successfully
2993 processed request, the KDC SHOULD return "krb-ap-err-repeat", as is
2994 appropriate for AP-REQ processing.
2997 8.3.2. Request Validation
3000 8.3.2.1. AS-REQ Authentication
3003 Site policy determines whether a given client principal is required
3004 to provide some pre-authentication prior to receiving an AS-REP.
3005 Since the default reply key is typically the client's long-term
3006 password-based key, an attacker may easily request known plaintext
3007 (in the form of an AS-REP) upon which to mount a dictionary attack.
3008 Pre-authentication can limit the possibility of such an attack.
3011 If site policy requires pre-authentication for a client principal,
3012 and no pre-authentication is provided, the KDC returns the error
3013 "kdc-err-preauth-required". Accompanying this error are "e-data"
3014 which include hints telling the client which pre-authentication
3015 mechanisms to use, or data for input to pre-authentication mechanisms
3016 (e.g., input to challenge-response systems). If pre-authentication
3017 fails, the KDC returns the error "kdc-err-preauth-failed".
3020 [ may need additional changes based on Sam's preauth draft ]
3023 8.3.2.2. TGS-REQ Authentication
3026 A TGS-REQ has an accompanying AP-REQ, which is included in the "pa-
3027 tgs-req". The KDC MUST validate the checksum in the Authenticator of
3028 the AP-REQ, which is computed over the KDC-REQ-BODY-1510 or KDC-REQ-
3029 BODY-EXT (for TGS-REQ-1510 or TGS-REQ-EXT, respectively) of the
3030 request. [ padata not signed by authenticator! ] Any error from the
3031 AP-REQ validation process SHOULD be returned in a KRB-ERROR message.
3032 The service principal in the ticket of the AP-REQ may be a ticket-
3033 granting service principal, or a normal application service
3034 principal. A ticket which is not a ticket-granting ticket MUST NOT
3035 be used to issue a ticket for any service other than the one named in
3036 the ticket. In this case, the "renew", "validate", or "proxy" [?also
3037 forwarded?] option must be set in the request.
3040 8.3.2.3. Principal Validation
3043 If the client principal in an AS-REQ is unknown, the KDC returns the
3044 error "kdc-err-c-principal-unknown". If the server principal in a
3045 KDC-REQ is unknown, the KDC returns the error "kdc-err-s-principal-
3048 Yu Expires: Apr 2005 [Page 47]
3049 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3055 8.3.2.4. Checking For Revoked or Invalid Tickets
3061 Whenever a request is made to the ticket-granting server, the
3062 presented ticket(s) is(are) checked against a hot-list of tickets
3063 which have been canceled. This hot-list might be implemented by
3064 storing a range of issue timestamps for "suspect tickets"; if a
3065 presented ticket had an authtime in that range, it would be rejected.
3066 In this way, a stolen ticket-granting ticket or renewable ticket
3067 cannot be used to gain additional tickets (renewals or otherwise)
3068 once the theft has been reported to the KDC for the realm in which
3069 the server resides. Any normal ticket obtained before it was
3070 reported stolen will still be valid (because they require no
3071 interaction with the KDC), but only until their normal expiration
3072 time. If TGTs have been issued for cross-realm authentication, use
3073 of the cross-realm TGT will not be affected unless the hot-list is
3074 propagated to the KDCs for the realms for which such cross-realm
3075 tickets were issued.
3078 If a TGS-REQ ticket has its "invalid" flag set, the KDC MUST NOT
3079 issue any ticket unless the TGS-REQ requests the "validate" option.
3082 8.3.3. Timestamp Handling
3085 [ some aspects of timestamp handling, especially regarding postdating
3086 and renewal, are difficult to read in KCLAR... needs closer
3090 Processing of "starttime" (requested in the "from" field) differs
3091 depending on whether the "postdated" option is set in the request.
3092 If the "postdated" option is not set, and the requested "starttime"
3093 is in the future beyond the window of acceptable clock skew, the KDC
3094 returns the error "kdc-err-cannot-postdate". If the "postdated"
3095 option is not set, and the requested "starttime" is absent or does
3096 not indicate a time in the future beyond the acceptable clock skew,
3097 the KDC sets the "starttime" to the KDC's current time. The
3098 "postdated" option MUST NOT be honored if the ticket is being
3099 requested by TGS-REQ and the "may-postdate" is not set in the TGT.
3100 Otherwise, if the "postdated" option is set, and site policy permits,
3101 the KDC sets the "starttime" as requested, and sets the "invalid"
3102 flag in the new ticket.
3105 The "till" field is required in the RFC 1510 version of the KDC-REQ.
3106 If the "till" field is equal to "19700101000000Z" (midnight, January
3107 1, 1970), the KDC SHOULD behave as if the "till" field were absent.
3110 The KDC MUST NOT issue a ticket whose "starttime", "endtime", or
3111 "renew-till" time is later than the "renew-till" time of the ticket
3114 Yu Expires: Apr 2005 [Page 48]
3115 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3118 from which it is derived.
3121 8.3.3.1. AS-REQ Timestamp Processing
3124 In the AS exchange, the "authtime" of a ticket is set to the local
3128 The "endtime" of the ticket will be set to the earlier of the
3129 requested "till" time and a time determined by local policy, possibly
3130 determined using factors specific to the realm or principal. For
3131 example, the expiration time MAY be set to the earliest of the
3135 * the expiration time ("till" value) requested
3138 * the ticket's start time plus the maximum allowable lifetime
3139 associated with the client principal from the authentication
3143 * the ticket's start time plus the maximum allowable lifetime
3144 associated with the server principal
3147 * the ticket's start time plus the maximum lifetime set by the
3148 policy of the local realm
3151 If the requested expiration time minus the start time (as determined
3152 above) is less than a site-determined minimum lifetime, an error
3153 message with code "kdc-err-never-valid" is returned. If the
3154 requested expiration time for the ticket exceeds what was determined
3155 as above, and if the "renewable-ok" option was requested, then the
3156 "renewable" flag is set in the new ticket, and the "renew-till" value
3157 is set as if the "renewable" option were requested.
3160 If the "renewable" option has been requested or if the "renewable-ok"
3161 option has been set and a renewable ticket is to be issued, then the
3162 "renew-till" field MAY be set to the earliest of:
3165 * its requested value
3168 * the start time of the ticket plus the minimum of the two maximum
3169 renewable lifetimes associated with the principals' database
3173 * the start time of the ticket plus the maximum renewable lifetime
3174 set by the policy of the local realm
3177 8.3.3.2. TGS-REQ Timestamp Processing
3180 In the TGS exchange, the KDC sets the "authtime" to that of the
3181 ticket in the AP-REQ authenticating the TGS-REQ. [?application
3182 server can print a ticket for itself with a spoofed authtime.
3185 Yu Expires: Apr 2005 [Page 49]
3186 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3189 security issues for hot-list?] [ MIT implementation may change
3190 authtime of renewed tickets; needs check... ]
3193 If the TGS-REQ has a TGT as the ticket in its AP-REQ, and the TGS-REQ
3194 requests an "endtime" (in the "till" field), then the "endtime" of
3195 the new ticket is set to the minimum of
3198 * the requested "endtime" value,
3201 * the "endtime" in the TGT, and
3204 * an "endtime" determined by site policy on ticket lifetimes.
3207 If the new ticket is a renewal, the "endtime" of the new ticket is
3208 bounded by the minimum of
3211 * the requested "endtime" value,
3214 * the value of the "renew-till" value of the old,
3217 * the "starttime" of the new ticket plus the lifetime (endtime
3218 minus starttime) of the old ticket, i.e., the lifetime of the
3219 new ticket may not exceed that of the ticket being renewed [
3220 adapted from KCLAR 3.3.3. ], and
3223 * an "endtime" determined by site policy on ticket lifetimes.
3226 When handling a TGS-REQ, a KDC MUST NOT issue a postdated ticket with
3227 a "starttime", "endtime", or "renew-till" time later than the
3228 "renew-till" time of the TGT.
3231 8.3.4. Handling Transited Realms
3234 The KDC checks the ticket in a TGS-REQ against site policy, unless
3235 the "disable-transited-check" option is set in the TGS-REQ. If site
3236 policy permits the transit path in the TGS-REQ ticket, the KDC sets
3237 the "transited-policy-checked" flag in the issued ticket. If the
3238 "disable-transited-check" option is set, the issued ticket will have
3239 the "transited-policy-checked" flag cleared.
3242 8.3.5. Address Processing The requested "addresses" in the KDC-REQ are
3243 copied into the issued ticket. If the "addresses" field is absent or
3244 empty in a TGS-REQ, the KDC copies addresses from the ticket in the
3245 TGS-REQ into the issued ticket, unless the either "forwarded" or
3246 "proxy" option is set. If the "forwarded" option is set, and the
3247 ticket in the TGS-REQ has its "forwardable" flag set, the KDC copies
3248 the addresses from the TGS-REQ, not the from TGS-REQ ticket, into the
3249 issued ticket. The KDC behaves similarly if the "proxy" option is
3250 set in the TGS-REQ and the "proxiable" flag is set in the ticket.
3251 The "proxy" option will not be honored on requests for additional
3252 ticket-granting tickets.
3255 Yu Expires: Apr 2005 [Page 50]
3256 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3259 8.3.6. Ticket Flag Processing
3262 Many kdc-options request that the KDC set a corresponding flag in the
3263 issued ticket. kdc-options marked with an asterisk (*) in the
3264 following table do not directly request the corresponding ticket flag
3265 and therefore require special handling.
3269 kdc-option | ticket flag affected
3270 ________________________|__________________________
3271 forwardable | forwardable
3272 forwarded | forwarded
3273 proxiable | proxiable
3275 allow-postdate | may-postdate
3276 postdated | postdated
3277 renewable | renewable
3278 requestanonymous | anonymous
3280 disable-transited-check*| transited-policy-checked
3281 renewable-ok* | renewable
3290 The KDC sets the "forwarded" flag in the issued ticket if the
3291 "forwarded" option is set in the TGS-REQ and the "forwardable"
3292 flag is set in the TGS-REQ ticket.
3296 The KDC sets the "proxy" flag in the issued ticket if the
3297 "proxy" option is set in the TGS-REQ and the "proxiable" flag is
3298 set in the TGS-REQ ticket.
3301 disable-transited-check
3302 The handling of the "disable-transited-check" kdc-option is
3303 described in Section 8.3.4.
3307 The handling of the "renewable-ok" kdc-option is described in
3312 This flag modifies ticket key selection to use the session key
3313 of an additional ticket included in the TGS-REQ, for the purpose
3314 of user-to-user authentication.
3319 Yu Expires: Apr 2005 [Page 51]
3320 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3324 If the "validate" kdc-option is set in a TGS-REQ, and the
3325 "starttime" has passed, the KDC will clear the "invalid" bit on
3326 the ticket before re-issuing it.
3329 8.3.7. Key Selection
3332 Three keys are involved in creating a KDC-REP. The reply key
3333 encrypts the encrypted part of the KDC-REP. The session key is
3334 stored in the encrypted part of the ticket, and is also present in
3335 the encrypted part of the KDC-REP so that the client can retrieve it.
3336 The ticket key is used to encrypt the ticket. These keys all have
3337 initial values for a given exchange; pre-authentication and other
3338 extension mechanisms may change the value used for any of these keys.
3341 [ again, may need changes based on Sam's preauth draft ]
3344 8.3.7.1. Reply Key and Session Key Selection
3347 The set of encryption types which the client will understand appears
3348 in the "etype" field of KDC-REQ-BODY-COMMON. The KDC limits the set
3349 of possible reply keys and the set of session key encryption types
3350 based on the "etype" field.
3353 For the AS exchange, the reply key is initially a long-term key of
3354 the client, limited to those encryption types listed in the "etype"
3355 field. The KDC SHOULD use the first valid strong "etype" for which
3356 an encryption key is available. For the TGS exchange, the reply key
3357 is initially the subsession key of the Authenticator. If the
3358 Authenticator subsesion key is absent, the reply key is initially the
3359 session key of the ticket used to authenticate the TGS-REQ.
3362 The session key is initially randomly generated, and has an
3363 encryption type which both the client and the server will understand.
3364 Typically, the KDC has prior knowledge of which encryption types the
3365 server will understand. It selects the first valid strong "etype"
3366 listed the request which the server also will understand.
3369 8.3.7.2. Ticket Key Selection
3372 The ticket key is initially the long-term key of the service. The
3373 "enc-tkt-in-skey" option requests user-to-user authentication, where
3374 the ticket encryption key of the issued ticket is set equal to the
3375 session key of the additional ticket in the request.
3381 The important parts of the KDC-REP are encrypted.
3387 Yu Expires: Apr 2005 [Page 52]
3388 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3391 EncASRepPart1510 ::= [APPLICATION 25] EncKDCRepPart1510
3392 EncTGSRepPart1510 ::= [APPLICATION 26] EncKDCRepPart1510
3395 EncASRepPartExt ::= [APPLICATION 32] EncKDCRepPartExt
3396 EncTGSRepPartExt ::= [APPLICATION 33] EncKDCRepPartExt
3399 EncKDCRepPartCom ::= SEQUENCE {
3400 key [0] EncryptionKey,
3401 last-req [1] LastReq,
3403 key-expiration [3] KerberosTime OPTIONAL,
3404 flags [4] TicketFlags,
3405 authtime [5] KerberosTime,
3406 starttime [6] KerberosTime OPTIONAL,
3407 endtime [7] KerberosTime,
3408 renew-till [8] KerberosTime OPTIONAL,
3410 sname [10] PrincipalName,
3411 caddr [11] HostAddresses OPTIONAL,
3416 EncKDCRepPart1510 ::= SEQUENCE {
3417 COMPONENTS OF EncKDCRepPartCom
3418 } (WITH COMPONENTS {
3421 sname (PrincipalNameIA5),
3425 EncKdcRepPartExt ::= EncKDCRepPartCom (WITH COMPONENTS {
3428 sname (PrincipalNameExt)
3433 Most of the fields of EncKDCRepPartCom are duplicates of the
3434 corresponding fields in the returned ticket.
3449 Yu Expires: Apr 2005 [Page 53]
3450 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3453 KDC-REP-COMMON { EncPart } ::= SEQUENCE {
3454 pvno [0] INTEGER (5),
3455 msg-type [1] INTEGER (11 -- AS-REP.rfc1510 -- |
3456 13 -- TGS.rfc1510 -- |
3457 7 -- AS-REP.ext -- |
3458 9 -- TGS-REP.ext -- ),
3459 padata [2] SEQUENCE OF PA-DATA OPTIONAL,
3461 cname [4] PrincipalName,
3465 enc-part [6] EncryptedData {
3468 -- maybe reach into EncryptedData in AS-REP/TGS-REP
3469 -- definitions to apply constraints on key usages?
3470 { ku-EncASRepPart -- if AS-REP -- |
3471 ku-EncTGSRepPart-subkey -- if TGS-REP and
3472 -- using Authenticator
3474 ku-EncTGSRepPart-sesskey -- if TGS-REP and using
3475 -- subsession key -- }
3480 -- In extensible version, KDC signs original request
3481 -- to avoid replay attacks against client.
3482 req-cksum [7] ChecksumOf { CHOICE {
3485 }, { key-reply }, { ku-KDCRep-cksum }} OPTIONAL,
3486 lang-tag [8] LangTag OPTIONAL,
3492 KDC-REP-1510 { EncPart } ::= SEQUENCE {
3493 COMPONENTS OF KDC-REP-COMMON { EncPart }
3494 } (WITH COMPONENTS {
3498 cname (PrincipalNameIA5)
3509 Yu Expires: Apr 2005 [Page 54]
3510 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3513 KDC-REP-EXT { EncPart } ::= KDC-REP-COMMON { EncPart }
3518 cname (PrincipalNameExt)
3524 Signature of the original request using the reply key, to avoid
3525 replay attacks against the client, among other things. Only
3526 present in the extensible version of KDC-REP.
3530 rfc1510 [APPLICATION 11] KDC-REP-1510 {
3532 } (WITH COMPONENTS { ..., msg-type (11) }),
3533 ext [APPLICATION 7] Signed {
3534 [APPLICATION 7] KDC-REP-EXT { EncASRepPartExt },
3535 { key-reply }, { ku-ASRep-cksum }
3536 } (WITH COMPONENTS { ..., msg-type (7) })
3541 TGS-REP ::= CHOICE {
3542 rfc1510 [APPLICATION 13] KDC-REP-1510 {
3544 } (WITH COMPONENTS { ..., msg-type (13) }),
3545 ext [APPLICATION 9] Signed {
3546 [APPLICATION 9] KDC-REP-EXT { EncTGSRepPartExt },
3547 { key-reply }, { ku-TGSRep-cksum }
3548 } (WITH COMPONENTS { ..., msg-type (9) })
3553 The extensible versions of AS-REQ and TGS-REQ are signed with the
3554 reply key, to prevent an attacker from performing a delayed denial-
3555 of-service attack by substituting the ticket.
3558 8.5. Reply Validation
3561 [ signature verification ]
3570 Kerberos defines two IP transport mechanisms for the credentials
3571 acquisition protocol: UDP/IP and TCP/IP.
3575 Yu Expires: Apr 2005 [Page 55]
3576 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3579 8.6.1. UDP/IP transport
3582 Kerberos servers (KDCs) supporting IP transports MUST accept UDP
3583 requests and SHOULD listen for such requests on port 88 (decimal)
3584 unless specifically configured to listen on an alternative UDP port.
3585 Alternate ports MAY be used when running multiple KDCs for multiple
3586 realms on the same host.
3589 Kerberos clients supporting IP transports SHOULD support the sending
3590 of UDP requests. Clients SHOULD use KDC discovery (Section 8.6.3) to
3591 identify the IP address and port to which they will send their
3595 When contacting a KDC for a KRB_KDC_REQ request using UDP/IP
3596 transport, the client shall send a UDP datagram containing only an
3597 encoding of the request to the KDC. The KDC will respond with a reply
3598 datagram containing only an encoding of the reply message (either a
3599 KRB-ERROR or a KDC-REP) to the sending port at the sender's IP
3600 address. The response to a request made through UDP/IP transport MUST
3601 also use UDP/IP transport. If the response can not be handled using
3602 UDP (for example because it is too large), the KDC MUST return "krb-
3603 err-response-too-big", forcing the client to retry the request using
3607 8.6.2. TCP/IP transport
3610 Kerberos servers (KDCs) supporting IP transports MUST accept TCP
3611 requests and SHOULD listen for such requests on port 88 (decimal)
3612 unless specifically configured to listen on an alternate TCP port.
3613 Alternate ports MAY be used when running multiple KDCs for multiple
3614 realms on the same host.
3617 Clients MUST support the sending of TCP requests, but MAY choose to
3618 initially try a request using the UDP transport. Clients SHOULD use
3619 KDC discovery (Section 8.6.3) to identify the IP address and port to
3620 which they will send their request.
3623 Implementation note: Some extensions to the Kerberos protocol will
3624 not succeed if any client or KDC not supporting the TCP transport is
3625 involved. Implementations of RFC 1510 were not required to support
3629 When the KDC-REQ message is sent to the KDC over a TCP stream, the
3630 response (KDC-REP or KRB-ERROR message) MUST be returned to the
3631 client on the same TCP stream that was established for the request.
3632 The KDC MAY close the TCP stream after sending a response, but MAY
3633 leave the stream open for a reasonable period of time if it expects a
3634 followup. Care must be taken in managing TCP/IP connections on the
3635 KDC to prevent denial of service attacks based on the number of open
3640 Yu Expires: Apr 2005 [Page 56]
3641 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3644 The client MUST be prepared to have the stream closed by the KDC at
3645 anytime after the receipt of a response. A stream closure SHOULD NOT
3646 be treated as a fatal error. Instead, if multiple exchanges are
3647 required (e.g., certain forms of pre-authentication) the client may
3648 need to establish a new connection when it is ready to send
3649 subsequent messages. A client MAY close the stream after receiving a
3650 response, and SHOULD close the stream if it does not expect to send
3654 A client MAY send multiple requests before receiving responses,
3655 though it must be prepared to handle the connection being closed
3656 after the first response.
3659 Each request (KDC-REQ) and response (KDC-REP or KRB-ERROR) sent over
3660 the TCP stream is preceded by the length of the request as 4 octets
3661 in network byte order. The high bit of the length is reserved for
3662 future expansion and MUST currently be set to zero. If a KDC that
3663 does not understand how to interpret a set high bit of the length
3664 encoding receives a request with the high order bit of the length
3665 set, it MUST return a KRB-ERROR message with the error "krb-err-
3666 field-toolong" and MUST close the TCP stream.
3669 If multiple requests are sent over a single TCP connection, and the
3670 KDC sends multiple responses, the KDC is not required to send the
3671 responses in the order of the corresponding requests. This may
3672 permit some implementations to send each response as soon as it is
3673 ready even if earlier requests are still being processed (for
3674 example, waiting for a response from an external device or database).
3677 8.6.3. KDC Discovery on IP Networks
3680 Kerberos client implementations MUST provide a means for the client
3681 to determine the location of the Kerberos Key Distribution Centers
3682 (KDCs). Traditionally, Kerberos implementations have stored such
3683 configuration information in a file on each client machine.
3684 Experience has shown this method of storing configuration information
3685 presents problems with out-of-date information and scaling problems,
3686 especially when using cross-realm authentication. This section
3687 describes a method for using the Domain Name System [RFC 1035] for
3688 storing KDC location information.
3691 8.6.3.1. DNS vs. Kerberos - Case Sensitivity of Realm Names
3694 In Kerberos, realm names are case sensitive. While it is strongly
3695 encouraged that all realm names be all upper case this recommendation
3696 has not been adopted by all sites. Some sites use all lower case
3697 names and other use mixed case. DNS, on the other hand, is case
3698 insensitive for queries. Since the realm names "MYREALM", "myrealm",
3699 and "MyRealm" are all different, but resolve the same in the domain
3700 name system, it is necessary that only one of the possible
3701 combinations of upper and lower case characters be used in realm
3704 Yu Expires: Apr 2005 [Page 57]
3705 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3711 8.6.3.2. DNS SRV records for KDC location
3714 KDC location information is to be stored using the DNS SRV RR [RFC
3715 2782]. The format of this RR is as follows:
3718 _Service._Proto.Realm TTL Class SRV Priority Weight Port Target
3721 The Service name for Kerberos is always "kerberos".
3724 The Proto can be one of "udp", "tcp". If these SRV records are to be
3725 used, both "udp" and "tcp" records MUST be specified for all KDC
3729 The Realm is the Kerberos realm that this record corresponds to. The
3730 realm MUST be a domain style realm name.
3733 TTL, Class, SRV, Priority, Weight, and Target have the standard
3734 meaning as defined in RFC 2782.
3737 As per RFC 2782 the Port number used for "_udp" and "_tcp" SRV
3738 records SHOULD be the value assigned to "kerberos" by the Internet
3739 Assigned Number Authority: 88 (decimal) unless the KDC is configured
3740 to listen on an alternate TCP port.
3743 Implementation note: Many existing client implementations do not
3744 support KDC Discovery and are configured to send requests to the IANA
3745 assigned port (88 decimal), so it is strongly recommended that KDCs
3746 be configured to listen on that port.
3749 8.6.3.3. KDC Discovery for Domain Style Realm Names on IP Networks
3752 These are DNS records for a Kerberos realm EXAMPLE.COM. It has two
3753 Kerberos servers, kdc1.example.com and kdc2.example.com. Queries
3754 should be directed to kdc1.example.com first as per the specified
3755 priority. Weights are not used in these sample records.
3758 _kerberos._udp.EXAMPLE.COM. IN SRV 0 0 88 kdc1.example.com.
3759 _kerberos._udp.EXAMPLE.COM. IN SRV 1 0 88 kdc2.example.com.
3760 _kerberos._tcp.EXAMPLE.COM. IN SRV 0 0 88 kdc1.example.com.
3761 _kerberos._tcp.EXAMPLE.COM. IN SRV 1 0 88 kdc2.example.com.
3768 The KRB-ERROR message is returned by the KDC if an error occurs
3769 during credentials acquisition. It may also be returned by an
3770 application server if an error occurs during authentication.
3775 Yu Expires: Apr 2005 [Page 58]
3776 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3782 KRB-ERROR ::= CHOICE {
3783 rfc1510 [APPLICATION 30] KRB-ERROR-1510,
3784 ext [APPLICATION 23] Signed {
3785 KRB-ERROR-EXT, { ku-KrbError-cksum } }
3790 The extensible KRB-ERROR is only signed if there has been a key
3791 negotiated with its recipient. KRB-ERROR messages sent in response
3792 to AS-REQ messages will probably not be signed unless a
3793 preauthentication mechanism has negotiated a key. (Signing using a
3794 client's long-term key can expose ciphertext to dictionary attacks.)
3797 The parts of a KRB-ERROR common to both the backwards-compatibility
3798 and the extensibile messages are
3801 KRB-ERROR-COMMON ::= SEQUENCE {
3802 pvno [0] INTEGER (5),
3803 msg-type [1] INTEGER (30 | 23),
3804 ctime [2] KerberosTime OPTIONAL,
3805 cusec [3] Microseconds OPTIONAL,
3806 stime [4] KerberosTime,
3807 susec [5] Microseconds,
3808 error-code [6] ErrCode,
3809 crealm [7] Realm OPTIONAL,
3810 cname [8] PrincipalName OPTIONAL,
3811 realm [9] Realm -- Correct realm --,
3812 sname [10] PrincipalName -- Correct name --,
3813 e-text [11] KerberosString OPTIONAL,
3814 e-data [12] OCTET STRING OPTIONAL,
3816 typed-data [13] TYPED-DATA OPTIONAL,
3817 nonce [14] Nonce OPTIONAL,
3818 lang-tag [15] LangTag OPTIONAL,
3824 KRB-ERROR-1510 ::= SEQUENCE {
3825 COMPONENTS OF KRB-ERROR-COMMON
3826 } (WITH COMPONENTS {
3833 KRB-ERROR-EXT ::= [APPLICATION 23] KRB-ERROR-COMMON
3834 (WITH COMPONENTS { ..., msg-type (23) })
3838 Yu Expires: Apr 2005 [Page 59]
3839 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3843 Client's time, if known from a KDC-REQ or AP-REQ.
3847 KDC or application server's current time.
3851 Numeric error code designating the error.
3855 Client's realm and name, if known.
3859 server's realm and name. [ XXX what if these aren't known? ]
3863 Human-readable text providing additional details for the error.
3867 This field contains additional data about the error for use by
3868 the client to help it recover from or handle the error. If the
3869 "error-code" is "kdc-err-preauth-required", then the e-data
3870 field will contain an encoding of a sequence of padata fields,
3871 each corresponding to an acceptable pre-authentication method
3872 and optionally containing data for the method:
3875 METHOD-DATA ::= SEQUENCE OF PA-DATA
3879 For error codes defined in this document other than "kdc-err-
3880 preauth-required", the format and contents of the e-data field
3881 are implementation-defined. Similarly, for future error codes,
3882 the format and contents of the e-data field are implementation-
3883 defined unless specified.
3887 Indicates the language of the message in the "e-text" field. It
3888 is only present in the extensible KRB-ERROR.
3892 is the nonce from a KDC-REQ. It is only present in the
3893 extensible KRB-ERROR.
3897 TYPED-DATA is a typed hole allowing for additional data to be
3898 returned in error conditions, since "e-data" is insufficiently
3899 flexible for some purposes. TYPED-DATA is only present in the
3900 extensible KRB-ERROR.
3906 Yu Expires: Apr 2005 [Page 60]
3907 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3913 TYPED-DATA ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
3914 data-type [0] TDType,
3915 data-value [1] OCTET STRING OPTIONAL
3920 10. Session Key Exchange
3923 Session key exchange consists of the AP-REQ and AP-REP messages. The
3924 client sends the AP-REQ message, and the service responds with an
3925 AP-REP message if mutual authentication is desired. Following
3926 session key exchange, the client and service share a secret session
3927 key, or possibly a subsesion key, which can be used to protect
3928 further communications. Additionally, the session key exchange
3929 process can establish initial sequence numbers which the client and
3930 service can use to detect replayed messages.
3936 An AP-REQ message contains a ticket and a authenticator. The
3937 authenticator is ciphertext encrypted with the session key contained
3938 in the ticket. The plaintext contents of the authenticator are:
3941 -- plaintext of authenticator
3942 Authenticator ::= [APPLICATION 2] SEQUENCE {
3943 authenticator-vno [0] INTEGER (5),
3945 cname [2] PrincipalName,
3946 cksum [3] Checksum {{ key-session },
3947 { ku-Authenticator-cksum |
3948 ku-pa-TGSReq-cksum }} OPTIONAL,
3949 cusec [4] Microseconds,
3950 ctime [5] KerberosTime,
3951 subkey [6] EncryptionKey OPTIONAL,
3952 seq-number [7] SeqNum OPTIONAL,
3953 authorization-data [8] AuthorizationData OPTIONAL
3957 The common parts between the RFC 1510 and the extensible versions of
3970 Yu Expires: Apr 2005 [Page 61]
3971 Internet-Draft yu-krb-extensions-02 25 Oct 2004
3974 AP-REQ-COMMON ::= SEQUENCE {
3975 pvno [0] INTEGER (5),
3976 msg-type [1] INTEGER (14 | 18),
3977 ap-options [2] APOptions,
3979 authenticator [4] EncryptedData {
3982 { ku-APReq-authenticator |
3983 ku-pa-TGSReq-authenticator }
3986 extensions [5] ApReqExtensions OPTIONAL,
3987 lang-tag [6] SEQUENCE (SIZE (1..MAX))
3988 OF LangTag OPTIONAL,
3993 The complete definition of AP-REQ is:
3997 rfc1510 [APPLICATION 14] AP-REQ-1510,
3998 ext [APPLICATION 18] Signed {
3999 AP-REQ-EXT, { key-session }, { ku-APReq-cksum }
4005 AP-REQ-COMMON ::= SEQUENCE {
4006 pvno [0] INTEGER (5),
4007 msg-type [1] INTEGER (14 | 18),
4008 ap-options [2] APOptions,
4010 authenticator [4] EncryptedData {
4013 { ku-APReq-authenticator |
4014 ku-pa-TGSReq-authenticator }
4017 extensions [5] ApReqExtensions OPTIONAL,
4018 lang-tag [6] SEQUENCE (SIZE (1..MAX))
4019 OF LangTag OPTIONAL,
4030 Yu Expires: Apr 2005 [Page 62]
4031 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4034 AP-REQ-1510 ::= SEQUENCE {
4035 COMPONENTS OF AP-REQ-COMMON
4036 } (WITH COMPONENTS {
4039 authenticator (EncryptedData {
4040 Authenticator (WITH COMPONENTS {
4043 cname (PrincipalNameIA5),
4045 }), { key-session }, { ku-APReq-authenticator }})
4050 AP-REQ-EXT ::= AP-REQ-COMMON
4054 -- The following constraints on Authenticator assume that
4055 -- we want to restrict the use of AP-REQ-EXT with TicketExt
4056 -- only, since that is the only way we can enforce UTF-8.
4057 authenticator (EncryptedData {
4058 Authenticator (WITH COMPONENTS {
4061 cname (PrincipalNameExt),
4062 authorization-data (SIZE (1..MAX))
4063 }), { key-session }, { ku-APReq-authenticator }})
4068 APOptions ::= KerberosFlags { APOptionsBits }
4071 APOptionsBits ::= BIT STRING {
4073 use-session-key (1),
4082 An AP-REP message provides mutual authentication of the service to
4086 EncAPRepPart ::= CHOICE {
4087 rfc1510 [APPLICATION 27] EncAPRepPart1510,
4088 ext [APPLICATION 31] EncAPRepPartExt
4093 Yu Expires: Apr 2005 [Page 63]
4094 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4097 EncAPRepPartCom ::= SEQUENCE {
4098 ctime [0] KerberosTime,
4099 cusec [1] Microseconds,
4100 subkey [2] EncryptionKey OPTIONAL,
4101 seq-number [3] SeqNum OPTIONAL,
4103 authorization-data [4] AuthorizationData OPTIONAL,
4109 EncAPRepPart1510 ::= SEQUENCE {
4110 COMPONENTS OF ENCAPRepPartCom
4111 } (WITH COMPONENTS {
4113 seq-number (UInt32),
4114 authorization-data ABSENT
4119 EncAPRepPartExt ::= EncAPRepPartCom
4124 rfc1510 [APPLICATION 15] AP-REP-1510,
4125 ext [APPLICATION 19] Signed {
4127 { key-session | key-subsession }, { ku-APRep-cksum }}
4132 AP-REP-COMMON { EncPart } ::= SEQUENCE {
4133 pvno [0] INTEGER (5),
4134 msg-type [1] INTEGER (15 | 19),
4135 enc-part [2] EncryptedData {
4137 { key-session | key-subsession }, { ku-EncAPRepPart }},
4139 extensions [3] ApRepExtensions OPTIONAL,
4145 AP-REP-1510 ::= SEQUENCE {
4146 COMPONENTS OF AP-REP-COMMON { EncAPRepPart1510 }
4147 } (WITH COMPONENTS {
4155 Yu Expires: Apr 2005 [Page 64]
4156 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4159 AP-REP-EXT ::= [APPLICATION 19] AP-REP-COMMON {
4161 } (WITH COMPONENTS { ..., msg-type (19) })
4168 Once a session key has been established, the client and server can
4169 use several kinds of messages to securely transmit data. KRB-SAFE
4170 provides integrity protection for application data, while KRB-PRIV
4171 provides confidentiality along with integrity protection. The KRB-
4172 CRED message provides a means of securely forwarding credentials from
4173 the client host to the server host.
4179 The KRB-SAFE message provides integrity protection for an included
4183 -- Do we chew up another tag for KRB-SAFE-EXT? That would
4184 -- allow us to make safe-body optional, allowing for a GSS-MIC
4186 KRB-SAFE ::= [APPLICATION 20] SEQUENCE {
4187 pvno [0] INTEGER (5),
4188 msg-type [1] INTEGER (20),
4189 safe-body [2] KRB-SAFE-BODY,
4190 cksum [3] ChecksumOf {
4192 { key-session | key-subsession }, { ku-KrbSafe-cksum }},
4193 ... -- ASN.1 extensions must be excluded
4194 -- when sending to rfc1510 implementations
4199 KRB-SAFE-BODY ::= SEQUENCE {
4200 user-data [0] OCTET STRING,
4201 timestamp [1] KerberosTime OPTIONAL,
4202 usec [2] Microseconds OPTIONAL,
4203 seq-number [3] SeqNum OPTIONAL,
4204 s-address [4] HostAddress,
4205 r-address [5] HostAddress OPTIONAL,
4206 ... -- ASN.1 extensions must be excluded
4207 -- when sending to rfc1510 implementations
4215 The KRB-PRIV message provides confidentiality and integrity
4220 Yu Expires: Apr 2005 [Page 65]
4221 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4224 KRB-PRIV ::= [APPLICATION 21] SEQUENCE {
4225 pvno [0] INTEGER (5),
4226 msg-type [1] INTEGER (21),
4227 enc-part [3] EncryptedData {
4229 { key-session | key-subsession }, { ku-EncKrbPrivPart }},
4235 EncKrbPrivPart ::= [APPLICATION 28] SEQUENCE {
4236 user-data [0] OCTET STRING,
4237 timestamp [1] KerberosTime OPTIONAL,
4238 usec [2] Microseconds OPTIONAL,
4239 seq-number [3] SeqNum OPTIONAL,
4240 s-address [4] HostAddress -- sender's addr --,
4241 r-address [5] HostAddress OPTIONAL -- recip's addr --,
4242 ... -- ASN.1 extensions must be excluded
4243 -- when sending to rfc1510 implementations
4251 The KRB-CRED message provides a means of securely transferring
4252 credentials from the client to the service.
4255 KRB-CRED ::= CHOICE {
4256 rfc1510 [APPLICATION 22] KRB-CRED-1510,
4257 ext [APPLICATION 24] Signed {
4259 { key-session | key-subsession }, { ku-KrbCred-cksum }}
4264 KRB-CRED-COMMON ::= SEQUENCE {
4265 pvno [0] INTEGER (5),
4266 msg-type [1] INTEGER (22 | 24),
4267 tickets [2] SEQUENCE OF Ticket,
4268 enc-part [3] EncryptedData {
4270 { key-session | key-subsession }, { ku-EncKrbCredPart }},
4276 KRB-CRED-1510 ::= SEQUENCE {
4277 COMPONENTS OF KRB-CRED-COMMON
4278 } (WITH COMPONENTS { ..., msg-type (22) })
4283 Yu Expires: Apr 2005 [Page 66]
4284 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4287 KRB-CRED-EXT ::= [APPLICATION 24] KRB-CRED-COMMON
4288 (WITH COMPONENTS { ..., msg-type (24) })
4292 EncKrbCredPart ::= [APPLICATION 29] SEQUENCE {
4293 ticket-info [0] SEQUENCE OF KrbCredInfo,
4294 nonce [1] Nonce OPTIONAL,
4295 timestamp [2] KerberosTime OPTIONAL,
4296 usec [3] Microseconds OPTIONAL,
4297 s-address [4] HostAddress OPTIONAL,
4298 r-address [5] HostAddress OPTIONAL
4303 KrbCredInfo ::= SEQUENCE {
4304 key [0] EncryptionKey,
4305 prealm [1] Realm OPTIONAL,
4306 pname [2] PrincipalName OPTIONAL,
4307 flags [3] TicketFlags OPTIONAL,
4308 authtime [4] KerberosTime OPTIONAL,
4309 starttime [5] KerberosTime OPTIONAL,
4310 endtime [6] KerberosTime OPTIONAL,
4311 renew-till [7] KerberosTime OPTIONAL,
4312 srealm [8] Realm OPTIONAL,
4313 sname [9] PrincipalName OPTIONAL,
4314 caddr [10] HostAddresses OPTIONAL
4319 12. Security Considerations
4322 12.1. Time Synchronization
4325 Time synchronization between the KDC and application servers is
4326 necessary to prevent acceptance of expired tickets.
4329 Time synchronization is needed between application servers and
4330 clients to prevent replay attacks if a replay cache is being used.
4331 If negotiated subsession keys are used to encrypt application data,
4332 replay caches may not be necessary.
4338 12.3. Principal Name Reuse
4344 12.4. Password Guessing
4350 Yu Expires: Apr 2005 [Page 67]
4351 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4354 12.5. Forward Secrecy
4357 [from KCLAR 10.; needs some rewriting]
4360 The Kerberos protocol in its basic form does not provide perfect
4361 forward secrecy for communications. If traffic has been recorded by
4362 an eavesdropper, then messages encrypted using the KRB-PRIV message,
4363 or messages encrypted using application-specific encryption under
4364 keys exchanged using Kerberos can be decrypted if any of the user's,
4365 application server's, or KDC's key is subsequently discovered. This
4366 is because the session key used to encrypt such messages is
4367 transmitted over the network encrypted in the key of the application
4368 server, and also encrypted under the session key from the user's
4369 ticket-granting ticket when returned to the user in the TGS-REP
4370 message. The session key from the ticket-granting ticket was sent to
4371 the user in the AS-REP message encrypted in the user's secret key,
4372 and embedded in the ticket-granting ticket, which was encrypted in
4373 the key of the KDC. Application requiring perfect forward secrecy
4374 must exchange keys through mechanisms that provide such assurance,
4375 but may use Kerberos for authentication of the encrypted channel
4376 established through such other means.
4382 As an authentication service, Kerberos provides a means of verifying
4383 the identity of principals on a network. Kerberos does not, by
4384 itself, provide authorization. Applications SHOULD NOT accept the
4385 mere issuance of a service ticket by the Kerberos server as granting
4386 authority to use the service.
4389 12.7. Login Authentication
4392 Some applications, particularly those which provide login access when
4393 provided with a password, SHOULD NOT treat successful acquisition of
4394 credentials as sufficient proof of the user's identity. An attacker
4395 posing as a user could generate an illegitimate KDC-REP message which
4396 decrypts properly. To authenticate a user logging on to a local
4397 system, the credentials obtained SHOULD be used in a TGS exchange to
4398 obtain credentials for a local service. Successful use of those
4399 credentials to authenticate to the local service assures that the
4400 initially obtained credentials are from a valid KDC.
4403 13. IANA Considerations
4409 Each use of Int32 in this document defines a number space. [ XXX
4410 enumerate these ] Negative numbers are reserved for private use;
4411 local and experimental extensions should use these values. Zero is
4412 reserved and may not be assigned.
4416 Yu Expires: Apr 2005 [Page 68]
4417 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4420 Typed hole contents may be identified by either Int32 values or by
4421 RELATIVE-OID values. Since RELATIVE-OIDs define a hierarchical
4422 namespace, assignments to the top level of the RELATIVE-OID space may
4423 be made on a first-come, first-served basis.
4429 Much of the text here is adapted from draft-ietf-krb-wg-kerberos-
4430 clarifications-07. The description of the general form of the
4431 extensibility framework was derived from text by Sam Hartman.
4437 A. ASN.1 Module (Normative)
4441 iso(1) identified-organization(3) dod(6) internet(1)
4442 security(5) kerberosV5(2) modules(4) krb5spec3(4)
4443 } DEFINITIONS EXPLICIT TAGS ::= BEGIN
4447 -- OID arc for KerberosV5
4449 -- This OID may be used to identify Kerberos protocol messages
4450 -- encapsulated in other protocols.
4452 -- This OID also designates the OID arc for KerberosV5-related
4455 -- NOTE: RFC 1510 had an incorrect value (5) for "dod" in its
4457 id-krb5 OBJECT IDENTIFIER ::= {
4458 iso(1) identified-organization(3) dod(6) internet(1)
4459 security(5) kerberosV5(2)
4479 Yu Expires: Apr 2005 [Page 69]
4480 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4485 -- Applications should not directly reference any types
4486 -- other than KRB-PDU and its component types.
4488 KRB-PDU ::= CHOICE {
4500 krb-error KRB-ERROR,
4512 -- signed values representable in 32 bits
4514 -- These are often used as assigned numbers for various things.
4515 Int32 ::= INTEGER (-2147483648..2147483647)
4519 -- Typed hole identifiers
4522 rel-oid RELATIVE-OID
4527 -- unsigned 32 bit values
4528 UInt32 ::= INTEGER (0..4294967295)
4532 -- unsigned 64 bit values
4533 UInt64 ::= INTEGER (0..18446744073709551615)
4542 Yu Expires: Apr 2005 [Page 70]
4543 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4552 Microseconds ::= INTEGER (0..999999)
4556 KerberosTime ::= GeneralizedTime (CONSTRAINED BY {
4557 -- MUST NOT include fractional seconds
4562 -- used for names and for error messages
4563 KerberosString ::= CHOICE {
4564 ia5 GeneralString (IA5String),
4566 ... -- no extension may be sent
4567 -- to an rfc1510 implementation --
4572 -- IA5 choice only; useful for constraints
4573 KerberosStringIA5 ::= KerberosString
4574 (WITH COMPONENTS { ia5 PRESENT })
4577 -- IA5 excluded; useful for constraints
4578 KerberosStringExt ::= KerberosString
4579 (WITH COMPONENTS { ia5 ABSENT })
4583 -- used for language tags
4584 LangTag ::= PrintableString
4585 (FROM ("A".."Z" | "a".."z" | "0".."9" | "-"))
4605 Yu Expires: Apr 2005 [Page 71]
4606 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4609 -- assigned numbers for name types (used in principal names)
4613 -- Name type not known
4614 nt-unknown NameType ::= 0
4615 -- Just the name of the principal as in DCE, or for users
4616 nt-principal NameType ::= 1
4617 -- Service and other unique instance (krbtgt)
4618 nt-srv-inst NameType ::= 2
4619 -- Service with host name as instance (telnet, rcommands)
4620 nt-srv-hst NameType ::= 3
4621 -- Service with host as remaining components
4622 nt-srv-xhst NameType ::= 4
4624 nt-uid NameType ::= 5
4625 -- Encoded X.509 Distingished name [RFC 2253]
4626 nt-x500-principal NameType ::= 6
4627 -- Name in form of SMTP email name (e.g. user@foo.com)
4628 nt-smtp-name NameType ::= 7
4629 -- Enterprise name - may be mapped to principal name
4630 nt-enterprise NameType ::= 10
4634 PrincipalName ::= SEQUENCE {
4635 name-type [0] NameType,
4636 -- May have zero elements, or individual elements may be
4637 -- zero-length, but this is NOT RECOMMENDED.
4638 name-string [1] SEQUENCE OF KerberosString
4644 PrincipalNameIA5 ::= PrincipalName (WITH COMPONENTS {
4646 name-string (WITH COMPONENT (KerberosStringIA5))
4651 PrincipalNameExt ::= PrincpalName (WITH COMPONENTS {
4653 name-string (WITH COMPONENT (KerberosStringExt))
4666 Yu Expires: Apr 2005 [Page 72]
4667 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4670 Realm ::= KerberosString
4674 RealmIA5 ::= Realm (KerberosStringIA5)
4678 RealmExt ::= Realm (KerberosStringExt)
4682 KerberosFlags { NamedBits } ::= BIT STRING (SIZE (32..MAX))
4684 -- MUST be a valid value of -- NamedBits
4685 -- but if the value to be sent would be truncated to shorter
4686 -- than 32 bits according to DER, the value MUST be padded
4687 -- with trailing zero bits to 32 bits. Otherwise, no
4688 -- trailing zero bits may be present.
4698 HostAddress ::= SEQUENCE {
4699 addr-type [0] AddrType,
4700 address [1] OCTET STRING
4704 -- NOTE: HostAddresses is always used as an OPTIONAL field and
4705 -- should not be a zero-length SEQUENCE OF.
4707 -- The extensible messages explicitly constrain this to be
4709 HostAddresses ::= SEQUENCE OF HostAddress
4714 -- *** crypto-related types and assignments
4731 Yu Expires: Apr 2005 [Page 73]
4732 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4735 -- Assigned numbers denoting encryption mechanisms.
4739 -- assigned numbers for encryption schemes
4740 et-des-cbc-crc EType ::= 1
4741 et-des-cbc-md4 EType ::= 2
4742 et-des-cbc-md5 EType ::= 3
4744 et-des3-cbc-md5 EType ::= 5
4746 et-des3-cbc-sha1 EType ::= 7
4747 et-dsaWithSHA1-CmsOID EType ::= 9
4748 et-md5WithRSAEncryption-CmsOID EType ::= 10
4749 et-sha1WithRSAEncryption-CmsOID EType ::= 11
4750 et-rc2CBC-EnvOID EType ::= 12
4751 et-rsaEncryption-EnvOID EType ::= 13
4752 et-rsaES-OAEP-ENV-OID EType ::= 14
4753 et-des-ede3-cbc-Env-OID EType ::= 15
4754 et-des3-cbc-sha1-kd EType ::= 16
4756 et-aes128-cts-hmac-sha1-96 EType ::= 17
4758 et-aes256-cts-hmac-sha1-96 EType ::= 18
4760 et-rc4-hmac EType ::= 23
4762 et-rc4-hmac-exp EType ::= 24
4763 -- opaque; PacketCable
4764 et-subkey-keymaterial EType ::= 65
4789 Yu Expires: Apr 2005 [Page 74]
4790 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4793 -- Assigned numbers denoting key usages.
4798 -- Actual identifier names are provisional and subject to
4801 ku-pa-enc-ts KeyUsage ::= 1
4802 ku-Ticket KeyUsage ::= 2
4803 ku-EncASRepPart KeyUsage ::= 3
4804 ku-TGSReqAuthData-sesskey KeyUsage ::= 4
4805 ku-TGSReqAuthData-subkey KeyUsage ::= 5
4806 ku-pa-TGSReq-cksum KeyUsage ::= 6
4807 ku-pa-TGSReq-authenticator KeyUsage ::= 7
4808 ku-EncTGSRepPart-sesskey KeyUsage ::= 8
4809 ku-EncTGSRepPart-subkey KeyUsage ::= 9
4810 ku-Authenticator-cksum KeyUsage ::= 10
4811 ku-APReq-authenticator KeyUsage ::= 11
4812 ku-EncAPRepPart KeyUsage ::= 12
4813 ku-EncKrbPrivPart KeyUsage ::= 13
4814 ku-EncKrbCredPart KeyUsage ::= 14
4815 ku-KrbSafe-cksum KeyUsage ::= 15
4816 ku-ad-KDCIssued-cksum KeyUsage ::= 19
4820 -- The following numbers are provisional...
4821 -- conflicts may exist elsewhere.
4822 ku-Ticket-cksum KeyUsage ::= 25
4823 ku-ASReq-cksum KeyUsage ::= 26
4824 ku-TGSReq-cksum KeyUsage ::= 27
4825 ku-ASRep-cksum KeyUsage ::= 28
4826 ku-TGSRep-cksum KeyUsage ::= 29
4827 ku-APReq-cksum KeyUsage ::= 30
4828 ku-APRep-cksum KeyUsage ::= 31
4829 ku-KrbCred-cksum KeyUsage ::= 32
4830 ku-KrbError-cksum KeyUsage ::= 33
4831 ku-KDCRep-cksum KeyUsage ::= 34
4848 Yu Expires: Apr 2005 [Page 75]
4849 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4852 -- KeyToUse identifies which key is to be used to encrypt or
4853 -- sign a given value.
4855 -- Values of KeyToUse are never actually transmitted over the
4856 -- wire, or even used directly by the implementation in any
4857 -- way, as key usages are; it exists primarily to identify
4858 -- which key gets used for what purpose. Thus, the specific
4859 -- numeric values associated with this type are irrelevant.
4860 KeyToUse ::= ENUMERATED {
4863 -- server long term key
4865 -- client long term key
4867 -- key selected by KDC for encryption of a KDC-REP
4869 -- session key from ticket
4871 -- subsession key negotiated via AP-REQ/AP-REP
4878 EncryptionKey ::= SEQUENCE {
4880 keyvalue [1] OCTET STRING
4906 Yu Expires: Apr 2005 [Page 76]
4907 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4911 -- "Type" specifies which ASN.1 type is encrypted to the
4912 -- ciphertext in the EncryptedData. "Keys" specifies a set of
4913 -- keys of which one key may be used to encrypt the data.
4914 -- "KeyUsages" specifies a set of key usages, one of which may
4915 -- be used to encrypt.
4917 -- None of the parameters is transmitted over the wire.
4919 Type, KeyToUse:Keys, KeyUsage:KeyUsages
4922 kvno [1] UInt32 OPTIONAL,
4923 cipher [2] OCTET STRING (CONSTRAINED BY {
4924 -- must be encryption of --
4925 OCTET STRING (CONTAINING Type),
4926 -- with one of the keys -- KeyToUse:Keys,
4927 -- with key usage being one of --
4939 -- The parameters specify which key to use to produce the
4940 -- signature, as well as which key usage to use. The
4941 -- parameters are not actually sent over the wire.
4943 KeyToUse:Keys, KeyUsage:KeyUsages
4945 cksumtype [0] CksumType,
4946 checksum [1] OCTET STRING (CONSTRAINED BY {
4947 -- signed using one of the keys --
4949 -- with key usage being one of --
4965 Yu Expires: Apr 2005 [Page 77]
4966 Internet-Draft yu-krb-extensions-02 25 Oct 2004
4969 -- a Checksum that must contain the checksum
4970 -- of a particular type
4972 Type, KeyToUse:Keys, KeyUsage:KeyUsages
4973 } ::= Checksum { Keys, KeyUsages } (WITH COMPONENTS {
4975 checksum (CONSTRAINED BY {
4976 -- must be checksum of --
4977 OCTET STRING (CONTAINING Type)
4983 -- parameterized type for wrapping authenticated plaintext
4985 InnerType, KeyToUse:Keys, KeyUsage:KeyUsages
4987 cksum [0] ChecksumOf {
4988 InnerType, Keys, KeyUsages
4990 inner [1] InnerType,
5003 rfc1510 [APPLICATION 1] Ticket1510,
5004 ext [APPLICATION 4] Signed {
5005 TicketExt, { key-server }, { ku-Ticket-cksum }
5011 -- takes a parameter specifying which type gets encrypted
5012 TicketCommon { EncPart } ::= SEQUENCE {
5013 tkt-vno [0] INTEGER (5),
5015 sname [2] PrincipalName,
5016 enc-part [3] EncryptedData {
5017 EncPart, { key-server }, { ku-Ticket }
5020 extensions [4] TicketExtensions OPTIONAL,
5026 Yu Expires: Apr 2005 [Page 78]
5027 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5030 Ticket1510 ::= SEQUENCE {
5031 COMPONENTS OF TicketCommon { EncTicketPart1510 }
5032 } (WITH COMPONENTS {
5034 -- explicitly force IA5 in strings
5036 sname (PrincipalNameIA5)
5041 -- APPLICATION tag goes inside Signed{} as well as outside,
5042 -- to prevent possible substitution attacks.
5043 TicketExt ::= [APPLICATION 4] TicketCommon {
5045 } (WITH COMPONENTS {
5047 -- explicitly force UTF-8 in strings
5049 sname (PrincipalNameExt)
5054 -- Encrypted part of ticket
5055 EncTicketPart ::= CHOICE {
5056 rfc1510 [APPLICATION 3] EncTicketPart1510,
5057 ext [APPLICATION 5] EncTicketPartExt
5062 EncTicketPartCommon ::= SEQUENCE {
5063 flags [0] TicketFlags,
5064 key [1] EncryptionKey,
5066 cname [3] PrincipalName,
5067 transited [4] TransitedEncoding,
5068 authtime [5] KerberosTime,
5069 starttime [6] KerberosTime OPTIONAL,
5070 endtime [7] KerberosTime,
5071 renew-till [8] KerberosTime OPTIONAL,
5072 caddr [9] HostAddresses OPTIONAL,
5073 authorization-data [10] AuthorizationData OPTIONAL,
5086 Yu Expires: Apr 2005 [Page 79]
5087 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5090 EncTicketPart1510 ::= SEQUENCE {
5091 COMPONENTS OF EncTicketPartCommon
5092 } (WITH COMPONENTS {
5094 -- explicitly force IA5 in strings
5096 cname (PrincipalNameIA5)
5101 EncTicketPartExt ::= EncTicketPartCommon (WITH COMPONENTS {
5103 -- explicitly force UTF-8 in strings
5105 cname (PrincipalNameExt),
5106 -- explicitly constrain caddr to be non-empty if present
5107 caddr (SIZE (1..MAX)),
5108 -- forbid empty authorization-data encodings
5109 authorization-data (SIZE (1..MAX))
5115 -- *** Authorization Data
5123 AuthorizationData ::= SEQUENCE OF SEQUENCE {
5125 ad-data [1] OCTET STRING
5130 ad-if-relevant ADType ::= int32 : 1
5133 -- Encapsulates another AuthorizationData.
5134 -- Intended for application servers; receiving application servers
5136 AD-IF-RELEVANT ::= AuthorizationData
5149 Yu Expires: Apr 2005 [Page 80]
5150 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5153 -- KDC-issued privilege attributes
5154 ad-kdcissued ADType ::= int32 : 4
5157 AD-KDCIssued ::= SEQUENCE {
5158 ad-checksum [0] ChecksumOf {
5159 AuthorizationData, { key-session },
5160 { ku-ad-KDCIssued-cksum }},
5161 i-realm [1] Realm OPTIONAL,
5162 i-sname [2] PrincipalName OPTIONAL,
5163 elements [3] AuthorizationData
5168 ad-and-or ADType ::= int32 : 5
5171 AD-AND-OR ::= SEQUENCE {
5172 condition-count [0] INTEGER,
5173 elements [1] AuthorizationData
5178 -- KDCs MUST interpret any AuthorizationData wrapped in this.
5179 ad-mandatory-for-kdc ADType ::= int32 : 8
5180 AD-MANDATORY-FOR-KDC ::= AuthorizationData
5184 TrType ::= TH-id -- must be registered
5187 -- encoded Transited field
5188 TransitedEncoding ::= SEQUENCE {
5190 contents [1] OCTET STRING
5198 -- ticket extensions: for TicketExt only
5199 TicketExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
5201 te-data [1] OCTET STRING
5214 Yu Expires: Apr 2005 [Page 81]
5215 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5218 TicketFlags ::= KerberosFlags { TicketFlagsBits }
5221 TicketFlagsBits ::= BIT STRING {
5234 transited-policy-checked (12),
5235 ok-as-delegate (13),
5237 cksummed-ticket (15)
5273 Yu Expires: Apr 2005 [Page 82]
5274 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5278 rfc1510 [APPLICATION 10] KDC-REQ-1510
5282 -- AS-REQ must include client name
5283 req-body (WITH COMPONENTS { ..., cname PRESENT })
5285 ext [APPLICATION 6] Signed {
5286 -- APPLICATION tag goes inside Signed{} as well as
5287 -- outside, to prevent possible substitution attacks.
5288 [APPLICATION 6] KDC-REQ-EXT,
5289 -- not sure this is correct key to use; do we even want
5297 -- AS-REQ must include client name
5298 req-body (WITH COMPONENTS { ..., cname PRESENT })
5304 TGS-REQ ::= CHOICE {
5305 rfc1510 [APPLICATION 12] KDC-REQ-1510
5309 -- client name optional in TGS-REQ
5310 req-body (WITH COMPONENTS { ..., cname ABSENT })
5312 ext [APPLICATION 8] Signed {
5313 -- APPLICATION tag goes inside Signed{} as well as
5314 -- outside, to prevent possible substitution attacks.
5315 [APPLICATION 8] KDC-REQ-EXT,
5316 { key-session }, { ku-TGSReq-cksum }
5321 -- client name optional in TGS-REQ
5322 req-body (WITH COMPONENTS { ..., cname ABSENT })
5331 Yu Expires: Apr 2005 [Page 83]
5332 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5335 KDC-REQ-COMMON ::= SEQUENCE {
5336 -- NOTE: first tag is [1], not [0]
5337 pvno [1] INTEGER (5),
5338 msg-type [2] INTEGER (10 -- AS-REQ.rfc1510 --
5339 | 12 -- TGS-REQ.rfc1510 --
5340 | 6 -- AS-REQ.ext --
5341 | 8 -- TGS-REQ.ext -- ),
5342 padata [3] SEQUENCE OF PA-DATA OPTIONAL
5348 KDC-REQ-1510 ::= SEQUENCE {
5349 COMPONENTS OF KDC-REQ-COMMON,
5350 req-body [4] KDC-REQ-BODY-1510
5351 } (WITH COMPONENTS { ..., msg-type (10 | 12) })
5355 -- APPLICATION tag goes inside Signed{} as well as outside,
5356 -- to prevent possible substitution attacks.
5357 KDC-REQ-EXT ::= SEQUENCE {
5358 COMPONENTS OF KDC-REQ-COMMON,
5359 req-body [4] KDC-REQ-BODY-EXT,
5361 } (WITH COMPONENTS {
5364 padata (SIZE (1..MAX))
5390 Yu Expires: Apr 2005 [Page 84]
5391 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5394 KDC-REQ-BODY-COMMON ::= SEQUENCE {
5395 kdc-options [0] KDCOptions,
5396 cname [1] PrincipalName OPTIONAL
5397 -- Used only in AS-REQ --,
5401 -- Server's realm; also client's in AS-REQ --,
5404 sname [3] PrincipalName OPTIONAL,
5405 from [4] KerberosTime OPTIONAL,
5406 till [5] KerberosTime OPTIONAL
5407 -- was required in rfc1510;
5408 -- still required for compat versions
5412 rtime [6] KerberosTime OPTIONAL,
5414 etype [8] SEQUENCE OF EType
5415 -- in preference order --,
5418 addresses [9] HostAddresses OPTIONAL,
5419 enc-authorization-data [10] EncryptedData {
5420 AuthorizationData, { key-session | key-subsession },
5421 { ku-TGSReqAuthData-subkey |
5422 ku-TGSReqAuthData-sesskey }
5426 additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
5427 -- NOTE: not empty --,
5429 lang-tags [5] SEQUENCE (SIZE (1..MAX)) OF
5436 KDC-REQ-BODY-1510 ::= SEQUENCE {
5437 COMPONENTS OF KDC-REQ-BODY-COMMON
5438 } (WITH COMPONENTS {
5440 cname (PrincipalNameIA5),
5442 sname (PrincipalNameIA5),
5453 Yu Expires: Apr 2005 [Page 85]
5454 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5457 KDC-REQ-BODY-EXT ::= KDC-REQ-BODY-COMMON
5460 cname (PrincipalNameExt),
5462 sname (PrincipalNameExt),
5463 addresses (SIZE (1..MAX)),
5464 enc-authorization-data (EncryptedData {
5465 AuthorizationData (SIZE (1..MAX)),
5466 { key-session | key-subsession },
5467 { ku-TGSReqAuthData-subkey |
5468 ku-TGSReqAuthData-sesskey }
5470 additional-tickets (SIZE (1..MAX))
5475 KDCOptions ::= KerberosFlags { KDCOptionsBits }
5478 KDCOptionsBits ::= BIT STRING {
5493 requestanonymous (14),
5495 disable-transited-check (26),
5497 enc-tkt-in-skey (28),
5500 -- XXX need "need ticket1" flag?
5512 Yu Expires: Apr 2005 [Page 86]
5513 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5517 rfc1510 [APPLICATION 11] KDC-REP-1510 {
5519 } (WITH COMPONENTS { ..., msg-type (11) }),
5520 ext [APPLICATION 7] Signed {
5521 [APPLICATION 7] KDC-REP-EXT { EncASRepPartExt },
5522 { key-reply }, { ku-ASRep-cksum }
5523 } (WITH COMPONENTS { ..., msg-type (7) })
5528 TGS-REP ::= CHOICE {
5529 rfc1510 [APPLICATION 13] KDC-REP-1510 {
5531 } (WITH COMPONENTS { ..., msg-type (13) }),
5532 ext [APPLICATION 9] Signed {
5533 [APPLICATION 9] KDC-REP-EXT { EncTGSRepPartExt },
5534 { key-reply }, { ku-TGSRep-cksum }
5535 } (WITH COMPONENTS { ..., msg-type (9) })
5570 Yu Expires: Apr 2005 [Page 87]
5571 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5574 KDC-REP-COMMON { EncPart } ::= SEQUENCE {
5575 pvno [0] INTEGER (5),
5576 msg-type [1] INTEGER (11 -- AS-REP.rfc1510 -- |
5577 13 -- TGS.rfc1510 -- |
5578 7 -- AS-REP.ext -- |
5579 9 -- TGS-REP.ext -- ),
5580 padata [2] SEQUENCE OF PA-DATA OPTIONAL,
5582 cname [4] PrincipalName,
5586 enc-part [6] EncryptedData {
5589 -- maybe reach into EncryptedData in AS-REP/TGS-REP
5590 -- definitions to apply constraints on key usages?
5591 { ku-EncASRepPart -- if AS-REP -- |
5592 ku-EncTGSRepPart-subkey -- if TGS-REP and
5593 -- using Authenticator
5595 ku-EncTGSRepPart-sesskey -- if TGS-REP and using
5596 -- subsession key -- }
5601 -- In extensible version, KDC signs original request
5602 -- to avoid replay attacks against client.
5603 req-cksum [7] ChecksumOf { CHOICE {
5606 }, { key-reply }, { ku-KDCRep-cksum }} OPTIONAL,
5607 lang-tag [8] LangTag OPTIONAL,
5613 KDC-REP-1510 { EncPart } ::= SEQUENCE {
5614 COMPONENTS OF KDC-REP-COMMON { EncPart }
5615 } (WITH COMPONENTS {
5619 cname (PrincipalNameIA5)
5630 Yu Expires: Apr 2005 [Page 88]
5631 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5634 KDC-REP-EXT { EncPart } ::= KDC-REP-COMMON { EncPart }
5639 cname (PrincipalNameExt)
5644 EncASRepPart1510 ::= [APPLICATION 25] EncKDCRepPart1510
5645 EncTGSRepPart1510 ::= [APPLICATION 26] EncKDCRepPart1510
5648 EncASRepPartExt ::= [APPLICATION 32] EncKDCRepPartExt
5649 EncTGSRepPartExt ::= [APPLICATION 33] EncKDCRepPartExt
5652 EncKDCRepPartCom ::= SEQUENCE {
5653 key [0] EncryptionKey,
5654 last-req [1] LastReq,
5656 key-expiration [3] KerberosTime OPTIONAL,
5657 flags [4] TicketFlags,
5658 authtime [5] KerberosTime,
5659 starttime [6] KerberosTime OPTIONAL,
5660 endtime [7] KerberosTime,
5661 renew-till [8] KerberosTime OPTIONAL,
5663 sname [10] PrincipalName,
5664 caddr [11] HostAddresses OPTIONAL,
5669 EncKDCRepPart1510 ::= SEQUENCE {
5670 COMPONENTS OF EncKDCRepPartCom
5671 } (WITH COMPONENTS {
5674 sname (PrincipalNameIA5),
5678 EncKdcRepPartExt ::= EncKDCRepPartCom (WITH COMPONENTS {
5681 sname (PrincipalNameExt)
5692 Yu Expires: Apr 2005 [Page 89]
5693 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5697 LastReq ::= SEQUENCE OF SEQUENCE {
5699 lr-value [1] KerberosTime
5710 PaDataType ::= TH-id
5711 PaDataOID ::= RELATIVE-OID
5714 PA-DATA ::= SEQUENCE {
5715 -- NOTE: first tag is [1], not [0]
5716 padata-type [1] PaDataType,
5717 padata-value [2] OCTET STRING
5722 -- AP-REQ authenticating a TGS-REQ
5723 pa-tgs-req PaDataType ::= int32 : 1
5724 PA-TGS-REQ ::= AP-REQ
5728 -- Encrypted timestamp preauth
5729 -- Encryption key used is client's long-term key.
5730 pa-enc-timestamp PaDataType ::= int32 : 2
5733 PA-ENC-TIMESTAMP ::= EncryptedData {
5734 PA-ENC-TS-ENC, { key-client }, { ku-pa-enc-ts }
5738 PA-ENC-TS-ENC ::= SEQUENCE {
5739 patimestamp [0] KerberosTime -- client's time --,
5740 pausec [1] Microseconds OPTIONAL
5756 Yu Expires: Apr 2005 [Page 90]
5757 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5760 -- Hints returned in AS-REP or KRB-ERROR to help client
5761 -- choose a password-derived key, either for preauthentication
5762 -- or for decryption of the reply.
5763 pa-etype-info PaDataType ::= int32 : 11
5766 ETYPE-INFO ::= SEQUENCE OF ETYPE-INFO-ENTRY
5769 ETYPE-INFO-ENTRY ::= SEQUENCE {
5771 salt [1] OCTET STRING OPTIONAL
5776 -- Similar to etype-info, but with parameters provided for
5777 -- the string-to-key function.
5778 pa-etype-info2 PaDataType ::= int32 : 19
5781 ETYPE-INFO2 ::= SEQUENCE (SIZE (1..MAX))
5785 ETYPE-INFO2-ENTRY ::= SEQUENCE {
5787 salt [1] KerberosString OPTIONAL,
5788 s2kparams [2] OCTET STRING OPTIONAL
5793 -- Obsolescent. Salt for client's long-term key.
5794 -- Its character encoding is unspecified.
5795 pa-pw-salt PaDataType ::= int32 : 3
5796 -- The "padata-value" does not encode an ASN.1 type.
5797 -- Instead, "padata-value" must consist of the salt string to
5798 -- be used by the client, in an unspecified character
5803 -- An extensible AS-REQ may be sent as a padata in a
5804 -- non-extensible AS-REQ to allow for backwards compatibility.
5805 pa-as-req PaDataType ::= int32 : 42 -- provisional
5806 PA-AS-REQ ::= AS-REQ (WITH COMPONENTS ext)
5811 -- *** Session key exchange
5821 Yu Expires: Apr 2005 [Page 91]
5822 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5826 rfc1510 [APPLICATION 14] AP-REQ-1510,
5827 ext [APPLICATION 18] Signed {
5828 AP-REQ-EXT, { key-session }, { ku-APReq-cksum }
5834 AP-REQ-COMMON ::= SEQUENCE {
5835 pvno [0] INTEGER (5),
5836 msg-type [1] INTEGER (14 | 18),
5837 ap-options [2] APOptions,
5839 authenticator [4] EncryptedData {
5842 { ku-APReq-authenticator |
5843 ku-pa-TGSReq-authenticator }
5846 extensions [5] ApReqExtensions OPTIONAL,
5847 lang-tag [6] SEQUENCE (SIZE (1..MAX))
5848 OF LangTag OPTIONAL,
5854 AP-REQ-1510 ::= SEQUENCE {
5855 COMPONENTS OF AP-REQ-COMMON
5856 } (WITH COMPONENTS {
5859 authenticator (EncryptedData {
5860 Authenticator (WITH COMPONENTS {
5863 cname (PrincipalNameIA5),
5865 }), { key-session }, { ku-APReq-authenticator }})
5880 Yu Expires: Apr 2005 [Page 92]
5881 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5884 AP-REQ-EXT ::= AP-REQ-COMMON
5888 -- The following constraints on Authenticator assume that
5889 -- we want to restrict the use of AP-REQ-EXT with TicketExt
5890 -- only, since that is the only way we can enforce UTF-8.
5891 authenticator (EncryptedData {
5892 Authenticator (WITH COMPONENTS {
5895 cname (PrincipalNameExt),
5896 authorization-data (SIZE (1..MAX))
5897 }), { key-session }, { ku-APReq-authenticator }})
5902 ApReqExtType ::= TH-id
5905 ApReqExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
5906 apReqExt-Type [0] ApReqExtType,
5907 apReqExt-Data [1] OCTET STRING
5912 APOptions ::= KerberosFlags { APOptionsBits }
5915 APOptionsBits ::= BIT STRING {
5917 use-session-key (1),
5923 -- plaintext of authenticator
5924 Authenticator ::= [APPLICATION 2] SEQUENCE {
5925 authenticator-vno [0] INTEGER (5),
5927 cname [2] PrincipalName,
5928 cksum [3] Checksum {{ key-session },
5929 { ku-Authenticator-cksum |
5930 ku-pa-TGSReq-cksum }} OPTIONAL,
5931 cusec [4] Microseconds,
5932 ctime [5] KerberosTime,
5933 subkey [6] EncryptionKey OPTIONAL,
5934 seq-number [7] SeqNum OPTIONAL,
5935 authorization-data [8] AuthorizationData OPTIONAL
5942 Yu Expires: Apr 2005 [Page 93]
5943 Internet-Draft yu-krb-extensions-02 25 Oct 2004
5947 rfc1510 [APPLICATION 15] AP-REP-1510,
5948 ext [APPLICATION 19] Signed {
5950 { key-session | key-subsession }, { ku-APRep-cksum }}
5955 AP-REP-COMMON { EncPart } ::= SEQUENCE {
5956 pvno [0] INTEGER (5),
5957 msg-type [1] INTEGER (15 | 19),
5958 enc-part [2] EncryptedData {
5960 { key-session | key-subsession }, { ku-EncAPRepPart }},
5962 extensions [3] ApRepExtensions OPTIONAL,
5968 AP-REP-1510 ::= SEQUENCE {
5969 COMPONENTS OF AP-REP-COMMON { EncAPRepPart1510 }
5970 } (WITH COMPONENTS {
5977 AP-REP-EXT ::= [APPLICATION 19] AP-REP-COMMON {
5979 } (WITH COMPONENTS { ..., msg-type (19) })
5983 ApRepExtType ::= TH-id
5986 ApRepExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
5987 apRepExt-Type [0] ApRepExtType,
5988 apRepExt-Data [1] OCTET STRING
5993 EncAPRepPart ::= CHOICE {
5994 rfc1510 [APPLICATION 27] EncAPRepPart1510,
5995 ext [APPLICATION 31] EncAPRepPartExt
6005 Yu Expires: Apr 2005 [Page 94]
6006 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6009 EncAPRepPart1510 ::= SEQUENCE {
6010 COMPONENTS OF ENCAPRepPartCom
6011 } (WITH COMPONENTS {
6013 seq-number (UInt32),
6014 authorization-data ABSENT
6019 EncAPRepPartExt ::= EncAPRepPartCom
6023 EncAPRepPartCom ::= SEQUENCE {
6024 ctime [0] KerberosTime,
6025 cusec [1] Microseconds,
6026 subkey [2] EncryptionKey OPTIONAL,
6027 seq-number [3] SeqNum OPTIONAL,
6029 authorization-data [4] AuthorizationData OPTIONAL,
6036 -- *** Application messages
6041 -- Do we chew up another tag for KRB-SAFE-EXT? That would
6042 -- allow us to make safe-body optional, allowing for a GSS-MIC
6044 KRB-SAFE ::= [APPLICATION 20] SEQUENCE {
6045 pvno [0] INTEGER (5),
6046 msg-type [1] INTEGER (20),
6047 safe-body [2] KRB-SAFE-BODY,
6048 cksum [3] ChecksumOf {
6050 { key-session | key-subsession }, { ku-KrbSafe-cksum }},
6051 ... -- ASN.1 extensions must be excluded
6052 -- when sending to rfc1510 implementations
6066 Yu Expires: Apr 2005 [Page 95]
6067 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6070 KRB-SAFE-BODY ::= SEQUENCE {
6071 user-data [0] OCTET STRING,
6072 timestamp [1] KerberosTime OPTIONAL,
6073 usec [2] Microseconds OPTIONAL,
6074 seq-number [3] SeqNum OPTIONAL,
6075 s-address [4] HostAddress,
6076 r-address [5] HostAddress OPTIONAL,
6077 ... -- ASN.1 extensions must be excluded
6078 -- when sending to rfc1510 implementations
6083 KRB-PRIV ::= [APPLICATION 21] SEQUENCE {
6084 pvno [0] INTEGER (5),
6085 msg-type [1] INTEGER (21),
6086 enc-part [3] EncryptedData {
6088 { key-session | key-subsession }, { ku-EncKrbPrivPart }},
6094 EncKrbPrivPart ::= [APPLICATION 28] SEQUENCE {
6095 user-data [0] OCTET STRING,
6096 timestamp [1] KerberosTime OPTIONAL,
6097 usec [2] Microseconds OPTIONAL,
6098 seq-number [3] SeqNum OPTIONAL,
6099 s-address [4] HostAddress -- sender's addr --,
6100 r-address [5] HostAddress OPTIONAL -- recip's addr --,
6101 ... -- ASN.1 extensions must be excluded
6102 -- when sending to rfc1510 implementations
6107 KRB-CRED ::= CHOICE {
6108 rfc1510 [APPLICATION 22] KRB-CRED-1510,
6109 ext [APPLICATION 24] Signed {
6111 { key-session | key-subsession }, { ku-KrbCred-cksum }}
6126 Yu Expires: Apr 2005 [Page 96]
6127 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6130 KRB-CRED-COMMON ::= SEQUENCE {
6131 pvno [0] INTEGER (5),
6132 msg-type [1] INTEGER (22 | 24),
6133 tickets [2] SEQUENCE OF Ticket,
6134 enc-part [3] EncryptedData {
6136 { key-session | key-subsession }, { ku-EncKrbCredPart }},
6142 KRB-CRED-1510 ::= SEQUENCE {
6143 COMPONENTS OF KRB-CRED-COMMON
6144 } (WITH COMPONENTS { ..., msg-type (22) })
6148 KRB-CRED-EXT ::= [APPLICATION 24] KRB-CRED-COMMON
6149 (WITH COMPONENTS { ..., msg-type (24) })
6153 EncKrbCredPart ::= [APPLICATION 29] SEQUENCE {
6154 ticket-info [0] SEQUENCE OF KrbCredInfo,
6155 nonce [1] Nonce OPTIONAL,
6156 timestamp [2] KerberosTime OPTIONAL,
6157 usec [3] Microseconds OPTIONAL,
6158 s-address [4] HostAddress OPTIONAL,
6159 r-address [5] HostAddress OPTIONAL
6164 KrbCredInfo ::= SEQUENCE {
6165 key [0] EncryptionKey,
6166 prealm [1] Realm OPTIONAL,
6167 pname [2] PrincipalName OPTIONAL,
6168 flags [3] TicketFlags OPTIONAL,
6169 authtime [4] KerberosTime OPTIONAL,
6170 starttime [5] KerberosTime OPTIONAL,
6171 endtime [6] KerberosTime OPTIONAL,
6172 renew-till [7] KerberosTime OPTIONAL,
6173 srealm [8] Realm OPTIONAL,
6174 sname [9] PrincipalName OPTIONAL,
6175 caddr [10] HostAddresses OPTIONAL
6187 Yu Expires: Apr 2005 [Page 97]
6188 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6191 TGT-REQ ::= [APPLICATION 16] SEQUENCE {
6192 pvno [0] INTEGER (5),
6193 msg-type [1] INTEGER (16),
6194 sname [2] PrincipalName OPTIONAL,
6195 srealm [3] Realm OPTIONAL,
6202 -- *** Error messages
6210 KRB-ERROR ::= CHOICE {
6211 rfc1510 [APPLICATION 30] KRB-ERROR-1510,
6212 ext [APPLICATION 23] Signed {
6213 KRB-ERROR-EXT, { ku-KrbError-cksum } }
6218 KRB-ERROR-COMMON ::= SEQUENCE {
6219 pvno [0] INTEGER (5),
6220 msg-type [1] INTEGER (30 | 23),
6221 ctime [2] KerberosTime OPTIONAL,
6222 cusec [3] Microseconds OPTIONAL,
6223 stime [4] KerberosTime,
6224 susec [5] Microseconds,
6225 error-code [6] ErrCode,
6226 crealm [7] Realm OPTIONAL,
6227 cname [8] PrincipalName OPTIONAL,
6228 realm [9] Realm -- Correct realm --,
6229 sname [10] PrincipalName -- Correct name --,
6230 e-text [11] KerberosString OPTIONAL,
6231 e-data [12] OCTET STRING OPTIONAL,
6233 typed-data [13] TYPED-DATA OPTIONAL,
6234 nonce [14] Nonce OPTIONAL,
6235 lang-tag [15] LangTag OPTIONAL,
6248 Yu Expires: Apr 2005 [Page 98]
6249 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6252 KRB-ERROR-1510 ::= SEQUENCE {
6253 COMPONENTS OF KRB-ERROR-COMMON
6254 } (WITH COMPONENTS {
6261 KRB-ERROR-EXT ::= [APPLICATION 23] KRB-ERROR-COMMON
6262 (WITH COMPONENTS { ..., msg-type (23) })
6266 METHOD-DATA ::= SEQUENCE OF PA-DATA
6273 TYPED-DATA ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
6274 data-type [0] TDType,
6275 data-value [1] OCTET STRING OPTIONAL
6309 Yu Expires: Apr 2005 [Page 99]
6310 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6319 kdc-err-none ErrCode ::= 0
6320 -- Client's entry in database has expired
6321 kdc-err-name-exp ErrCode ::= 1
6322 -- Server's entry in database has expired
6323 kdc-err-service-exp ErrCode ::= 2
6324 -- Requested protocol version number not supported
6325 kdc-err-bad-pvno ErrCode ::= 3
6326 -- Client's key encrypted in old master key
6327 kdc-err-c-old-mast-kvno ErrCode ::= 4
6328 -- Server's key encrypted in old master key
6329 kdc-err-s-old-mast-kvno ErrCode ::= 5
6330 -- Client not found in Kerberos database
6331 kdc-err-c-principal-unknown ErrCode ::= 6
6332 -- Server not found in Kerberos database
6333 kdc-err-s-principal-unknown ErrCode ::= 7
6334 -- Multiple principal entries in database
6335 kdc-err-principal-not-unique ErrCode ::= 8
6336 -- The client or server has a null key
6337 kdc-err-null-key ErrCode ::= 9
6338 -- Ticket not eligible for postdating
6339 kdc-err-cannot-postdate ErrCode ::= 10
6340 -- Requested start time is later than end time
6341 kdc-err-never-valid ErrCode ::= 11
6342 -- KDC policy rejects request
6343 kdc-err-policy ErrCode ::= 12
6344 -- KDC cannot accommodate requested option
6345 kdc-err-badoption ErrCode ::= 13
6346 -- KDC has no support for encryption type
6347 kdc-err-etype-nosupp ErrCode ::= 14
6348 -- KDC has no support for checksum type
6349 kdc-err-sumtype-nosupp ErrCode ::= 15
6350 -- KDC has no support for padata type
6351 kdc-err-padata-type-nosupp ErrCode ::= 16
6352 -- KDC has no support for transited type
6353 kdc-err-trtype-nosupp ErrCode ::= 17
6354 -- Clients credentials have been revoked
6355 kdc-err-client-revoked ErrCode ::= 18
6356 -- Credentials for server have been revoked
6357 kdc-err-service-revoked ErrCode ::= 19
6358 -- TGT has been revoked
6359 kdc-err-tgt-revoked ErrCode ::= 20
6367 Yu Expires: Apr 2005 [Page 100]
6368 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6371 -- Client not yet valid - try again later
6372 kdc-err-client-notyet ErrCode ::= 21
6373 -- Server not yet valid - try again later
6374 kdc-err-service-notyet ErrCode ::= 22
6375 -- Password has expired - change password to reset
6376 kdc-err-key-expired ErrCode ::= 23
6377 -- Pre-authentication information was invalid
6378 kdc-err-preauth-failed ErrCode ::= 24
6379 -- Additional pre-authenticationrequired
6380 kdc-err-preauth-required ErrCode ::= 25
6381 -- Requested server and ticket don't match
6382 kdc-err-server-nomatch ErrCode ::= 26
6383 -- Server principal valid for user2user only
6384 kdc-err-must-use-user2user ErrCode ::= 27
6385 -- KDC Policy rejects transited path
6386 kdc-err-path-not-accpeted ErrCode ::= 28
6387 -- A service is not available
6388 kdc-err-svc-unavailable ErrCode ::= 29
6389 -- Integrity check on decrypted field failed
6390 krb-ap-err-bad-integrity ErrCode ::= 31
6392 krb-ap-err-tkt-expired ErrCode ::= 32
6393 -- Ticket not yet valid
6394 krb-ap-err-tkt-nyv ErrCode ::= 33
6395 -- Request is a replay
6396 krb-ap-err-repeat ErrCode ::= 34
6397 -- The ticket isn't for us
6398 krb-ap-err-not-us ErrCode ::= 35
6399 -- Ticket and authenticator don't match
6400 krb-ap-err-badmatch ErrCode ::= 36
6401 -- Clock skew too great
6402 krb-ap-err-skew ErrCode ::= 37
6403 -- Incorrect net address
6404 krb-ap-err-badaddr ErrCode ::= 38
6405 -- Protocol version mismatch
6406 krb-ap-err-badversion ErrCode ::= 39
6408 krb-ap-err-msg-type ErrCode ::= 40
6424 Yu Expires: Apr 2005 [Page 101]
6425 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6428 -- Message stream modified
6429 krb-ap-err-modified ErrCode ::= 41
6430 -- Message out of order
6431 krb-ap-err-badorder ErrCode ::= 42
6432 -- Specified version of key is not available
6433 krb-ap-err-badkeyver ErrCode ::= 44
6434 -- Service key not available
6435 krb-ap-err-nokey ErrCode ::= 45
6436 -- Mutual authentication failed
6437 krb-ap-err-mut-fail ErrCode ::= 46
6438 -- Incorrect message direction
6439 krb-ap-err-baddirection ErrCode ::= 47
6440 -- Alternative authentication method required
6441 krb-ap-err-method ErrCode ::= 48
6442 -- Incorrect sequence number in message
6443 krb-ap-err-badseq ErrCode ::= 49
6444 -- Inappropriate type of checksum in message
6445 krb-ap-err-inapp-cksum ErrCode ::= 50
6446 -- Policy rejects transited path
6447 krb-ap-path-not-accepted ErrCode ::= 51
6448 -- Response too big for UDP, retry with TCP
6449 krb-err-response-too-big ErrCode ::= 52
6450 -- Generic error (description in e-text)
6451 krb-err-generic ErrCode ::= 60
6481 Yu Expires: Apr 2005 [Page 102]
6482 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6485 -- Field is too long for this implementation
6486 krb-err-field-toolong ErrCode ::= 61
6487 -- Reserved for PKINIT
6488 kdc-error-client-not-trusted ErrCode ::= 62
6489 -- Reserved for PKINIT
6490 kdc-error-kdc-not-trusted ErrCode ::= 63
6491 -- Reserved for PKINIT
6492 kdc-error-invalid-sig ErrCode ::= 64
6493 -- Reserved for PKINIT
6494 kdc-err-key-too-weak ErrCode ::= 65
6495 -- Reserved for PKINIT
6496 kdc-err-certificate-mismatch ErrCode ::= 66
6497 -- No TGT available to validate USER-TO-USER
6498 krb-ap-err-no-tgt ErrCode ::= 67
6499 -- USER-TO-USER TGT issued different KDC
6500 kdc-err-wrong-realm ErrCode ::= 68
6501 -- Ticket must be for USER-TO-USER
6502 krb-ap-err-user-to-user-required ErrCode ::= 69
6503 -- Reserved for PKINIT
6504 kdc-err-cant-verify-certificate ErrCode ::= 70
6505 -- Reserved for PKINIT
6506 kdc-err-invalid-certificate ErrCode ::= 71
6507 -- Reserved for PKINIT
6508 kdc-err-revoked-certificate ErrCode ::= 72
6509 -- Reserved for PKINIT
6510 kdc-err-revocation-status-unknown ErrCode ::= 73
6511 -- Reserved for PKINIT
6512 kdc-err-revocation-status-unavailable ErrCode ::= 74
6520 B. Kerberos and Character Encodings (Informative)
6523 [adapted from KCLAR 5.2.1]
6526 The original specification of the Kerberos protocol in RFC 1510 uses
6527 GeneralString in numerous places for human-readable string data.
6528 Historical implementations of Kerberos cannot utilize the full power
6529 of GeneralString. This ASN.1 type requires the use of designation
6530 and invocation escape sequences as specified in ISO 2022 | ECMA-35
6531 [ISO2022] to switch character sets, and the default character set
6532 that is designated as G0 is the ISO 646 | ECMA-6 [ISO646]
6533 International Reference Version (IRV) (aka U.S. ASCII), which mostly
6537 ISO 2022 | ECMA-35 defines four character-set code elements (G0..G3)
6538 and two Control-function code elements (C0..C1). DER previously
6539 [X690-1997] prohibited the designation of character sets as any but
6540 the G0 and C0 sets. This had the side effect of prohibiting the use
6543 Yu Expires: Apr 2005 [Page 103]
6544 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6547 of (ISO Latin) character-sets such as ISO 8859-1 [ISO8859-1] or any
6548 other character-sets that utilize a 96-character set, since it is
6549 prohibited by ISO 2022 | ECMA-35 to designate them as the G0 code
6550 element. Recent revisions to the ASN.1 standards resolve this
6554 In practice, many implementations treat RFC 1510 GeneralStrings as if
6555 they were 8-bit strings of whichever character set the implementation
6556 defaults to, without regard for correct usage of character-set
6557 designation escape sequences. The default character set is often
6558 determined by the current user's operating system dependent locale.
6559 At least one major implementation places unescaped UTF-8 encoded
6560 Unicode characters in the GeneralString. This failure to conform to
6561 the GeneralString specifications results in interoperability issues
6562 when conflicting character encodings are utilized by the Kerberos
6563 clients, services, and KDC.
6566 This unfortunate situation is the result of improper documentation of
6567 the restrictions of the ASN.1 GeneralString type in prior Kerberos
6571 [the following should probably be rewritten and moved into the
6572 principal name section]
6575 For compatibility, implementations MAY choose to accept GeneralString
6576 values that contain characters other than those permitted by
6577 IA5String, but they should be aware that character set designation
6578 codes will likely be absent, and that the encoding should probably be
6579 treated as locale-specific in almost every way. Implementations MAY
6580 also choose to emit GeneralString values that are beyond those
6581 permitted by IA5String, but should be aware that doing so is
6582 extraordinarily risky from an interoperability perspective.
6585 Some existing implementations use GeneralString to encode unescaped
6586 locale-specific characters. This is a violation of the ASN.1
6587 standard. Most of these implementations encode US-ASCII in the left-
6588 hand half, so as long the implementation transmits only US-ASCII, the
6589 ASN.1 standard is not violated in this regard. As soon as such an
6590 implementation encodes unescaped locale-specific characters with the
6591 high bit set, it violates the ASN.1 standard.
6594 Other implementations have been known to use GeneralString to contain
6595 a UTF-8 encoding. This also violates the ASN.1 standard, since UTF-8
6596 is a different encoding, not a 94 or 96 character "G" set as defined
6597 by ISO 2022. It is believed that these implementations do not even
6598 use the ISO 2022 escape sequence to change the character encoding.
6599 Even if implementations were to announce the change of encoding by
6600 using that escape sequence, the ASN.1 standard prohibits the use of
6601 any escape sequences other than those used to designate/invoke "G" or
6602 "C" sets allowed by GeneralString.
6606 Yu Expires: Apr 2005 [Page 104]
6607 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6610 C. Kerberos History (Informative)
6613 [Adapted from KCLAR "BACKGROUND"]
6616 The Kerberos model is based in part on Needham and Schroeder's
6617 trusted third-party authentication protocol [NS78] and on
6618 modifications suggested by Denning and Sacco [DS81]. The original
6619 design and implementation of Kerberos Versions 1 through 4 was the
6620 work of two former Project Athena staff members, Steve Miller of
6621 Digital Equipment Corporation and Clifford Neuman (now at the
6622 Information Sciences Institute of the University of Southern
6623 California), along with Jerome Saltzer, Technical Director of Project
6624 Athena, and Jeffrey Schiller, MIT Campus Network Manager. Many other
6625 members of Project Athena have also contributed to the work on
6629 Version 5 of the Kerberos protocol (described in this document) has
6630 evolved from Version 4 based on new requirements and desires for
6631 features not available in Version 4. The design of Version 5 of the
6632 Kerberos protocol was led by Clifford Neuman and John Kohl with much
6633 input from the community. The development of the MIT reference
6634 implementation was led at MIT by John Kohl and Theodore Ts'o, with
6635 help and contributed code from many others. Since RFC1510 was
6636 issued, extensions and revisions to the protocol have been proposed
6637 by many individuals. Some of these proposals are reflected in this
6638 document. Where such changes involved significant effort, the
6639 document cites the contribution of the proposer.
6642 Reference implementations of both version 4 and version 5 of Kerberos
6643 are publicly available and commercial implementations have been
6644 developed and are widely used. Details on the differences between
6645 Kerberos Versions 4 and 5 can be found in [KNT94].
6648 D. Notational Differences from [KCLAR]
6651 [ possible point for discussion ]
6654 [KCLAR] uses notational conventions slightly different from this
6655 document. As a derivative of RFC 1510, the text of [KCLAR] uses C-
6656 language style identifier names for defined values. In ASN.1
6657 notation, identifiers referencing defined values must begin with a
6658 lowercase letter and contain hyphen (-) characters rather than
6659 underscore (_) characters, while identifiers referencing types begin
6660 with an uppercase letter. [KCLAR] and RFC 1510 use all-uppercase
6661 identifiers with underscores to identify defined values. This has
6662 the potential to create confusion, but neither document defines
6663 values using actual ASN.1 value-assignment notation.
6666 It is debatable whether it is advantageous to write all identifier
6667 names (regardless of their ASN.1 token type) in all-uppercase letters
6668 for the purpose of emphasis in running text. The alternative is to
6671 Yu Expires: Apr 2005 [Page 105]
6672 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6675 use double-quote characters (") when ambiguity is possible.
6678 Normative References
6682 "7-bit coded character set", ISO/IEC 646:1991 | ECMA-6:1991.
6686 "Information technology -- Character code structure and
6687 extension techniques", ISO/IEC 2022:1994 | ECMA-35:1994.
6691 K. Raeburn, "Encryption and Checksum Specifications for Kerberos
6692 5", draft-ietf-krb-wg-crypto-07.txt, work in progress.
6696 S. Bradner, RFC2119: "Key words for use in RFC's to Indicate
6697 Requirement Levels", March 1997.
6701 H. Alvestrand, "Tags for the Identification of Languages",
6702 RFC 3660, January 2001.
6706 Kurt D. Zeilenga, "SASLprep: Stringprep profile for user names
6707 and passwords", draft-ietf-sasl-saslprep-10.txt, work in
6712 "Information technology -- Abstract Syntax Notation One (ASN.1):
6713 Specification of basic notation", ITU-T Recommendation X.680
6714 (2002) | ISO/IEC 8824-1:2002.
6718 "Information technology -- Abstract Syntax Notation One (ASN.1):
6719 Constraint specification", ITU-T Recommendation X.682 (2002) |
6720 ISO/IEC 8824-3:2002.
6724 "Information technology -- Abstract Syntax Notation One (ASN.1):
6725 Parameterization of ASN.1 specifications", ITU-T Recommendation
6726 X.683 (2002) | ISO/IEC 8824-4:2002.
6730 "Information technology -- ASN.1 encoding Rules: Specification
6731 of Basic Encoding Rules (BER), Canonical Encoding Rules (CER)
6732 and Distinguished Encoding Rules (DER)", ITU-T Recommendation
6733 X.690 (2002) | ISO/IEC 8825-1:2002.
6739 Yu Expires: Apr 2005 [Page 106]
6740 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6743 Informative References
6747 Dorothy E. Denning and Giovanni Maria Sacco, "Time-stamps in Key
6748 Distribution Protocols," Communications of the ACM, Vol. 24(8),
6749 pp. 533-536 (August 1981).
6753 Olivier Dubuisson, "ASN.1 - Communication between Heterogeneous
6754 Systems", Elsevier-Morgan Kaufmann, 2000.
6755 <http://www.oss.com/asn1/dubuisson.html>
6759 "Information technology -- 8-bit single-byte coded graphic
6760 character sets -- Part 1: Latin alphabet No. 1", ISO/IEC 8859-
6765 Clifford Neuman, Tom Yu, Sam Hartman, Ken Raeburn, "The Kerberos
6766 Network Authentication Service (V5)", draft-ietf-krb-wg-
6767 kerberos-clarifications-07.txt, work in progress.
6771 John T. Kohl, B. Clifford Neuman, and Theodore Y. Ts'o, "The
6772 Evolution of the Kerberos Authentication System". In
6773 Distributed Open Systems, pages 78-94. IEEE Computer Society
6778 John Larmouth, "Understanding OSI", International Thomson
6779 Computer Press, 1996.
6780 <http://www.isi.salford.ac.uk/books/osi.html>
6784 John Larmouth, "ASN.1 Complete", Elsevier-Morgan Kaufmann,
6785 1999. <http://www.oss.com/asn1/larmouth.html>
6789 Roger M. Needham and Michael D. Schroeder, "Using Encryption for
6790 Authentication in Large Networks of Computers", Communications
6791 of the ACM, Vol. 21(12), pp. 993-999 (December, 1978).
6795 J. Kohl and B. C. Neuman, "The Kerberos Network Authentication
6796 Service (v5)", RFC1510, September 1993, Status: Proposed
6801 J. Linn, "The Kerberos Version 5 GSS-API Mechanism", RFC 1964,
6802 June 1996, Status: Proposed Standard.
6806 Yu Expires: Apr 2005 [Page 107]
6807 Internet-Draft yu-krb-extensions-02 25 Oct 2004
6811 "Information technology -- ASN.1 encoding rules: Specification
6812 of Basic Encoding Rules (BER), Canonical Encoding Rules (CER)
6813 and Distinguished Encoding Rules (DER)", ITU-T Recommendation
6814 X.690 (2002) | ISO/IEC 8825-1:2002.
6821 77 Massachusetts Ave
6827 Full Copyright Statement
6830 Copyright (C) The Internet Society (2004). This document is subject
6831 to the rights, licenses and restrictions contained in BCP 78, and
6832 except as set forth therein, the authors retain all their rights.
6835 This document and the information contained herein are provided on an
6836 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
6837 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
6838 ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
6839 INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
6840 INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
6841 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
6867 Yu Expires: Apr 2005 [Page 108]