4 draft-ietf-krb-wg-rfc1510ter-01.txt MIT
5 Expires: 19 March 2005 15 September 2005
7 The Kerberos Network Authentication Service (Version 5)
11 By submitting this Internet-Draft, each author represents that any
12 applicable patent or other IPR claims of which he or she is aware
13 have been or will be disclosed, and any of which he or she becomes
14 aware will be disclosed, in accordance with Section 6 of BCP 79.
16 Internet-Drafts are working documents of the Internet Engineering
17 Task Force (IETF), its areas, and its working groups. Note that
18 other groups may also distribute working documents as Internet-
21 Internet-Drafts are draft documents valid for a maximum of six months
22 and may be updated, replaced, or obsoleted by other documents at any
23 time. It is inappropriate to use Internet-Drafts as reference
24 material or to cite them other than as "work in progress."
26 The list of current Internet-Drafts can be accessed at
28 http://www.ietf.org/ietf/1id-abstracts.txt
30 The list of Internet-Draft Shadow Directories can be accessed at
32 http://www.ietf.org/shadow.html
37 Copyright (C) The Internet Society (2005). All Rights Reserved.
41 This document describes version 5 of the Kerberos network
42 authentication protocol. It describes a framework to allow for
43 extensions to be made to the protocol without creating
44 interoperability problems.
46 Key Words for Requirements
48 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
49 "SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are
50 to be interpreted as described in RFC 2119.
55 Yu Expires: Mar 2005 [Page 1]
57 Internet-Draft rfc1510ter-01 15 Sep 2005
61 Status of This Memo .............................................. 1
62 Copyright Notice ................................................. 1
63 Abstract ......................................................... 1
64 Key Words for Requirements ....................................... 1
65 Table of Contents ................................................ 2
66 1. Introduction ................................................. 5
67 1.1. Kerberos Protocol Overview ................................. 5
68 1.2. Document Organization ...................................... 6
69 2. Compatibility Considerations ................................. 6
70 2.1. Extensibility .............................................. 7
71 2.2. Compatibility with RFC 1510 ................................ 7
72 2.3. Backwards Compatibility .................................... 7
73 2.4. 1.4.2. Sending Extensible Messages ......................... 8
74 2.5. Criticality ................................................ 8
75 2.6. Authenticating Cleartext Portions of Messages .............. 9
76 2.7. Capability Negotiation ..................................... 10
77 3. Use of ASN.1 in Kerberos ..................................... 10
78 3.1. Module Header .............................................. 11
79 3.2. Top-Level Type ............................................. 11
80 3.3. Previously Unused ASN.1 Notation (informative) ............. 12
81 3.3.1. Parameterized Types ...................................... 12
82 3.3.2. COMPONENTS OF Notation ................................... 12
83 3.3.3. Constraints .............................................. 12
84 3.4. New Types .................................................. 13
85 4. Basic Types .................................................. 14
86 4.1. Constrained Integer Types .................................. 14
87 4.2. KerberosTime ............................................... 15
88 4.3. KerberosString ............................................. 15
89 4.4. Language Tags .............................................. 16
90 4.5. KerberosFlags .............................................. 16
91 4.6. Typed Holes ................................................ 16
92 4.7. HostAddress and HostAddresses .............................. 17
93 4.7.1. Internet (IPv4) Addresses ................................ 17
94 4.7.2. Internet (IPv6) Addresses ................................ 17
95 4.7.3. DECnet Phase IV addresses ................................ 18
96 4.7.4. Netbios addresses ........................................ 18
97 4.7.5. Directional Addresses .................................... 18
98 5. Principals ................................................... 19
99 5.1. Name Types ................................................. 19
100 5.2. Principal Type Definition .................................. 19
101 5.3. Principal Name Reuse ....................................... 20
102 5.4. Realm Names ................................................ 20
103 5.5. Printable Representations of Principal Names ............... 21
104 5.6. Ticket-Granting Service Principal .......................... 21
105 5.6.1. Cross-Realm TGS Principals ............................... 21
106 6. Types Relating to Encryption ................................. 21
107 6.1. Assigned Numbers for Encryption ............................ 22
108 6.1.1. EType .................................................... 22
109 6.1.2. Key Usages ............................................... 22
111 Yu Expires: Mar 2005 [Page 2]
113 Internet-Draft rfc1510ter-01 15 Sep 2005
115 6.2. Which Key to Use ........................................... 23
116 6.3. EncryptionKey .............................................. 24
117 6.4. EncryptedData .............................................. 24
118 6.5. Checksums .................................................. 25
119 6.5.1. ChecksumOf ............................................... 26
120 6.5.2. Signed ................................................... 27
121 7. Tickets ...................................................... 27
122 7.1. Timestamps ................................................. 28
123 7.2. Ticket Flags ............................................... 28
124 7.2.1. Flags Relating to Initial Ticket Acquisition ............. 29
125 7.2.2. Invalid Tickets .......................................... 29
126 7.2.3. OK as Delegate ........................................... 30
127 7.2.4. Renewable Tickets ........................................ 30
128 7.2.5. Postdated Tickets ........................................ 31
129 7.2.6. Proxiable and Proxy Tickets .............................. 32
130 7.2.7. Forwarded and Forwardable Tickets ........................ 33
131 7.3. Transited Realms ........................................... 34
132 7.4. Authorization Data ......................................... 34
133 7.4.1. AD-IF-RELEVANT ........................................... 35
134 7.4.2. AD-KDCIssued ............................................. 35
135 7.4.3. AD-AND-OR ................................................ 37
136 7.4.4. AD-MANDATORY-FOR-KDC ..................................... 37
137 7.5. Encrypted Part of Ticket ................................... 37
138 7.6. Cleartext Part of Ticket ................................... 38
139 8. Credential Acquisition ....................................... 40
140 8.1. KDC-REQ .................................................... 40
141 8.2. PA-DATA .................................................... 46
142 8.3. KDC-REQ Processing ......................................... 46
143 8.3.1. Handling Replays ......................................... 46
144 8.3.2. Request Validation ....................................... 47
145 8.3.2.1. AS-REQ Authentication .................................. 47
146 8.3.2.2. TGS-REQ Authentication ................................. 47
147 8.3.2.3. Principal Validation ................................... 47
148 8.3.2.4. Checking For Revoked or Invalid Tickets ................ 48
149 8.3.3. Timestamp Handling ....................................... 48
150 8.3.3.1. AS-REQ Timestamp Processing ............................ 49
151 8.3.3.2. TGS-REQ Timestamp Processing ........................... 49
152 8.3.4. Handling Transited Realms ................................ 50
153 8.3.5. Address Processing ....................................... 50
154 8.3.6. Ticket Flag Processing ................................... 51
155 8.3.7. Key Selection ............................................ 52
156 8.3.7.1. Reply Key and Session Key Selection .................... 52
157 8.3.7.2. Ticket Key Selection ................................... 52
158 8.4. KDC-REP .................................................... 52
159 8.5. Reply Validation ........................................... 55
160 8.6. IP Transports .............................................. 55
161 8.6.1. UDP/IP transport ......................................... 55
162 8.6.2. TCP/IP transport ......................................... 56
163 8.6.3. KDC Discovery on IP Networks ............................. 57
164 8.6.3.1. DNS vs. Kerberos - Case Sensitivity of Realm Names ..... 57
165 8.6.3.2. DNS SRV records for KDC location ....................... 58
167 Yu Expires: Mar 2005 [Page 3]
169 Internet-Draft rfc1510ter-01 15 Sep 2005
171 8.6.3.3. KDC Discovery for Domain Style Realm Names on IP
172 Networks ............................................ 58
173 9. Errors ....................................................... 58
174 10. Session Key Exchange ........................................ 61
175 10.1. AP-REQ .................................................... 61
176 10.2. AP-REP .................................................... 63
177 11. Session Key Use ............................................. 65
178 11.1. KRB-SAFE .................................................. 65
179 11.2. KRB-PRIV .................................................. 65
180 11.3. KRB-CRED .................................................. 66
181 12. Security Considerations ..................................... 67
182 12.1. Time Synchronization ...................................... 67
183 12.2. Replays ................................................... 67
184 12.3. Principal Name Reuse ...................................... 67
185 12.4. Password Guessing ......................................... 67
186 12.5. Forward Secrecy ........................................... 67
187 12.6. Authorization ............................................. 68
188 12.7. Login Authentication ...................................... 68
189 13. IANA Considerations ......................................... 68
190 14. Acknowledgments ............................................. 69
191 Appendices ....................................................... 69
192 A. ASN.1 Module (Normative) ..................................... 69
193 B. Kerberos and Character Encodings (Informative) ...............103
194 C. Kerberos History (Informative) ...............................104
195 D. Notational Differences from [KCLAR] ..........................105
196 Normative References .............................................106
197 Informative References ...........................................106
198 Author's Address .................................................108
199 Copyright Statement ..............................................108
200 Intellectual Property Statement ..................................108
223 Yu Expires: Mar 2005 [Page 4]
225 Internet-Draft rfc1510ter-01 15 Sep 2005
229 The Kerberos network authentication protocol is a trusted-third-party
230 protocol utilizing symmetric-key cryptography. It assumes that all
231 communications between parties in the protocol may be arbitrarily
232 tampered with or monitored, and that the security of the overall
233 system depends only on the effectiveness of the cryptographic
234 techniques and the secrecy of the cryptographic keys used. The
235 Kerberos protocol authenticates an application client's identity to
236 an application server, and likewise authenticates the application
237 server's identity to the application client. These assurances are
238 made possible by the client and the server sharing secrets with the
239 trusted third party: the Kerberos server, also known as the Key
240 Distribution Center (KDC). In addition, the protocol establishes an
241 ephemeral shared secret (the session key) between the client and the
242 server, allowing the protection of further communications between
245 The Kerberos protocol, as originally specified, provides insufficient
246 means for extending the protocol in a backwards-compatible way. This
247 deficiency has caused problems for interoperability. This document
248 describes a framework which enables backwards-compatible extensions
249 to the Kerberos protocol.
251 1.1. Kerberos Protocol Overview
253 Kerberos comprises three main sub-protocols: credentials acquisition,
254 session key exchange, and session key usage. A client acquires
255 credentials by asking the KDC for a credential for a service; the KDC
256 issues the credential, which contains a ticket and a session key.
257 The ticket, containing the client's identity, timestamps, expiration
258 time, and a session key, is a encrypted in a key known to the
259 application server. The KDC encrypts the credential using a key
260 known to the client, and transmits the credential to the client.
262 There are two means of requesting credentials: the Authentication
263 Service (AS) exchange, and the Ticket-Granting Service (TGS)
264 exchange. In the typical AS exchange, a client uses a password-
265 derived key to decrypt the response. In the TGS exchange, the KDC
266 behaves as an application server; the client authenticates to the TGS
267 by using a Ticket-Granting Ticket (TGT). The client usually obtains
268 the TGT by using the AS exchange.
270 Session key exchange consists of the client transmitting the ticket
271 to the application server, accompanied by an authenticator. The
272 authenticator contains a timestamp and additional data encrypted
273 using the ticket's session key. The application server decrypts the
274 ticket, extracting the session key. The application server then uses
275 the session key to decrypt the authenticator. Upon successful
276 decryption of the authenticator, the application server knows that
277 the data in the authenticator were sent by the client named in the
279 Yu Expires: Mar 2005 [Page 5]
281 Internet-Draft rfc1510ter-01 15 Sep 2005
283 associated ticket. Additionally, since authenticators expire more
284 quickly than tickets, the application server has some assurance that
285 the transaction is not a replay. The application server may send an
286 encrypted acknowledgment to the client, verifying its identity to the
289 Once session key exchange has occurred, the client and server may use
290 the established session key to protect further traffic. This
291 protection may consist of protection of integrity only, or of
292 protection of confidentiality and integrity. Additional measures
293 exist for a client to securely forward credentials to a server.
295 The entire scheme depends on loosely synchronized clocks.
296 Synchronization of the clock on the KDC with the application server
297 clock allows the application server to accurately determine whether a
298 credential is expired. Likewise, synchronization of the clock on the
299 client with the application server clock prevents replay attacks
300 utilizing the same credential. Careful design of the application
301 protocol may allow replay prevention without requiring client-server
302 clock synchronization.
304 After establishing a session key, application client and the
305 application server can exchange Kerberos protocol messages that use
306 the session key to protect the integrity or confidentiality of
307 communications between the client and the server. Additionally, the
308 client may forward credentials to the application server.
310 The credentials acquisition protocol takes place over specific,
311 defined transports (UDP and TCP). Application protocols define which
312 transport to use for the session key establishment protocol and for
313 messages using the session key; the application may choose to perform
314 its own encapsulation of the Kerberos messages, for example.
316 1.2. Document Organization
318 The remainder of this document begins by describing the general
319 frameworks for protocol extensibility, including whether to interpret
320 unknown extensions as critical. It then defines the protocol
321 messages and exchanges.
323 The definition of the Kerberos protocol uses Abstract Syntax Notation
324 One (ASN.1) [X680], which specifies notation for describing the
325 abstract content of protocol messages. This document defines a
326 number of base types using ASN.1; these base types subsequently
327 appear in multiple types which define actual protocol messages.
328 Definitions of principal names and of tickets, which are central to
329 the protocol, also appear preceding the protocol message definitions.
335 Yu Expires: Mar 2005 [Page 6]
337 Internet-Draft rfc1510ter-01 15 Sep 2005
339 2. Compatibility Considerations
343 In the past, significant interoperability problems have resulted from
344 conflicting assumptions about how the Kerberos protocol can be
345 extended. As the deployed base of Kerberos grows, the ability to
346 extend the Kerberos protocol becomes more important. In order to
347 ensure that vendors and the IETF can extend the protocol while
348 maintaining backwards compatibility, this document outlines a
349 framework for extending Kerberos.
351 Kerberos provides two general mechanisms for protocol extensibility.
352 Many protocol messages, including some defined in RFC 1510, contain
353 typed holes--sub-messages containing an octet string along with an
354 integer that identifies how to interpret the octet string. The
355 integer identifiers are registered centrally, but can be used both
356 for vendor extensions and for extensions standardized in the IETF.
357 This document adds typed holes to a number of messages which
358 previously lacked typed holes.
360 Many new messages defined in this document also contain ASN.1
361 extension markers. These markers allow future revisions of this
362 document to add additional elements to messages, for cases where
363 typed holes are inadequate for some reason. Because tag numbers and
364 position in a sequence need to be coordinated in order to maintain
365 interoperability, implementations MUST NOT include ASN.1 extensions
366 except when those extensions are specified by IETF standards-track
369 2.2. Compatibility with RFC 1510
371 Implementations of RFC 1510 did not use extensible ASN.1 types.
372 Sending additional fields not in RFC 1510 to these implementations
373 results in undefined behavior. Examples of this behavior are known
374 to include discarding messages with no error indications.
376 Where messages have been changed since RFC 1510, ASN.1 CHOICE types
377 are used; one alternative of the CHOICE provides a message which is
378 wire-encoding compatible with RFC 1510, and the other alternative
379 provides the new, extensible message.
381 Implementations sending new messages MUST ensure that the recipient
382 supports these new messages. Along with each extensible message is a
383 guideline for when that message MAY be used. IF that guideline is
384 followed, then the recipient is guaranteed to understand the message.
386 2.3. Backwards Compatibility
388 This document describes two sets (for the most part) of ASN.1 types.
389 The first set of types is wire-encoding compatible with RFC 1510 and
391 Yu Expires: Mar 2005 [Page 7]
393 Internet-Draft rfc1510ter-01 15 Sep 2005
395 [KCLAR]. The second set of types is the set of types enabling
396 extensibility. This second set may be referred to as
397 "extensibility-enabled types". [ need to make this consistent
400 A major difference between the new extensibility-enabled types and
401 the types for RFC 1510 compatibility is that the extensibility-
402 enabled types allow for the use of UTF-8 encodings in various
403 character strings in the protocol. Each party in the protocol must
404 have some knowledge of the capabilities of the other parties in the
405 protocol. There are methods for establishing this knowledge without
406 necessarily requiring explicit configuration.
408 An extensibility-enabled client can detect whether a KDC supports the
409 extensibility-enabled types by requesting an extensibility-enabled
410 reply. If the KDC replies with an extensibility-enabled reply, the
411 client knows that the KDC supports extensibility. If the KDC issues
412 an extensibility-enabled ticket, the client knows that the service
413 named in the ticket is extensibility-enabled.
415 2.4. 1.4.2. Sending Extensible Messages
417 Care must be taken to make sure that old implementations can
418 understand messages sent to them even if they do not understand an
419 extension that is used. Unless the sender knows the extension is
420 supported, the extension cannot change the semantics of the core
421 message or previously defined extensions.
423 For example, an extension including key information necessary to
424 decrypt the encrypted part of a KDC-REP could only be used in
425 situations where the recipient was known to support the extension.
426 Thus when designing such extensions it is important to provide a way
427 for the recipient to notify the sender of support for the extension.
428 For example in the case of an extension that changes the KDC-REP
429 reply key, the client could indicate support for the extension by
430 including a padata element in the AS-REQ sequence. The KDC should
431 only use the extension if this padata element is present in the AS-
432 REQ. Even if policy requires the use of the extension, it is better
433 to return an error indicating that the extension is required than to
434 use the extension when the recipient may not support it; debugging
435 why implementations do not interoperate is easier when errors are
440 Recipients of unknown message extensions (including typed holes, new
441 flags, and ASN.1 extension elements) should preserve the encoding of
442 the extension but otherwise ignore the presence of the extension;
443 i.e., unknown extensions SHOULD be treated as non-critical. If a
444 copy of the message is used later--for example, when a Ticket
445 received in a KDC-REP is later used in an AP-REQ--then the unknown
447 Yu Expires: Mar 2005 [Page 8]
449 Internet-Draft rfc1510ter-01 15 Sep 2005
451 extensions MUST be included.
453 An implementation SHOULD NOT reject a request merely because it does
454 not understand some element of the request. As a related
455 consequence, implementations SHOULD handle communicating with other
456 implementations which do not implement some requested options. This
457 may require designers of options to provide means to determine
458 whether an option has been rejected, not understood, or (perhaps
459 maliciously) deleted or modified in transit.
461 There is one exception to non-criticality described above: if an
462 unknown authorization data element is received by a server either in
463 an AP-REQ or in a Ticket contained in an AP-REQ, then the
464 authentication SHOULD fail. Authorization data is intended to
465 restrict the use of a ticket. If the service cannot determine
466 whether the restriction applies to that service then a security
467 weakness may result if authentication succeeds. Authorization
468 elements meant to be truly optional can be enclosed in the AD-IF-
471 Many RFC 1510 implementations ignore unknown authorization data
472 elements. Depending on these implementations to honor authorization
473 data restrictions may create a security weakness.
475 2.6. Authenticating Cleartext Portions of Messages
477 Various denial of service attacks and downgrade attacks against
478 Kerberos are possible unless plaintexts are somehow protected against
479 modification. An early design goal of Kerberos Version 5 was to
480 avoid encrypting more of the authentication exchange that was
481 required. (Version 4 doubly-encrypted the encrypted part of a ticket
482 in a KDC reply, for example.) This minimization of encryption
483 reduces the load on the KDC and busy servers. Also, during the
484 initial design of Version 5, the existence of legal restrictions on
485 the export of cryptography made it desirable to minimize of the
486 number of uses of encryption in the protocol. Unfortunately,
487 performing this minimization created numerous instances of
488 unauthenticated security-relevant plaintext fields.
490 The extensible variants of the messages described in this document
491 wrap the actual message in an ASN.1 sequence containing a keyed
492 checksum of the contents of the message. Guidelines in [XXX] section
493 3 specify when the checksum MUST be included and what key MUST be
494 used. Guidelines on when to include a checksum are never ambiguous:
495 a particular PDU is never correct both with and without a checksum.
496 With the exception of the KRB-ERROR message, receiving
497 implementations MUST reject messages where a checksum is included and
498 not expected or where a checksum is expected but not included. The
499 receiving implementation does not always have sufficient information
500 to know whether a KRB-ERROR should contain a checksum. Even so,
501 KRB-ERROR messages with invalid checksums MUST be rejected and
503 Yu Expires: Mar 2005 [Page 9]
505 Internet-Draft rfc1510ter-01 15 Sep 2005
507 implementations MAY consider the presence or absence of a checksum
508 when evaluating whether to trust the error.
510 This authenticated cleartext protection is provided only in the
511 extensible variants of the messages; it is never used when
512 communicating with an RFC 1510 implementation.
514 2.7. Capability Negotiation
516 Kerberos is a three-party protocol. Each of the three parties
517 involved needs a means of detecting the capabilities supported by the
518 others. Two of the parties, the KDC and the application server, do
519 not communicate directly in the Kerberos protocol. Communicating
520 capabilities from the KDC to the application server requires using a
521 ticket as an intermediary.
523 The main capability requiring negotiation is the support of the
524 extensibility framework described in this document. Negotiation of
525 this capability while remaining compatible with RFC 1510
526 implementations is possible. The main complication is that the
527 client needs to know whether the application server supports the
528 extensibility framework prior to sending any message to the
529 application server. This can be accomplished if the KDC has
530 knowledge of whether an application server supports the extensibility
533 Client software advertizes its capabilities when requesting
534 credentials from the KDC. If the KDC recognizes the capabilities, it
535 acknowledges this fact to the client in its reply. In addition, if
536 the KDC has knowledge that the application server supports certain
537 capabilities, it also communicates this knowledge to the client in
538 its reply. The KDC can encode its own capabilities in the ticket so
539 that the application server may discover these capabilities. The
540 client advertizes its capabilities to the application server when it
541 initiates authentication to the application server.
543 3. Use of ASN.1 in Kerberos
545 Kerberos uses the ASN.1 Distinguished Encoding Rules (DER) [X690].
546 Even though ASN.1 theoretically allows the description of protocol
547 messages to be independent of the encoding rules used to encode the
548 messages, Kerberos messages MUST be encoded with DER. Subtleties in
549 the semantics of the notation, such as whether tags carry any
550 semantic content to the application, may cause the use of other ASN.1
551 encoding rules to be problematic.
553 Implementors not using existing ASN.1 tools (e.g., compilers or
554 support libraries) are cautioned to thoroughly read and understand
555 the actual ASN.1 specification to ensure correct implementation
556 behavior. There is more complexity in the notation than is
557 immediately obvious, and some tutorials and guides to ASN.1 are
559 Yu Expires: Mar 2005 [Page 10]
561 Internet-Draft rfc1510ter-01 15 Sep 2005
563 misleading or erroneous. Recommended tutorials and guides include
564 [Dub00], [Lar99], though there is still no substitute for reading the
565 actual ASN.1 specification.
569 The type definitions in this document assume an ASN.1 module
570 definition of the following form:
573 iso(1) identified-organization(3) dod(6) internet(1)
574 security(5) kerberosV5(2) modules(4) krb5spec3(4)
575 } DEFINITIONS EXPLICIT TAGS ::= BEGIN
577 -- Rest of definitions here
581 This specifies that the tagging context for the module will be
582 explicit and that automatic tagging is not done.
584 Some other publications [RFC1510] [RFC1964] erroneously specify an
585 object identifier (OID) having an incorrect value of "5" for the
586 "dod" component of the OID. In the case of RFC 1964, use of the
587 "correct" OID value would result in a change in the wire protocol;
588 therefore, the RFC 1964 OID remains unchanged for now.
592 The ASN.1 type "KRB-PDU" is a CHOICE over all the types (Protocol
593 Data Units or PDUs) which an application may directly reference.
594 Applications SHOULD NOT transmit any types other than those which are
595 alternatives of the KRB-PDU CHOICE.
615 Yu Expires: Mar 2005 [Page 11]
617 Internet-Draft rfc1510ter-01 15 Sep 2005
621 -- Applications should not directly reference any types
622 -- other than KRB-PDU and its component types.
641 3.3. Previously Unused ASN.1 Notation (informative)
643 Some aspects of ASN.1 notation used in this document were not used in
644 [KCLAR], and may be unfamiliar to some readers. This subsection is
645 informative; for normative definitions of the notation, see the
646 actual ASN.1 specifications [X680], [X682], [X683].
648 3.3.1. Parameterized Types
650 This document uses ASN.1 parameterized types [X683] to make
651 definitions of types more readable. For some types, some or all of
652 the parameters are advisory, i.e., they are not encoded in any form
653 for transmission in a protocol message. These advisory parameters
654 can describe implementation behavior associated with the type.
656 3.3.2. COMPONENTS OF Notation
658 The "COMPONENTS OF" notation, used to define the RFC 1510
659 compatibility types, extracts all of the component types of an ASN.1
660 SEQUENCE type. The extension marker (the "..." notation) and any
661 extension components are not extracted by "COMPONENTS OF". The
662 "COMPONENTS OF" notation permits concise definition of multiple types
663 which have many components in common with each other.
667 This document uses ASN.1 constraints, including the
668 "UserDefinedConstraint" notation [X682]. Some constraints can be
669 handled automatically by tools that can parse them. Uses of the
671 Yu Expires: Mar 2005 [Page 12]
673 Internet-Draft rfc1510ter-01 15 Sep 2005
675 "UserDefinedConstraint" notation (the "CONSTRAINED BY" notation) will
676 typically need to have behavior manually coded; the notation provides
677 a formalized way of conveying intended implementation behavior.
679 The "WITH COMPONENTS" constraint notation allows constraints to apply
680 to component types of a SEQUENCE type. This constraint notation
681 effectively allows constraints to "reach into" a type to constrain
686 This document defines a number of ASN.1 types which are new since
687 [KCLAR]. The names of these types will typically have a suffix like
688 "Ext", indicating that the types are intended to support
689 extensibility. Types original to RFC 1510 and [KCLAR] have been
690 renamed to have a suffix like "1510". The "Ext" and "1510" types
691 often contain a number of common elements; these common elements have
692 a suffix like "Common". The "1510" types have various ASN.1
693 constraints applied to them; the constraints limit the possible
694 values of the "1510" types to those permitted by RFC 1510 or by
695 [KCLAR]. The "Ext" types may have different constraints, typically
696 to force string values to be sent as UTF-8.
698 For example, consider
700 -- example "common" type
701 Foo-Common ::= SEQUENCE {
709 -- example "RFC 1510 compatibility" type
710 Foo-1510 ::= SEQUENCE {
711 -- the COMPONENTS OF notation drops the extension marker
712 -- and all extension additions.
713 COMPONENTS OF Foo-Common
716 -- example "extensibility-enabled" type
717 Foo-Ext ::= Foo-Common
719 where "Foo-Common" is a common type used to define both the "1510"
720 and "Ext" versions of a type. "Foo-1510" is the RFC 1510 version of
721 the type, while "Foo-Ext" is the extensible version. "Foo-1510" does
722 not contain the extension marker, nor does it contain the extension
723 component "c". The type "Foo-1510" is equivalent to "Foo-1510-
727 Yu Expires: Mar 2005 [Page 13]
729 Internet-Draft rfc1510ter-01 15 Sep 2005
731 -- example type equivalent to Foo-1510
732 Foo-1510-Equiv ::= SEQUENCE {
740 These "basic" Kerberos ASN.1 types appear in multiple other Kerberos
743 4.1. Constrained Integer Types
745 In RFC 1510, many types contained references to the unconstrained
746 INTEGER type. Since an unconstrained INTEGER can contain almost any
747 possible abstract integer value, most of the unconstrained references
748 to INTEGER in RFC 1510 were constrained to 32 bits or smaller in
751 -- signed values representable in 32 bits
753 -- These are often used as assigned numbers for various things.
754 Int32 ::= INTEGER (-2147483648..2147483647)
756 The "Int32" type often contains an assigned number identifying the
757 contents of a typed hole. Unless otherwise stated, non-negative
758 values are registered, and negative values are available for local
761 -- unsigned 32 bit values
762 UInt32 ::= INTEGER (0..4294967295)
764 The "UInt32" type is used in some places where an unsigned 32-bit
767 -- unsigned 64 bit values
768 UInt64 ::= INTEGER (0..18446744073709551615)
770 The "UInt64" type is used in places where 32 bits of precision may
771 provide inadequate security.
776 Sequence numbers were constrained to 32 bits in [KCLAR], but this
777 document allows for 64-bit sequence numbers.
783 Yu Expires: Mar 2005 [Page 14]
785 Internet-Draft rfc1510ter-01 15 Sep 2005
787 Likewise, nonces were constrained to 32 bits in [KCLAR], but expanded
791 Microseconds ::= INTEGER (0..999999)
793 The "microseconds" type is intended to carry the microseconds part of
798 KerberosTime ::= GeneralizedTime (CONSTRAINED BY {
799 -- MUST NOT include fractional seconds
802 The timestamps used in Kerberos are encoded as GeneralizedTimes. A
803 KerberosTime value MUST NOT include any fractional portions of the
804 seconds. As required by the DER, it further MUST NOT include any
805 separators, and it specifies the UTC time zone (Z). Example: The
806 only valid format for UTC time 6 minutes, 27 seconds after 9 pm on 6
807 November 1985 is "19851106210627Z".
811 -- used for names and for error messages
812 KerberosString ::= CHOICE {
813 ia5 GeneralString (IA5String),
815 ... -- no extension may be sent
816 -- to an rfc1510 implementation --
819 The KerberosString type is used for character strings in various
820 places in the Kerberos protocol. For compatibility with RFC 1510,
821 GeneralString values constrained to IA5String (US-ASCII) are
822 permitted in messages exchanged with RFC 1510 implementations. The
823 new protocol messages contain strings encoded as UTF-8, and these
824 strings MUST be normalized using [SASLPREP]. KerberosString values
825 are present in principal names and in error messages. Control
826 characters SHOULD NOT be used in principal names, and used with
827 caution in error messages.
829 -- IA5 choice only; useful for constraints
830 KerberosStringIA5 ::= KerberosString
831 (WITH COMPONENTS { ia5 PRESENT })
833 -- IA5 excluded; useful for constraints
834 KerberosStringExt ::= KerberosString
835 (WITH COMPONENTS { ia5 ABSENT })
837 KerberosStringIA5 requires the use of the "ia5" alternative, while
839 Yu Expires: Mar 2005 [Page 15]
841 Internet-Draft rfc1510ter-01 15 Sep 2005
843 KerberosStringExt forbids it. These types appear in ASN.1
844 constraints on messages.
846 For detailed background regarding the history of character string use
847 in Kerberos, as well as discussion of some compatibility issues, see
852 -- used for language tags
853 LangTag ::= PrintableString
854 (FROM ("A".."Z" | "a".."z" | "0".."9" | "-"))
856 The "LangTag" type is used to specify language tags for localization
857 purposes, using the [RFC3066] format.
861 For several message types, a specific constrained bit string type,
862 KerberosFlags, is used.
864 KerberosFlags { NamedBits } ::= BIT STRING (SIZE (32..MAX))
866 -- MUST be a valid value of -- NamedBits
867 -- but if the value to be sent would be truncated to shorter
868 -- than 32 bits according to DER, the value MUST be padded
869 -- with trailing zero bits to 32 bits. Otherwise, no
870 -- trailing zero bits may be present.
875 The actual bit string type encoded in Kerberos messages does not use
876 named bits. The advisory parameter of the KerberosFlags type names a
877 bit string type defined using named bits, whose value is encoded as
878 if it were a bit string with unnamed bits. This practice is
879 necessary because the DER require trailing zero bits to be removed
880 when encoding bit strings defined using named bits. Existing
881 implementations of Kerberos send exactly 32 bits rather than
882 truncating, so the size constraint requires the transmission of at
883 least 32 bits. Trailing zero bits beyond the first 32 bits are
888 -- Typed hole identifiers
895 Yu Expires: Mar 2005 [Page 16]
897 Internet-Draft rfc1510ter-01 15 Sep 2005
899 The "TH-id" type is a generalized means to identify the contents of a
900 typed hole. The "int32" alternative may be used for simple integer
901 assignments, in the same manner as "Int32", while the "rel-oid"
902 alternative may be used for hierarchical delegation.
904 4.7. HostAddress and HostAddresses
908 HostAddress ::= SEQUENCE {
909 addr-type [0] AddrType,
910 address [1] OCTET STRING
913 -- NOTE: HostAddresses is always used as an OPTIONAL field and
914 -- should not be a zero-length SEQUENCE OF.
916 -- The extensible messages explicitly constrain this to be
918 HostAddresses ::= SEQUENCE OF HostAddress
922 This field specifies the type of address that follows.
925 This field encodes a single address of the type identified by
928 All negative values for the host address type are reserved for local
929 use. All non-negative values are reserved for officially assigned
930 type fields and interpretations.
934 __________|______________
943 4.7.1. Internet (IPv4) Addresses
945 Internet (IPv4) addresses are 32-bit (4-octet) quantities, encoded in
946 MSB order (most significant byte first). The IPv4 loopback address
947 SHOULD NOT appear in a Kerberos PDU. The type of IPv4 addresses is
951 Yu Expires: Mar 2005 [Page 17]
953 Internet-Draft rfc1510ter-01 15 Sep 2005
955 4.7.2. Internet (IPv6) Addresses
957 IPv6 addresses [RFC2373] are 128-bit (16-octet) quantities, encoded
958 in MSB order (most significant byte first). The type of IPv6
959 addresses is twenty-four (24). The following addresses MUST NOT
960 appear in any Kerberos PDU:
962 * the Unspecified Address
964 * the Loopback Address
966 * Link-Local addresses
968 This restriction applies to the inclusion in the address fields of
969 Kerberos PDUs, but not to the address fields of packets that might
970 carry such PDUs. The restriction is necessary because the use of an
971 address with non-global scope could allow the acceptance of a message
972 sent from a node that may have the same address, but which is not the
973 host intended by the entity that added the restriction. If the
974 link-local address type needs to be used for communication, then the
975 address restriction in tickets must not be used (i.e. addressless
976 tickets must be used).
978 IPv4-mapped IPv6 addresses MUST be represented as addresses of type
981 4.7.3. DECnet Phase IV addresses
983 DECnet Phase IV addresses are 16-bit addresses, encoded in LSB order.
984 The type of DECnet Phase IV addresses is twelve (12).
986 4.7.4. Netbios addresses
988 Netbios addresses are 16-octet addresses typically composed of 1 to
989 15 alphanumeric characters and padded with the US-ASCII SPC character
990 (code 32). The 16th octet MUST be the US-ASCII NUL character (code
991 0). The type of Netbios addresses is twenty (20).
993 4.7.5. Directional Addresses
995 In many environments, including the sender address in KRB-SAFE and
996 KRB-PRIV messages is undesirable because the addresses may be changed
997 in transport by network address translators. However, if these
998 addresses are removed, the messages may be subject to a reflection
999 attack in which a message is reflected back to its originator. The
1000 directional address type provides a way to avoid transport addresses
1001 and reflection attacks. Directional addresses are encoded as four
1002 byte unsigned integers in network byte order. If the message is
1003 originated by the party sending the original AP-REQ message, then an
1004 address of 0 SHOULD be used. If the message is originated by the
1005 party to whom that AP-REQ was sent, then the address 1 SHOULD be
1007 Yu Expires: Mar 2005 [Page 18]
1009 Internet-Draft rfc1510ter-01 15 Sep 2005
1011 used. Applications involving multiple parties can specify the use of
1014 Directional addresses MUST only be used for the sender address field
1015 in the KRB-SAFE or KRB-PRIV messages. They MUST NOT be used as a
1016 ticket address or in a AP-REQ message. This address type SHOULD only
1017 be used in situations where the sending party knows that the
1018 receiving party supports the address type. This generally means that
1019 directional addresses may only be used when the application protocol
1020 requires their support. Directional addresses are type (3).
1024 Principals are participants in the Kerberos protocol. A "realm"
1025 consists of principals in one administrative domain, served by one
1026 KDC (or one replicated set of KDCs). Each principal name has an
1027 arbitrary number of components, though typical principal names will
1028 only have one or two components. A principal name is meant to be
1029 readable by and meaningful to humans, especially in a realm lacking a
1030 centrally adminstered authorization infrastructure.
1034 Each PrincipalName has NameType indicating what sort of name it is.
1035 The name-type SHOULD be treated as a hint. Ignoring the name type,
1036 no two names can be the same (i.e., at least one of the components,
1037 or the realm, must be different).
1039 -- assigned numbers for name types (used in principal names)
1042 -- Name type not known
1043 nt-unknown NameType ::= 0
1044 -- Just the name of the principal as in DCE, or for users
1045 nt-principal NameType ::= 1
1046 -- Service and other unique instance (krbtgt)
1047 nt-srv-inst NameType ::= 2
1048 -- Service with host name as instance (telnet, rcommands)
1049 nt-srv-hst NameType ::= 3
1050 -- Service with host as remaining components
1051 nt-srv-xhst NameType ::= 4
1053 nt-uid NameType ::= 5
1054 -- Encoded X.509 Distingished name [RFC 2253]
1055 nt-x500-principal NameType ::= 6
1056 -- Name in form of SMTP email name (e.g. user@foo.com)
1057 nt-smtp-name NameType ::= 7
1058 -- Enterprise name - may be mapped to principal name
1059 nt-enterprise NameType ::= 10
1063 Yu Expires: Mar 2005 [Page 19]
1065 Internet-Draft rfc1510ter-01 15 Sep 2005
1067 5.2. Principal Type Definition
1069 PrincipalName ::= SEQUENCE {
1070 name-type [0] NameType,
1071 -- May have zero elements, or individual elements may be
1072 -- zero-length, but this is NOT RECOMMENDED.
1073 name-string [1] SEQUENCE OF KerberosString
1078 hint of the type of name that follows
1081 The "name-string" encodes a sequence of components that form a
1082 name, each component encoded as a KerberosString. Taken
1083 together, a PrincipalName and a Realm form a principal
1084 identifier. Most PrincipalNames will have only a few components
1085 (typically one or two).
1087 5.3. Principal Name Reuse
1089 Realm administrators SHOULD use extreme caution when considering
1090 reusing a principal name. A service administrator might explicitly
1091 enter principal names into a local access control list (ACL) for the
1092 service. If such local ACLs exist independently of a centrally
1093 administered authorization infrastructure, realm administrators
1094 SHOULD NOT reuse principal names until confirming that all extant ACL
1095 entries referencing that principal name have been updated. Failure
1096 to perform this check can result in a security vulnerability, as a
1097 new principal can inadvertently inherit unauthorized privileges upon
1098 receiving a reused principal name. An organization whose Kerberos-
1099 authenticated services all use a centrally-adminstered authorization
1100 infrastructure may not need to take these precautions regarding
1101 principal name reuse.
1105 Realm ::= KerberosString
1108 RealmIA5 ::= Realm (KerberosStringIA5)
1111 RealmExt ::= Realm (KerberosStringExt)
1114 Kerberos realm names are KerberosStrings. Realms MUST NOT contain a
1115 character with the code 0 (the US-ASCII NUL). Most realms will
1116 usually consist of several components separated by periods (.), in
1117 the style of Internet Domain Names, or separated by slashes (/) in
1119 Yu Expires: Mar 2005 [Page 20]
1121 Internet-Draft rfc1510ter-01 15 Sep 2005
1123 the style of X.500 names.
1125 5.5. Printable Representations of Principal Names
1127 [ perhaps non-normative? ]
1129 The printable form of a principal name consists of the concatenation
1130 of components of the PrincipalName value using the slash character
1131 (/), followed by an at-sign (@), followed by the realm name. Any
1132 occurrence of a backslash (\), slash (/) or at-sign (@) in the
1133 PrincipalName value is quoted by a backslash.
1135 5.6. Ticket-Granting Service Principal
1137 The PrincipalName value corresponding to a ticket-granting service
1138 has two components: the first component is the string "krbtgt", and
1139 the second component is the realm name of the TGS which will accept a
1140 ticket-granting ticket having this service principal name. The realm
1141 name of service always indicates which realm issued the ticket. A
1142 ticket-granting ticket issued by "A.EXAMPLE.COM" which is valid for
1143 obtaining tickets in the same realm would have the following ASN.1
1144 values for its "realm" and "sname" components, respectively:
1146 -- Example Realm and PrincipalName for a TGS
1148 tgtRealm1 Realm ::= ia5 : "A.EXAMPLE.COM"
1150 tgtPrinc1 PrincipalName ::= {
1151 name-type nt-srv-inst,
1152 name-string { ia5 : "krbtgt", ia5 : "A.EXAMPLE.COM" }
1155 Its printable representation would be written as
1156 "krbtgt/A.EXAMPLE.COM@A.EXAMPLE.COM".
1158 5.6.1. Cross-Realm TGS Principals
1160 It is possible for a principal in one realm to authenticate to a
1161 service in another realm. A KDC can issue a cross-realm ticket-
1162 granting ticket to allow one of its principals to authenticate to a
1163 service in a foreign realm. For example, the TGS principal
1164 "krbtgt/B.EXAMPLE.COM@A.EXAMPLE.COM" is a principal that permits a
1165 client principal in the realm A.EXAMPLE.COM to authenticate to a
1166 service in the realm B.EXAMPLE.COM. When the KDC for B.EXAMPLE.COM
1167 issues a ticket to a client originating in A.EXAMPLE.COM, the
1168 client's realm name remains "A.EXAMPLE.COM", even though the service
1169 principal will have the realm "B.EXAMPLE.COM".
1175 Yu Expires: Mar 2005 [Page 21]
1177 Internet-Draft rfc1510ter-01 15 Sep 2005
1179 6. Types Relating to Encryption
1181 Many Kerberos protocol messages contain encrypted encodings of
1182 various data types. Some Kerberos protocol messages also contain
1183 checksums (signatures) of encodings of various types.
1185 6.1. Assigned Numbers for Encryption
1187 Encryption algorithm identifiers and key usages both have assigned
1188 numbers, described in [KCRYPTO].
1192 EType is the integer type for assigned numbers for encryption
1193 algorithms. Defined in [KCRYPTO].
1195 -- Assigned numbers denoting encryption mechanisms.
1198 -- assigned numbers for encryption schemes
1199 et-des-cbc-crc EType ::= 1
1200 et-des-cbc-md4 EType ::= 2
1201 et-des-cbc-md5 EType ::= 3
1203 et-des3-cbc-md5 EType ::= 5
1205 et-des3-cbc-sha1 EType ::= 7
1206 et-dsaWithSHA1-CmsOID EType ::= 9
1207 et-md5WithRSAEncryption-CmsOID EType ::= 10
1208 et-sha1WithRSAEncryption-CmsOID EType ::= 11
1209 et-rc2CBC-EnvOID EType ::= 12
1210 et-rsaEncryption-EnvOID EType ::= 13
1211 et-rsaES-OAEP-ENV-OID EType ::= 14
1212 et-des-ede3-cbc-Env-OID EType ::= 15
1213 et-des3-cbc-sha1-kd EType ::= 16
1215 et-aes128-cts-hmac-sha1-96 EType ::= 17
1217 et-aes256-cts-hmac-sha1-96 EType ::= 18
1219 et-rc4-hmac EType ::= 23
1221 et-rc4-hmac-exp EType ::= 24
1222 -- opaque; PacketCable
1223 et-subkey-keymaterial EType ::= 65
1228 KeyUsage is the integer type for assigned numbers for key usages.
1229 Key usage values are inputs to the encryption and decryption
1231 Yu Expires: Mar 2005 [Page 22]
1233 Internet-Draft rfc1510ter-01 15 Sep 2005
1235 functions described in [KCRYPTO].
1237 -- Assigned numbers denoting key usages.
1241 -- Actual identifier names are provisional and subject to
1244 ku-pa-enc-ts KeyUsage ::= 1
1245 ku-Ticket KeyUsage ::= 2
1246 ku-EncASRepPart KeyUsage ::= 3
1247 ku-TGSReqAuthData-sesskey KeyUsage ::= 4
1248 ku-TGSReqAuthData-subkey KeyUsage ::= 5
1249 ku-pa-TGSReq-cksum KeyUsage ::= 6
1250 ku-pa-TGSReq-authenticator KeyUsage ::= 7
1251 ku-EncTGSRepPart-sesskey KeyUsage ::= 8
1252 ku-EncTGSRepPart-subkey KeyUsage ::= 9
1253 ku-Authenticator-cksum KeyUsage ::= 10
1254 ku-APReq-authenticator KeyUsage ::= 11
1255 ku-EncAPRepPart KeyUsage ::= 12
1256 ku-EncKrbPrivPart KeyUsage ::= 13
1257 ku-EncKrbCredPart KeyUsage ::= 14
1258 ku-KrbSafe-cksum KeyUsage ::= 15
1259 ku-ad-KDCIssued-cksum KeyUsage ::= 19
1262 -- The following numbers are provisional...
1263 -- conflicts may exist elsewhere.
1264 ku-Ticket-cksum KeyUsage ::= 25
1265 ku-ASReq-cksum KeyUsage ::= 26
1266 ku-TGSReq-cksum KeyUsage ::= 27
1267 ku-ASRep-cksum KeyUsage ::= 28
1268 ku-TGSRep-cksum KeyUsage ::= 29
1269 ku-APReq-cksum KeyUsage ::= 30
1270 ku-APRep-cksum KeyUsage ::= 31
1271 ku-KrbCred-cksum KeyUsage ::= 32
1272 ku-KrbError-cksum KeyUsage ::= 33
1273 ku-KDCRep-cksum KeyUsage ::= 34
1276 6.2. Which Key to Use
1287 Yu Expires: Mar 2005 [Page 23]
1289 Internet-Draft rfc1510ter-01 15 Sep 2005
1291 -- KeyToUse identifies which key is to be used to encrypt or
1292 -- sign a given value.
1294 -- Values of KeyToUse are never actually transmitted over the
1295 -- wire, or even used directly by the implementation in any
1296 -- way, as key usages are; it exists primarily to identify
1297 -- which key gets used for what purpose. Thus, the specific
1298 -- numeric values associated with this type are irrelevant.
1299 KeyToUse ::= ENUMERATED {
1302 -- server long term key
1304 -- client long term key
1306 -- key selected by KDC for encryption of a KDC-REP
1308 -- session key from ticket
1310 -- subsession key negotiated via AP-REQ/AP-REP
1318 The "EncryptionKey" type holds an encryption key.
1320 EncryptionKey ::= SEQUENCE {
1322 keyvalue [1] OCTET STRING
1327 This "EType" identifies the encryption algorithm, described in
1331 Contains the actual key.
1335 The "EncryptedData" type contains the encryption of another data
1336 type. The recipient uses fields within EncryptedData to determine
1337 which key to use for decryption.
1343 Yu Expires: Mar 2005 [Page 24]
1345 Internet-Draft rfc1510ter-01 15 Sep 2005
1348 -- "Type" specifies which ASN.1 type is encrypted to the
1349 -- ciphertext in the EncryptedData. "Keys" specifies a set of
1350 -- keys of which one key may be used to encrypt the data.
1351 -- "KeyUsages" specifies a set of key usages, one of which may
1352 -- be used to encrypt.
1354 -- None of the parameters is transmitted over the wire.
1356 Type, KeyToUse:Keys, KeyUsage:KeyUsages
1359 kvno [1] UInt32 OPTIONAL,
1360 cipher [2] OCTET STRING (CONSTRAINED BY {
1361 -- must be encryption of --
1362 OCTET STRING (CONTAINING Type),
1363 -- with one of the keys -- KeyToUse:Keys,
1364 -- with key usage being one of --
1373 Advisory parameter indicating which key usage to use when
1374 encrypting the ciphertext. If "KeyUsages" indicate multiple
1375 "KeyUsage" values, the detailed description of the containing
1376 message will indicate which key to use under which conditions.
1379 Advisory parameter indicating the ASN.1 type whose DER encoding
1380 is the plaintext encrypted into the EncryptedData.
1383 Advisory parameter indicating which key to use to perform the
1384 encryption. If "Keys" indicate multiple "KeyToUse" values, the
1385 detailed description of the containing message will indicate
1386 which key to use under which conditions.
1389 Advisory parameter indicating which "KeyUsage" value is used to
1390 encrypt. If "KeyUsages" indicates multiple "KeyUsage" values,
1391 the detailed description of the containing message will indicate
1392 which key usage to use under which conditions.
1396 Several types contain checksums (actually signatures) of data.
1399 Yu Expires: Mar 2005 [Page 25]
1401 Internet-Draft rfc1510ter-01 15 Sep 2005
1405 -- The parameters specify which key to use to produce the
1406 -- signature, as well as which key usage to use. The
1407 -- parameters are not actually sent over the wire.
1409 KeyToUse:Keys, KeyUsage:KeyUsages
1411 cksumtype [0] CksumType,
1412 checksum [1] OCTET STRING (CONSTRAINED BY {
1413 -- signed using one of the keys --
1415 -- with key usage being one of --
1422 Integer type for assigned numbers for signature algorithms.
1423 Defined in [KCRYPTO]
1432 Signature algorithm used to produce the signature.
1435 The actual checksum.
1439 ChecksumOf is similar to "Checksum", but specifies which type is
1442 -- a Checksum that must contain the checksum
1443 -- of a particular type
1445 Type, KeyToUse:Keys, KeyUsage:KeyUsages
1446 } ::= Checksum { Keys, KeyUsages } (WITH COMPONENTS {
1448 checksum (CONSTRAINED BY {
1449 -- must be checksum of --
1450 OCTET STRING (CONTAINING Type)
1455 Yu Expires: Mar 2005 [Page 26]
1457 Internet-Draft rfc1510ter-01 15 Sep 2005
1460 Indicates the ASN.1 type whose DER encoding is signed.
1464 Signed is similar to "ChecksumOf", but contains an actual instance of
1465 the type being signed in addition to the signature.
1467 -- parameterized type for wrapping authenticated plaintext
1469 InnerType, KeyToUse:Keys, KeyUsage:KeyUsages
1471 cksum [0] ChecksumOf {
1472 InnerType, Keys, KeyUsages
1474 inner [1] InnerType,
1481 [ A large number of items described here are duplicated in the
1482 sections describing KDC-REQ processing. Should find a way to avoid
1485 A ticket binds a principal name to a session key. The important
1486 fields of a ticket are in the encrypted part. The components in
1487 common between the RFC 1510 and the extensible versions are
1489 EncTicketPartCommon ::= SEQUENCE {
1490 flags [0] TicketFlags,
1491 key [1] EncryptionKey,
1493 cname [3] PrincipalName,
1494 transited [4] TransitedEncoding,
1495 authtime [5] KerberosTime,
1496 starttime [6] KerberosTime OPTIONAL,
1497 endtime [7] KerberosTime,
1498 renew-till [8] KerberosTime OPTIONAL,
1499 caddr [9] HostAddresses OPTIONAL,
1500 authorization-data [10] AuthorizationData OPTIONAL,
1506 This field contains the client's realm.
1509 This field contains the client's name.
1511 Yu Expires: Mar 2005 [Page 27]
1513 Internet-Draft rfc1510ter-01 15 Sep 2005
1516 This field lists the network addresses (if absent, all addresses
1517 are permitted) from which the ticket is valid.
1519 Descriptions of the other fields appear in the following sections.
1523 Three of the ticket timestamps may be requested from the KDC. The
1524 timestamps may differ from those requested, depending on site policy.
1527 The time at which the client authenticated, as recorded by the
1531 The earliest time when the ticket is valid. If not present, the
1532 ticket is valid starting at the authtime. This is requested as
1533 the "from" field of KDC-REQ-BODY-COMMON.
1536 This time is requested in the "till" field of KDC-REQ-BODY-
1537 COMMON. Contains the time after which the ticket will not be
1538 honored (its expiration time). Note that individual services
1539 MAY place their own limits on the life of a ticket and MAY
1540 reject tickets which have not yet expired. As such, this is
1541 really an upper bound on the expiration time for the ticket.
1544 This time is requested in the "rtime" field of KDC-REQ-BODY-
1545 COMMON. It is only present in tickets that have the "renewable"
1546 flag set in the flags field. It indicates the maximum endtime
1547 that may be included in a renewal. It can be thought of as the
1548 absolute expiration time for the ticket, including all renewals.
1552 A number of flags may be set in the ticket, further defining some of
1553 its capabilities. Some of these flags map to flags in a KDC request.
1567 Yu Expires: Mar 2005 [Page 28]
1569 Internet-Draft rfc1510ter-01 15 Sep 2005
1571 TicketFlags ::= KerberosFlags { TicketFlagsBits }
1573 TicketFlagsBits ::= BIT STRING {
1586 transited-policy-checked (12),
1587 ok-as-delegate (13),
1589 cksummed-ticket (15)
1593 7.2.1. Flags Relating to Initial Ticket Acquisition
1595 [ adapted KCLAR 2.1. ]
1597 Several flags indicate the details of how the initial ticket was
1601 The "initial" flag indicates that a ticket was issued using the
1602 AS protocol, rather than issued based on a ticket-granting
1603 ticket. Application servers (e.g., a password-changing program)
1604 requiring a client's definite knowledge of its secret key can
1605 insist that this flag be set in any tickets they accept, thus
1606 being assured that the client's key was recently presented to
1607 the application client.
1610 The "pre-authent" flag indicates that some sort of pre-
1611 authentication was used during the AS exchange.
1614 The "hw-authent" flag indicates that some sort of hardware-based
1615 pre-authentication occurred during the AS exchange.
1617 Both the "pre-authent" and the "hw-authent" flags may be present with
1618 or without the "initial" flag; such tickets with the "initial" flag
1619 clear are ones which are derived from initial tickets with the "pre-
1620 authent" or "hw-authent" flags set.
1623 Yu Expires: Mar 2005 [Page 29]
1625 Internet-Draft rfc1510ter-01 15 Sep 2005
1627 7.2.2. Invalid Tickets
1631 The "invalid" flag indicates that a ticket is invalid. Application
1632 servers MUST reject tickets which have this flag set. A postdated
1633 ticket will be issued in this form. Invalid tickets MUST be
1634 validated by the KDC before use, by presenting them to the KDC in a
1635 TGS request with the "validate" option specified. The KDC will only
1636 validate tickets after their starttime has passed. The validation is
1637 required so that postdated tickets which have been stolen before
1638 their starttime can be rendered permanently invalid (through a hot-
1639 list mechanism -- see Section 8.3.2.4).
1641 7.2.3. OK as Delegate
1645 The "ok-as-delegate" flag provides a way for a KDC to communicate
1646 local realm policy to a client regarding whether the service for
1647 which the ticket is issued is trusted to accept delegated
1648 credentials. For some applications, a client may need to delegate
1649 credentials to a service to act on its behalf in contacting other
1650 services. The ability of a client to obtain a service ticket for a
1651 service conveys no information to the client about whether the
1652 service should be trusted to accept delegated credentials.
1654 The copy of the ticket flags visible to the client may have the "ok-
1655 as-delegate" flag set to indicate to the client that the service
1656 specified in the ticket has been determined by policy of the realm to
1657 be a suitable recipient of delegation. A client can use the presence
1658 of this flag to help it make a decision whether to delegate
1659 credentials (either grant a proxy or a forwarded ticket-granting
1660 ticket) to this service. It is acceptable to ignore the value of
1661 this flag. When setting this flag, an administrator should consider
1662 the security and placement of the server on which the service will
1663 run, as well as whether the service requires the use of delegated
1666 7.2.4. Renewable Tickets
1668 [ adapted KCLAR 2.3. ]
1670 The "renewable" flag indicates whether the ticket may be renewed.
1672 Renewable tickets can be used to mitigate the consequences of ticket
1673 theft. Applications may desire to hold credentials which can be
1674 valid for long periods of time. However, this can expose the
1675 credentials to potential theft for equally long periods, and those
1676 stolen credentials would be valid until the expiration time of the
1677 ticket(s). Simply using short-lived tickets and obtaining new ones
1679 Yu Expires: Mar 2005 [Page 30]
1681 Internet-Draft rfc1510ter-01 15 Sep 2005
1683 periodically would require the application to have long-term access
1684 to the client's secret key, which is an even greater risk.
1686 Renewable tickets have two "expiration times": the first is when the
1687 current instance of the ticket expires, and the second is the latest
1688 permissible value for an individual expiration time. An application
1689 client must periodically present an unexpired renewable ticket to the
1690 KDC, setting the "renew" option in the KDC request. The KDC will
1691 issue a new ticket with a new session key and a later expiration
1692 time. All other fields of the ticket are left unmodified by the
1693 renewal process. When the latest permissible expiration time
1694 arrives, the ticket expires permanently. At each renewal, the KDC
1695 MAY consult a hot-list to determine if the ticket had been reported
1696 stolen since its last renewal; it will refuse to renew such stolen
1697 tickets, and thus the usable lifetime of stolen tickets is reduced.
1699 The "renewable" flag in a ticket is normally only interpreted by the
1700 ticket-granting service. It can usually be ignored by application
1701 servers. However, some particularly careful application servers MAY
1702 disallow renewable tickets.
1704 If a renewable ticket is not renewed by its expiration time, the KDC
1705 will not renew the ticket. The "renewable" flag is clear by default,
1706 but a client can request it be set by setting the "renewable" option
1707 in the AS-REQ message. If it is set, then the "renew-till" field in
1708 the ticket contains the time after which the ticket may not be
1711 7.2.5. Postdated Tickets
1714 indicates a ticket which has been postdated
1717 indicates that postdated tickets may be issued based on this
1722 Applications may occasionally need to obtain tickets for use much
1723 later, e.g., a batch submission system would need tickets to be valid
1724 at the time the batch job is serviced. However, it is dangerous to
1725 hold valid tickets in a batch queue, since they will be on-line
1726 longer and more prone to theft. Postdated tickets provide a way to
1727 obtain these tickets from the KDC at job submission time, but to
1728 leave them "dormant" until they are activated and validated by a
1729 further request of the KDC. If a ticket theft were reported in the
1730 interim, the KDC would refuse to validate the ticket, and the thief
1735 Yu Expires: Mar 2005 [Page 31]
1737 Internet-Draft rfc1510ter-01 15 Sep 2005
1739 The "may-postdate" flag in a ticket is normally only interpreted by
1740 the TGS. It can be ignored by application servers. This flag MUST
1741 be set in a ticket-granting ticket in order for the KDC to issue a
1742 postdated ticket based on the presented ticket. It is reset by
1743 default; it MAY be requested by a client by setting the "allow-
1744 postdate" option in the AS-REQ [?also TGS-REQ?] message. This flag
1745 does not allow a client to obtain a postdated ticket-granting ticket;
1746 postdated ticket-granting tickets can only by obtained by requesting
1747 the postdating in the AS-REQ message. The life (endtime minus
1748 starttime) of a postdated ticket will be the remaining life of the
1749 ticket-granting ticket at the time of the request, unless the
1750 "renewable" option is also set, in which case it can be the full life
1751 (endtime minus starttime) of the ticket-granting ticket. The KDC MAY
1752 limit how far in the future a ticket may be postdated.
1754 The "postdated" flag indicates that a ticket has been postdated. The
1755 application server can check the authtime field in the ticket to see
1756 when the original authentication occurred. Some services MAY choose
1757 to reject postdated tickets, or they may only accept them within a
1758 certain period after the original authentication. When the KDC
1759 issues a "postdated" ticket, it will also be marked as "invalid", so
1760 that the application client MUST present the ticket to the KDC for
1761 validation before use.
1763 7.2.6. Proxiable and Proxy Tickets
1766 indicates a proxy ticket
1769 indicates that proxy tickets may be issued based on this ticket
1773 It may be necessary for a principal to allow a service to perform an
1774 operation on its behalf. The service must be able to take on the
1775 identity of the client, but only for a particular purpose. A
1776 principal can allow a service to take on the principal's identity for
1777 a particular purpose by granting it a proxy.
1779 The process of granting a proxy using the "proxy" and "proxiable"
1780 flags is used to provide credentials for use with specific services.
1781 Though conceptually also a proxy, users wishing to delegate their
1782 identity in a form usable for all purposes MUST use the ticket
1783 forwarding mechanism described in the next section to forward a
1784 ticket-granting ticket.
1786 The "proxiable" flag in a ticket is normally only interpreted by the
1787 ticket-granting service. It can be ignored by application servers.
1788 When set, this flag tells the ticket-granting server that it is OK to
1789 issue a new ticket (but not a ticket-granting ticket) with a
1791 Yu Expires: Mar 2005 [Page 32]
1793 Internet-Draft rfc1510ter-01 15 Sep 2005
1795 different network address based on this ticket. This flag is set if
1796 requested by the client on initial authentication. By default, the
1797 client will request that it be set when requesting a ticket-granting
1798 ticket, and reset when requesting any other ticket.
1800 This flag allows a client to pass a proxy to a server to perform a
1801 remote request on its behalf (e.g. a print service client can give
1802 the print server a proxy to access the client's files on a particular
1803 file server in order to satisfy a print request).
1805 In order to complicate the use of stolen credentials, Kerberos
1806 tickets may contain a set of network addresses from which they are
1807 valid. When granting a proxy, the client MUST specify the new
1808 network address from which the proxy is to be used, or indicate that
1809 the proxy is to be issued for use from any address.
1811 The "proxy" flag is set in a ticket by the TGS when it issues a proxy
1812 ticket. Application servers MAY check this flag and at their option
1813 they MAY require additional authentication from the agent presenting
1814 the proxy in order to provide an audit trail.
1816 7.2.7. Forwarded and Forwardable Tickets
1819 indicates a forwarded ticket
1822 indicates that forwarded tickets may be issued based on this
1827 Authentication forwarding is an instance of a proxy where the service
1828 that is granted is complete use of the client's identity. An example
1829 where it might be used is when a user logs in to a remote system and
1830 wants authentication to work from that system as if the login were
1833 The "forwardable" flag in a ticket is normally only interpreted by
1834 the ticket-granting service. It can be ignored by application
1835 servers. The "forwardable" flag has an interpretation similar to
1836 that of the "proxiable" flag, except ticket-granting tickets may also
1837 be issued with different network addresses. This flag is reset by
1838 default, but users MAY request that it be set by setting the
1839 "forwardable" option in the AS request when they request their
1840 initial ticket-granting ticket.
1842 This flag allows for authentication forwarding without requiring the
1843 user to enter a password again. If the flag is not set, then
1844 authentication forwarding is not permitted, but the same result can
1845 still be achieved if the user engages in the AS exchange specifying
1847 Yu Expires: Mar 2005 [Page 33]
1849 Internet-Draft rfc1510ter-01 15 Sep 2005
1851 the requested network addresses and supplies a password.
1853 The "forwarded" flag is set by the TGS when a client presents a
1854 ticket with the "forwardable" flag set and requests a forwarded
1855 ticket by specifying the "forwarded" KDC option and supplying a set
1856 of addresses for the new ticket. It is also set in all tickets
1857 issued based on tickets with the "forwarded" flag set. Application
1858 servers may choose to process "forwarded" tickets differently than
1859 non-forwarded tickets.
1861 If addressless tickets are forwarded from one system to another,
1862 clients SHOULD still use this option to obtain a new TGT in order to
1863 have different session keys on the different systems.
1865 7.3. Transited Realms
1867 [ KCLAR 2.7., plus new stuff ]
1869 7.4. Authorization Data
1875 AuthorizationData ::= SEQUENCE OF SEQUENCE {
1877 ad-data [1] OCTET STRING
1882 This field identifies the contents of the ad-data. All negative
1883 values are reserved for local use. Non-negative values are
1884 reserved for registered use.
1887 This field contains authorization data to be interpreted
1888 according to the value of the corresponding ad-type field.
1890 Each sequence of ADType and OCTET STRING is referred to as an
1891 authorization element. Elements MAY be application specific,
1892 however, there is a common set of recursive elements that should be
1893 understood by all implementations. These elements contain other
1894 AuthorizationData, and the interpretation of the encapsulating
1895 element determines which enclosed elements must be interpreted, and
1896 which may be ignored.
1898 Depending on the meaning of the encapsulating element, the
1899 encapsulated AuthorizationData may be ignored, interpreted as issued
1900 directly by the KDC, or be stored in a separate plaintext part of the
1901 ticket. The types of the encapsulating elements are specified as
1903 Yu Expires: Mar 2005 [Page 34]
1905 Internet-Draft rfc1510ter-01 15 Sep 2005
1907 part of the Kerberos protocol because behavior based on these
1908 container elements should be understood across implementations, while
1909 other elements need only be understood by the applications which they
1912 Authorization data elements are considered critical if present in a
1913 ticket or authenticator. Unless encapsulated in a known
1914 authorization data element modifying the criticality of the elements
1915 it contains, an application server MUST reject the authentication of
1916 a client whose AP-REQ or ticket contains an unrecognized
1917 authorization data element. Authorization data is intended to
1918 restrict the use of a ticket. If the service cannot determine
1919 whether it is the target of a restriction, a security weakness may
1920 exist if the ticket can be used for that service. Authorization
1921 elements that are truly optional can be enclosed in AD-IF-RELEVANT
1925 ad-type | contents of ad-data
1926 ________|_______________________________________
1927 1 | DER encoding of AD-IF-RELEVANT
1928 4 | DER encoding of AD-KDCIssued
1929 5 | DER encoding of AD-AND-OR
1930 8 | DER encoding of AD-MANDATORY-FOR-KDC
1934 7.4.1. AD-IF-RELEVANT
1936 ad-if-relevant ADType ::= int32 : 1
1938 -- Encapsulates another AuthorizationData.
1939 -- Intended for application servers; receiving application servers
1941 AD-IF-RELEVANT ::= AuthorizationData
1943 AD elements encapsulated within the if-relevant element are intended
1944 for interpretation only by application servers that understand the
1945 particular ad-type of the embedded element. Application servers that
1946 do not understand the type of an element embedded within the if-
1947 relevant element MAY ignore the uninterpretable element. This element
1948 promotes interoperability across implementations which may have local
1949 extensions for authorization. The ad-type for AD-IF-RELEVANT is (1).
1959 Yu Expires: Mar 2005 [Page 35]
1961 Internet-Draft rfc1510ter-01 15 Sep 2005
1963 -- KDC-issued privilege attributes
1964 ad-kdcissued ADType ::= int32 : 4
1966 AD-KDCIssued ::= SEQUENCE {
1967 ad-checksum [0] ChecksumOf {
1968 AuthorizationData, { key-session },
1969 { ku-ad-KDCIssued-cksum }},
1970 i-realm [1] Realm OPTIONAL,
1971 i-sname [2] PrincipalName OPTIONAL,
1972 elements [3] AuthorizationData
1977 A cryptographic checksum computed over the DER encoding of the
1978 AuthorizationData in the "elements" field, keyed with the
1979 session key. Its checksumtype is the mandatory checksum type
1980 for the encryption type of the session key, and its key usage
1984 The name of the issuing principal if different from the KDC
1985 itself. This field would be used when the KDC can verify the
1986 authenticity of elements signed by the issuing principal and it
1987 allows this KDC to notify the application server of the validity
1991 AuthorizationData issued by the KDC.
1993 The KDC-issued ad-data field is intended to provide a means for
1994 Kerberos credentials to embed within themselves privilege attributes
1995 and other mechanisms for positive authorization, amplifying the
1996 privileges of the principal beyond what it would have if using
1997 credentials without such an authorization-data element.
1999 This amplification of privileges cannot be provided without this
2000 element because the definition of the authorization-data field allows
2001 elements to be added at will by the bearer of a TGT at the time that
2002 they request service tickets and elements may also be added to a
2003 delegated ticket by inclusion in the authenticator.
2005 For KDC-issued elements this is prevented because the elements are
2006 signed by the KDC by including a checksum encrypted using the
2007 server's key (the same key used to encrypt the ticket -- or a key
2008 derived from that key). AuthorizationData encapsulated with in the
2009 AD-KDCIssued element MUST be ignored by the application server if
2010 this "signature" is not present. Further, AuthorizationData
2011 encapsulated within this element from a ticket-granting ticket MAY be
2012 interpreted by the KDC, and used as a basis according to policy for
2013 including new signed elements within derivative tickets, but they
2015 Yu Expires: Mar 2005 [Page 36]
2017 Internet-Draft rfc1510ter-01 15 Sep 2005
2019 will not be copied to a derivative ticket directly. If they are
2020 copied directly to a derivative ticket by a KDC that is not aware of
2021 this element, the signature will not be correct for the application
2022 ticket elements, and the field will be ignored by the application
2025 This element and the elements it encapsulates MAY be safely ignored
2026 by applications, application servers, and KDCs that do not implement
2029 The ad-type for AD-KDC-ISSUED is (4).
2033 ad-and-or ADType ::= int32 : 5
2035 AD-AND-OR ::= SEQUENCE {
2036 condition-count [0] INTEGER,
2037 elements [1] AuthorizationData
2041 When restrictive AD elements are encapsulated within the and-or
2042 element, the and-or element is considered satisfied if and only if at
2043 least the number of encapsulated elements specified in condition-
2044 count are satisfied. Therefore, this element MAY be used to
2045 implement an "or" operation by setting the condition-count field to
2046 1, and it MAY specify an "and" operation by setting the condition
2047 count to the number of embedded elements. Application servers that do
2048 not implement this element MUST reject tickets that contain
2049 authorization data elements of this type.
2051 The ad-type for AD-AND-OR is (5).
2053 7.4.4. AD-MANDATORY-FOR-KDC
2055 -- KDCs MUST interpret any AuthorizationData wrapped in this.
2056 ad-mandatory-for-kdc ADType ::= int32 : 8
2057 AD-MANDATORY-FOR-KDC ::= AuthorizationData
2059 AD elements encapsulated within the mandatory-for-kdc element are to
2060 be interpreted by the KDC. KDCs that do not understand the type of
2061 an element embedded within the mandatory-for-kdc element MUST reject
2064 The ad-type for AD-MANDATORY-FOR-KDC is (8).
2066 7.5. Encrypted Part of Ticket
2068 The complete definition of the encrypted part is
2071 Yu Expires: Mar 2005 [Page 37]
2073 Internet-Draft rfc1510ter-01 15 Sep 2005
2075 -- Encrypted part of ticket
2076 EncTicketPart ::= CHOICE {
2077 rfc1510 [APPLICATION 3] EncTicketPart1510,
2078 ext [APPLICATION 5] EncTicketPartExt
2081 with the common portion being
2083 EncTicketPartCommon ::= SEQUENCE {
2084 flags [0] TicketFlags,
2085 key [1] EncryptionKey,
2087 cname [3] PrincipalName,
2088 transited [4] TransitedEncoding,
2089 authtime [5] KerberosTime,
2090 starttime [6] KerberosTime OPTIONAL,
2091 endtime [7] KerberosTime,
2092 renew-till [8] KerberosTime OPTIONAL,
2093 caddr [9] HostAddresses OPTIONAL,
2094 authorization-data [10] AuthorizationData OPTIONAL,
2099 The encrypted part of the backwards-compatibility form of a ticket
2102 EncTicketPart1510 ::= SEQUENCE {
2103 COMPONENTS OF EncTicketPartCommon
2104 } (WITH COMPONENTS {
2106 -- explicitly force IA5 in strings
2108 cname (PrincipalNameIA5)
2111 The encrypted part of the extensible form of a ticket is:
2113 EncTicketPartExt ::= EncTicketPartCommon (WITH COMPONENTS {
2115 -- explicitly force UTF-8 in strings
2117 cname (PrincipalNameExt),
2118 -- explicitly constrain caddr to be non-empty if present
2119 caddr (SIZE (1..MAX)),
2120 -- forbid empty authorization-data encodings
2121 authorization-data (SIZE (1..MAX))
2127 Yu Expires: Mar 2005 [Page 38]
2129 Internet-Draft rfc1510ter-01 15 Sep 2005
2131 7.6. Cleartext Part of Ticket
2133 The complete definition of Ticket is:
2136 rfc1510 [APPLICATION 1] Ticket1510,
2137 ext [APPLICATION 4] Signed {
2138 TicketExt, { key-server }, { ku-Ticket-cksum }
2142 with the common portion being:
2144 -- takes a parameter specifying which type gets encrypted
2145 TicketCommon { EncPart } ::= SEQUENCE {
2146 tkt-vno [0] INTEGER (5),
2148 sname [2] PrincipalName,
2149 enc-part [3] EncryptedData {
2150 EncPart, { key-server }, { ku-Ticket }
2153 extensions [4] TicketExtensions OPTIONAL,
2158 The "sname" field provides the name of the target service principal
2159 in cleartext, as a hint to aid the server in choosing the correct
2162 The backwards-compatibility form of Ticket is:
2164 Ticket1510 ::= SEQUENCE {
2165 COMPONENTS OF TicketCommon { EncTicketPart1510 }
2166 } (WITH COMPONENTS {
2168 -- explicitly force IA5 in strings
2170 sname (PrincipalNameIA5)
2173 The extensible form of Ticket is:
2183 Yu Expires: Mar 2005 [Page 39]
2185 Internet-Draft rfc1510ter-01 15 Sep 2005
2187 -- APPLICATION tag goes inside Signed{} as well as outside,
2188 -- to prevent possible substitution attacks.
2189 TicketExt ::= [APPLICATION 4] TicketCommon {
2191 } (WITH COMPONENTS {
2193 -- explicitly force UTF-8 in strings
2195 sname (PrincipalNameExt)
2199 TicketExtensions, which may only be present in the extensible form of
2200 Ticket, are a cleartext typed hole for extension use.
2201 AuthorizationData already provides an encrypted typed hole.
2205 -- ticket extensions: for TicketExt only
2206 TicketExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
2208 te-data [1] OCTET STRING
2212 A client will only receive an extensible Ticket if the application
2213 server supports extensibility.
2215 8. Credential Acquisition
2217 There are two exchanges that can be used for acquiring credentials:
2218 the AS exchange and the TGS exchange. These exchanges have many
2219 similarities, and this document describes them in parallel, noting
2220 which behaviors are specific to one type of exchange. The AS request
2221 (AS-REQ) and TGS request (TGS-REQ) are both forms of KDC requests
2222 (KDC-REQ). Likewise, the AS reply (AS-REP) and TGS reply (TGS-REP)
2223 are forms of KDC replies (KDC-REP).
2225 The credentials acquisition protocol operates over specific
2226 transports. Additionally, specific methods exist to permit a client
2227 to discover the KDC host with which to communicate.
2231 The KDC-REQ has a large number of fields in common between the RFC
2232 1510 and the extensible versions. The KDC-REQ type itself is never
2233 directly encoded; it is always a part of a AS-REQ or a TGS-REQ.
2239 Yu Expires: Mar 2005 [Page 40]
2241 Internet-Draft rfc1510ter-01 15 Sep 2005
2243 KDC-REQ-COMMON ::= SEQUENCE {
2244 -- NOTE: first tag is [1], not [0]
2245 pvno [1] INTEGER (5),
2246 msg-type [2] INTEGER (10 -- AS-REQ.rfc1510 --
2247 | 12 -- TGS-REQ.rfc1510 --
2248 | 6 -- AS-REQ.ext --
2249 | 8 -- TGS-REQ.ext -- ),
2250 padata [3] SEQUENCE OF PA-DATA OPTIONAL
2255 KDC-REQ-BODY-COMMON ::= SEQUENCE {
2256 kdc-options [0] KDCOptions,
2257 cname [1] PrincipalName OPTIONAL
2258 -- Used only in AS-REQ --,
2261 -- Server's realm; also client's in AS-REQ --,
2263 sname [3] PrincipalName OPTIONAL,
2264 from [4] KerberosTime OPTIONAL,
2265 till [5] KerberosTime OPTIONAL
2266 -- was required in rfc1510;
2267 -- still required for compat versions
2270 rtime [6] KerberosTime OPTIONAL,
2272 etype [8] SEQUENCE OF EType
2273 -- in preference order --,
2275 addresses [9] HostAddresses OPTIONAL,
2276 enc-authorization-data [10] EncryptedData {
2277 AuthorizationData, { key-session | key-subsession },
2278 { ku-TGSReqAuthData-subkey |
2279 ku-TGSReqAuthData-sesskey }
2282 additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
2283 -- NOTE: not empty --,
2285 lang-tags [5] SEQUENCE (SIZE (1..MAX)) OF
2291 Many fields of KDC-REQ-BODY-COMMON correspond directly to fields of
2292 an EncTicketPartCommon. The KDC copies most of them unchanged,
2293 provided that the requested values meet site policy.
2295 Yu Expires: Mar 2005 [Page 41]
2297 Internet-Draft rfc1510ter-01 15 Sep 2005
2300 These flags do not correspond directly to "flags" in
2301 EncTicketPartCommon.
2304 This field is copied to the "cname" field in
2305 EncTicketPartCommon. The "cname" field is required in an AS-
2306 REQ; the client places its own name here. In a TGS-REQ, the
2307 "cname" in the ticket in the AP-REQ takes precedence.
2310 This field is the server's realm, and also holds the client's
2314 The "sname" field indicates the server's name. It may be absent
2315 in a TGS-REQ which requests user-to-user authentication, in
2316 which case the "sname" of the issued ticket will be taken from
2317 the included additional ticket.
2319 The "from", "till", and "rtime" fields correspond to the "starttime",
2320 "endtime", and "renew-till" fields of EncTicketPartCommon.
2323 This field corresponds to the "caddr" field of
2324 EncTicketPartCommon.
2326 enc-authorization-data
2327 For TGS-REQ, this field contains authorization data encrypted
2328 using either the TGT session key or the AP-REQ subsession key;
2329 the KDC may copy these into the "authorization-data" field of
2330 EncTicketPartCommon if policy permits.
2333 Only present in the extensible messages. Specifies the set of
2334 languages which the client is willing to accept in error
2337 KDC options used in a KDC-REQ are:
2351 Yu Expires: Mar 2005 [Page 42]
2353 Internet-Draft rfc1510ter-01 15 Sep 2005
2355 KDCOptions ::= KerberosFlags { KDCOptionsBits }
2357 KDCOptionsBits ::= BIT STRING {
2372 requestanonymous (14),
2374 disable-transited-check (26),
2376 enc-tkt-in-skey (28),
2379 -- XXX need "need ticket1" flag?
2382 Different options apply to different phases of KDC-REQ processing.
2384 The backwards-compatibility form of a KDC-REQ is:
2386 KDC-REQ-1510 ::= SEQUENCE {
2387 COMPONENTS OF KDC-REQ-COMMON,
2388 req-body [4] KDC-REQ-BODY-1510
2389 } (WITH COMPONENTS { ..., msg-type (10 | 12) })
2391 The extensible form of a KDC-REQ is:
2393 -- APPLICATION tag goes inside Signed{} as well as outside,
2394 -- to prevent possible substitution attacks.
2395 KDC-REQ-EXT ::= SEQUENCE {
2396 COMPONENTS OF KDC-REQ-COMMON,
2397 req-body [4] KDC-REQ-BODY-EXT,
2399 } (WITH COMPONENTS {
2402 padata (SIZE (1..MAX))
2405 The backwards-compatibility form of a KDC-REQ-BODY is:
2407 Yu Expires: Mar 2005 [Page 43]
2409 Internet-Draft rfc1510ter-01 15 Sep 2005
2411 KDC-REQ-BODY-1510 ::= SEQUENCE {
2412 COMPONENTS OF KDC-REQ-BODY-COMMON
2413 } (WITH COMPONENTS {
2415 cname (PrincipalNameIA5),
2417 sname (PrincipalNameIA5),
2422 The extensible form of a KDC-REQ-BODY is:
2424 KDC-REQ-BODY-EXT ::= KDC-REQ-BODY-COMMON
2427 cname (PrincipalNameExt),
2429 sname (PrincipalNameExt),
2430 addresses (SIZE (1..MAX)),
2431 enc-authorization-data (EncryptedData {
2432 AuthorizationData (SIZE (1..MAX)),
2433 { key-session | key-subsession },
2434 { ku-TGSReqAuthData-subkey |
2435 ku-TGSReqAuthData-sesskey }
2437 additional-tickets (SIZE (1..MAX))
2463 Yu Expires: Mar 2005 [Page 44]
2465 Internet-Draft rfc1510ter-01 15 Sep 2005
2468 rfc1510 [APPLICATION 10] KDC-REQ-1510
2472 -- AS-REQ must include client name
2473 req-body (WITH COMPONENTS { ..., cname PRESENT })
2475 ext [APPLICATION 6] Signed {
2476 -- APPLICATION tag goes inside Signed{} as well as
2477 -- outside, to prevent possible substitution attacks.
2478 [APPLICATION 6] KDC-REQ-EXT,
2479 -- not sure this is correct key to use; do we even want
2487 -- AS-REQ must include client name
2488 req-body (WITH COMPONENTS { ..., cname PRESENT })
2492 A client SHOULD NOT send the extensible AS-REQ alternative to a KDC
2493 if the client does not know that the KDC supports the extensibility
2494 framework. A client SHOULD send the extensible AS-REQ alternative in
2495 a PA-AS-REQ PA-DATA. A KDC supporting extensibility will treat the
2496 AS-REQ contained within the PA-AS-REQ as the actual AS-REQ. [ XXX
2497 what if their contents conflict? ]
2519 Yu Expires: Mar 2005 [Page 45]
2521 Internet-Draft rfc1510ter-01 15 Sep 2005
2523 TGS-REQ ::= CHOICE {
2524 rfc1510 [APPLICATION 12] KDC-REQ-1510
2528 -- client name optional in TGS-REQ
2529 req-body (WITH COMPONENTS { ..., cname ABSENT })
2531 ext [APPLICATION 8] Signed {
2532 -- APPLICATION tag goes inside Signed{} as well as
2533 -- outside, to prevent possible substitution attacks.
2534 [APPLICATION 8] KDC-REQ-EXT,
2535 { key-session }, { ku-TGSReq-cksum }
2540 -- client name optional in TGS-REQ
2541 req-body (WITH COMPONENTS { ..., cname ABSENT })
2548 PA-DATA have multiple uses in the Kerberos protocol. They may pre-
2549 authenticate an AS-REQ; they may also modify several of the
2550 encryption keys used in a KDC-REP. PA-DATA may also provide "hints"
2551 to the client about which long-term key (usually password-derived) to
2552 use. PA-DATA may also include "hints" about which pre-authentication
2553 mechanisms to use, or include data for input into a pre-
2554 authentication mechanism.
2556 [ XXX enumerate standard padata here ]
2558 8.3. KDC-REQ Processing
2560 Processing of a KDC-REQ proceeds through several steps. An
2561 implementation need not perform these steps exactly as described, as
2562 long as it behaves as if the steps were performed as described. The
2563 KDC performs replay handling upon receiving the request; it then
2564 validates the request, adjusts timestamps, and selects the keys used
2565 in the reply. It copies data from the request into the issued
2566 ticket, adjusting the values to conform with its policies. The KDC
2567 then transmits the reply to the client.
2569 8.3.1. Handling Replays
2571 Because Kerberos can run over unreliable transports such as UDP, the
2572 KDC MUST be prepared to retransmit responses in case they are lost.
2573 If a KDC receives a request identical to one it has recently
2575 Yu Expires: Mar 2005 [Page 46]
2577 Internet-Draft rfc1510ter-01 15 Sep 2005
2579 successfully processed, the KDC MUST respond with a KDC-REP message
2580 rather than a replay error. In order to reduce the amount of
2581 ciphertext given to a potential attacker, KDCs MAY send the same
2582 response generated when the request was first handled. KDCs MUST
2583 obey this replay behavior even if the actual transport in use is
2584 reliable. If the AP-REQ which authenticates a TGS-REQ is a replay,
2585 and the entire request is not identical to a recently successfully
2586 processed request, the KDC SHOULD return "krb-ap-err-repeat", as is
2587 appropriate for AP-REQ processing.
2589 8.3.2. Request Validation
2591 8.3.2.1. AS-REQ Authentication
2593 Site policy determines whether a given client principal is required
2594 to provide some pre-authentication prior to receiving an AS-REP.
2595 Since the default reply key is typically the client's long-term
2596 password-based key, an attacker may easily request known plaintext
2597 (in the form of an AS-REP) upon which to mount a dictionary attack.
2598 Pre-authentication can limit the possibility of such an attack.
2600 If site policy requires pre-authentication for a client principal,
2601 and no pre-authentication is provided, the KDC returns the error
2602 "kdc-err-preauth-required". Accompanying this error are "e-data"
2603 which include hints telling the client which pre-authentication
2604 mechanisms to use, or data for input to pre-authentication mechanisms
2605 (e.g., input to challenge-response systems). If pre-authentication
2606 fails, the KDC returns the error "kdc-err-preauth-failed".
2608 [ may need additional changes based on Sam's preauth draft ]
2610 8.3.2.2. TGS-REQ Authentication
2612 A TGS-REQ has an accompanying AP-REQ, which is included in the "pa-
2613 tgs-req". The KDC MUST validate the checksum in the Authenticator of
2614 the AP-REQ, which is computed over the KDC-REQ-BODY-1510 or KDC-REQ-
2615 BODY-EXT (for TGS-REQ-1510 or TGS-REQ-EXT, respectively) of the
2616 request. [ padata not signed by authenticator! ] Any error from the
2617 AP-REQ validation process SHOULD be returned in a KRB-ERROR message.
2618 The service principal in the ticket of the AP-REQ may be a ticket-
2619 granting service principal, or a normal application service
2620 principal. A ticket which is not a ticket-granting ticket MUST NOT
2621 be used to issue a ticket for any service other than the one named in
2622 the ticket. In this case, the "renew", "validate", or "proxy" [?also
2623 forwarded?] option must be set in the request.
2625 8.3.2.3. Principal Validation
2627 If the client principal in an AS-REQ is unknown, the KDC returns the
2628 error "kdc-err-c-principal-unknown". If the server principal in a
2629 KDC-REQ is unknown, the KDC returns the error "kdc-err-s-principal-
2631 Yu Expires: Mar 2005 [Page 47]
2633 Internet-Draft rfc1510ter-01 15 Sep 2005
2637 8.3.2.4. Checking For Revoked or Invalid Tickets
2641 Whenever a request is made to the ticket-granting server, the
2642 presented ticket(s) is(are) checked against a hot-list of tickets
2643 which have been canceled. This hot-list might be implemented by
2644 storing a range of issue timestamps for "suspect tickets"; if a
2645 presented ticket had an authtime in that range, it would be rejected.
2646 In this way, a stolen ticket-granting ticket or renewable ticket
2647 cannot be used to gain additional tickets (renewals or otherwise)
2648 once the theft has been reported to the KDC for the realm in which
2649 the server resides. Any normal ticket obtained before it was
2650 reported stolen will still be valid (because they require no
2651 interaction with the KDC), but only until their normal expiration
2652 time. If TGTs have been issued for cross-realm authentication, use
2653 of the cross-realm TGT will not be affected unless the hot-list is
2654 propagated to the KDCs for the realms for which such cross-realm
2655 tickets were issued.
2657 If a TGS-REQ ticket has its "invalid" flag set, the KDC MUST NOT
2658 issue any ticket unless the TGS-REQ requests the "validate" option.
2660 8.3.3. Timestamp Handling
2662 [ some aspects of timestamp handling, especially regarding postdating
2663 and renewal, are difficult to read in KCLAR... needs closer
2666 Processing of "starttime" (requested in the "from" field) differs
2667 depending on whether the "postdated" option is set in the request.
2668 If the "postdated" option is not set, and the requested "starttime"
2669 is in the future beyond the window of acceptable clock skew, the KDC
2670 returns the error "kdc-err-cannot-postdate". If the "postdated"
2671 option is not set, and the requested "starttime" is absent or does
2672 not indicate a time in the future beyond the acceptable clock skew,
2673 the KDC sets the "starttime" to the KDC's current time. The
2674 "postdated" option MUST NOT be honored if the ticket is being
2675 requested by TGS-REQ and the "may-postdate" is not set in the TGT.
2676 Otherwise, if the "postdated" option is set, and site policy permits,
2677 the KDC sets the "starttime" as requested, and sets the "invalid"
2678 flag in the new ticket.
2680 The "till" field is required in the RFC 1510 version of the KDC-REQ.
2681 If the "till" field is equal to "19700101000000Z" (midnight, January
2682 1, 1970), the KDC SHOULD behave as if the "till" field were absent.
2684 The KDC MUST NOT issue a ticket whose "starttime", "endtime", or
2685 "renew-till" time is later than the "renew-till" time of the ticket
2687 Yu Expires: Mar 2005 [Page 48]
2689 Internet-Draft rfc1510ter-01 15 Sep 2005
2691 from which it is derived.
2693 8.3.3.1. AS-REQ Timestamp Processing
2695 In the AS exchange, the "authtime" of a ticket is set to the local
2698 The "endtime" of the ticket will be set to the earlier of the
2699 requested "till" time and a time determined by local policy, possibly
2700 determined using factors specific to the realm or principal. For
2701 example, the expiration time MAY be set to the earliest of the
2704 * the expiration time ("till" value) requested
2706 * the ticket's start time plus the maximum allowable lifetime
2707 associated with the client principal from the authentication
2710 * the ticket's start time plus the maximum allowable lifetime
2711 associated with the server principal
2713 * the ticket's start time plus the maximum lifetime set by the
2714 policy of the local realm
2716 If the requested expiration time minus the start time (as determined
2717 above) is less than a site-determined minimum lifetime, an error
2718 message with code "kdc-err-never-valid" is returned. If the
2719 requested expiration time for the ticket exceeds what was determined
2720 as above, and if the "renewable-ok" option was requested, then the
2721 "renewable" flag is set in the new ticket, and the "renew-till" value
2722 is set as if the "renewable" option were requested.
2724 If the "renewable" option has been requested or if the "renewable-ok"
2725 option has been set and a renewable ticket is to be issued, then the
2726 "renew-till" field MAY be set to the earliest of:
2728 * its requested value
2730 * the start time of the ticket plus the minimum of the two maximum
2731 renewable lifetimes associated with the principals' database
2734 * the start time of the ticket plus the maximum renewable lifetime
2735 set by the policy of the local realm
2737 8.3.3.2. TGS-REQ Timestamp Processing
2739 In the TGS exchange, the KDC sets the "authtime" to that of the
2740 ticket in the AP-REQ authenticating the TGS-REQ. [?application
2741 server can print a ticket for itself with a spoofed authtime.
2743 Yu Expires: Mar 2005 [Page 49]
2745 Internet-Draft rfc1510ter-01 15 Sep 2005
2747 security issues for hot-list?] [ MIT implementation may change
2748 authtime of renewed tickets; needs check... ]
2750 If the TGS-REQ has a TGT as the ticket in its AP-REQ, and the TGS-REQ
2751 requests an "endtime" (in the "till" field), then the "endtime" of
2752 the new ticket is set to the minimum of
2754 * the requested "endtime" value,
2756 * the "endtime" in the TGT, and
2758 * an "endtime" determined by site policy on ticket lifetimes.
2760 If the new ticket is a renewal, the "endtime" of the new ticket is
2761 bounded by the minimum of
2763 * the requested "endtime" value,
2765 * the value of the "renew-till" value of the old,
2767 * the "starttime" of the new ticket plus the lifetime (endtime
2768 minus starttime) of the old ticket, i.e., the lifetime of the
2769 new ticket may not exceed that of the ticket being renewed [
2770 adapted from KCLAR 3.3.3. ], and
2772 * an "endtime" determined by site policy on ticket lifetimes.
2774 When handling a TGS-REQ, a KDC MUST NOT issue a postdated ticket with
2775 a "starttime", "endtime", or "renew-till" time later than the
2776 "renew-till" time of the TGT.
2778 8.3.4. Handling Transited Realms
2780 The KDC checks the ticket in a TGS-REQ against site policy, unless
2781 the "disable-transited-check" option is set in the TGS-REQ. If site
2782 policy permits the transit path in the TGS-REQ ticket, the KDC sets
2783 the "transited-policy-checked" flag in the issued ticket. If the
2784 "disable-transited-check" option is set, the issued ticket will have
2785 the "transited-policy-checked" flag cleared.
2787 8.3.5. Address Processing The requested "addresses" in the KDC-REQ are
2788 copied into the issued ticket. If the "addresses" field is absent or
2789 empty in a TGS-REQ, the KDC copies addresses from the ticket in the
2790 TGS-REQ into the issued ticket, unless the either "forwarded" or
2791 "proxy" option is set. If the "forwarded" option is set, and the
2792 ticket in the TGS-REQ has its "forwardable" flag set, the KDC copies
2793 the addresses from the TGS-REQ, not the from TGS-REQ ticket, into the
2794 issued ticket. The KDC behaves similarly if the "proxy" option is
2795 set in the TGS-REQ and the "proxiable" flag is set in the ticket.
2796 The "proxy" option will not be honored on requests for additional
2797 ticket-granting tickets.
2799 Yu Expires: Mar 2005 [Page 50]
2801 Internet-Draft rfc1510ter-01 15 Sep 2005
2803 8.3.6. Ticket Flag Processing
2805 Many kdc-options request that the KDC set a corresponding flag in the
2806 issued ticket. kdc-options marked with an asterisk (*) in the
2807 following table do not directly request the corresponding ticket flag
2808 and therefore require special handling.
2811 kdc-option | ticket flag affected
2812 ________________________|__________________________
2813 forwardable | forwardable
2814 forwarded | forwarded
2815 proxiable | proxiable
2817 allow-postdate | may-postdate
2818 postdated | postdated
2819 renewable | renewable
2820 requestanonymous | anonymous
2822 disable-transited-check*| transited-policy-checked
2823 renewable-ok* | renewable
2831 The KDC sets the "forwarded" flag in the issued ticket if the
2832 "forwarded" option is set in the TGS-REQ and the "forwardable"
2833 flag is set in the TGS-REQ ticket.
2836 The KDC sets the "proxy" flag in the issued ticket if the
2837 "proxy" option is set in the TGS-REQ and the "proxiable" flag is
2838 set in the TGS-REQ ticket.
2840 disable-transited-check
2841 The handling of the "disable-transited-check" kdc-option is
2842 described in Section 8.3.4.
2845 The handling of the "renewable-ok" kdc-option is described in
2849 This flag modifies ticket key selection to use the session key
2850 of an additional ticket included in the TGS-REQ, for the purpose
2851 of user-to-user authentication.
2855 Yu Expires: Mar 2005 [Page 51]
2857 Internet-Draft rfc1510ter-01 15 Sep 2005
2860 If the "validate" kdc-option is set in a TGS-REQ, and the
2861 "starttime" has passed, the KDC will clear the "invalid" bit on
2862 the ticket before re-issuing it.
2864 8.3.7. Key Selection
2866 Three keys are involved in creating a KDC-REP. The reply key
2867 encrypts the encrypted part of the KDC-REP. The session key is
2868 stored in the encrypted part of the ticket, and is also present in
2869 the encrypted part of the KDC-REP so that the client can retrieve it.
2870 The ticket key is used to encrypt the ticket. These keys all have
2871 initial values for a given exchange; pre-authentication and other
2872 extension mechanisms may change the value used for any of these keys.
2874 [ again, may need changes based on Sam's preauth draft ]
2876 8.3.7.1. Reply Key and Session Key Selection
2878 The set of encryption types which the client will understand appears
2879 in the "etype" field of KDC-REQ-BODY-COMMON. The KDC limits the set
2880 of possible reply keys and the set of session key encryption types
2881 based on the "etype" field.
2883 For the AS exchange, the reply key is initially a long-term key of
2884 the client, limited to those encryption types listed in the "etype"
2885 field. The KDC SHOULD use the first valid strong "etype" for which
2886 an encryption key is available. For the TGS exchange, the reply key
2887 is initially the subsession key of the Authenticator. If the
2888 Authenticator subsesion key is absent, the reply key is initially the
2889 session key of the ticket used to authenticate the TGS-REQ.
2891 The session key is initially randomly generated, and has an
2892 encryption type which both the client and the server will understand.
2893 Typically, the KDC has prior knowledge of which encryption types the
2894 server will understand. It selects the first valid strong "etype"
2895 listed the request which the server also will understand.
2897 8.3.7.2. Ticket Key Selection
2899 The ticket key is initially the long-term key of the service. The
2900 "enc-tkt-in-skey" option requests user-to-user authentication, where
2901 the ticket encryption key of the issued ticket is set equal to the
2902 session key of the additional ticket in the request.
2906 The important parts of the KDC-REP are encrypted.
2911 Yu Expires: Mar 2005 [Page 52]
2913 Internet-Draft rfc1510ter-01 15 Sep 2005
2915 EncASRepPart1510 ::= [APPLICATION 25] EncKDCRepPart1510
2916 EncTGSRepPart1510 ::= [APPLICATION 26] EncKDCRepPart1510
2918 EncASRepPartExt ::= [APPLICATION 32] EncKDCRepPartExt
2919 EncTGSRepPartExt ::= [APPLICATION 33] EncKDCRepPartExt
2921 EncKDCRepPartCom ::= SEQUENCE {
2922 key [0] EncryptionKey,
2923 last-req [1] LastReq,
2925 key-expiration [3] KerberosTime OPTIONAL,
2926 flags [4] TicketFlags,
2927 authtime [5] KerberosTime,
2928 starttime [6] KerberosTime OPTIONAL,
2929 endtime [7] KerberosTime,
2930 renew-till [8] KerberosTime OPTIONAL,
2932 sname [10] PrincipalName,
2933 caddr [11] HostAddresses OPTIONAL,
2937 EncKDCRepPart1510 ::= SEQUENCE {
2938 COMPONENTS OF EncKDCRepPartCom
2939 } (WITH COMPONENTS {
2942 sname (PrincipalNameIA5),
2945 EncKdcRepPartExt ::= EncKDCRepPartCom (WITH COMPONENTS {
2948 sname (PrincipalNameExt)
2952 Most of the fields of EncKDCRepPartCom are duplicates of the
2953 corresponding fields in the returned ticket.
2967 Yu Expires: Mar 2005 [Page 53]
2969 Internet-Draft rfc1510ter-01 15 Sep 2005
2971 KDC-REP-COMMON { EncPart } ::= SEQUENCE {
2972 pvno [0] INTEGER (5),
2973 msg-type [1] INTEGER (11 -- AS-REP.rfc1510 -- |
2974 13 -- TGS.rfc1510 -- |
2975 7 -- AS-REP.ext -- |
2976 9 -- TGS-REP.ext -- ),
2977 padata [2] SEQUENCE OF PA-DATA OPTIONAL,
2979 cname [4] PrincipalName,
2982 enc-part [6] EncryptedData {
2985 -- maybe reach into EncryptedData in AS-REP/TGS-REP
2986 -- definitions to apply constraints on key usages?
2987 { ku-EncASRepPart -- if AS-REP -- |
2988 ku-EncTGSRepPart-subkey -- if TGS-REP and
2989 -- using Authenticator
2991 ku-EncTGSRepPart-sesskey -- if TGS-REP and using
2992 -- subsession key -- }
2996 -- In extensible version, KDC signs original request
2997 -- to avoid replay attacks against client.
2998 req-cksum [7] ChecksumOf { CHOICE {
3001 }, { key-reply }, { ku-KDCRep-cksum }} OPTIONAL,
3002 lang-tag [8] LangTag OPTIONAL,
3007 KDC-REP-1510 { EncPart } ::= SEQUENCE {
3008 COMPONENTS OF KDC-REP-COMMON { EncPart }
3009 } (WITH COMPONENTS {
3013 cname (PrincipalNameIA5)
3023 Yu Expires: Mar 2005 [Page 54]
3025 Internet-Draft rfc1510ter-01 15 Sep 2005
3027 KDC-REP-EXT { EncPart } ::= KDC-REP-COMMON { EncPart }
3032 cname (PrincipalNameExt)
3037 Signature of the original request using the reply key, to avoid
3038 replay attacks against the client, among other things. Only
3039 present in the extensible version of KDC-REP.
3042 rfc1510 [APPLICATION 11] KDC-REP-1510 {
3044 } (WITH COMPONENTS { ..., msg-type (11) }),
3045 ext [APPLICATION 7] Signed {
3046 [APPLICATION 7] KDC-REP-EXT { EncASRepPartExt },
3047 { key-reply }, { ku-ASRep-cksum }
3048 } (WITH COMPONENTS { ..., msg-type (7) })
3052 TGS-REP ::= CHOICE {
3053 rfc1510 [APPLICATION 13] KDC-REP-1510 {
3055 } (WITH COMPONENTS { ..., msg-type (13) }),
3056 ext [APPLICATION 9] Signed {
3057 [APPLICATION 9] KDC-REP-EXT { EncTGSRepPartExt },
3058 { key-reply }, { ku-TGSRep-cksum }
3059 } (WITH COMPONENTS { ..., msg-type (9) })
3063 The extensible versions of AS-REQ and TGS-REQ are signed with the
3064 reply key, to prevent an attacker from performing a delayed denial-
3065 of-service attack by substituting the ticket.
3067 8.5. Reply Validation
3069 [ signature verification ]
3075 Kerberos defines two IP transport mechanisms for the credentials
3076 acquisition protocol: UDP/IP and TCP/IP.
3079 Yu Expires: Mar 2005 [Page 55]
3081 Internet-Draft rfc1510ter-01 15 Sep 2005
3083 8.6.1. UDP/IP transport
3085 Kerberos servers (KDCs) supporting IP transports MUST accept UDP
3086 requests and SHOULD listen for such requests on port 88 (decimal)
3087 unless specifically configured to listen on an alternative UDP port.
3088 Alternate ports MAY be used when running multiple KDCs for multiple
3089 realms on the same host.
3091 Kerberos clients supporting IP transports SHOULD support the sending
3092 of UDP requests. Clients SHOULD use KDC discovery (Section 8.6.3) to
3093 identify the IP address and port to which they will send their
3096 When contacting a KDC for a KRB_KDC_REQ request using UDP/IP
3097 transport, the client shall send a UDP datagram containing only an
3098 encoding of the request to the KDC. The KDC will respond with a reply
3099 datagram containing only an encoding of the reply message (either a
3100 KRB-ERROR or a KDC-REP) to the sending port at the sender's IP
3101 address. The response to a request made through UDP/IP transport MUST
3102 also use UDP/IP transport. If the response can not be handled using
3103 UDP (for example because it is too large), the KDC MUST return "krb-
3104 err-response-too-big", forcing the client to retry the request using
3107 8.6.2. TCP/IP transport
3109 Kerberos servers (KDCs) supporting IP transports MUST accept TCP
3110 requests and SHOULD listen for such requests on port 88 (decimal)
3111 unless specifically configured to listen on an alternate TCP port.
3112 Alternate ports MAY be used when running multiple KDCs for multiple
3113 realms on the same host.
3115 Clients MUST support the sending of TCP requests, but MAY choose to
3116 initially try a request using the UDP transport. Clients SHOULD use
3117 KDC discovery (Section 8.6.3) to identify the IP address and port to
3118 which they will send their request.
3120 Implementation note: Some extensions to the Kerberos protocol will
3121 not succeed if any client or KDC not supporting the TCP transport is
3122 involved. Implementations of RFC 1510 were not required to support
3125 When the KDC-REQ message is sent to the KDC over a TCP stream, the
3126 response (KDC-REP or KRB-ERROR message) MUST be returned to the
3127 client on the same TCP stream that was established for the request.
3128 The KDC MAY close the TCP stream after sending a response, but MAY
3129 leave the stream open for a reasonable period of time if it expects a
3130 followup. Care must be taken in managing TCP/IP connections on the
3131 KDC to prevent denial of service attacks based on the number of open
3135 Yu Expires: Mar 2005 [Page 56]
3137 Internet-Draft rfc1510ter-01 15 Sep 2005
3139 The client MUST be prepared to have the stream closed by the KDC at
3140 anytime after the receipt of a response. A stream closure SHOULD NOT
3141 be treated as a fatal error. Instead, if multiple exchanges are
3142 required (e.g., certain forms of pre-authentication) the client may
3143 need to establish a new connection when it is ready to send
3144 subsequent messages. A client MAY close the stream after receiving a
3145 response, and SHOULD close the stream if it does not expect to send
3148 A client MAY send multiple requests before receiving responses,
3149 though it must be prepared to handle the connection being closed
3150 after the first response.
3152 Each request (KDC-REQ) and response (KDC-REP or KRB-ERROR) sent over
3153 the TCP stream is preceded by the length of the request as 4 octets
3154 in network byte order. The high bit of the length is reserved for
3155 future expansion and MUST currently be set to zero. If a KDC that
3156 does not understand how to interpret a set high bit of the length
3157 encoding receives a request with the high order bit of the length
3158 set, it MUST return a KRB-ERROR message with the error "krb-err-
3159 field-toolong" and MUST close the TCP stream.
3161 If multiple requests are sent over a single TCP connection, and the
3162 KDC sends multiple responses, the KDC is not required to send the
3163 responses in the order of the corresponding requests. This may
3164 permit some implementations to send each response as soon as it is
3165 ready even if earlier requests are still being processed (for
3166 example, waiting for a response from an external device or database).
3168 8.6.3. KDC Discovery on IP Networks
3170 Kerberos client implementations MUST provide a means for the client
3171 to determine the location of the Kerberos Key Distribution Centers
3172 (KDCs). Traditionally, Kerberos implementations have stored such
3173 configuration information in a file on each client machine.
3174 Experience has shown this method of storing configuration information
3175 presents problems with out-of-date information and scaling problems,
3176 especially when using cross-realm authentication. This section
3177 describes a method for using the Domain Name System [RFC 1035] for
3178 storing KDC location information.
3180 8.6.3.1. DNS vs. Kerberos - Case Sensitivity of Realm Names
3182 In Kerberos, realm names are case sensitive. While it is strongly
3183 encouraged that all realm names be all upper case this recommendation
3184 has not been adopted by all sites. Some sites use all lower case
3185 names and other use mixed case. DNS, on the other hand, is case
3186 insensitive for queries. Since the realm names "MYREALM", "myrealm",
3187 and "MyRealm" are all different, but resolve the same in the domain
3188 name system, it is necessary that only one of the possible
3189 combinations of upper and lower case characters be used in realm
3191 Yu Expires: Mar 2005 [Page 57]
3193 Internet-Draft rfc1510ter-01 15 Sep 2005
3197 8.6.3.2. DNS SRV records for KDC location
3199 KDC location information is to be stored using the DNS SRV RR [RFC
3200 2782]. The format of this RR is as follows:
3202 _Service._Proto.Realm TTL Class SRV Priority Weight Port Target
3204 The Service name for Kerberos is always "kerberos".
3206 The Proto can be one of "udp", "tcp". If these SRV records are to be
3207 used, both "udp" and "tcp" records MUST be specified for all KDC
3210 The Realm is the Kerberos realm that this record corresponds to. The
3211 realm MUST be a domain style realm name.
3213 TTL, Class, SRV, Priority, Weight, and Target have the standard
3214 meaning as defined in RFC 2782.
3216 As per RFC 2782 the Port number used for "_udp" and "_tcp" SRV
3217 records SHOULD be the value assigned to "kerberos" by the Internet
3218 Assigned Number Authority: 88 (decimal) unless the KDC is configured
3219 to listen on an alternate TCP port.
3221 Implementation note: Many existing client implementations do not
3222 support KDC Discovery and are configured to send requests to the IANA
3223 assigned port (88 decimal), so it is strongly recommended that KDCs
3224 be configured to listen on that port.
3226 8.6.3.3. KDC Discovery for Domain Style Realm Names on IP Networks
3228 These are DNS records for a Kerberos realm EXAMPLE.COM. It has two
3229 Kerberos servers, kdc1.example.com and kdc2.example.com. Queries
3230 should be directed to kdc1.example.com first as per the specified
3231 priority. Weights are not used in these sample records.
3233 _kerberos._udp.EXAMPLE.COM. IN SRV 0 0 88 kdc1.example.com.
3234 _kerberos._udp.EXAMPLE.COM. IN SRV 1 0 88 kdc2.example.com.
3235 _kerberos._tcp.EXAMPLE.COM. IN SRV 0 0 88 kdc1.example.com.
3236 _kerberos._tcp.EXAMPLE.COM. IN SRV 1 0 88 kdc2.example.com.
3241 The KRB-ERROR message is returned by the KDC if an error occurs
3242 during credentials acquisition. It may also be returned by an
3243 application server if an error occurs during authentication.
3247 Yu Expires: Mar 2005 [Page 58]
3249 Internet-Draft rfc1510ter-01 15 Sep 2005
3253 KRB-ERROR ::= CHOICE {
3254 rfc1510 [APPLICATION 30] KRB-ERROR-1510,
3255 ext [APPLICATION 23] Signed {
3256 KRB-ERROR-EXT, { ku-KrbError-cksum } }
3260 The extensible KRB-ERROR is only signed if there has been a key
3261 negotiated with its recipient. KRB-ERROR messages sent in response
3262 to AS-REQ messages will probably not be signed unless a
3263 preauthentication mechanism has negotiated a key. (Signing using a
3264 client's long-term key can expose ciphertext to dictionary attacks.)
3266 The parts of a KRB-ERROR common to both the backwards-compatibility
3267 and the extensibile messages are
3269 KRB-ERROR-COMMON ::= SEQUENCE {
3270 pvno [0] INTEGER (5),
3271 msg-type [1] INTEGER (30 | 23),
3272 ctime [2] KerberosTime OPTIONAL,
3273 cusec [3] Microseconds OPTIONAL,
3274 stime [4] KerberosTime,
3275 susec [5] Microseconds,
3276 error-code [6] ErrCode,
3277 crealm [7] Realm OPTIONAL,
3278 cname [8] PrincipalName OPTIONAL,
3279 realm [9] Realm -- Correct realm --,
3280 sname [10] PrincipalName -- Correct name --,
3281 e-text [11] KerberosString OPTIONAL,
3282 e-data [12] OCTET STRING OPTIONAL,
3284 typed-data [13] TYPED-DATA OPTIONAL,
3285 nonce [14] Nonce OPTIONAL,
3286 lang-tag [15] LangTag OPTIONAL,
3291 KRB-ERROR-1510 ::= SEQUENCE {
3292 COMPONENTS OF KRB-ERROR-COMMON
3293 } (WITH COMPONENTS {
3299 KRB-ERROR-EXT ::= [APPLICATION 23] KRB-ERROR-COMMON
3300 (WITH COMPONENTS { ..., msg-type (23) })
3303 Yu Expires: Mar 2005 [Page 59]
3305 Internet-Draft rfc1510ter-01 15 Sep 2005
3308 Client's time, if known from a KDC-REQ or AP-REQ.
3311 KDC or application server's current time.
3314 Numeric error code designating the error.
3317 Client's realm and name, if known.
3320 server's realm and name. [ XXX what if these aren't known? ]
3323 Human-readable text providing additional details for the error.
3326 This field contains additional data about the error for use by
3327 the client to help it recover from or handle the error. If the
3328 "error-code" is "kdc-err-preauth-required", then the e-data
3329 field will contain an encoding of a sequence of padata fields,
3330 each corresponding to an acceptable pre-authentication method
3331 and optionally containing data for the method:
3333 METHOD-DATA ::= SEQUENCE OF PA-DATA
3336 For error codes defined in this document other than "kdc-err-
3337 preauth-required", the format and contents of the e-data field
3338 are implementation-defined. Similarly, for future error codes,
3339 the format and contents of the e-data field are implementation-
3340 defined unless specified.
3343 Indicates the language of the message in the "e-text" field. It
3344 is only present in the extensible KRB-ERROR.
3347 is the nonce from a KDC-REQ. It is only present in the
3348 extensible KRB-ERROR.
3351 TYPED-DATA is a typed hole allowing for additional data to be
3352 returned in error conditions, since "e-data" is insufficiently
3353 flexible for some purposes. TYPED-DATA is only present in the
3354 extensible KRB-ERROR.
3359 Yu Expires: Mar 2005 [Page 60]
3361 Internet-Draft rfc1510ter-01 15 Sep 2005
3365 TYPED-DATA ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
3366 data-type [0] TDType,
3367 data-value [1] OCTET STRING OPTIONAL
3371 10. Session Key Exchange
3373 Session key exchange consists of the AP-REQ and AP-REP messages. The
3374 client sends the AP-REQ message, and the service responds with an
3375 AP-REP message if mutual authentication is desired. Following
3376 session key exchange, the client and service share a secret session
3377 key, or possibly a subsesion key, which can be used to protect
3378 further communications. Additionally, the session key exchange
3379 process can establish initial sequence numbers which the client and
3380 service can use to detect replayed messages.
3384 An AP-REQ message contains a ticket and a authenticator. The
3385 authenticator is ciphertext encrypted with the session key contained
3386 in the ticket. The plaintext contents of the authenticator are:
3388 -- plaintext of authenticator
3389 Authenticator ::= [APPLICATION 2] SEQUENCE {
3390 authenticator-vno [0] INTEGER (5),
3392 cname [2] PrincipalName,
3393 cksum [3] Checksum {{ key-session },
3394 { ku-Authenticator-cksum |
3395 ku-pa-TGSReq-cksum }} OPTIONAL,
3396 cusec [4] Microseconds,
3397 ctime [5] KerberosTime,
3398 subkey [6] EncryptionKey OPTIONAL,
3399 seq-number [7] SeqNum OPTIONAL,
3400 authorization-data [8] AuthorizationData OPTIONAL
3403 The common parts between the RFC 1510 and the extensible versions of
3415 Yu Expires: Mar 2005 [Page 61]
3417 Internet-Draft rfc1510ter-01 15 Sep 2005
3419 AP-REQ-COMMON ::= SEQUENCE {
3420 pvno [0] INTEGER (5),
3421 msg-type [1] INTEGER (14 | 18),
3422 ap-options [2] APOptions,
3424 authenticator [4] EncryptedData {
3427 { ku-APReq-authenticator |
3428 ku-pa-TGSReq-authenticator }
3431 extensions [5] ApReqExtensions OPTIONAL,
3432 lang-tag [6] SEQUENCE (SIZE (1..MAX))
3433 OF LangTag OPTIONAL,
3437 The complete definition of AP-REQ is:
3440 rfc1510 [APPLICATION 14] AP-REQ-1510,
3441 ext [APPLICATION 18] Signed {
3442 AP-REQ-EXT, { key-session }, { ku-APReq-cksum }
3447 AP-REQ-COMMON ::= SEQUENCE {
3448 pvno [0] INTEGER (5),
3449 msg-type [1] INTEGER (14 | 18),
3450 ap-options [2] APOptions,
3452 authenticator [4] EncryptedData {
3455 { ku-APReq-authenticator |
3456 ku-pa-TGSReq-authenticator }
3459 extensions [5] ApReqExtensions OPTIONAL,
3460 lang-tag [6] SEQUENCE (SIZE (1..MAX))
3461 OF LangTag OPTIONAL,
3471 Yu Expires: Mar 2005 [Page 62]
3473 Internet-Draft rfc1510ter-01 15 Sep 2005
3475 AP-REQ-1510 ::= SEQUENCE {
3476 COMPONENTS OF AP-REQ-COMMON
3477 } (WITH COMPONENTS {
3480 authenticator (EncryptedData {
3481 Authenticator (WITH COMPONENTS {
3484 cname (PrincipalNameIA5),
3486 }), { key-session }, { ku-APReq-authenticator }})
3490 AP-REQ-EXT ::= AP-REQ-COMMON
3494 -- The following constraints on Authenticator assume that
3495 -- we want to restrict the use of AP-REQ-EXT with TicketExt
3496 -- only, since that is the only way we can enforce UTF-8.
3497 authenticator (EncryptedData {
3498 Authenticator (WITH COMPONENTS {
3501 cname (PrincipalNameExt),
3502 authorization-data (SIZE (1..MAX))
3503 }), { key-session }, { ku-APReq-authenticator }})
3507 APOptions ::= KerberosFlags { APOptionsBits }
3509 APOptionsBits ::= BIT STRING {
3511 use-session-key (1),
3518 An AP-REP message provides mutual authentication of the service to
3521 EncAPRepPart ::= CHOICE {
3522 rfc1510 [APPLICATION 27] EncAPRepPart1510,
3523 ext [APPLICATION 31] EncAPRepPartExt
3527 Yu Expires: Mar 2005 [Page 63]
3529 Internet-Draft rfc1510ter-01 15 Sep 2005
3531 EncAPRepPartCom ::= SEQUENCE {
3532 ctime [0] KerberosTime,
3533 cusec [1] Microseconds,
3534 subkey [2] EncryptionKey OPTIONAL,
3535 seq-number [3] SeqNum OPTIONAL,
3537 authorization-data [4] AuthorizationData OPTIONAL,
3542 EncAPRepPart1510 ::= SEQUENCE {
3543 COMPONENTS OF ENCAPRepPartCom
3544 } (WITH COMPONENTS {
3546 seq-number (UInt32),
3547 authorization-data ABSENT
3551 EncAPRepPartExt ::= EncAPRepPartCom
3555 rfc1510 [APPLICATION 15] AP-REP-1510,
3556 ext [APPLICATION 19] Signed {
3558 { key-session | key-subsession }, { ku-APRep-cksum }}
3562 AP-REP-COMMON { EncPart } ::= SEQUENCE {
3563 pvno [0] INTEGER (5),
3564 msg-type [1] INTEGER (15 | 19),
3565 enc-part [2] EncryptedData {
3567 { key-session | key-subsession }, { ku-EncAPRepPart }},
3569 extensions [3] ApRepExtensions OPTIONAL,
3574 AP-REP-1510 ::= SEQUENCE {
3575 COMPONENTS OF AP-REP-COMMON { EncAPRepPart1510 }
3576 } (WITH COMPONENTS {
3583 Yu Expires: Mar 2005 [Page 64]
3585 Internet-Draft rfc1510ter-01 15 Sep 2005
3587 AP-REP-EXT ::= [APPLICATION 19] AP-REP-COMMON {
3589 } (WITH COMPONENTS { ..., msg-type (19) })
3594 Once a session key has been established, the client and server can
3595 use several kinds of messages to securely transmit data. KRB-SAFE
3596 provides integrity protection for application data, while KRB-PRIV
3597 provides confidentiality along with integrity protection. The KRB-
3598 CRED message provides a means of securely forwarding credentials from
3599 the client host to the server host.
3603 The KRB-SAFE message provides integrity protection for an included
3606 -- Do we chew up another tag for KRB-SAFE-EXT? That would
3607 -- allow us to make safe-body optional, allowing for a GSS-MIC
3609 KRB-SAFE ::= [APPLICATION 20] SEQUENCE {
3610 pvno [0] INTEGER (5),
3611 msg-type [1] INTEGER (20),
3612 safe-body [2] KRB-SAFE-BODY,
3613 cksum [3] ChecksumOf {
3615 { key-session | key-subsession }, { ku-KrbSafe-cksum }},
3616 ... -- ASN.1 extensions must be excluded
3617 -- when sending to rfc1510 implementations
3621 KRB-SAFE-BODY ::= SEQUENCE {
3622 user-data [0] OCTET STRING,
3623 timestamp [1] KerberosTime OPTIONAL,
3624 usec [2] Microseconds OPTIONAL,
3625 seq-number [3] SeqNum OPTIONAL,
3626 s-address [4] HostAddress,
3627 r-address [5] HostAddress OPTIONAL,
3628 ... -- ASN.1 extensions must be excluded
3629 -- when sending to rfc1510 implementations
3635 The KRB-PRIV message provides confidentiality and integrity
3639 Yu Expires: Mar 2005 [Page 65]
3641 Internet-Draft rfc1510ter-01 15 Sep 2005
3643 KRB-PRIV ::= [APPLICATION 21] SEQUENCE {
3644 pvno [0] INTEGER (5),
3645 msg-type [1] INTEGER (21),
3646 enc-part [3] EncryptedData {
3648 { key-session | key-subsession }, { ku-EncKrbPrivPart }},
3653 EncKrbPrivPart ::= [APPLICATION 28] SEQUENCE {
3654 user-data [0] OCTET STRING,
3655 timestamp [1] KerberosTime OPTIONAL,
3656 usec [2] Microseconds OPTIONAL,
3657 seq-number [3] SeqNum OPTIONAL,
3658 s-address [4] HostAddress -- sender's addr --,
3659 r-address [5] HostAddress OPTIONAL -- recip's addr --,
3660 ... -- ASN.1 extensions must be excluded
3661 -- when sending to rfc1510 implementations
3667 The KRB-CRED message provides a means of securely transferring
3668 credentials from the client to the service.
3670 KRB-CRED ::= CHOICE {
3671 rfc1510 [APPLICATION 22] KRB-CRED-1510,
3672 ext [APPLICATION 24] Signed {
3674 { key-session | key-subsession }, { ku-KrbCred-cksum }}
3678 KRB-CRED-COMMON ::= SEQUENCE {
3679 pvno [0] INTEGER (5),
3680 msg-type [1] INTEGER (22 | 24),
3681 tickets [2] SEQUENCE OF Ticket,
3682 enc-part [3] EncryptedData {
3684 { key-session | key-subsession }, { ku-EncKrbCredPart }},
3689 KRB-CRED-1510 ::= SEQUENCE {
3690 COMPONENTS OF KRB-CRED-COMMON
3691 } (WITH COMPONENTS { ..., msg-type (22) })
3695 Yu Expires: Mar 2005 [Page 66]
3697 Internet-Draft rfc1510ter-01 15 Sep 2005
3699 KRB-CRED-EXT ::= [APPLICATION 24] KRB-CRED-COMMON
3700 (WITH COMPONENTS { ..., msg-type (24) })
3703 EncKrbCredPart ::= [APPLICATION 29] SEQUENCE {
3704 ticket-info [0] SEQUENCE OF KrbCredInfo,
3705 nonce [1] Nonce OPTIONAL,
3706 timestamp [2] KerberosTime OPTIONAL,
3707 usec [3] Microseconds OPTIONAL,
3708 s-address [4] HostAddress OPTIONAL,
3709 r-address [5] HostAddress OPTIONAL
3713 KrbCredInfo ::= SEQUENCE {
3714 key [0] EncryptionKey,
3715 prealm [1] Realm OPTIONAL,
3716 pname [2] PrincipalName OPTIONAL,
3717 flags [3] TicketFlags OPTIONAL,
3718 authtime [4] KerberosTime OPTIONAL,
3719 starttime [5] KerberosTime OPTIONAL,
3720 endtime [6] KerberosTime OPTIONAL,
3721 renew-till [7] KerberosTime OPTIONAL,
3722 srealm [8] Realm OPTIONAL,
3723 sname [9] PrincipalName OPTIONAL,
3724 caddr [10] HostAddresses OPTIONAL
3728 12. Security Considerations
3730 12.1. Time Synchronization
3732 Time synchronization between the KDC and application servers is
3733 necessary to prevent acceptance of expired tickets.
3735 Time synchronization is needed between application servers and
3736 clients to prevent replay attacks if a replay cache is being used.
3737 If negotiated subsession keys are used to encrypt application data,
3738 replay caches may not be necessary.
3742 12.3. Principal Name Reuse
3746 12.4. Password Guessing
3751 Yu Expires: Mar 2005 [Page 67]
3753 Internet-Draft rfc1510ter-01 15 Sep 2005
3755 12.5. Forward Secrecy
3757 [from KCLAR 10.; needs some rewriting]
3759 The Kerberos protocol in its basic form does not provide perfect
3760 forward secrecy for communications. If traffic has been recorded by
3761 an eavesdropper, then messages encrypted using the KRB-PRIV message,
3762 or messages encrypted using application-specific encryption under
3763 keys exchanged using Kerberos can be decrypted if any of the user's,
3764 application server's, or KDC's key is subsequently discovered. This
3765 is because the session key used to encrypt such messages is
3766 transmitted over the network encrypted in the key of the application
3767 server, and also encrypted under the session key from the user's
3768 ticket-granting ticket when returned to the user in the TGS-REP
3769 message. The session key from the ticket-granting ticket was sent to
3770 the user in the AS-REP message encrypted in the user's secret key,
3771 and embedded in the ticket-granting ticket, which was encrypted in
3772 the key of the KDC. Application requiring perfect forward secrecy
3773 must exchange keys through mechanisms that provide such assurance,
3774 but may use Kerberos for authentication of the encrypted channel
3775 established through such other means.
3779 As an authentication service, Kerberos provides a means of verifying
3780 the identity of principals on a network. Kerberos does not, by
3781 itself, provide authorization. Applications SHOULD NOT accept the
3782 mere issuance of a service ticket by the Kerberos server as granting
3783 authority to use the service.
3785 12.7. Login Authentication
3787 Some applications, particularly those which provide login access when
3788 provided with a password, SHOULD NOT treat successful acquisition of
3789 credentials as sufficient proof of the user's identity. An attacker
3790 posing as a user could generate an illegitimate KDC-REP message which
3791 decrypts properly. To authenticate a user logging on to a local
3792 system, the credentials obtained SHOULD be used in a TGS exchange to
3793 obtain credentials for a local service. Successful use of those
3794 credentials to authenticate to the local service assures that the
3795 initially obtained credentials are from a valid KDC.
3797 13. IANA Considerations
3801 Each use of Int32 in this document defines a number space. [ XXX
3802 enumerate these ] Negative numbers are reserved for private use;
3803 local and experimental extensions should use these values. Zero is
3804 reserved and may not be assigned.
3807 Yu Expires: Mar 2005 [Page 68]
3809 Internet-Draft rfc1510ter-01 15 Sep 2005
3811 Typed hole contents may be identified by either Int32 values or by
3812 RELATIVE-OID values. Since RELATIVE-OIDs define a hierarchical
3813 namespace, assignments to the top level of the RELATIVE-OID space may
3814 be made on a first-come, first-served basis.
3818 Much of the text here is adapted from draft-ietf-krb-wg-kerberos-
3819 clarifications-07. The description of the general form of the
3820 extensibility framework was derived from text by Sam Hartman.
3824 A. ASN.1 Module (Normative)
3827 iso(1) identified-organization(3) dod(6) internet(1)
3828 security(5) kerberosV5(2) modules(4) krb5spec3(4)
3829 } DEFINITIONS EXPLICIT TAGS ::= BEGIN
3832 -- OID arc for KerberosV5
3834 -- This OID may be used to identify Kerberos protocol messages
3835 -- encapsulated in other protocols.
3837 -- This OID also designates the OID arc for KerberosV5-related
3840 -- NOTE: RFC 1510 had an incorrect value (5) for "dod" in its
3842 id-krb5 OBJECT IDENTIFIER ::= {
3843 iso(1) identified-organization(3) dod(6) internet(1)
3844 security(5) kerberosV5(2)
3863 Yu Expires: Mar 2005 [Page 69]
3865 Internet-Draft rfc1510ter-01 15 Sep 2005
3869 -- Applications should not directly reference any types
3870 -- other than KRB-PDU and its component types.
3872 KRB-PDU ::= CHOICE {
3884 krb-error KRB-ERROR,
3894 -- signed values representable in 32 bits
3896 -- These are often used as assigned numbers for various things.
3897 Int32 ::= INTEGER (-2147483648..2147483647)
3900 -- Typed hole identifiers
3903 rel-oid RELATIVE-OID
3907 -- unsigned 32 bit values
3908 UInt32 ::= INTEGER (0..4294967295)
3911 -- unsigned 64 bit values
3912 UInt64 ::= INTEGER (0..18446744073709551615)
3919 Yu Expires: Mar 2005 [Page 70]
3921 Internet-Draft rfc1510ter-01 15 Sep 2005
3928 Microseconds ::= INTEGER (0..999999)
3931 KerberosTime ::= GeneralizedTime (CONSTRAINED BY {
3932 -- MUST NOT include fractional seconds
3936 -- used for names and for error messages
3937 KerberosString ::= CHOICE {
3938 ia5 GeneralString (IA5String),
3940 ... -- no extension may be sent
3941 -- to an rfc1510 implementation --
3945 -- IA5 choice only; useful for constraints
3946 KerberosStringIA5 ::= KerberosString
3947 (WITH COMPONENTS { ia5 PRESENT })
3949 -- IA5 excluded; useful for constraints
3950 KerberosStringExt ::= KerberosString
3951 (WITH COMPONENTS { ia5 ABSENT })
3954 -- used for language tags
3955 LangTag ::= PrintableString
3956 (FROM ("A".."Z" | "a".."z" | "0".."9" | "-"))
3975 Yu Expires: Mar 2005 [Page 71]
3977 Internet-Draft rfc1510ter-01 15 Sep 2005
3979 -- assigned numbers for name types (used in principal names)
3982 -- Name type not known
3983 nt-unknown NameType ::= 0
3984 -- Just the name of the principal as in DCE, or for users
3985 nt-principal NameType ::= 1
3986 -- Service and other unique instance (krbtgt)
3987 nt-srv-inst NameType ::= 2
3988 -- Service with host name as instance (telnet, rcommands)
3989 nt-srv-hst NameType ::= 3
3990 -- Service with host as remaining components
3991 nt-srv-xhst NameType ::= 4
3993 nt-uid NameType ::= 5
3994 -- Encoded X.509 Distingished name [RFC 2253]
3995 nt-x500-principal NameType ::= 6
3996 -- Name in form of SMTP email name (e.g. user@foo.com)
3997 nt-smtp-name NameType ::= 7
3998 -- Enterprise name - may be mapped to principal name
3999 nt-enterprise NameType ::= 10
4002 PrincipalName ::= SEQUENCE {
4003 name-type [0] NameType,
4004 -- May have zero elements, or individual elements may be
4005 -- zero-length, but this is NOT RECOMMENDED.
4006 name-string [1] SEQUENCE OF KerberosString
4011 PrincipalNameIA5 ::= PrincipalName (WITH COMPONENTS {
4013 name-string (WITH COMPONENT (KerberosStringIA5))
4017 PrincipalNameExt ::= PrincpalName (WITH COMPONENTS {
4019 name-string (WITH COMPONENT (KerberosStringExt))
4031 Yu Expires: Mar 2005 [Page 72]
4033 Internet-Draft rfc1510ter-01 15 Sep 2005
4035 Realm ::= KerberosString
4038 RealmIA5 ::= Realm (KerberosStringIA5)
4041 RealmExt ::= Realm (KerberosStringExt)
4044 KerberosFlags { NamedBits } ::= BIT STRING (SIZE (32..MAX))
4046 -- MUST be a valid value of -- NamedBits
4047 -- but if the value to be sent would be truncated to shorter
4048 -- than 32 bits according to DER, the value MUST be padded
4049 -- with trailing zero bits to 32 bits. Otherwise, no
4050 -- trailing zero bits may be present.
4057 HostAddress ::= SEQUENCE {
4058 addr-type [0] AddrType,
4059 address [1] OCTET STRING
4062 -- NOTE: HostAddresses is always used as an OPTIONAL field and
4063 -- should not be a zero-length SEQUENCE OF.
4065 -- The extensible messages explicitly constrain this to be
4067 HostAddresses ::= SEQUENCE OF HostAddress
4071 -- *** crypto-related types and assignments
4087 Yu Expires: Mar 2005 [Page 73]
4089 Internet-Draft rfc1510ter-01 15 Sep 2005
4091 -- Assigned numbers denoting encryption mechanisms.
4094 -- assigned numbers for encryption schemes
4095 et-des-cbc-crc EType ::= 1
4096 et-des-cbc-md4 EType ::= 2
4097 et-des-cbc-md5 EType ::= 3
4099 et-des3-cbc-md5 EType ::= 5
4101 et-des3-cbc-sha1 EType ::= 7
4102 et-dsaWithSHA1-CmsOID EType ::= 9
4103 et-md5WithRSAEncryption-CmsOID EType ::= 10
4104 et-sha1WithRSAEncryption-CmsOID EType ::= 11
4105 et-rc2CBC-EnvOID EType ::= 12
4106 et-rsaEncryption-EnvOID EType ::= 13
4107 et-rsaES-OAEP-ENV-OID EType ::= 14
4108 et-des-ede3-cbc-Env-OID EType ::= 15
4109 et-des3-cbc-sha1-kd EType ::= 16
4111 et-aes128-cts-hmac-sha1-96 EType ::= 17
4113 et-aes256-cts-hmac-sha1-96 EType ::= 18
4115 et-rc4-hmac EType ::= 23
4117 et-rc4-hmac-exp EType ::= 24
4118 -- opaque; PacketCable
4119 et-subkey-keymaterial EType ::= 65
4143 Yu Expires: Mar 2005 [Page 74]
4145 Internet-Draft rfc1510ter-01 15 Sep 2005
4147 -- Assigned numbers denoting key usages.
4151 -- Actual identifier names are provisional and subject to
4154 ku-pa-enc-ts KeyUsage ::= 1
4155 ku-Ticket KeyUsage ::= 2
4156 ku-EncASRepPart KeyUsage ::= 3
4157 ku-TGSReqAuthData-sesskey KeyUsage ::= 4
4158 ku-TGSReqAuthData-subkey KeyUsage ::= 5
4159 ku-pa-TGSReq-cksum KeyUsage ::= 6
4160 ku-pa-TGSReq-authenticator KeyUsage ::= 7
4161 ku-EncTGSRepPart-sesskey KeyUsage ::= 8
4162 ku-EncTGSRepPart-subkey KeyUsage ::= 9
4163 ku-Authenticator-cksum KeyUsage ::= 10
4164 ku-APReq-authenticator KeyUsage ::= 11
4165 ku-EncAPRepPart KeyUsage ::= 12
4166 ku-EncKrbPrivPart KeyUsage ::= 13
4167 ku-EncKrbCredPart KeyUsage ::= 14
4168 ku-KrbSafe-cksum KeyUsage ::= 15
4169 ku-ad-KDCIssued-cksum KeyUsage ::= 19
4172 -- The following numbers are provisional...
4173 -- conflicts may exist elsewhere.
4174 ku-Ticket-cksum KeyUsage ::= 25
4175 ku-ASReq-cksum KeyUsage ::= 26
4176 ku-TGSReq-cksum KeyUsage ::= 27
4177 ku-ASRep-cksum KeyUsage ::= 28
4178 ku-TGSRep-cksum KeyUsage ::= 29
4179 ku-APReq-cksum KeyUsage ::= 30
4180 ku-APRep-cksum KeyUsage ::= 31
4181 ku-KrbCred-cksum KeyUsage ::= 32
4182 ku-KrbError-cksum KeyUsage ::= 33
4183 ku-KDCRep-cksum KeyUsage ::= 34
4199 Yu Expires: Mar 2005 [Page 75]
4201 Internet-Draft rfc1510ter-01 15 Sep 2005
4203 -- KeyToUse identifies which key is to be used to encrypt or
4204 -- sign a given value.
4206 -- Values of KeyToUse are never actually transmitted over the
4207 -- wire, or even used directly by the implementation in any
4208 -- way, as key usages are; it exists primarily to identify
4209 -- which key gets used for what purpose. Thus, the specific
4210 -- numeric values associated with this type are irrelevant.
4211 KeyToUse ::= ENUMERATED {
4214 -- server long term key
4216 -- client long term key
4218 -- key selected by KDC for encryption of a KDC-REP
4220 -- session key from ticket
4222 -- subsession key negotiated via AP-REQ/AP-REP
4228 EncryptionKey ::= SEQUENCE {
4230 keyvalue [1] OCTET STRING
4255 Yu Expires: Mar 2005 [Page 76]
4257 Internet-Draft rfc1510ter-01 15 Sep 2005
4260 -- "Type" specifies which ASN.1 type is encrypted to the
4261 -- ciphertext in the EncryptedData. "Keys" specifies a set of
4262 -- keys of which one key may be used to encrypt the data.
4263 -- "KeyUsages" specifies a set of key usages, one of which may
4264 -- be used to encrypt.
4266 -- None of the parameters is transmitted over the wire.
4268 Type, KeyToUse:Keys, KeyUsage:KeyUsages
4271 kvno [1] UInt32 OPTIONAL,
4272 cipher [2] OCTET STRING (CONSTRAINED BY {
4273 -- must be encryption of --
4274 OCTET STRING (CONTAINING Type),
4275 -- with one of the keys -- KeyToUse:Keys,
4276 -- with key usage being one of --
4286 -- The parameters specify which key to use to produce the
4287 -- signature, as well as which key usage to use. The
4288 -- parameters are not actually sent over the wire.
4290 KeyToUse:Keys, KeyUsage:KeyUsages
4292 cksumtype [0] CksumType,
4293 checksum [1] OCTET STRING (CONSTRAINED BY {
4294 -- signed using one of the keys --
4296 -- with key usage being one of --
4311 Yu Expires: Mar 2005 [Page 77]
4313 Internet-Draft rfc1510ter-01 15 Sep 2005
4315 -- a Checksum that must contain the checksum
4316 -- of a particular type
4318 Type, KeyToUse:Keys, KeyUsage:KeyUsages
4319 } ::= Checksum { Keys, KeyUsages } (WITH COMPONENTS {
4321 checksum (CONSTRAINED BY {
4322 -- must be checksum of --
4323 OCTET STRING (CONTAINING Type)
4328 -- parameterized type for wrapping authenticated plaintext
4330 InnerType, KeyToUse:Keys, KeyUsage:KeyUsages
4332 cksum [0] ChecksumOf {
4333 InnerType, Keys, KeyUsages
4335 inner [1] InnerType,
4346 rfc1510 [APPLICATION 1] Ticket1510,
4347 ext [APPLICATION 4] Signed {
4348 TicketExt, { key-server }, { ku-Ticket-cksum }
4353 -- takes a parameter specifying which type gets encrypted
4354 TicketCommon { EncPart } ::= SEQUENCE {
4355 tkt-vno [0] INTEGER (5),
4357 sname [2] PrincipalName,
4358 enc-part [3] EncryptedData {
4359 EncPart, { key-server }, { ku-Ticket }
4362 extensions [4] TicketExtensions OPTIONAL,
4367 Yu Expires: Mar 2005 [Page 78]
4369 Internet-Draft rfc1510ter-01 15 Sep 2005
4371 Ticket1510 ::= SEQUENCE {
4372 COMPONENTS OF TicketCommon { EncTicketPart1510 }
4373 } (WITH COMPONENTS {
4375 -- explicitly force IA5 in strings
4377 sname (PrincipalNameIA5)
4381 -- APPLICATION tag goes inside Signed{} as well as outside,
4382 -- to prevent possible substitution attacks.
4383 TicketExt ::= [APPLICATION 4] TicketCommon {
4385 } (WITH COMPONENTS {
4387 -- explicitly force UTF-8 in strings
4389 sname (PrincipalNameExt)
4393 -- Encrypted part of ticket
4394 EncTicketPart ::= CHOICE {
4395 rfc1510 [APPLICATION 3] EncTicketPart1510,
4396 ext [APPLICATION 5] EncTicketPartExt
4400 EncTicketPartCommon ::= SEQUENCE {
4401 flags [0] TicketFlags,
4402 key [1] EncryptionKey,
4404 cname [3] PrincipalName,
4405 transited [4] TransitedEncoding,
4406 authtime [5] KerberosTime,
4407 starttime [6] KerberosTime OPTIONAL,
4408 endtime [7] KerberosTime,
4409 renew-till [8] KerberosTime OPTIONAL,
4410 caddr [9] HostAddresses OPTIONAL,
4411 authorization-data [10] AuthorizationData OPTIONAL,
4423 Yu Expires: Mar 2005 [Page 79]
4425 Internet-Draft rfc1510ter-01 15 Sep 2005
4427 EncTicketPart1510 ::= SEQUENCE {
4428 COMPONENTS OF EncTicketPartCommon
4429 } (WITH COMPONENTS {
4431 -- explicitly force IA5 in strings
4433 cname (PrincipalNameIA5)
4437 EncTicketPartExt ::= EncTicketPartCommon (WITH COMPONENTS {
4439 -- explicitly force UTF-8 in strings
4441 cname (PrincipalNameExt),
4442 -- explicitly constrain caddr to be non-empty if present
4443 caddr (SIZE (1..MAX)),
4444 -- forbid empty authorization-data encodings
4445 authorization-data (SIZE (1..MAX))
4450 -- *** Authorization Data
4456 AuthorizationData ::= SEQUENCE OF SEQUENCE {
4458 ad-data [1] OCTET STRING
4462 ad-if-relevant ADType ::= int32 : 1
4464 -- Encapsulates another AuthorizationData.
4465 -- Intended for application servers; receiving application servers
4467 AD-IF-RELEVANT ::= AuthorizationData
4479 Yu Expires: Mar 2005 [Page 80]
4481 Internet-Draft rfc1510ter-01 15 Sep 2005
4483 -- KDC-issued privilege attributes
4484 ad-kdcissued ADType ::= int32 : 4
4486 AD-KDCIssued ::= SEQUENCE {
4487 ad-checksum [0] ChecksumOf {
4488 AuthorizationData, { key-session },
4489 { ku-ad-KDCIssued-cksum }},
4490 i-realm [1] Realm OPTIONAL,
4491 i-sname [2] PrincipalName OPTIONAL,
4492 elements [3] AuthorizationData
4496 ad-and-or ADType ::= int32 : 5
4498 AD-AND-OR ::= SEQUENCE {
4499 condition-count [0] INTEGER,
4500 elements [1] AuthorizationData
4504 -- KDCs MUST interpret any AuthorizationData wrapped in this.
4505 ad-mandatory-for-kdc ADType ::= int32 : 8
4506 AD-MANDATORY-FOR-KDC ::= AuthorizationData
4509 TrType ::= TH-id -- must be registered
4511 -- encoded Transited field
4512 TransitedEncoding ::= SEQUENCE {
4514 contents [1] OCTET STRING
4520 -- ticket extensions: for TicketExt only
4521 TicketExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
4523 te-data [1] OCTET STRING
4535 Yu Expires: Mar 2005 [Page 81]
4537 Internet-Draft rfc1510ter-01 15 Sep 2005
4539 TicketFlags ::= KerberosFlags { TicketFlagsBits }
4541 TicketFlagsBits ::= BIT STRING {
4554 transited-policy-checked (12),
4555 ok-as-delegate (13),
4557 cksummed-ticket (15)
4591 Yu Expires: Mar 2005 [Page 82]
4593 Internet-Draft rfc1510ter-01 15 Sep 2005
4596 rfc1510 [APPLICATION 10] KDC-REQ-1510
4600 -- AS-REQ must include client name
4601 req-body (WITH COMPONENTS { ..., cname PRESENT })
4603 ext [APPLICATION 6] Signed {
4604 -- APPLICATION tag goes inside Signed{} as well as
4605 -- outside, to prevent possible substitution attacks.
4606 [APPLICATION 6] KDC-REQ-EXT,
4607 -- not sure this is correct key to use; do we even want
4615 -- AS-REQ must include client name
4616 req-body (WITH COMPONENTS { ..., cname PRESENT })
4621 TGS-REQ ::= CHOICE {
4622 rfc1510 [APPLICATION 12] KDC-REQ-1510
4626 -- client name optional in TGS-REQ
4627 req-body (WITH COMPONENTS { ..., cname ABSENT })
4629 ext [APPLICATION 8] Signed {
4630 -- APPLICATION tag goes inside Signed{} as well as
4631 -- outside, to prevent possible substitution attacks.
4632 [APPLICATION 8] KDC-REQ-EXT,
4633 { key-session }, { ku-TGSReq-cksum }
4638 -- client name optional in TGS-REQ
4639 req-body (WITH COMPONENTS { ..., cname ABSENT })
4647 Yu Expires: Mar 2005 [Page 83]
4649 Internet-Draft rfc1510ter-01 15 Sep 2005
4651 KDC-REQ-COMMON ::= SEQUENCE {
4652 -- NOTE: first tag is [1], not [0]
4653 pvno [1] INTEGER (5),
4654 msg-type [2] INTEGER (10 -- AS-REQ.rfc1510 --
4655 | 12 -- TGS-REQ.rfc1510 --
4656 | 6 -- AS-REQ.ext --
4657 | 8 -- TGS-REQ.ext -- ),
4658 padata [3] SEQUENCE OF PA-DATA OPTIONAL
4663 KDC-REQ-1510 ::= SEQUENCE {
4664 COMPONENTS OF KDC-REQ-COMMON,
4665 req-body [4] KDC-REQ-BODY-1510
4666 } (WITH COMPONENTS { ..., msg-type (10 | 12) })
4669 -- APPLICATION tag goes inside Signed{} as well as outside,
4670 -- to prevent possible substitution attacks.
4671 KDC-REQ-EXT ::= SEQUENCE {
4672 COMPONENTS OF KDC-REQ-COMMON,
4673 req-body [4] KDC-REQ-BODY-EXT,
4675 } (WITH COMPONENTS {
4678 padata (SIZE (1..MAX))
4703 Yu Expires: Mar 2005 [Page 84]
4705 Internet-Draft rfc1510ter-01 15 Sep 2005
4707 KDC-REQ-BODY-COMMON ::= SEQUENCE {
4708 kdc-options [0] KDCOptions,
4709 cname [1] PrincipalName OPTIONAL
4710 -- Used only in AS-REQ --,
4713 -- Server's realm; also client's in AS-REQ --,
4715 sname [3] PrincipalName OPTIONAL,
4716 from [4] KerberosTime OPTIONAL,
4717 till [5] KerberosTime OPTIONAL
4718 -- was required in rfc1510;
4719 -- still required for compat versions
4722 rtime [6] KerberosTime OPTIONAL,
4724 etype [8] SEQUENCE OF EType
4725 -- in preference order --,
4727 addresses [9] HostAddresses OPTIONAL,
4728 enc-authorization-data [10] EncryptedData {
4729 AuthorizationData, { key-session | key-subsession },
4730 { ku-TGSReqAuthData-subkey |
4731 ku-TGSReqAuthData-sesskey }
4734 additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
4735 -- NOTE: not empty --,
4737 lang-tags [5] SEQUENCE (SIZE (1..MAX)) OF
4743 KDC-REQ-BODY-1510 ::= SEQUENCE {
4744 COMPONENTS OF KDC-REQ-BODY-COMMON
4745 } (WITH COMPONENTS {
4747 cname (PrincipalNameIA5),
4749 sname (PrincipalNameIA5),
4759 Yu Expires: Mar 2005 [Page 85]
4761 Internet-Draft rfc1510ter-01 15 Sep 2005
4763 KDC-REQ-BODY-EXT ::= KDC-REQ-BODY-COMMON
4766 cname (PrincipalNameExt),
4768 sname (PrincipalNameExt),
4769 addresses (SIZE (1..MAX)),
4770 enc-authorization-data (EncryptedData {
4771 AuthorizationData (SIZE (1..MAX)),
4772 { key-session | key-subsession },
4773 { ku-TGSReqAuthData-subkey |
4774 ku-TGSReqAuthData-sesskey }
4776 additional-tickets (SIZE (1..MAX))
4780 KDCOptions ::= KerberosFlags { KDCOptionsBits }
4782 KDCOptionsBits ::= BIT STRING {
4797 requestanonymous (14),
4799 disable-transited-check (26),
4801 enc-tkt-in-skey (28),
4804 -- XXX need "need ticket1" flag?
4815 Yu Expires: Mar 2005 [Page 86]
4817 Internet-Draft rfc1510ter-01 15 Sep 2005
4820 rfc1510 [APPLICATION 11] KDC-REP-1510 {
4822 } (WITH COMPONENTS { ..., msg-type (11) }),
4823 ext [APPLICATION 7] Signed {
4824 [APPLICATION 7] KDC-REP-EXT { EncASRepPartExt },
4825 { key-reply }, { ku-ASRep-cksum }
4826 } (WITH COMPONENTS { ..., msg-type (7) })
4830 TGS-REP ::= CHOICE {
4831 rfc1510 [APPLICATION 13] KDC-REP-1510 {
4833 } (WITH COMPONENTS { ..., msg-type (13) }),
4834 ext [APPLICATION 9] Signed {
4835 [APPLICATION 9] KDC-REP-EXT { EncTGSRepPartExt },
4836 { key-reply }, { ku-TGSRep-cksum }
4837 } (WITH COMPONENTS { ..., msg-type (9) })
4871 Yu Expires: Mar 2005 [Page 87]
4873 Internet-Draft rfc1510ter-01 15 Sep 2005
4875 KDC-REP-COMMON { EncPart } ::= SEQUENCE {
4876 pvno [0] INTEGER (5),
4877 msg-type [1] INTEGER (11 -- AS-REP.rfc1510 -- |
4878 13 -- TGS.rfc1510 -- |
4879 7 -- AS-REP.ext -- |
4880 9 -- TGS-REP.ext -- ),
4881 padata [2] SEQUENCE OF PA-DATA OPTIONAL,
4883 cname [4] PrincipalName,
4886 enc-part [6] EncryptedData {
4889 -- maybe reach into EncryptedData in AS-REP/TGS-REP
4890 -- definitions to apply constraints on key usages?
4891 { ku-EncASRepPart -- if AS-REP -- |
4892 ku-EncTGSRepPart-subkey -- if TGS-REP and
4893 -- using Authenticator
4895 ku-EncTGSRepPart-sesskey -- if TGS-REP and using
4896 -- subsession key -- }
4900 -- In extensible version, KDC signs original request
4901 -- to avoid replay attacks against client.
4902 req-cksum [7] ChecksumOf { CHOICE {
4905 }, { key-reply }, { ku-KDCRep-cksum }} OPTIONAL,
4906 lang-tag [8] LangTag OPTIONAL,
4911 KDC-REP-1510 { EncPart } ::= SEQUENCE {
4912 COMPONENTS OF KDC-REP-COMMON { EncPart }
4913 } (WITH COMPONENTS {
4917 cname (PrincipalNameIA5)
4927 Yu Expires: Mar 2005 [Page 88]
4929 Internet-Draft rfc1510ter-01 15 Sep 2005
4931 KDC-REP-EXT { EncPart } ::= KDC-REP-COMMON { EncPart }
4936 cname (PrincipalNameExt)
4940 EncASRepPart1510 ::= [APPLICATION 25] EncKDCRepPart1510
4941 EncTGSRepPart1510 ::= [APPLICATION 26] EncKDCRepPart1510
4943 EncASRepPartExt ::= [APPLICATION 32] EncKDCRepPartExt
4944 EncTGSRepPartExt ::= [APPLICATION 33] EncKDCRepPartExt
4946 EncKDCRepPartCom ::= SEQUENCE {
4947 key [0] EncryptionKey,
4948 last-req [1] LastReq,
4950 key-expiration [3] KerberosTime OPTIONAL,
4951 flags [4] TicketFlags,
4952 authtime [5] KerberosTime,
4953 starttime [6] KerberosTime OPTIONAL,
4954 endtime [7] KerberosTime,
4955 renew-till [8] KerberosTime OPTIONAL,
4957 sname [10] PrincipalName,
4958 caddr [11] HostAddresses OPTIONAL,
4962 EncKDCRepPart1510 ::= SEQUENCE {
4963 COMPONENTS OF EncKDCRepPartCom
4964 } (WITH COMPONENTS {
4967 sname (PrincipalNameIA5),
4970 EncKdcRepPartExt ::= EncKDCRepPartCom (WITH COMPONENTS {
4973 sname (PrincipalNameExt)
4983 Yu Expires: Mar 2005 [Page 89]
4985 Internet-Draft rfc1510ter-01 15 Sep 2005
4988 LastReq ::= SEQUENCE OF SEQUENCE {
4990 lr-value [1] KerberosTime
4999 PaDataType ::= TH-id
5000 PaDataOID ::= RELATIVE-OID
5002 PA-DATA ::= SEQUENCE {
5003 -- NOTE: first tag is [1], not [0]
5004 padata-type [1] PaDataType,
5005 padata-value [2] OCTET STRING
5009 -- AP-REQ authenticating a TGS-REQ
5010 pa-tgs-req PaDataType ::= int32 : 1
5011 PA-TGS-REQ ::= AP-REQ
5014 -- Encrypted timestamp preauth
5015 -- Encryption key used is client's long-term key.
5016 pa-enc-timestamp PaDataType ::= int32 : 2
5018 PA-ENC-TIMESTAMP ::= EncryptedData {
5019 PA-ENC-TS-ENC, { key-client }, { ku-pa-enc-ts }
5022 PA-ENC-TS-ENC ::= SEQUENCE {
5023 patimestamp [0] KerberosTime -- client's time --,
5024 pausec [1] Microseconds OPTIONAL
5039 Yu Expires: Mar 2005 [Page 90]
5041 Internet-Draft rfc1510ter-01 15 Sep 2005
5043 -- Hints returned in AS-REP or KRB-ERROR to help client
5044 -- choose a password-derived key, either for preauthentication
5045 -- or for decryption of the reply.
5046 pa-etype-info PaDataType ::= int32 : 11
5048 ETYPE-INFO ::= SEQUENCE OF ETYPE-INFO-ENTRY
5050 ETYPE-INFO-ENTRY ::= SEQUENCE {
5052 salt [1] OCTET STRING OPTIONAL
5056 -- Similar to etype-info, but with parameters provided for
5057 -- the string-to-key function.
5058 pa-etype-info2 PaDataType ::= int32 : 19
5060 ETYPE-INFO2 ::= SEQUENCE (SIZE (1..MAX))
5063 ETYPE-INFO2-ENTRY ::= SEQUENCE {
5065 salt [1] KerberosString OPTIONAL,
5066 s2kparams [2] OCTET STRING OPTIONAL
5070 -- Obsolescent. Salt for client's long-term key.
5071 -- Its character encoding is unspecified.
5072 pa-pw-salt PaDataType ::= int32 : 3
5073 -- The "padata-value" does not encode an ASN.1 type.
5074 -- Instead, "padata-value" must consist of the salt string to
5075 -- be used by the client, in an unspecified character
5079 -- An extensible AS-REQ may be sent as a padata in a
5080 -- non-extensible AS-REQ to allow for backwards compatibility.
5081 pa-as-req PaDataType ::= int32 : 42 -- provisional
5082 PA-AS-REQ ::= AS-REQ (WITH COMPONENTS ext)
5086 -- *** Session key exchange
5095 Yu Expires: Mar 2005 [Page 91]
5097 Internet-Draft rfc1510ter-01 15 Sep 2005
5100 rfc1510 [APPLICATION 14] AP-REQ-1510,
5101 ext [APPLICATION 18] Signed {
5102 AP-REQ-EXT, { key-session }, { ku-APReq-cksum }
5107 AP-REQ-COMMON ::= SEQUENCE {
5108 pvno [0] INTEGER (5),
5109 msg-type [1] INTEGER (14 | 18),
5110 ap-options [2] APOptions,
5112 authenticator [4] EncryptedData {
5115 { ku-APReq-authenticator |
5116 ku-pa-TGSReq-authenticator }
5119 extensions [5] ApReqExtensions OPTIONAL,
5120 lang-tag [6] SEQUENCE (SIZE (1..MAX))
5121 OF LangTag OPTIONAL,
5126 AP-REQ-1510 ::= SEQUENCE {
5127 COMPONENTS OF AP-REQ-COMMON
5128 } (WITH COMPONENTS {
5131 authenticator (EncryptedData {
5132 Authenticator (WITH COMPONENTS {
5135 cname (PrincipalNameIA5),
5137 }), { key-session }, { ku-APReq-authenticator }})
5151 Yu Expires: Mar 2005 [Page 92]
5153 Internet-Draft rfc1510ter-01 15 Sep 2005
5155 AP-REQ-EXT ::= AP-REQ-COMMON
5159 -- The following constraints on Authenticator assume that
5160 -- we want to restrict the use of AP-REQ-EXT with TicketExt
5161 -- only, since that is the only way we can enforce UTF-8.
5162 authenticator (EncryptedData {
5163 Authenticator (WITH COMPONENTS {
5166 cname (PrincipalNameExt),
5167 authorization-data (SIZE (1..MAX))
5168 }), { key-session }, { ku-APReq-authenticator }})
5172 ApReqExtType ::= TH-id
5174 ApReqExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
5175 apReqExt-Type [0] ApReqExtType,
5176 apReqExt-Data [1] OCTET STRING
5180 APOptions ::= KerberosFlags { APOptionsBits }
5182 APOptionsBits ::= BIT STRING {
5184 use-session-key (1),
5189 -- plaintext of authenticator
5190 Authenticator ::= [APPLICATION 2] SEQUENCE {
5191 authenticator-vno [0] INTEGER (5),
5193 cname [2] PrincipalName,
5194 cksum [3] Checksum {{ key-session },
5195 { ku-Authenticator-cksum |
5196 ku-pa-TGSReq-cksum }} OPTIONAL,
5197 cusec [4] Microseconds,
5198 ctime [5] KerberosTime,
5199 subkey [6] EncryptionKey OPTIONAL,
5200 seq-number [7] SeqNum OPTIONAL,
5201 authorization-data [8] AuthorizationData OPTIONAL
5207 Yu Expires: Mar 2005 [Page 93]
5209 Internet-Draft rfc1510ter-01 15 Sep 2005
5212 rfc1510 [APPLICATION 15] AP-REP-1510,
5213 ext [APPLICATION 19] Signed {
5215 { key-session | key-subsession }, { ku-APRep-cksum }}
5219 AP-REP-COMMON { EncPart } ::= SEQUENCE {
5220 pvno [0] INTEGER (5),
5221 msg-type [1] INTEGER (15 | 19),
5222 enc-part [2] EncryptedData {
5224 { key-session | key-subsession }, { ku-EncAPRepPart }},
5226 extensions [3] ApRepExtensions OPTIONAL,
5231 AP-REP-1510 ::= SEQUENCE {
5232 COMPONENTS OF AP-REP-COMMON { EncAPRepPart1510 }
5233 } (WITH COMPONENTS {
5239 AP-REP-EXT ::= [APPLICATION 19] AP-REP-COMMON {
5241 } (WITH COMPONENTS { ..., msg-type (19) })
5244 ApRepExtType ::= TH-id
5246 ApRepExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
5247 apRepExt-Type [0] ApRepExtType,
5248 apRepExt-Data [1] OCTET STRING
5252 EncAPRepPart ::= CHOICE {
5253 rfc1510 [APPLICATION 27] EncAPRepPart1510,
5254 ext [APPLICATION 31] EncAPRepPartExt
5263 Yu Expires: Mar 2005 [Page 94]
5265 Internet-Draft rfc1510ter-01 15 Sep 2005
5267 EncAPRepPart1510 ::= SEQUENCE {
5268 COMPONENTS OF ENCAPRepPartCom
5269 } (WITH COMPONENTS {
5271 seq-number (UInt32),
5272 authorization-data ABSENT
5276 EncAPRepPartExt ::= EncAPRepPartCom
5279 EncAPRepPartCom ::= SEQUENCE {
5280 ctime [0] KerberosTime,
5281 cusec [1] Microseconds,
5282 subkey [2] EncryptionKey OPTIONAL,
5283 seq-number [3] SeqNum OPTIONAL,
5285 authorization-data [4] AuthorizationData OPTIONAL,
5291 -- *** Application messages
5295 -- Do we chew up another tag for KRB-SAFE-EXT? That would
5296 -- allow us to make safe-body optional, allowing for a GSS-MIC
5298 KRB-SAFE ::= [APPLICATION 20] SEQUENCE {
5299 pvno [0] INTEGER (5),
5300 msg-type [1] INTEGER (20),
5301 safe-body [2] KRB-SAFE-BODY,
5302 cksum [3] ChecksumOf {
5304 { key-session | key-subsession }, { ku-KrbSafe-cksum }},
5305 ... -- ASN.1 extensions must be excluded
5306 -- when sending to rfc1510 implementations
5319 Yu Expires: Mar 2005 [Page 95]
5321 Internet-Draft rfc1510ter-01 15 Sep 2005
5323 KRB-SAFE-BODY ::= SEQUENCE {
5324 user-data [0] OCTET STRING,
5325 timestamp [1] KerberosTime OPTIONAL,
5326 usec [2] Microseconds OPTIONAL,
5327 seq-number [3] SeqNum OPTIONAL,
5328 s-address [4] HostAddress,
5329 r-address [5] HostAddress OPTIONAL,
5330 ... -- ASN.1 extensions must be excluded
5331 -- when sending to rfc1510 implementations
5335 KRB-PRIV ::= [APPLICATION 21] SEQUENCE {
5336 pvno [0] INTEGER (5),
5337 msg-type [1] INTEGER (21),
5338 enc-part [3] EncryptedData {
5340 { key-session | key-subsession }, { ku-EncKrbPrivPart }},
5345 EncKrbPrivPart ::= [APPLICATION 28] SEQUENCE {
5346 user-data [0] OCTET STRING,
5347 timestamp [1] KerberosTime OPTIONAL,
5348 usec [2] Microseconds OPTIONAL,
5349 seq-number [3] SeqNum OPTIONAL,
5350 s-address [4] HostAddress -- sender's addr --,
5351 r-address [5] HostAddress OPTIONAL -- recip's addr --,
5352 ... -- ASN.1 extensions must be excluded
5353 -- when sending to rfc1510 implementations
5357 KRB-CRED ::= CHOICE {
5358 rfc1510 [APPLICATION 22] KRB-CRED-1510,
5359 ext [APPLICATION 24] Signed {
5361 { key-session | key-subsession }, { ku-KrbCred-cksum }}
5375 Yu Expires: Mar 2005 [Page 96]
5377 Internet-Draft rfc1510ter-01 15 Sep 2005
5379 KRB-CRED-COMMON ::= SEQUENCE {
5380 pvno [0] INTEGER (5),
5381 msg-type [1] INTEGER (22 | 24),
5382 tickets [2] SEQUENCE OF Ticket,
5383 enc-part [3] EncryptedData {
5385 { key-session | key-subsession }, { ku-EncKrbCredPart }},
5390 KRB-CRED-1510 ::= SEQUENCE {
5391 COMPONENTS OF KRB-CRED-COMMON
5392 } (WITH COMPONENTS { ..., msg-type (22) })
5395 KRB-CRED-EXT ::= [APPLICATION 24] KRB-CRED-COMMON
5396 (WITH COMPONENTS { ..., msg-type (24) })
5399 EncKrbCredPart ::= [APPLICATION 29] SEQUENCE {
5400 ticket-info [0] SEQUENCE OF KrbCredInfo,
5401 nonce [1] Nonce OPTIONAL,
5402 timestamp [2] KerberosTime OPTIONAL,
5403 usec [3] Microseconds OPTIONAL,
5404 s-address [4] HostAddress OPTIONAL,
5405 r-address [5] HostAddress OPTIONAL
5409 KrbCredInfo ::= SEQUENCE {
5410 key [0] EncryptionKey,
5411 prealm [1] Realm OPTIONAL,
5412 pname [2] PrincipalName OPTIONAL,
5413 flags [3] TicketFlags OPTIONAL,
5414 authtime [4] KerberosTime OPTIONAL,
5415 starttime [5] KerberosTime OPTIONAL,
5416 endtime [6] KerberosTime OPTIONAL,
5417 renew-till [7] KerberosTime OPTIONAL,
5418 srealm [8] Realm OPTIONAL,
5419 sname [9] PrincipalName OPTIONAL,
5420 caddr [10] HostAddresses OPTIONAL
5431 Yu Expires: Mar 2005 [Page 97]
5433 Internet-Draft rfc1510ter-01 15 Sep 2005
5435 TGT-REQ ::= [APPLICATION 16] SEQUENCE {
5436 pvno [0] INTEGER (5),
5437 msg-type [1] INTEGER (16),
5438 sname [2] PrincipalName OPTIONAL,
5439 srealm [3] Realm OPTIONAL,
5445 -- *** Error messages
5451 KRB-ERROR ::= CHOICE {
5452 rfc1510 [APPLICATION 30] KRB-ERROR-1510,
5453 ext [APPLICATION 23] Signed {
5454 KRB-ERROR-EXT, { ku-KrbError-cksum } }
5458 KRB-ERROR-COMMON ::= SEQUENCE {
5459 pvno [0] INTEGER (5),
5460 msg-type [1] INTEGER (30 | 23),
5461 ctime [2] KerberosTime OPTIONAL,
5462 cusec [3] Microseconds OPTIONAL,
5463 stime [4] KerberosTime,
5464 susec [5] Microseconds,
5465 error-code [6] ErrCode,
5466 crealm [7] Realm OPTIONAL,
5467 cname [8] PrincipalName OPTIONAL,
5468 realm [9] Realm -- Correct realm --,
5469 sname [10] PrincipalName -- Correct name --,
5470 e-text [11] KerberosString OPTIONAL,
5471 e-data [12] OCTET STRING OPTIONAL,
5473 typed-data [13] TYPED-DATA OPTIONAL,
5474 nonce [14] Nonce OPTIONAL,
5475 lang-tag [15] LangTag OPTIONAL,
5487 Yu Expires: Mar 2005 [Page 98]
5489 Internet-Draft rfc1510ter-01 15 Sep 2005
5491 KRB-ERROR-1510 ::= SEQUENCE {
5492 COMPONENTS OF KRB-ERROR-COMMON
5493 } (WITH COMPONENTS {
5499 KRB-ERROR-EXT ::= [APPLICATION 23] KRB-ERROR-COMMON
5500 (WITH COMPONENTS { ..., msg-type (23) })
5503 METHOD-DATA ::= SEQUENCE OF PA-DATA
5508 TYPED-DATA ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
5509 data-type [0] TDType,
5510 data-value [1] OCTET STRING OPTIONAL
5543 Yu Expires: Mar 2005 [Page 99]
5545 Internet-Draft rfc1510ter-01 15 Sep 2005
5552 kdc-err-none ErrCode ::= 0
5553 -- Client's entry in database has expired
5554 kdc-err-name-exp ErrCode ::= 1
5555 -- Server's entry in database has expired
5556 kdc-err-service-exp ErrCode ::= 2
5557 -- Requested protocol version number not supported
5558 kdc-err-bad-pvno ErrCode ::= 3
5559 -- Client's key encrypted in old master key
5560 kdc-err-c-old-mast-kvno ErrCode ::= 4
5561 -- Server's key encrypted in old master key
5562 kdc-err-s-old-mast-kvno ErrCode ::= 5
5563 -- Client not found in Kerberos database
5564 kdc-err-c-principal-unknown ErrCode ::= 6
5565 -- Server not found in Kerberos database
5566 kdc-err-s-principal-unknown ErrCode ::= 7
5567 -- Multiple principal entries in database
5568 kdc-err-principal-not-unique ErrCode ::= 8
5569 -- The client or server has a null key
5570 kdc-err-null-key ErrCode ::= 9
5571 -- Ticket not eligible for postdating
5572 kdc-err-cannot-postdate ErrCode ::= 10
5573 -- Requested start time is later than end time
5574 kdc-err-never-valid ErrCode ::= 11
5575 -- KDC policy rejects request
5576 kdc-err-policy ErrCode ::= 12
5577 -- KDC cannot accommodate requested option
5578 kdc-err-badoption ErrCode ::= 13
5579 -- KDC has no support for encryption type
5580 kdc-err-etype-nosupp ErrCode ::= 14
5581 -- KDC has no support for checksum type
5582 kdc-err-sumtype-nosupp ErrCode ::= 15
5583 -- KDC has no support for padata type
5584 kdc-err-padata-type-nosupp ErrCode ::= 16
5585 -- KDC has no support for transited type
5586 kdc-err-trtype-nosupp ErrCode ::= 17
5587 -- Clients credentials have been revoked
5588 kdc-err-client-revoked ErrCode ::= 18
5589 -- Credentials for server have been revoked
5590 kdc-err-service-revoked ErrCode ::= 19
5591 -- TGT has been revoked
5592 kdc-err-tgt-revoked ErrCode ::= 20
5599 Yu Expires: Mar 2005 [Page 100]
5601 Internet-Draft rfc1510ter-01 15 Sep 2005
5603 -- Client not yet valid - try again later
5604 kdc-err-client-notyet ErrCode ::= 21
5605 -- Server not yet valid - try again later
5606 kdc-err-service-notyet ErrCode ::= 22
5607 -- Password has expired - change password to reset
5608 kdc-err-key-expired ErrCode ::= 23
5609 -- Pre-authentication information was invalid
5610 kdc-err-preauth-failed ErrCode ::= 24
5611 -- Additional pre-authenticationrequired
5612 kdc-err-preauth-required ErrCode ::= 25
5613 -- Requested server and ticket don't match
5614 kdc-err-server-nomatch ErrCode ::= 26
5615 -- Server principal valid for user2user only
5616 kdc-err-must-use-user2user ErrCode ::= 27
5617 -- KDC Policy rejects transited path
5618 kdc-err-path-not-accpeted ErrCode ::= 28
5619 -- A service is not available
5620 kdc-err-svc-unavailable ErrCode ::= 29
5621 -- Integrity check on decrypted field failed
5622 krb-ap-err-bad-integrity ErrCode ::= 31
5624 krb-ap-err-tkt-expired ErrCode ::= 32
5625 -- Ticket not yet valid
5626 krb-ap-err-tkt-nyv ErrCode ::= 33
5627 -- Request is a replay
5628 krb-ap-err-repeat ErrCode ::= 34
5629 -- The ticket isn't for us
5630 krb-ap-err-not-us ErrCode ::= 35
5631 -- Ticket and authenticator don't match
5632 krb-ap-err-badmatch ErrCode ::= 36
5633 -- Clock skew too great
5634 krb-ap-err-skew ErrCode ::= 37
5635 -- Incorrect net address
5636 krb-ap-err-badaddr ErrCode ::= 38
5637 -- Protocol version mismatch
5638 krb-ap-err-badversion ErrCode ::= 39
5640 krb-ap-err-msg-type ErrCode ::= 40
5655 Yu Expires: Mar 2005 [Page 101]
5657 Internet-Draft rfc1510ter-01 15 Sep 2005
5659 -- Message stream modified
5660 krb-ap-err-modified ErrCode ::= 41
5661 -- Message out of order
5662 krb-ap-err-badorder ErrCode ::= 42
5663 -- Specified version of key is not available
5664 krb-ap-err-badkeyver ErrCode ::= 44
5665 -- Service key not available
5666 krb-ap-err-nokey ErrCode ::= 45
5667 -- Mutual authentication failed
5668 krb-ap-err-mut-fail ErrCode ::= 46
5669 -- Incorrect message direction
5670 krb-ap-err-baddirection ErrCode ::= 47
5671 -- Alternative authentication method required
5672 krb-ap-err-method ErrCode ::= 48
5673 -- Incorrect sequence number in message
5674 krb-ap-err-badseq ErrCode ::= 49
5675 -- Inappropriate type of checksum in message
5676 krb-ap-err-inapp-cksum ErrCode ::= 50
5677 -- Policy rejects transited path
5678 krb-ap-path-not-accepted ErrCode ::= 51
5679 -- Response too big for UDP, retry with TCP
5680 krb-err-response-too-big ErrCode ::= 52
5681 -- Generic error (description in e-text)
5682 krb-err-generic ErrCode ::= 60
5711 Yu Expires: Mar 2005 [Page 102]
5713 Internet-Draft rfc1510ter-01 15 Sep 2005
5715 -- Field is too long for this implementation
5716 krb-err-field-toolong ErrCode ::= 61
5717 -- Reserved for PKINIT
5718 kdc-error-client-not-trusted ErrCode ::= 62
5719 -- Reserved for PKINIT
5720 kdc-error-kdc-not-trusted ErrCode ::= 63
5721 -- Reserved for PKINIT
5722 kdc-error-invalid-sig ErrCode ::= 64
5723 -- Reserved for PKINIT
5724 kdc-err-key-too-weak ErrCode ::= 65
5725 -- Reserved for PKINIT
5726 kdc-err-certificate-mismatch ErrCode ::= 66
5727 -- No TGT available to validate USER-TO-USER
5728 krb-ap-err-no-tgt ErrCode ::= 67
5729 -- USER-TO-USER TGT issued different KDC
5730 kdc-err-wrong-realm ErrCode ::= 68
5731 -- Ticket must be for USER-TO-USER
5732 krb-ap-err-user-to-user-required ErrCode ::= 69
5733 -- Reserved for PKINIT
5734 kdc-err-cant-verify-certificate ErrCode ::= 70
5735 -- Reserved for PKINIT
5736 kdc-err-invalid-certificate ErrCode ::= 71
5737 -- Reserved for PKINIT
5738 kdc-err-revoked-certificate ErrCode ::= 72
5739 -- Reserved for PKINIT
5740 kdc-err-revocation-status-unknown ErrCode ::= 73
5741 -- Reserved for PKINIT
5742 kdc-err-revocation-status-unavailable ErrCode ::= 74
5748 B. Kerberos and Character Encodings (Informative)
5750 [adapted from KCLAR 5.2.1]
5752 The original specification of the Kerberos protocol in RFC 1510 uses
5753 GeneralString in numerous places for human-readable string data.
5754 Historical implementations of Kerberos cannot utilize the full power
5755 of GeneralString. This ASN.1 type requires the use of designation
5756 and invocation escape sequences as specified in ISO 2022 | ECMA-35
5757 [ISO2022] to switch character sets, and the default character set
5758 that is designated as G0 is the ISO 646 | ECMA-6 [ISO646]
5759 International Reference Version (IRV) (aka U.S. ASCII), which mostly
5762 ISO 2022 | ECMA-35 defines four character-set code elements (G0..G3)
5763 and two Control-function code elements (C0..C1). DER previously
5764 [X690-1997] prohibited the designation of character sets as any but
5765 the G0 and C0 sets. This had the side effect of prohibiting the use
5767 Yu Expires: Mar 2005 [Page 103]
5769 Internet-Draft rfc1510ter-01 15 Sep 2005
5771 of (ISO Latin) character-sets such as ISO 8859-1 [ISO8859-1] or any
5772 other character-sets that utilize a 96-character set, since it is
5773 prohibited by ISO 2022 | ECMA-35 to designate them as the G0 code
5774 element. Recent revisions to the ASN.1 standards resolve this
5777 In practice, many implementations treat RFC 1510 GeneralStrings as if
5778 they were 8-bit strings of whichever character set the implementation
5779 defaults to, without regard for correct usage of character-set
5780 designation escape sequences. The default character set is often
5781 determined by the current user's operating system dependent locale.
5782 At least one major implementation places unescaped UTF-8 encoded
5783 Unicode characters in the GeneralString. This failure to conform to
5784 the GeneralString specifications results in interoperability issues
5785 when conflicting character encodings are utilized by the Kerberos
5786 clients, services, and KDC.
5788 This unfortunate situation is the result of improper documentation of
5789 the restrictions of the ASN.1 GeneralString type in prior Kerberos
5792 [the following should probably be rewritten and moved into the
5793 principal name section]
5795 For compatibility, implementations MAY choose to accept GeneralString
5796 values that contain characters other than those permitted by
5797 IA5String, but they should be aware that character set designation
5798 codes will likely be absent, and that the encoding should probably be
5799 treated as locale-specific in almost every way. Implementations MAY
5800 also choose to emit GeneralString values that are beyond those
5801 permitted by IA5String, but should be aware that doing so is
5802 extraordinarily risky from an interoperability perspective.
5804 Some existing implementations use GeneralString to encode unescaped
5805 locale-specific characters. This is a violation of the ASN.1
5806 standard. Most of these implementations encode US-ASCII in the left-
5807 hand half, so as long the implementation transmits only US-ASCII, the
5808 ASN.1 standard is not violated in this regard. As soon as such an
5809 implementation encodes unescaped locale-specific characters with the
5810 high bit set, it violates the ASN.1 standard.
5812 Other implementations have been known to use GeneralString to contain
5813 a UTF-8 encoding. This also violates the ASN.1 standard, since UTF-8
5814 is a different encoding, not a 94 or 96 character "G" set as defined
5815 by ISO 2022. It is believed that these implementations do not even
5816 use the ISO 2022 escape sequence to change the character encoding.
5817 Even if implementations were to announce the change of encoding by
5818 using that escape sequence, the ASN.1 standard prohibits the use of
5819 any escape sequences other than those used to designate/invoke "G" or
5820 "C" sets allowed by GeneralString.
5823 Yu Expires: Mar 2005 [Page 104]
5825 Internet-Draft rfc1510ter-01 15 Sep 2005
5827 C. Kerberos History (Informative)
5829 [Adapted from KCLAR "BACKGROUND"]
5831 The Kerberos model is based in part on Needham and Schroeder's
5832 trusted third-party authentication protocol [NS78] and on
5833 modifications suggested by Denning and Sacco [DS81]. The original
5834 design and implementation of Kerberos Versions 1 through 4 was the
5835 work of two former Project Athena staff members, Steve Miller of
5836 Digital Equipment Corporation and Clifford Neuman (now at the
5837 Information Sciences Institute of the University of Southern
5838 California), along with Jerome Saltzer, Technical Director of Project
5839 Athena, and Jeffrey Schiller, MIT Campus Network Manager. Many other
5840 members of Project Athena have also contributed to the work on
5843 Version 5 of the Kerberos protocol (described in this document) has
5844 evolved from Version 4 based on new requirements and desires for
5845 features not available in Version 4. The design of Version 5 of the
5846 Kerberos protocol was led by Clifford Neuman and John Kohl with much
5847 input from the community. The development of the MIT reference
5848 implementation was led at MIT by John Kohl and Theodore Ts'o, with
5849 help and contributed code from many others. Since RFC1510 was
5850 issued, extensions and revisions to the protocol have been proposed
5851 by many individuals. Some of these proposals are reflected in this
5852 document. Where such changes involved significant effort, the
5853 document cites the contribution of the proposer.
5855 Reference implementations of both version 4 and version 5 of Kerberos
5856 are publicly available and commercial implementations have been
5857 developed and are widely used. Details on the differences between
5858 Kerberos Versions 4 and 5 can be found in [KNT94].
5860 D. Notational Differences from [KCLAR]
5862 [ possible point for discussion ]
5864 [KCLAR] uses notational conventions slightly different from this
5865 document. As a derivative of RFC 1510, the text of [KCLAR] uses C-
5866 language style identifier names for defined values. In ASN.1
5867 notation, identifiers referencing defined values must begin with a
5868 lowercase letter and contain hyphen (-) characters rather than
5869 underscore (_) characters, while identifiers referencing types begin
5870 with an uppercase letter. [KCLAR] and RFC 1510 use all-uppercase
5871 identifiers with underscores to identify defined values. This has
5872 the potential to create confusion, but neither document defines
5873 values using actual ASN.1 value-assignment notation.
5875 It is debatable whether it is advantageous to write all identifier
5876 names (regardless of their ASN.1 token type) in all-uppercase letters
5877 for the purpose of emphasis in running text. The alternative is to
5879 Yu Expires: Mar 2005 [Page 105]
5881 Internet-Draft rfc1510ter-01 15 Sep 2005
5883 use double-quote characters (") when ambiguity is possible.
5885 Normative References
5888 "7-bit coded character set", ISO/IEC 646:1991 | ECMA-6:1991.
5891 "Information technology -- Character code structure and
5892 extension techniques", ISO/IEC 2022:1994 | ECMA-35:1994.
5895 K. Raeburn, "Encryption and Checksum Specifications for Kerberos
5896 5", draft-ietf-krb-wg-crypto-07.txt, work in progress.
5899 S. Bradner, RFC2119: "Key words for use in RFC's to Indicate
5900 Requirement Levels", March 1997.
5903 H. Alvestrand, "Tags for the Identification of Languages",
5904 RFC 3660, January 2001.
5907 Kurt D. Zeilenga, "SASLprep: Stringprep profile for user names
5908 and passwords", draft-ietf-sasl-saslprep-10.txt, work in
5912 "Information technology -- Abstract Syntax Notation One (ASN.1):
5913 Specification of basic notation", ITU-T Recommendation X.680
5914 (2002) | ISO/IEC 8824-1:2002.
5917 "Information technology -- Abstract Syntax Notation One (ASN.1):
5918 Constraint specification", ITU-T Recommendation X.682 (2002) |
5919 ISO/IEC 8824-3:2002.
5922 "Information technology -- Abstract Syntax Notation One (ASN.1):
5923 Parameterization of ASN.1 specifications", ITU-T Recommendation
5924 X.683 (2002) | ISO/IEC 8824-4:2002.
5927 "Information technology -- ASN.1 encoding Rules: Specification
5928 of Basic Encoding Rules (BER), Canonical Encoding Rules (CER)
5929 and Distinguished Encoding Rules (DER)", ITU-T Recommendation
5930 X.690 (2002) | ISO/IEC 8825-1:2002.
5935 Yu Expires: Mar 2005 [Page 106]
5937 Internet-Draft rfc1510ter-01 15 Sep 2005
5939 Informative References
5942 Dorothy E. Denning and Giovanni Maria Sacco, "Time-stamps in Key
5943 Distribution Protocols," Communications of the ACM, Vol. 24(8),
5944 pp. 533-536 (August 1981).
5947 Olivier Dubuisson, "ASN.1 - Communication between Heterogeneous
5948 Systems", Elsevier-Morgan Kaufmann, 2000.
5949 <http://www.oss.com/asn1/dubuisson.html>
5952 "Information technology -- 8-bit single-byte coded graphic
5953 character sets -- Part 1: Latin alphabet No. 1", ISO/IEC 8859-
5957 Clifford Neuman, Tom Yu, Sam Hartman, Ken Raeburn, "The Kerberos
5958 Network Authentication Service (V5)", draft-ietf-krb-wg-
5959 kerberos-clarifications-07.txt, work in progress.
5962 John T. Kohl, B. Clifford Neuman, and Theodore Y. Ts'o, "The
5963 Evolution of the Kerberos Authentication System". In
5964 Distributed Open Systems, pages 78-94. IEEE Computer Society
5968 John Larmouth, "Understanding OSI", International Thomson
5969 Computer Press, 1996.
5970 <http://www.isi.salford.ac.uk/books/osi.html>
5973 John Larmouth, "ASN.1 Complete", Elsevier-Morgan Kaufmann,
5974 1999. <http://www.oss.com/asn1/larmouth.html>
5977 Roger M. Needham and Michael D. Schroeder, "Using Encryption for
5978 Authentication in Large Networks of Computers", Communications
5979 of the ACM, Vol. 21(12), pp. 993-999 (December, 1978).
5982 J. Kohl and B. C. Neuman, "The Kerberos Network Authentication
5983 Service (v5)", RFC1510, September 1993, Status: Proposed
5987 J. Linn, "The Kerberos Version 5 GSS-API Mechanism", RFC 1964,
5988 June 1996, Status: Proposed Standard.
5991 Yu Expires: Mar 2005 [Page 107]
5993 Internet-Draft rfc1510ter-01 15 Sep 2005
5996 "Information technology -- ASN.1 encoding rules: Specification
5997 of Basic Encoding Rules (BER), Canonical Encoding Rules (CER)
5998 and Distinguished Encoding Rules (DER)", ITU-T Recommendation
5999 X.690 (2002) | ISO/IEC 8825-1:2002.
6004 77 Massachusetts Ave
6011 Copyright (C) The Internet Society (2005). This document is subject
6012 to the rights, licenses and restrictions contained in BCP 78, and
6013 except as set forth therein, the authors retain all their rights.
6015 This document and the information contained herein are provided on an
6016 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
6017 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
6018 ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
6019 INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
6020 INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
6021 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
6023 Intellectual Property Statement
6025 The IETF takes no position regarding the validity or scope of any
6026 Intellectual Property Rights or other rights that might be claimed to
6027 pertain to the implementation or use of the technology described in
6028 this document or the extent to which any license under such rights
6029 might or might not be available; nor does it represent that it has
6030 made any independent effort to identify any such rights. Information
6031 on the procedures with respect to rights in RFC documents can be
6032 found in BCP 78 and BCP 79.
6034 Copies of IPR disclosures made to the IETF Secretariat and any
6035 assurances of licenses to be made available, or the result of an
6036 attempt made to obtain a general license or permission for the use of
6037 such proprietary rights by implementers or users of this
6038 specification can be obtained from the IETF on-line IPR repository at
6039 http://www.ietf.org/ipr.
6041 The IETF invites any interested party to bring to its attention any
6042 copyrights, patents or patent applications, or other proprietary
6043 rights that may cover technology that may be required to implement
6044 this standard. Please address the information to the IETF at ietf-
6047 Yu Expires: Mar 2005 [Page 108]