4 draft-ietf-krb-wg-rfc1510ter-03.txt MIT
5 Expires: 26 Apr 2006 23 October 2006
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 (2006). 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: Apr 2007 [Page 1]
57 Internet-Draft rfc1510ter-03 23 Oct 2006
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. 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 2.7.1. KDC protocol ............................................. 10
78 2.7.2. Application protocol ..................................... 11
79 2.8. Strings .................................................... 11
80 3. Use of ASN.1 in Kerberos ..................................... 11
81 3.1. Module Header .............................................. 12
82 3.2. Top-Level Type ............................................. 12
83 3.3. Previously Unused ASN.1 Notation (informative) ............. 13
84 3.3.1. Parameterized Types ...................................... 13
85 3.3.2. Constraints .............................................. 13
86 3.4. New Types .................................................. 13
87 4. Basic Types .................................................. 14
88 4.1. Constrained Integer Types .................................. 14
89 4.2. KerberosTime ............................................... 15
90 4.3. KerberosString ............................................. 15
91 4.4. Language Tags .............................................. 16
92 4.5. KerberosFlags .............................................. 16
93 4.6. Typed Holes ................................................ 17
94 4.7. HostAddress and HostAddresses .............................. 17
95 4.7.1. Internet (IPv4) Addresses ................................ 18
96 4.7.2. Internet (IPv6) Addresses ................................ 18
97 4.7.3. DECnet Phase IV addresses ................................ 18
98 4.7.4. Netbios addresses ........................................ 18
99 4.7.5. Directional Addresses .................................... 18
100 5. Principals ................................................... 19
101 5.1. Name Types ................................................. 19
102 5.2. Principal Type Definition .................................. 20
103 5.3. Principal Name Reuse ....................................... 21
104 5.4. Best Common Practice Recommendations for the Processing
105 of Principal Names Consisting of Internationalized
106 Domain Names: .......................................... 21
107 5.5. Realm Names ................................................ 22
108 5.6. Best Common Practice Recommendations for the Processing
109 of Internationalized Domain-Style Realm Names: ......... 22
111 Yu Expires: Apr 2007 [Page 2]
113 Internet-Draft rfc1510ter-03 23 Oct 2006
115 5.7. Printable Representations of Principal Names ............... 23
116 5.8. Ticket-Granting Service Principal .......................... 23
117 5.8.1. Cross-Realm TGS Principals ............................... 24
118 6. Types Relating to Encryption ................................. 24
119 6.1. Assigned Numbers for Encryption ............................ 24
120 6.1.1. EType .................................................... 24
121 6.1.2. Key Usages ............................................... 25
122 6.2. Which Key to Use ........................................... 26
123 6.3. EncryptionKey .............................................. 27
124 6.4. EncryptedData .............................................. 27
125 6.5. Checksums .................................................. 28
126 6.5.1. ChecksumOf ............................................... 29
127 6.5.2. Signed ................................................... 30
128 7. Tickets ...................................................... 30
129 7.1. Timestamps ................................................. 31
130 7.2. Ticket Flags ............................................... 32
131 7.2.1. Flags Relating to Initial Ticket Acquisition ............. 32
132 7.2.2. Invalid Tickets .......................................... 33
133 7.2.3. OK as Delegate ........................................... 33
134 7.2.4. Renewable Tickets ........................................ 34
135 7.2.5. Postdated Tickets ........................................ 34
136 7.2.6. Proxiable and Proxy Tickets .............................. 35
137 7.2.7. Forwarded and Forwardable Tickets ........................ 36
138 7.3. Transited Realms ........................................... 37
139 7.4. Authorization Data ......................................... 37
140 7.4.1. AD-IF-RELEVANT ........................................... 38
141 7.4.2. AD-KDCIssued ............................................. 39
142 7.4.3. AD-AND-OR ................................................ 40
143 7.4.4. AD-MANDATORY-FOR-KDC ..................................... 40
144 7.5. Encrypted Part of Ticket ................................... 41
145 7.6. Cleartext Part of Ticket ................................... 41
146 8. Credential Acquisition ....................................... 43
147 8.1. KDC-REQ .................................................... 43
148 8.2. PA-DATA .................................................... 50
149 8.3. KDC-REQ Processing ......................................... 50
150 8.3.1. Handling Replays ......................................... 50
151 8.3.2. Request Validation ....................................... 51
152 8.3.2.1. AS-REQ Authentication .................................. 51
153 8.3.2.2. TGS-REQ Authentication ................................. 51
154 8.3.2.3. Principal Validation ................................... 51
155 8.3.2.4. Checking For Revoked or Invalid Tickets ................ 51
156 8.3.3. Timestamp Handling ....................................... 52
157 8.3.3.1. AS-REQ Timestamp Processing ............................ 52
158 8.3.3.2. TGS-REQ Timestamp Processing ........................... 53
159 8.3.4. Handling Transited Realms ................................ 54
160 8.3.5. Address Processing ....................................... 54
161 8.3.6. Ticket Flag Processing ................................... 54
162 8.3.7. Key Selection ............................................ 56
163 8.3.7.1. Reply Key and Session Key Selection .................... 56
164 8.3.7.2. Ticket Key Selection ................................... 56
165 8.4. KDC-REP .................................................... 56
167 Yu Expires: Apr 2007 [Page 3]
169 Internet-Draft rfc1510ter-03 23 Oct 2006
171 8.5. Reply Validation ........................................... 60
172 8.6. IP Transports .............................................. 60
173 8.6.1. UDP/IP transport ......................................... 60
174 8.6.2. TCP/IP transport ......................................... 60
175 8.6.3. KDC Discovery on IP Networks ............................. 62
176 8.6.3.1. DNS vs. Kerberos - Case Sensitivity of Realm Names ..... 62
177 8.6.3.2. DNS SRV records for KDC location ....................... 62
178 8.6.3.3. KDC Discovery for Domain Style Realm Names on IP
179 Networks ............................................ 63
180 9. Errors ....................................................... 63
181 10. Session Key Exchange ........................................ 65
182 10.1. AP-REQ .................................................... 66
183 10.2. AP-REP .................................................... 67
184 11. Session Key Use ............................................. 69
185 11.1. KRB-SAFE .................................................. 69
186 11.2. KRB-PRIV .................................................. 69
187 11.3. KRB-CRED .................................................. 70
188 12. Security Considerations ..................................... 71
189 12.1. Time Synchronization ...................................... 71
190 12.2. Replays ................................................... 71
191 12.3. Principal Name Reuse ...................................... 72
192 12.4. Password Guessing ......................................... 72
193 12.5. Forward Secrecy ........................................... 72
194 12.6. Authorization ............................................. 72
195 12.7. Login Authentication ...................................... 72
196 13. IANA Considerations ......................................... 72
197 14. Acknowledgments ............................................. 73
198 Appendices ....................................................... 73
199 A. ASN.1 Module (Normative) ..................................... 73
200 B. Kerberos and Character Encodings (Informative) ...............105
201 C. Kerberos History (Informative) ...............................107
202 D. Notational Differences from [KCLAR] ..........................107
203 Normative References .............................................108
204 Informative References ...........................................109
205 Author's Address .................................................110
206 Copyright Statement ..............................................110
207 Intellectual Property Statement ..................................110
223 Yu Expires: Apr 2007 [Page 4]
225 Internet-Draft rfc1510ter-03 23 Oct 2006
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: Apr 2007 [Page 5]
281 Internet-Draft rfc1510ter-03 23 Oct 2006
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: Apr 2007 [Page 6]
337 Internet-Draft rfc1510ter-03 23 Oct 2006
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: Apr 2007 [Page 7]
393 Internet-Draft rfc1510ter-03 23 Oct 2006
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. 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: Apr 2007 [Page 8]
449 Internet-Draft rfc1510ter-03 23 Oct 2006
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: Apr 2007 [Page 9]
505 Internet-Draft rfc1510ter-03 23 Oct 2006
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.
545 A client may send an AS-REQ-EXT if it has prior knowledge that the
546 KDC in question will accept it. (possibly via a TCP extension?)
547 Otherwise, the client will send an AS-REQ-1510 with the AS-REQ-EXT
548 inside preauthentication data. The client will always know whether
549 to send TGS-REQ-EXT because (as in the application protocol) it knows
550 the type of the associated Ticket. (Note: could be a problem with
553 The KDC will send AS-REP-EXT or TGS-REP-EXT if the client's message
554 is extensible; otherwise, it will send AS-REP-1510 or TGS-REP-1510.
555 The Ticket contained within the AS-REP-EXT or TGS-REP-EXT will be a
556 TicketExt if the application server supports it; otherwise, it will
557 be a Ticket1510. AS-REP-1510 and TGS-REP-1510 always contain a
559 Yu Expires: Apr 2007 [Page 10]
561 Internet-Draft rfc1510ter-03 23 Oct 2006
563 Ticket1510. The EncTicketPart will depend on the server's
564 capability; the client cannot distinguish EncTicketPart1510 from
567 KDCs within a realm should be uniform in advertized capability for
568 extensible messages. A KDC SHOULD only issue a TicketExt TGT if all
569 KDCs support it. Similarly, a client receiving a TicketExt knows
570 that all instances of the application service will accept extensible
573 2.7.2. Application protocol
575 The client knows whether the application server supports AP-REQ-EXT
576 because it can distinguish Ticket1510 from TicketExt. The server
577 knows the client's capability due to the format of the AP-REQ.
581 Some implementations of RFC 1510 do not limit princpal names and
582 realm names to ASCII characters. As a result, migration difficulties
583 resulting from legacy non-ASCII principal and realm names can arise.
584 Is it reasonable to assume that any legacy non-ASCII character can be
585 uniquely represented in Unicode?
587 This may result in a situation where various parties of the protocol
588 need to know alternate, possibly multiple, legacy non-ASCII names for
589 principals and also to know how they map into Unicode. An
590 application server needs to know all possible legacy encodings of its
591 name if it receives a "mixed" ticket. (Ticket1510 containing
592 EncTicketPartExt) It also needs to be able to compare a legacy
593 encoding of a client principal against the normalized UTF-8 encoding
594 when checking the client's principal name in the Authenticator
595 against the one contained in the EncTicketPart. This check can be
596 avoided if the application protocol does not require a replay cache.
598 3. Use of ASN.1 in Kerberos
600 Kerberos uses the ASN.1 Distinguished Encoding Rules (DER) [X690].
601 Even though ASN.1 theoretically allows the description of protocol
602 messages to be independent of the encoding rules used to encode the
603 messages, Kerberos messages MUST be encoded with DER. Subtleties in
604 the semantics of the notation, such as whether tags carry any
605 semantic content to the application, may cause the use of other ASN.1
606 encoding rules to be problematic.
608 Implementors not using existing ASN.1 tools (e.g., compilers or
609 support libraries) are cautioned to thoroughly read and understand
610 the actual ASN.1 specification to ensure correct implementation
611 behavior. There is more complexity in the notation than is
612 immediately obvious, and some tutorials and guides to ASN.1 are
613 misleading or erroneous. Recommended tutorials and guides include
615 Yu Expires: Apr 2007 [Page 11]
617 Internet-Draft rfc1510ter-03 23 Oct 2006
619 [Dub00], [Lar99], though there is still no substitute for reading the
620 actual ASN.1 specification.
624 The type definitions in this document assume an ASN.1 module
625 definition of the following form:
628 iso(1) identified-organization(3) dod(6) internet(1)
629 security(5) kerberosV5(2) modules(4) krb5spec3(4)
630 } DEFINITIONS EXPLICIT TAGS ::= BEGIN
632 -- Rest of definitions here
636 This specifies that the tagging context for the module will be
637 explicit and that automatic tagging is not done.
639 Some other publications [RFC1510] [RFC1964] erroneously specify an
640 object identifier (OID) having an incorrect value of "5" for the
641 "dod" component of the OID. In the case of RFC 1964, use of the
642 "correct" OID value would result in a change in the wire protocol;
643 therefore, the RFC 1964 OID remains unchanged for now.
647 The ASN.1 type "KRB-PDU" is a CHOICE over all the types (Protocol
648 Data Units or PDUs) which an application may directly reference.
649 Applications SHOULD NOT transmit any types other than those which are
650 alternatives of the KRB-PDU CHOICE.
671 Yu Expires: Apr 2007 [Page 12]
673 Internet-Draft rfc1510ter-03 23 Oct 2006
677 -- Applications should not directly reference any types
678 -- other than KRB-PDU and its component types.
697 3.3. Previously Unused ASN.1 Notation (informative)
699 Some aspects of ASN.1 notation used in this document were not used in
700 [KCLAR], and may be unfamiliar to some readers. This subsection is
701 informative; for normative definitions of the notation, see the
702 actual ASN.1 specifications [X680], [X682], [X683].
704 3.3.1. Parameterized Types
706 This document uses ASN.1 parameterized types [X683] to make
707 definitions of types more readable. For some types, some or all of
708 the parameters are advisory, i.e., they are not encoded in any form
709 for transmission in a protocol message. These advisory parameters
710 can describe implementation behavior associated with the type.
714 This document uses ASN.1 constraints, including the
715 "UserDefinedConstraint" notation [X682]. Some constraints can be
716 handled automatically by tools that can parse them. Uses of the
717 "UserDefinedConstraint" notation (the "CONSTRAINED BY" notation) will
718 typically need to have behavior manually coded; the notation provides
719 a formalized way of conveying intended implementation behavior.
721 The "WITH COMPONENTS" constraint notation allows constraints to apply
722 to component types of a SEQUENCE type. This constraint notation
723 effectively allows constraints to "reach into" a type to constrain
727 Yu Expires: Apr 2007 [Page 13]
729 Internet-Draft rfc1510ter-03 23 Oct 2006
733 This document defines a number of ASN.1 types which are new since
734 [KCLAR]. The names of these types will typically have a suffix like
735 "Ext", indicating that the types are intended to support
736 extensibility. Types original to RFC 1510 and [KCLAR] have been
737 renamed to have a suffix like "1510". The "Ext" and "1510" types
738 often contain a number of common elements, but differ primarily in
739 the way strings are encoded.
743 These "basic" Kerberos ASN.1 types appear in multiple other Kerberos
746 4.1. Constrained Integer Types
748 In RFC 1510, many types contained references to the unconstrained
749 INTEGER type. Since an unconstrained INTEGER can contain almost any
750 possible abstract integer value, most of the unconstrained references
751 to INTEGER in RFC 1510 were constrained to 32 bits or smaller in
754 -- signed values representable in 32 bits
756 -- These are often used as assigned numbers for various things.
757 Int32 ::= INTEGER (-2147483648..2147483647)
759 The "Int32" type often contains an assigned number identifying the
760 contents of a typed hole. Unless otherwise stated, non-negative
761 values are registered, and negative values are available for local
764 -- unsigned 32 bit values
765 UInt32 ::= INTEGER (0..4294967295)
767 The "UInt32" type is used in some places where an unsigned 32-bit
770 -- unsigned 64 bit values
771 UInt64 ::= INTEGER (0..18446744073709551615)
773 The "UInt64" type is used in places where 32 bits of precision may
774 provide inadequate security.
779 Sequence numbers were constrained to 32 bits in [KCLAR], but this
780 document allows for 64-bit sequence numbers.
783 Yu Expires: Apr 2007 [Page 14]
785 Internet-Draft rfc1510ter-03 23 Oct 2006
790 Likewise, nonces were constrained to 32 bits in [KCLAR], but expanded
794 Microseconds ::= INTEGER (0..999999)
796 The "microseconds" type is intended to carry the microseconds part of
801 KerberosTime ::= GeneralizedTime (CONSTRAINED BY {
802 -- MUST NOT include fractional seconds
805 The timestamps used in Kerberos are encoded as GeneralizedTimes. A
806 KerberosTime value MUST NOT include any fractional portions of the
807 seconds. As required by the DER, it further MUST NOT include any
808 separators, and it specifies the UTC time zone (Z). Example: The
809 only valid format for UTC time 6 minutes, 27 seconds after 9 pm on 6
810 November 1985 is "19851106210627Z".
814 -- used for names and for error messages
815 KerberosString ::= CHOICE {
816 ia5 GeneralString (IA5String),
818 ... -- no extension may be sent
819 -- to an rfc1510 implementation --
822 The KerberosString type is used for character strings in various
823 places in the Kerberos protocol. For compatibility with RFC 1510,
824 GeneralString values constrained to IA5String (US-ASCII) are
825 permitted in messages exchanged with RFC 1510 implementations. The
826 new protocol messages contain strings encoded as UTF-8, and these
827 strings MUST be normalized using [SASLPREP]. KerberosString values
828 are present in principal names and in error messages. Control
829 characters SHOULD NOT be used in principal names, and used with
830 caution in error messages.
839 Yu Expires: Apr 2007 [Page 15]
841 Internet-Draft rfc1510ter-03 23 Oct 2006
843 -- IA5 choice only; useful for constraints
844 KerberosStringIA5 ::= KerberosString
845 (WITH COMPONENTS { ia5 PRESENT })
847 -- IA5 excluded; useful for constraints
848 KerberosStringExt ::= KerberosString
849 (WITH COMPONENTS { ia5 ABSENT })
851 KerberosStringIA5 requires the use of the "ia5" alternative, while
852 KerberosStringExt forbids it. These types appear in ASN.1
853 constraints on messages.
855 For detailed background regarding the history of character string use
856 in Kerberos, as well as discussion of some compatibility issues, see
861 -- used for language tags
862 LangTag ::= PrintableString
863 (FROM ("A".."Z" | "a".."z" | "0".."9" | "-"))
865 The "LangTag" type is used to specify language tags for localization
866 purposes, using the [RFC3066] format.
870 For several message types, a specific constrained bit string type,
871 KerberosFlags, is used.
873 KerberosFlags { NamedBits } ::= BIT STRING (SIZE (32..MAX))
875 -- MUST be a valid value of -- NamedBits
876 -- but if the value to be sent would be truncated to shorter
877 -- than 32 bits according to DER, the value MUST be padded
878 -- with trailing zero bits to 32 bits. Otherwise, no
879 -- trailing zero bits may be present.
884 The actual bit string type encoded in Kerberos messages does not use
885 named bits. The advisory parameter of the KerberosFlags type names a
886 bit string type defined using named bits, whose value is encoded as
887 if it were a bit string with unnamed bits. This practice is
888 necessary because the DER require trailing zero bits to be removed
889 when encoding bit strings defined using named bits. Existing
890 implementations of Kerberos send exactly 32 bits rather than
891 truncating, so the size constraint requires the transmission of at
892 least 32 bits. Trailing zero bits beyond the first 32 bits are
895 Yu Expires: Apr 2007 [Page 16]
897 Internet-Draft rfc1510ter-03 23 Oct 2006
901 -- Typed hole identifiers
907 The "TH-id" type is a generalized means to identify the contents of a
908 typed hole. The "int32" alternative may be used for simple integer
909 assignments, in the same manner as "Int32", while the "rel-oid"
910 alternative may be used for hierarchical delegation.
912 4.7. HostAddress and HostAddresses
916 HostAddress ::= SEQUENCE {
917 addr-type [0] AddrType,
918 address [1] OCTET STRING
921 -- NOTE: HostAddresses is always used as an OPTIONAL field and
922 -- should not be a zero-length SEQUENCE OF.
924 -- The extensible messages explicitly constrain this to be
926 HostAddresses ::= SEQUENCE OF HostAddress
930 This field specifies the type of address that follows.
933 This field encodes a single address of the type identified by
936 All negative values for the host address type are reserved for local
937 use. All non-negative values are reserved for officially assigned
938 type fields and interpretations.
942 __________|______________
951 Yu Expires: Apr 2007 [Page 17]
953 Internet-Draft rfc1510ter-03 23 Oct 2006
955 4.7.1. Internet (IPv4) Addresses
957 Internet (IPv4) addresses are 32-bit (4-octet) quantities, encoded in
958 MSB order (most significant byte first). The IPv4 loopback address
959 SHOULD NOT appear in a Kerberos PDU. The type of IPv4 addresses is
962 4.7.2. Internet (IPv6) Addresses
964 IPv6 addresses [RFC2373] are 128-bit (16-octet) quantities, encoded
965 in MSB order (most significant byte first). The type of IPv6
966 addresses is twenty-four (24). The following addresses MUST NOT
967 appear in any Kerberos PDU:
969 * the Unspecified Address
971 * the Loopback Address
973 * Link-Local addresses
975 This restriction applies to the inclusion in the address fields of
976 Kerberos PDUs, but not to the address fields of packets that might
977 carry such PDUs. The restriction is necessary because the use of an
978 address with non-global scope could allow the acceptance of a message
979 sent from a node that may have the same address, but which is not the
980 host intended by the entity that added the restriction. If the
981 link-local address type needs to be used for communication, then the
982 address restriction in tickets must not be used (i.e. addressless
983 tickets must be used).
985 IPv4-mapped IPv6 addresses MUST be represented as addresses of type
988 4.7.3. DECnet Phase IV addresses
990 DECnet Phase IV addresses are 16-bit addresses, encoded in LSB order.
991 The type of DECnet Phase IV addresses is twelve (12).
993 4.7.4. Netbios addresses
995 Netbios addresses are 16-octet addresses typically composed of 1 to
996 15 alphanumeric characters and padded with the US-ASCII SPC character
997 (code 32). The 16th octet MUST be the US-ASCII NUL character (code
998 0). The type of Netbios addresses is twenty (20).
1000 4.7.5. Directional Addresses
1002 In many environments, including the sender address in KRB-SAFE and
1003 KRB-PRIV messages is undesirable because the addresses may be changed
1004 in transport by network address translators. However, if these
1005 addresses are removed, the messages may be subject to a reflection
1007 Yu Expires: Apr 2007 [Page 18]
1009 Internet-Draft rfc1510ter-03 23 Oct 2006
1011 attack in which a message is reflected back to its originator. The
1012 directional address type provides a way to avoid transport addresses
1013 and reflection attacks. Directional addresses are encoded as four
1014 byte unsigned integers in network byte order. If the message is
1015 originated by the party sending the original AP-REQ message, then an
1016 address of 0 SHOULD be used. If the message is originated by the
1017 party to whom that AP-REQ was sent, then the address 1 SHOULD be
1018 used. Applications involving multiple parties can specify the use of
1021 Directional addresses MUST only be used for the sender address field
1022 in the KRB-SAFE or KRB-PRIV messages. They MUST NOT be used as a
1023 ticket address or in a AP-REQ message. This address type SHOULD only
1024 be used in situations where the sending party knows that the
1025 receiving party supports the address type. This generally means that
1026 directional addresses may only be used when the application protocol
1027 requires their support. Directional addresses are type (3).
1031 Principals are participants in the Kerberos protocol. A "realm"
1032 consists of principals in one administrative domain, served by one
1033 KDC (or one replicated set of KDCs). Each principal name has an
1034 arbitrary number of components, though typical principal names will
1035 only have one or two components. A principal name is meant to be
1036 readable by and meaningful to humans, especially in a realm lacking a
1037 centrally adminstered authorization infrastructure.
1041 Each PrincipalName has NameType indicating what sort of name it is.
1042 The name-type SHOULD be treated as a hint. Ignoring the name type,
1043 no two names can be the same (i.e., at least one of the components,
1044 or the realm, must be different).
1063 Yu Expires: Apr 2007 [Page 19]
1065 Internet-Draft rfc1510ter-03 23 Oct 2006
1067 -- assigned numbers for name types (used in principal names)
1070 -- Name type not known
1071 nt-unknown NameType ::= 0
1072 -- Just the name of the principal as in DCE, or for users
1073 nt-principal NameType ::= 1
1074 -- Service and other unique instance (krbtgt)
1075 nt-srv-inst NameType ::= 2
1076 -- Service with host name as instance (telnet, rcommands)
1077 nt-srv-hst NameType ::= 3
1078 -- Service with host as remaining components
1079 nt-srv-xhst NameType ::= 4
1081 nt-uid NameType ::= 5
1082 -- Encoded X.509 Distingished name [RFC 2253]
1083 nt-x500-principal NameType ::= 6
1084 -- Name in form of SMTP email name (e.g. user@foo.com)
1085 nt-smtp-name NameType ::= 7
1086 -- Enterprise name - may be mapped to principal name
1087 nt-enterprise NameType ::= 10
1090 5.2. Principal Type Definition
1092 The "PrincipalName" type takes a parameter to constrain which string
1095 PrincipalName { StrType } ::= SEQUENCE {
1096 name-type [0] NameType,
1097 -- May have zero elements, or individual elements may be
1098 -- zero-length, but this is NOT RECOMMENDED.
1099 name-string [1] SEQUENCE OF KerberosString (StrType)
1103 The constrained types have their own names.
1106 PrincipalNameIA5 ::= PrincipalName { KerberosStringIA5 }
1108 PrincipalNameExt ::= PrincipalName { KerberosStringExt }
1110 PrincipalNameEither ::= PrincipalName { KerberosString }
1114 hint of the type of name that follows
1117 The "name-string" encodes a sequence of components that form a
1119 Yu Expires: Apr 2007 [Page 20]
1121 Internet-Draft rfc1510ter-03 23 Oct 2006
1123 name, each component encoded as a KerberosString. Taken
1124 together, a PrincipalName and a Realm form a principal
1125 identifier. Most PrincipalNames will have only a few components
1126 (typically one or two).
1128 5.3. Principal Name Reuse
1130 Realm administrators SHOULD use extreme caution when considering
1131 reusing a principal name. A service administrator might explicitly
1132 enter principal names into a local access control list (ACL) for the
1133 service. If such local ACLs exist independently of a centrally
1134 administered authorization infrastructure, realm administrators
1135 SHOULD NOT reuse principal names until confirming that all extant ACL
1136 entries referencing that principal name have been updated. Failure
1137 to perform this check can result in a security vulnerability, as a
1138 new principal can inadvertently inherit unauthorized privileges upon
1139 receiving a reused principal name. An organization whose Kerberos-
1140 authenticated services all use a centrally-adminstered authorization
1141 infrastructure may not need to take these precautions regarding
1142 principal name reuse.
1144 5.4. Best Common Practice Recommendations for the Processing of
1145 Principal Names Consisting of Internationalized Domain Names:
1147 Kerberos principals are often created for the purpose of
1148 authenticating a service located on a machine identified by an domain
1149 name. Unfortunately, once a principal name is created it is
1150 impossible to know the source from which the resulting KerberosString
1151 was derived. It is therefore required that principal names
1152 containing internationalized domain names be processed via the
1153 following procedure:
1155 * ensure that the IDN component must be a valid domain name as per
1156 the rules of IDNA [RFC3490]
1158 * separate the IDN component into labels separated by any of the
1159 Full Stop characters
1161 * fold all Full Stop characters to Full Stop (0x002E)
1163 * for each label (perform all steps):
1165 o if the label begins with an ACE prefix as registered with IANA,
1166 the prefix will be removed and the rest of the label will be
1167 converted from the ACE representation to Unicode [need
1170 o if the label consists of one or more internationalized
1171 characters separately apply the NamePrep and then the SASLprep
1172 string preparation methods.
1175 Yu Expires: Apr 2007 [Page 21]
1177 Internet-Draft rfc1510ter-03 23 Oct 2006
1179 o if the label consists of zero internalizationalized characters,
1180 the label is to be lower-cased
1182 o if the output of the two methods match, continue on to the next
1183 label; otherwise reject the principal name as invalid
1185 * the result of a valid principal name component derived from an IDN
1186 is the joining of the individual string prepared labels separated
1187 by the Full Stop (0x002E)
1191 Realm { StrType } ::= KerberosString (StrType)
1194 RealmIA5 ::= Realm { KerberosStringIA5 }
1197 RealmExt ::= Realm { KerberosStringExt }
1200 RealmEither ::= Realm { KerberosString }
1204 Kerberos realm names are KerberosStrings. Realms MUST NOT contain a
1205 character with the code 0 (the US-ASCII NUL). Most realms will
1206 usually consist of several components separated by periods (.), in
1207 the style of Internet Domain Names, or separated by slashes (/) in
1208 the style of X.500 names.
1210 5.6. Best Common Practice Recommendations for the Processing of
1211 Internationalized Domain-Style Realm Names:
1213 Domain Style Realm names are defined as all realm names whose
1214 components are separated by Full Stop (0x002E) (aka periods, '.') and
1215 contain neither colons, name containing one or more internationalized
1216 characters (not included in US-ASCII), this procedure must be used:
1218 * the realm name must be a valid domain name as per the rules of
1221 * the following string preparation routine must be followed:
1223 - separate the string into components separated by any of the
1224 Full Stop characters
1226 - fold all Full Stop characters to Full Stop (0x002E)
1228 - for each component (perform all steps):
1231 Yu Expires: Apr 2007 [Page 22]
1233 Internet-Draft rfc1510ter-03 23 Oct 2006
1235 o if the component begins with an ACE prefix as registered
1236 with IANA, the prefix will be removed and the rest of the
1237 component will be converted from the ACE representation to
1238 Unicode [need reference]
1240 o if the component consists of one or more internationalized
1241 characters separately apply the NamePrep and SASLprep string
1242 preparation methods.
1244 if the output of the two methods match, continue on to the
1245 next component; otherwise reject the realm name as invalid
1247 - the result of a valid realm name is the joining of the
1248 individual string prepared components separated by the Full
1251 In [KCLAR], the recommendation is that all domain style realm names
1252 be represented in uppercase. This recommendation is modified in the
1253 following manner. All components of domain style realm names not
1254 including internationalized characters should be upper-cased. All
1255 components of domain style realm names including internationalized
1256 characters must be lower-cased. (The lower case representation of
1257 internationalized components is enforced by the requirement that the
1258 output of NamePrep and StringPrep string preparation must be
1261 5.7. Printable Representations of Principal Names
1263 [ perhaps non-normative? ]
1265 The printable form of a principal name consists of the concatenation
1266 of components of the PrincipalName value using the slash character
1267 (/), followed by an at-sign (@), followed by the realm name. Any
1268 occurrence of a backslash (\), slash (/) or at-sign (@) in the
1269 PrincipalName value is quoted by a backslash.
1271 5.8. Ticket-Granting Service Principal
1273 The PrincipalName value corresponding to a ticket-granting service
1274 has two components: the first component is the string "krbtgt", and
1275 the second component is the realm name of the TGS which will accept a
1276 ticket-granting ticket having this service principal name. The realm
1277 name of service always indicates which realm issued the ticket. A
1278 ticket-granting ticket issued by "A.EXAMPLE.COM" which is valid for
1279 obtaining tickets in the same realm would have the following ASN.1
1280 values for its "realm" and "sname" components, respectively:
1287 Yu Expires: Apr 2007 [Page 23]
1289 Internet-Draft rfc1510ter-03 23 Oct 2006
1291 -- Example Realm and PrincipalName for a TGS
1293 tgtRealm1 Realm ::= ia5 : "A.EXAMPLE.COM"
1295 tgtPrinc1 PrincipalName ::= {
1296 name-type nt-srv-inst,
1297 name-string { ia5 : "krbtgt", ia5 : "A.EXAMPLE.COM" }
1300 Its printable representation would be written as
1301 "krbtgt/A.EXAMPLE.COM@A.EXAMPLE.COM".
1303 5.8.1. Cross-Realm TGS Principals
1305 It is possible for a principal in one realm to authenticate to a
1306 service in another realm. A KDC can issue a cross-realm ticket-
1307 granting ticket to allow one of its principals to authenticate to a
1308 service in a foreign realm. For example, the TGS principal
1309 "krbtgt/B.EXAMPLE.COM@A.EXAMPLE.COM" is a principal that permits a
1310 client principal in the realm A.EXAMPLE.COM to authenticate to a
1311 service in the realm B.EXAMPLE.COM. When the KDC for B.EXAMPLE.COM
1312 issues a ticket to a client originating in A.EXAMPLE.COM, the
1313 client's realm name remains "A.EXAMPLE.COM", even though the service
1314 principal will have the realm "B.EXAMPLE.COM".
1316 6. Types Relating to Encryption
1318 Many Kerberos protocol messages contain encrypted encodings of
1319 various data types. Some Kerberos protocol messages also contain
1320 checksums (signatures) of encodings of various types.
1322 6.1. Assigned Numbers for Encryption
1324 Encryption algorithm identifiers and key usages both have assigned
1325 numbers, described in [KCRYPTO].
1329 EType is the integer type for assigned numbers for encryption
1330 algorithms. Defined in [KCRYPTO].
1343 Yu Expires: Apr 2007 [Page 24]
1345 Internet-Draft rfc1510ter-03 23 Oct 2006
1347 -- Assigned numbers denoting encryption mechanisms.
1350 -- assigned numbers for encryption schemes
1351 et-des-cbc-crc EType ::= 1
1352 et-des-cbc-md4 EType ::= 2
1353 et-des-cbc-md5 EType ::= 3
1355 et-des3-cbc-md5 EType ::= 5
1357 et-des3-cbc-sha1 EType ::= 7
1358 et-dsaWithSHA1-CmsOID EType ::= 9
1359 et-md5WithRSAEncryption-CmsOID EType ::= 10
1360 et-sha1WithRSAEncryption-CmsOID EType ::= 11
1361 et-rc2CBC-EnvOID EType ::= 12
1362 et-rsaEncryption-EnvOID EType ::= 13
1363 et-rsaES-OAEP-ENV-OID EType ::= 14
1364 et-des-ede3-cbc-Env-OID EType ::= 15
1365 et-des3-cbc-sha1-kd EType ::= 16
1367 et-aes128-cts-hmac-sha1-96 EType ::= 17
1369 et-aes256-cts-hmac-sha1-96 EType ::= 18
1371 et-rc4-hmac EType ::= 23
1373 et-rc4-hmac-exp EType ::= 24
1374 -- opaque; PacketCable
1375 et-subkey-keymaterial EType ::= 65
1380 KeyUsage is the integer type for assigned numbers for key usages.
1381 Key usage values are inputs to the encryption and decryption
1382 functions described in [KCRYPTO].
1399 Yu Expires: Apr 2007 [Page 25]
1401 Internet-Draft rfc1510ter-03 23 Oct 2006
1403 -- Assigned numbers denoting key usages.
1407 -- Actual identifier names are provisional and subject to
1410 ku-pa-enc-ts KeyUsage ::= 1
1411 ku-Ticket KeyUsage ::= 2
1412 ku-EncASRepPart KeyUsage ::= 3
1413 ku-TGSReqAuthData-sesskey KeyUsage ::= 4
1414 ku-TGSReqAuthData-subkey KeyUsage ::= 5
1415 ku-pa-TGSReq-cksum KeyUsage ::= 6
1416 ku-pa-TGSReq-authenticator KeyUsage ::= 7
1417 ku-EncTGSRepPart-sesskey KeyUsage ::= 8
1418 ku-EncTGSRepPart-subkey KeyUsage ::= 9
1419 ku-Authenticator-cksum KeyUsage ::= 10
1420 ku-APReq-authenticator KeyUsage ::= 11
1421 ku-EncAPRepPart KeyUsage ::= 12
1422 ku-EncKrbPrivPart KeyUsage ::= 13
1423 ku-EncKrbCredPart KeyUsage ::= 14
1424 ku-KrbSafe-cksum KeyUsage ::= 15
1425 ku-ad-KDCIssued-cksum KeyUsage ::= 19
1428 -- The following numbers are provisional...
1429 -- conflicts may exist elsewhere.
1430 ku-Ticket-cksum KeyUsage ::= 29
1431 ku-ASReq-cksum KeyUsage ::= 30
1432 ku-TGSReq-cksum KeyUsage ::= 31
1433 ku-ASRep-cksum KeyUsage ::= 32
1434 ku-TGSRep-cksum KeyUsage ::= 33
1435 ku-APReq-cksum KeyUsage ::= 34
1436 ku-APRep-cksum KeyUsage ::= 35
1437 ku-KrbCred-cksum KeyUsage ::= 36
1438 ku-KrbError-cksum KeyUsage ::= 37
1439 ku-KDCRep-cksum KeyUsage ::= 38
1441 ku-kg-acceptor-seal KeyUsage ::= 22
1442 ku-kg-acceptor-sign KeyUsage ::= 23
1443 ku-kg-intiator-seal KeyUsage ::= 24
1444 ku-kg-intiator-sign KeyUsage ::= 25
1446 -- KeyUsage values 25..27 used by hardware preauth?
1449 ku-kink-encrypt KeyUsage ::= 39
1450 ku-kink-cksum KeyUsage ::= 40
1455 Yu Expires: Apr 2007 [Page 26]
1457 Internet-Draft rfc1510ter-03 23 Oct 2006
1459 6.2. Which Key to Use
1461 -- KeyToUse identifies which key is to be used to encrypt or
1462 -- sign a given value.
1464 -- Values of KeyToUse are never actually transmitted over the
1465 -- wire, or even used directly by the implementation in any
1466 -- way, as key usages are; it exists primarily to identify
1467 -- which key gets used for what purpose. Thus, the specific
1468 -- numeric values associated with this type are irrelevant.
1469 KeyToUse ::= ENUMERATED {
1472 -- server long term key
1474 -- client long term key
1476 -- key selected by KDC for encryption of a KDC-REP
1478 -- session key from ticket
1480 -- subsession key negotiated via AP-REQ/AP-REP
1488 The "EncryptionKey" type holds an encryption key.
1490 EncryptionKey ::= SEQUENCE {
1492 keyvalue [1] OCTET STRING
1497 This "EType" identifies the encryption algorithm, described in
1501 Contains the actual key.
1505 The "EncryptedData" type contains the encryption of another data
1506 type. The recipient uses fields within EncryptedData to determine
1507 which key to use for decryption.
1511 Yu Expires: Apr 2007 [Page 27]
1513 Internet-Draft rfc1510ter-03 23 Oct 2006
1516 -- "Type" specifies which ASN.1 type is encrypted to the
1517 -- ciphertext in the EncryptedData. "Keys" specifies a set of
1518 -- keys of which one key may be used to encrypt the data.
1519 -- "KeyUsages" specifies a set of key usages, one of which may
1520 -- be used to encrypt.
1522 -- None of the parameters is transmitted over the wire.
1524 Type, KeyToUse:Keys, KeyUsage:KeyUsages
1527 kvno [1] UInt32 OPTIONAL,
1528 cipher [2] OCTET STRING (CONSTRAINED BY {
1529 -- must be encryption of --
1530 OCTET STRING (CONTAINING Type),
1531 -- with one of the keys -- KeyToUse:Keys,
1532 -- with key usage being one of --
1541 Advisory parameter indicating which key usage to use when
1542 encrypting the ciphertext. If "KeyUsages" indicate multiple
1543 "KeyUsage" values, the detailed description of the containing
1544 message will indicate which key to use under which conditions.
1547 Advisory parameter indicating the ASN.1 type whose DER encoding
1548 is the plaintext encrypted into the EncryptedData.
1551 Advisory parameter indicating which key to use to perform the
1552 encryption. If "Keys" indicate multiple "KeyToUse" values, the
1553 detailed description of the containing message will indicate
1554 which key to use under which conditions.
1557 Advisory parameter indicating which "KeyUsage" value is used to
1558 encrypt. If "KeyUsages" indicates multiple "KeyUsage" values,
1559 the detailed description of the containing message will indicate
1560 which key usage to use under which conditions.
1564 Several types contain checksums (actually signatures) of data.
1567 Yu Expires: Apr 2007 [Page 28]
1569 Internet-Draft rfc1510ter-03 23 Oct 2006
1573 -- The parameters specify which key to use to produce the
1574 -- signature, as well as which key usage to use. The
1575 -- parameters are not actually sent over the wire.
1577 KeyToUse:Keys, KeyUsage:KeyUsages
1579 cksumtype [0] CksumType,
1580 checksum [1] OCTET STRING (CONSTRAINED BY {
1581 -- signed using one of the keys --
1583 -- with key usage being one of --
1590 Integer type for assigned numbers for signature algorithms.
1591 Defined in [KCRYPTO]
1600 Signature algorithm used to produce the signature.
1603 The actual checksum.
1607 ChecksumOf is similar to "Checksum", but specifies which type is
1610 -- a Checksum that must contain the checksum
1611 -- of a particular type
1613 Type, KeyToUse:Keys, KeyUsage:KeyUsages
1614 } ::= Checksum { Keys, KeyUsages } (WITH COMPONENTS {
1616 checksum (CONSTRAINED BY {
1617 -- must be checksum of --
1618 OCTET STRING (CONTAINING Type)
1623 Yu Expires: Apr 2007 [Page 29]
1625 Internet-Draft rfc1510ter-03 23 Oct 2006
1628 Indicates the ASN.1 type whose DER encoding is signed.
1632 Signed is similar to "ChecksumOf", but contains an actual instance of
1633 the type being signed in addition to the signature.
1635 -- parameterized type for wrapping authenticated plaintext
1637 InnerType, KeyToUse:Keys, KeyUsage:KeyUsages
1639 cksum [0] ChecksumOf {
1640 InnerType, Keys, KeyUsages
1642 inner [1] InnerType,
1649 [ A large number of items described here are duplicated in the
1650 sections describing KDC-REQ processing. Should find a way to avoid
1653 A ticket binds a principal name to a session key. The important
1654 fields of a ticket are in the encrypted part.
1656 -- Encrypted part of ticket
1657 EncTicketPart ::= CHOICE {
1658 rfc1510 EncTicketPart1510,
1659 ext EncTicketPartExt
1663 EncTicketPart1510 ::= [APPLICATION 3] SEQUENCE {
1664 flags [0] TicketFlags,
1665 key [1] EncryptionKey,
1666 crealm [2] RealmIA5,
1667 cname [3] PrincipalNameIA5,
1668 transited [4] TransitedEncoding,
1669 authtime [5] KerberosTime,
1670 starttime [6] KerberosTime OPTIONAL,
1671 endtime [7] KerberosTime,
1672 renew-till [8] KerberosTime OPTIONAL,
1673 caddr [9] HostAddresses OPTIONAL,
1674 authorization-data [10] AuthorizationData OPTIONAL
1679 Yu Expires: Apr 2007 [Page 30]
1681 Internet-Draft rfc1510ter-03 23 Oct 2006
1683 EncTicketPartExt ::= [APPLICATION 5] SEQUENCE {
1684 flags [0] TicketFlags,
1685 key [1] EncryptionKey,
1686 crealm [2] RealmExt,
1687 cname [3] PrincipalNameExt,
1688 transited [4] TransitedEncoding,
1689 authtime [5] KerberosTime,
1690 starttime [6] KerberosTime OPTIONAL,
1691 endtime [7] KerberosTime,
1692 renew-till [8] KerberosTime OPTIONAL,
1693 caddr [9] HostAddresses OPTIONAL,
1694 authorization-data [10] AuthorizationData OPTIONAL,
1700 This field contains the client's realm.
1703 This field contains the client's name.
1706 This field lists the network addresses (if absent, all addresses
1707 are permitted) from which the ticket is valid.
1709 Descriptions of the other fields appear in the following sections.
1713 Three of the ticket timestamps may be requested from the KDC. The
1714 timestamps may differ from those requested, depending on site policy.
1717 The time at which the client authenticated, as recorded by the
1721 The earliest time when the ticket is valid. If not present, the
1722 ticket is valid starting at the authtime. This is requested as
1723 the "from" field of KDC-REQ-BODY.
1726 This time is requested in the "till" field of KDC-REQ-BODY.
1727 Contains the time after which the ticket will not be honored
1728 (its expiration time). Note that individual services MAY place
1729 their own limits on the life of a ticket and MAY reject tickets
1730 which have not yet expired. As such, this is really an upper
1731 bound on the expiration time for the ticket.
1735 Yu Expires: Apr 2007 [Page 31]
1737 Internet-Draft rfc1510ter-03 23 Oct 2006
1740 This time is requested in the "rtime" field of KDC-REQ-BODY. It
1741 is only present in tickets that have the "renewable" flag set in
1742 the flags field. It indicates the maximum endtime that may be
1743 included in a renewal. It can be thought of as the absolute
1744 expiration time for the ticket, including all renewals.
1748 A number of flags may be set in the ticket, further defining some of
1749 its capabilities. Some of these flags map to flags in a KDC request.
1751 TicketFlags ::= KerberosFlags { TicketFlagsBits }
1753 TicketFlagsBits ::= BIT STRING {
1766 transited-policy-checked (12),
1767 ok-as-delegate (13),
1769 cksummed-ticket (15)
1773 7.2.1. Flags Relating to Initial Ticket Acquisition
1775 [ adapted KCLAR 2.1. ]
1777 Several flags indicate the details of how the initial ticket was
1781 The "initial" flag indicates that a ticket was issued using the
1782 AS protocol, rather than issued based on a ticket-granting
1783 ticket. Application servers (e.g., a password-changing program)
1784 requiring a client's definite knowledge of its secret key can
1785 insist that this flag be set in any tickets they accept, thus
1786 being assured that the client's key was recently presented to
1787 the application client.
1791 Yu Expires: Apr 2007 [Page 32]
1793 Internet-Draft rfc1510ter-03 23 Oct 2006
1796 The "pre-authent" flag indicates that some sort of pre-
1797 authentication was used during the AS exchange.
1800 The "hw-authent" flag indicates that some sort of hardware-based
1801 pre-authentication occurred during the AS exchange.
1803 Both the "pre-authent" and the "hw-authent" flags may be present with
1804 or without the "initial" flag; such tickets with the "initial" flag
1805 clear are ones which are derived from initial tickets with the "pre-
1806 authent" or "hw-authent" flags set.
1808 7.2.2. Invalid Tickets
1812 The "invalid" flag indicates that a ticket is invalid. Application
1813 servers MUST reject tickets which have this flag set. A postdated
1814 ticket will be issued in this form. Invalid tickets MUST be
1815 validated by the KDC before use, by presenting them to the KDC in a
1816 TGS request with the "validate" option specified. The KDC will only
1817 validate tickets after their starttime has passed. The validation is
1818 required so that postdated tickets which have been stolen before
1819 their starttime can be rendered permanently invalid (through a hot-
1820 list mechanism -- see Section 8.3.2.4).
1822 7.2.3. OK as Delegate
1826 The "ok-as-delegate" flag provides a way for a KDC to communicate
1827 local realm policy to a client regarding whether the service for
1828 which the ticket is issued is trusted to accept delegated
1829 credentials. For some applications, a client may need to delegate
1830 credentials to a service to act on its behalf in contacting other
1831 services. The ability of a client to obtain a service ticket for a
1832 service conveys no information to the client about whether the
1833 service should be trusted to accept delegated credentials.
1835 The copy of the ticket flags visible to the client may have the "ok-
1836 as-delegate" flag set to indicate to the client that the service
1837 specified in the ticket has been determined by policy of the realm to
1838 be a suitable recipient of delegation. A client can use the presence
1839 of this flag to help it make a decision whether to delegate
1840 credentials (either grant a proxy or a forwarded ticket-granting
1841 ticket) to this service. It is acceptable to ignore the value of
1842 this flag. When setting this flag, an administrator should consider
1843 the security and placement of the server on which the service will
1844 run, as well as whether the service requires the use of delegated
1847 Yu Expires: Apr 2007 [Page 33]
1849 Internet-Draft rfc1510ter-03 23 Oct 2006
1851 7.2.4. Renewable Tickets
1853 [ adapted KCLAR 2.3. ]
1855 The "renewable" flag indicates whether the ticket may be renewed.
1857 Renewable tickets can be used to mitigate the consequences of ticket
1858 theft. Applications may desire to hold credentials which can be
1859 valid for long periods of time. However, this can expose the
1860 credentials to potential theft for equally long periods, and those
1861 stolen credentials would be valid until the expiration time of the
1862 ticket(s). Simply using short-lived tickets and obtaining new ones
1863 periodically would require the application to have long-term access
1864 to the client's secret key, which is an even greater risk.
1866 Renewable tickets have two "expiration times": the first is when the
1867 current instance of the ticket expires, and the second is the latest
1868 permissible value for an individual expiration time. An application
1869 client must periodically present an unexpired renewable ticket to the
1870 KDC, setting the "renew" option in the KDC request. The KDC will
1871 issue a new ticket with a new session key and a later expiration
1872 time. All other fields of the ticket are left unmodified by the
1873 renewal process. When the latest permissible expiration time
1874 arrives, the ticket expires permanently. At each renewal, the KDC
1875 MAY consult a hot-list to determine if the ticket had been reported
1876 stolen since its last renewal; it will refuse to renew such stolen
1877 tickets, and thus the usable lifetime of stolen tickets is reduced.
1879 The "renewable" flag in a ticket is normally only interpreted by the
1880 ticket-granting service. It can usually be ignored by application
1881 servers. However, some particularly careful application servers MAY
1882 disallow renewable tickets.
1884 If a renewable ticket is not renewed by its expiration time, the KDC
1885 will not renew the ticket. The "renewable" flag is clear by default,
1886 but a client can request it be set by setting the "renewable" option
1887 in the AS-REQ message. If it is set, then the "renew-till" field in
1888 the ticket contains the time after which the ticket may not be
1891 7.2.5. Postdated Tickets
1894 indicates a ticket which has been postdated
1897 indicates that postdated tickets may be issued based on this
1903 Yu Expires: Apr 2007 [Page 34]
1905 Internet-Draft rfc1510ter-03 23 Oct 2006
1907 Applications may occasionally need to obtain tickets for use much
1908 later, e.g., a batch submission system would need tickets to be valid
1909 at the time the batch job is serviced. However, it is dangerous to
1910 hold valid tickets in a batch queue, since they will be on-line
1911 longer and more prone to theft. Postdated tickets provide a way to
1912 obtain these tickets from the KDC at job submission time, but to
1913 leave them "dormant" until they are activated and validated by a
1914 further request of the KDC. If a ticket theft were reported in the
1915 interim, the KDC would refuse to validate the ticket, and the thief
1918 The "may-postdate" flag in a ticket is normally only interpreted by
1919 the TGS. It can be ignored by application servers. This flag MUST
1920 be set in a ticket-granting ticket in order for the KDC to issue a
1921 postdated ticket based on the presented ticket. It is reset by
1922 default; it MAY be requested by a client by setting the "allow-
1923 postdate" option in the AS-REQ [?also TGS-REQ?] message. This flag
1924 does not allow a client to obtain a postdated ticket-granting ticket;
1925 postdated ticket-granting tickets can only by obtained by requesting
1926 the postdating in the AS-REQ message. The life (endtime minus
1927 starttime) of a postdated ticket will be the remaining life of the
1928 ticket-granting ticket at the time of the request, unless the
1929 "renewable" option is also set, in which case it can be the full life
1930 (endtime minus starttime) of the ticket-granting ticket. The KDC MAY
1931 limit how far in the future a ticket may be postdated.
1933 The "postdated" flag indicates that a ticket has been postdated. The
1934 application server can check the authtime field in the ticket to see
1935 when the original authentication occurred. Some services MAY choose
1936 to reject postdated tickets, or they may only accept them within a
1937 certain period after the original authentication. When the KDC
1938 issues a "postdated" ticket, it will also be marked as "invalid", so
1939 that the application client MUST present the ticket to the KDC for
1940 validation before use.
1942 7.2.6. Proxiable and Proxy Tickets
1945 indicates a proxy ticket
1948 indicates that proxy tickets may be issued based on this ticket
1952 It may be necessary for a principal to allow a service to perform an
1953 operation on its behalf. The service must be able to take on the
1954 identity of the client, but only for a particular purpose. A
1955 principal can allow a service to take on the principal's identity for
1956 a particular purpose by granting it a proxy.
1959 Yu Expires: Apr 2007 [Page 35]
1961 Internet-Draft rfc1510ter-03 23 Oct 2006
1963 The process of granting a proxy using the "proxy" and "proxiable"
1964 flags is used to provide credentials for use with specific services.
1965 Though conceptually also a proxy, users wishing to delegate their
1966 identity in a form usable for all purposes MUST use the ticket
1967 forwarding mechanism described in the next section to forward a
1968 ticket-granting ticket.
1970 The "proxiable" flag in a ticket is normally only interpreted by the
1971 ticket-granting service. It can be ignored by application servers.
1972 When set, this flag tells the ticket-granting server that it is OK to
1973 issue a new ticket (but not a ticket-granting ticket) with a
1974 different network address based on this ticket. This flag is set if
1975 requested by the client on initial authentication. By default, the
1976 client will request that it be set when requesting a ticket-granting
1977 ticket, and reset when requesting any other ticket.
1979 This flag allows a client to pass a proxy to a server to perform a
1980 remote request on its behalf (e.g. a print service client can give
1981 the print server a proxy to access the client's files on a particular
1982 file server in order to satisfy a print request).
1984 In order to complicate the use of stolen credentials, Kerberos
1985 tickets may contain a set of network addresses from which they are
1986 valid. When granting a proxy, the client MUST specify the new
1987 network address from which the proxy is to be used, or indicate that
1988 the proxy is to be issued for use from any address.
1990 The "proxy" flag is set in a ticket by the TGS when it issues a proxy
1991 ticket. Application servers MAY check this flag and at their option
1992 they MAY require additional authentication from the agent presenting
1993 the proxy in order to provide an audit trail.
1995 7.2.7. Forwarded and Forwardable Tickets
1998 indicates a forwarded ticket
2001 indicates that forwarded tickets may be issued based on this
2006 Authentication forwarding is an instance of a proxy where the service
2007 that is granted is complete use of the client's identity. An example
2008 where it might be used is when a user logs in to a remote system and
2009 wants authentication to work from that system as if the login were
2012 The "forwardable" flag in a ticket is normally only interpreted by
2013 the ticket-granting service. It can be ignored by application
2015 Yu Expires: Apr 2007 [Page 36]
2017 Internet-Draft rfc1510ter-03 23 Oct 2006
2019 servers. The "forwardable" flag has an interpretation similar to
2020 that of the "proxiable" flag, except ticket-granting tickets may also
2021 be issued with different network addresses. This flag is reset by
2022 default, but users MAY request that it be set by setting the
2023 "forwardable" option in the AS request when they request their
2024 initial ticket-granting ticket.
2026 This flag allows for authentication forwarding without requiring the
2027 user to enter a password again. If the flag is not set, then
2028 authentication forwarding is not permitted, but the same result can
2029 still be achieved if the user engages in the AS exchange specifying
2030 the requested network addresses and supplies a password.
2032 The "forwarded" flag is set by the TGS when a client presents a
2033 ticket with the "forwardable" flag set and requests a forwarded
2034 ticket by specifying the "forwarded" KDC option and supplying a set
2035 of addresses for the new ticket. It is also set in all tickets
2036 issued based on tickets with the "forwarded" flag set. Application
2037 servers may choose to process "forwarded" tickets differently than
2038 non-forwarded tickets.
2040 If addressless tickets are forwarded from one system to another,
2041 clients SHOULD still use this option to obtain a new TGT in order to
2042 have different session keys on the different systems.
2044 7.3. Transited Realms
2046 [ KCLAR 2.7., plus new stuff ]
2048 7.4. Authorization Data
2054 AuthorizationData ::= SEQUENCE OF SEQUENCE {
2056 ad-data [1] OCTET STRING
2061 This field identifies the contents of the ad-data. All negative
2062 values are reserved for local use. Non-negative values are
2063 reserved for registered use.
2066 This field contains authorization data to be interpreted
2067 according to the value of the corresponding ad-type field.
2071 Yu Expires: Apr 2007 [Page 37]
2073 Internet-Draft rfc1510ter-03 23 Oct 2006
2075 Each sequence of ADType and OCTET STRING is referred to as an
2076 authorization element. Elements MAY be application specific,
2077 however, there is a common set of recursive elements that should be
2078 understood by all implementations. These elements contain other
2079 AuthorizationData, and the interpretation of the encapsulating
2080 element determines which enclosed elements must be interpreted, and
2081 which may be ignored.
2083 Depending on the meaning of the encapsulating element, the
2084 encapsulated AuthorizationData may be ignored, interpreted as issued
2085 directly by the KDC, or be stored in a separate plaintext part of the
2086 ticket. The types of the encapsulating elements are specified as
2087 part of the Kerberos protocol because behavior based on these
2088 container elements should be understood across implementations, while
2089 other elements need only be understood by the applications which they
2092 Authorization data elements are considered critical if present in a
2093 ticket or authenticator. Unless encapsulated in a known
2094 authorization data element modifying the criticality of the elements
2095 it contains, an application server MUST reject the authentication of
2096 a client whose AP-REQ or ticket contains an unrecognized
2097 authorization data element. Authorization data is intended to
2098 restrict the use of a ticket. If the service cannot determine
2099 whether it is the target of a restriction, a security weakness may
2100 exist if the ticket can be used for that service. Authorization
2101 elements that are truly optional can be enclosed in AD-IF-RELEVANT
2105 ad-type | contents of ad-data
2106 ________|_______________________________________
2107 1 | DER encoding of AD-IF-RELEVANT
2108 4 | DER encoding of AD-KDCIssued
2109 5 | DER encoding of AD-AND-OR
2110 8 | DER encoding of AD-MANDATORY-FOR-KDC
2114 7.4.1. AD-IF-RELEVANT
2116 ad-if-relevant ADType ::= int32 : 1
2118 -- Encapsulates another AuthorizationData.
2119 -- Intended for application servers; receiving application servers
2121 AD-IF-RELEVANT ::= AuthorizationData
2123 AD elements encapsulated within the if-relevant element are intended
2124 for interpretation only by application servers that understand the
2125 particular ad-type of the embedded element. Application servers that
2127 Yu Expires: Apr 2007 [Page 38]
2129 Internet-Draft rfc1510ter-03 23 Oct 2006
2131 do not understand the type of an element embedded within the if-
2132 relevant element MAY ignore the uninterpretable element. This element
2133 promotes interoperability across implementations which may have local
2134 extensions for authorization. The ad-type for AD-IF-RELEVANT is (1).
2138 -- KDC-issued privilege attributes
2139 ad-kdcissued ADType ::= int32 : 4
2141 AD-KDCIssued ::= SEQUENCE {
2142 ad-checksum [0] ChecksumOf {
2143 AuthorizationData, { key-session },
2144 { ku-ad-KDCIssued-cksum }},
2145 i-realm [1] Realm OPTIONAL,
2146 i-sname [2] PrincipalName OPTIONAL,
2147 elements [3] AuthorizationData
2152 A cryptographic checksum computed over the DER encoding of the
2153 AuthorizationData in the "elements" field, keyed with the
2154 session key. Its checksumtype is the mandatory checksum type
2155 for the encryption type of the session key, and its key usage
2159 The name of the issuing principal if different from the KDC
2160 itself. This field would be used when the KDC can verify the
2161 authenticity of elements signed by the issuing principal and it
2162 allows this KDC to notify the application server of the validity
2166 AuthorizationData issued by the KDC.
2168 The KDC-issued ad-data field is intended to provide a means for
2169 Kerberos credentials to embed within themselves privilege attributes
2170 and other mechanisms for positive authorization, amplifying the
2171 privileges of the principal beyond what it would have if using
2172 credentials without such an authorization-data element.
2174 This amplification of privileges cannot be provided without this
2175 element because the definition of the authorization-data field allows
2176 elements to be added at will by the bearer of a TGT at the time that
2177 they request service tickets and elements may also be added to a
2178 delegated ticket by inclusion in the authenticator.
2180 For KDC-issued elements this is prevented because the elements are
2181 signed by the KDC by including a checksum encrypted using the
2183 Yu Expires: Apr 2007 [Page 39]
2185 Internet-Draft rfc1510ter-03 23 Oct 2006
2187 server's key (the same key used to encrypt the ticket -- or a key
2188 derived from that key). AuthorizationData encapsulated with in the
2189 AD-KDCIssued element MUST be ignored by the application server if
2190 this "signature" is not present. Further, AuthorizationData
2191 encapsulated within this element from a ticket-granting ticket MAY be
2192 interpreted by the KDC, and used as a basis according to policy for
2193 including new signed elements within derivative tickets, but they
2194 will not be copied to a derivative ticket directly. If they are
2195 copied directly to a derivative ticket by a KDC that is not aware of
2196 this element, the signature will not be correct for the application
2197 ticket elements, and the field will be ignored by the application
2200 This element and the elements it encapsulates MAY be safely ignored
2201 by applications, application servers, and KDCs that do not implement
2204 The ad-type for AD-KDC-ISSUED is (4).
2208 ad-and-or ADType ::= int32 : 5
2210 AD-AND-OR ::= SEQUENCE {
2211 condition-count [0] Int32,
2212 elements [1] AuthorizationData
2216 When restrictive AD elements are encapsulated within the and-or
2217 element, the and-or element is considered satisfied if and only if at
2218 least the number of encapsulated elements specified in condition-
2219 count are satisfied. Therefore, this element MAY be used to
2220 implement an "or" operation by setting the condition-count field to
2221 1, and it MAY specify an "and" operation by setting the condition
2222 count to the number of embedded elements. Application servers that do
2223 not implement this element MUST reject tickets that contain
2224 authorization data elements of this type.
2226 The ad-type for AD-AND-OR is (5).
2228 7.4.4. AD-MANDATORY-FOR-KDC
2230 -- KDCs MUST interpret any AuthorizationData wrapped in this.
2231 ad-mandatory-for-kdc ADType ::= int32 : 8
2232 AD-MANDATORY-FOR-KDC ::= AuthorizationData
2234 AD elements encapsulated within the mandatory-for-kdc element are to
2235 be interpreted by the KDC. KDCs that do not understand the type of
2236 an element embedded within the mandatory-for-kdc element MUST reject
2239 Yu Expires: Apr 2007 [Page 40]
2241 Internet-Draft rfc1510ter-03 23 Oct 2006
2243 The ad-type for AD-MANDATORY-FOR-KDC is (8).
2245 7.5. Encrypted Part of Ticket
2247 The complete definition of the encrypted part is
2249 -- Encrypted part of ticket
2250 EncTicketPart ::= CHOICE {
2251 rfc1510 EncTicketPart1510,
2252 ext EncTicketPartExt
2256 The encrypted part of the backwards-compatibility form of a ticket
2259 EncTicketPart1510 ::= [APPLICATION 3] SEQUENCE {
2260 flags [0] TicketFlags,
2261 key [1] EncryptionKey,
2262 crealm [2] RealmIA5,
2263 cname [3] PrincipalNameIA5,
2264 transited [4] TransitedEncoding,
2265 authtime [5] KerberosTime,
2266 starttime [6] KerberosTime OPTIONAL,
2267 endtime [7] KerberosTime,
2268 renew-till [8] KerberosTime OPTIONAL,
2269 caddr [9] HostAddresses OPTIONAL,
2270 authorization-data [10] AuthorizationData OPTIONAL
2273 The encrypted part of the extensible form of a ticket is:
2275 EncTicketPartExt ::= [APPLICATION 5] SEQUENCE {
2276 flags [0] TicketFlags,
2277 key [1] EncryptionKey,
2278 crealm [2] RealmExt,
2279 cname [3] PrincipalNameExt,
2280 transited [4] TransitedEncoding,
2281 authtime [5] KerberosTime,
2282 starttime [6] KerberosTime OPTIONAL,
2283 endtime [7] KerberosTime,
2284 renew-till [8] KerberosTime OPTIONAL,
2285 caddr [9] HostAddresses OPTIONAL,
2286 authorization-data [10] AuthorizationData OPTIONAL,
2295 Yu Expires: Apr 2007 [Page 41]
2297 Internet-Draft rfc1510ter-03 23 Oct 2006
2299 7.6. Cleartext Part of Ticket
2301 The complete definition of Ticket is:
2309 The "sname" field provides the name of the target service principal
2310 in cleartext, as a hint to aid the server in choosing the correct
2313 The backwards-compatibility form of Ticket is:
2315 Ticket1510 ::= [APPLICATION 1] SEQUENCE {
2316 tkt-vno [0] INTEGER (5),
2318 sname [2] PrincipalNameIA5,
2319 enc-part [3] EncryptedData {
2320 EncTicketPart1510, { key-server }, { ku-Ticket }
2324 The extensible form of Ticket is:
2326 TicketExt ::= [APPLICATION 4] Signed {
2327 [APPLICATION 4] SEQUENCE {
2328 tkt-vno [0] INTEGER (5),
2330 sname [2] PrincipalNameExt,
2331 enc-part [3] EncryptedData {
2332 EncTicketPartExt, { key-server }, { ku-Ticket }
2335 extensions [4] TicketExtensions OPTIONAL,
2338 { key-ticket }, { ku-Ticket-cksum }
2342 TicketExtensions, which may only be present in the extensible form of
2343 Ticket, are a cleartext typed hole for extension use.
2344 AuthorizationData already provides an encrypted typed hole.
2351 Yu Expires: Apr 2007 [Page 42]
2353 Internet-Draft rfc1510ter-03 23 Oct 2006
2357 -- ticket extensions: for TicketExt only
2358 TicketExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
2360 te-data [1] OCTET STRING
2364 A client will only receive an extensible Ticket if the application
2365 server supports extensibility.
2367 8. Credential Acquisition
2369 There are two exchanges that can be used for acquiring credentials:
2370 the AS exchange and the TGS exchange. These exchanges have many
2371 similarities, and this document describes them in parallel, noting
2372 which behaviors are specific to one type of exchange. The AS request
2373 (AS-REQ) and TGS request (TGS-REQ) are both forms of KDC requests
2374 (KDC-REQ). Likewise, the AS reply (AS-REP) and TGS reply (TGS-REP)
2375 are forms of KDC replies (KDC-REP).
2377 The credentials acquisition protocol operates over specific
2378 transports. Additionally, specific methods exist to permit a client
2379 to discover the KDC host with which to communicate.
2383 The KDC-REQ has a large number of fields in common between the RFC
2384 1510 and the extensible versions. The KDC-REQ type itself is never
2385 directly encoded; it is always a part of a AS-REQ or a TGS-REQ.
2387 KDC-REQ-1510 ::= SEQUENCE {
2388 -- NOTE: first tag is [1], not [0]
2389 pvno [1] INTEGER (5),
2390 msg-type [2] INTEGER ( 10 -- AS-REQ --
2391 | 12 -- TGS-REQ -- ),
2392 padata [3] SEQUENCE OF PA-DATA OPTIONAL,
2393 req-body [4] KDC-REQ-BODY-1510
2397 KDC-REQ-EXT ::= SEQUENCE {
2398 pvno [1] INTEGER (5),
2399 msg-type [2] INTEGER ( 6 -- AS-REQ --
2400 | 8 -- TGS-REQ -- ),
2401 padata [3] SEQUENCE (SIZE (1..MAX)) OF PA-DATA OPTIONAL,
2402 req-body [4] KDC-REQ-BODY-EXT,
2407 Yu Expires: Apr 2007 [Page 43]
2409 Internet-Draft rfc1510ter-03 23 Oct 2006
2411 KDC-REQ-BODY-1510 ::= SEQUENCE {
2412 kdc-options [0] KDCOptions,
2413 cname [1] PrincipalNameIA5 OPTIONAL
2414 -- Used only in AS-REQ --,
2417 -- Server's realm; also client's in AS-REQ --,
2419 sname [3] PrincipalNameIA5 OPTIONAL,
2420 from [4] KerberosTime OPTIONAL,
2421 till [5] KerberosTime,
2422 rtime [6] KerberosTime OPTIONAL,
2424 etype [8] SEQUENCE OF EType
2425 -- in preference order --,
2427 addresses [9] HostAddresses OPTIONAL,
2428 enc-authorization-data [10] EncryptedData {
2429 AuthorizationData, { key-session | key-subsession },
2430 { ku-TGSReqAuthData-subkey |
2431 ku-TGSReqAuthData-sesskey }
2434 additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
2435 -- NOTE: not empty --
2463 Yu Expires: Apr 2007 [Page 44]
2465 Internet-Draft rfc1510ter-03 23 Oct 2006
2467 KDC-REQ-BODY-EXT ::= SEQUENCE {
2468 kdc-options [0] KDCOptions,
2469 cname [1] PrincipalName OPTIONAL
2470 -- Used only in AS-REQ --,
2473 -- Server's realm; also client's in AS-REQ --,
2475 sname [3] PrincipalName OPTIONAL,
2476 from [4] KerberosTime OPTIONAL,
2477 till [5] KerberosTime OPTIONAL
2478 -- was required in rfc1510;
2479 -- still required for compat versions
2482 rtime [6] KerberosTime OPTIONAL,
2484 etype [8] SEQUENCE OF EType
2485 -- in preference order --,
2487 addresses [9] HostAddresses OPTIONAL,
2488 enc-authorization-data [10] EncryptedData {
2489 AuthorizationData, { key-session | key-subsession },
2490 { ku-TGSReqAuthData-subkey |
2491 ku-TGSReqAuthData-sesskey }
2494 additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
2495 -- NOTE: not empty --,
2497 lang-tags [5] SEQUENCE (SIZE (1..MAX)) OF
2503 Many fields of KDC-REQ-BODY correspond directly to fields of an
2504 EncTicketPart. The KDC copies most of them unchanged, provided that
2505 the requested values meet site policy.
2508 These flags do not correspond directly to "flags" in
2512 This field is copied to the "cname" field in EncTicketPart. The
2513 "cname" field is required in an AS-REQ; the client places its
2514 own name here. In a TGS-REQ, the "cname" in the ticket in the
2515 AP-REQ takes precedence.
2519 Yu Expires: Apr 2007 [Page 45]
2521 Internet-Draft rfc1510ter-03 23 Oct 2006
2524 This field is the server's realm, and also holds the client's
2528 The "sname" field indicates the server's name. It may be absent
2529 in a TGS-REQ which requests user-to-user authentication, in
2530 which case the "sname" of the issued ticket will be taken from
2531 the included additional ticket.
2533 The "from", "till", and "rtime" fields correspond to the "starttime",
2534 "endtime", and "renew-till" fields of EncTicketPart.
2537 This field corresponds to the "caddr" field of EncTicketPart.
2539 enc-authorization-data
2540 For TGS-REQ, this field contains authorization data encrypted
2541 using either the TGT session key or the AP-REQ subsession key;
2542 the KDC may copy these into the "authorization-data" field of
2543 EncTicketPart if policy permits.
2546 Only present in the extensible messages. Specifies the set of
2547 languages which the client is willing to accept in error
2550 KDC options used in a KDC-REQ are:
2575 Yu Expires: Apr 2007 [Page 46]
2577 Internet-Draft rfc1510ter-03 23 Oct 2006
2579 KDCOptions ::= KerberosFlags { KDCOptionsBits }
2581 KDCOptionsBits ::= BIT STRING {
2596 requestanonymous (14),
2598 disable-transited-check (26),
2600 enc-tkt-in-skey (28),
2603 -- XXX need "need ticket1" flag?
2606 Different options apply to different phases of KDC-REQ processing.
2608 The backwards-compatibility form of a KDC-REQ is:
2610 KDC-REQ-1510 ::= SEQUENCE {
2611 -- NOTE: first tag is [1], not [0]
2612 pvno [1] INTEGER (5),
2613 msg-type [2] INTEGER ( 10 -- AS-REQ --
2614 | 12 -- TGS-REQ -- ),
2615 padata [3] SEQUENCE OF PA-DATA OPTIONAL,
2616 req-body [4] KDC-REQ-BODY-1510
2619 The extensible form of a KDC-REQ is:
2621 KDC-REQ-EXT ::= SEQUENCE {
2622 pvno [1] INTEGER (5),
2623 msg-type [2] INTEGER ( 6 -- AS-REQ --
2624 | 8 -- TGS-REQ -- ),
2625 padata [3] SEQUENCE (SIZE (1..MAX)) OF PA-DATA OPTIONAL,
2626 req-body [4] KDC-REQ-BODY-EXT,
2631 Yu Expires: Apr 2007 [Page 47]
2633 Internet-Draft rfc1510ter-03 23 Oct 2006
2635 The backwards-compatibility form of a KDC-REQ-BODY is:
2637 KDC-REQ-BODY-1510 ::= SEQUENCE {
2638 kdc-options [0] KDCOptions,
2639 cname [1] PrincipalNameIA5 OPTIONAL
2640 -- Used only in AS-REQ --,
2643 -- Server's realm; also client's in AS-REQ --,
2645 sname [3] PrincipalNameIA5 OPTIONAL,
2646 from [4] KerberosTime OPTIONAL,
2647 till [5] KerberosTime,
2648 rtime [6] KerberosTime OPTIONAL,
2650 etype [8] SEQUENCE OF EType
2651 -- in preference order --,
2653 addresses [9] HostAddresses OPTIONAL,
2654 enc-authorization-data [10] EncryptedData {
2655 AuthorizationData, { key-session | key-subsession },
2656 { ku-TGSReqAuthData-subkey |
2657 ku-TGSReqAuthData-sesskey }
2660 additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
2661 -- NOTE: not empty --
2664 The extensible form of a KDC-REQ-BODY is:
2687 Yu Expires: Apr 2007 [Page 48]
2689 Internet-Draft rfc1510ter-03 23 Oct 2006
2691 KDC-REQ-BODY-EXT ::= SEQUENCE {
2692 kdc-options [0] KDCOptions,
2693 cname [1] PrincipalName OPTIONAL
2694 -- Used only in AS-REQ --,
2697 -- Server's realm; also client's in AS-REQ --,
2699 sname [3] PrincipalName OPTIONAL,
2700 from [4] KerberosTime OPTIONAL,
2701 till [5] KerberosTime OPTIONAL
2702 -- was required in rfc1510;
2703 -- still required for compat versions
2706 rtime [6] KerberosTime OPTIONAL,
2708 etype [8] SEQUENCE OF EType
2709 -- in preference order --,
2711 addresses [9] HostAddresses OPTIONAL,
2712 enc-authorization-data [10] EncryptedData {
2713 AuthorizationData, { key-session | key-subsession },
2714 { ku-TGSReqAuthData-subkey |
2715 ku-TGSReqAuthData-sesskey }
2718 additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
2719 -- NOTE: not empty --,
2721 lang-tags [5] SEQUENCE (SIZE (1..MAX)) OF
2729 rfc1510 AS-REQ-1510,
2732 AS-REQ-1510 ::= [APPLICATION 10] KDC-REQ-1510
2733 -- AS-REQ must include client name
2735 AS-REQ-EXT ::= [APPLICATION 6] Signed {
2736 [APPLICATION 6] KDC-REQ-EXT, { key-client }, { ku-ASReq-cksum }
2738 -- AS-REQ must include client name
2740 A client SHOULD NOT send the extensible AS-REQ alternative to a KDC
2741 if the client does not know that the KDC supports the extensibility
2743 Yu Expires: Apr 2007 [Page 49]
2745 Internet-Draft rfc1510ter-03 23 Oct 2006
2747 framework. A client SHOULD send the extensible AS-REQ alternative in
2748 a PA-AS-REQ PA-DATA. A KDC supporting extensibility will treat the
2749 AS-REQ contained within the PA-AS-REQ as the actual AS-REQ. [ XXX
2750 what if their contents conflict? ]
2754 TGS-REQ ::= CHOICE {
2755 rfc1510 TGS-REQ-1510,
2759 TGS-REQ-1510 ::= [APPLICATION 12] KDC-REQ-1510
2761 TGS-REQ-EXT ::= [APPLICATION 8] Signed {
2762 [APPLICATION 8] KDC-REQ-EXT, { key-session }, { ku-TGSReq-cksum }
2768 PA-DATA have multiple uses in the Kerberos protocol. They may pre-
2769 authenticate an AS-REQ; they may also modify several of the
2770 encryption keys used in a KDC-REP. PA-DATA may also provide "hints"
2771 to the client about which long-term key (usually password-derived) to
2772 use. PA-DATA may also include "hints" about which pre-authentication
2773 mechanisms to use, or include data for input into a pre-
2774 authentication mechanism.
2776 [ XXX enumerate standard padata here ]
2778 8.3. KDC-REQ Processing
2780 Processing of a KDC-REQ proceeds through several steps. An
2781 implementation need not perform these steps exactly as described, as
2782 long as it behaves as if the steps were performed as described. The
2783 KDC performs replay handling upon receiving the request; it then
2784 validates the request, adjusts timestamps, and selects the keys used
2785 in the reply. It copies data from the request into the issued
2786 ticket, adjusting the values to conform with its policies. The KDC
2787 then transmits the reply to the client.
2789 8.3.1. Handling Replays
2791 Because Kerberos can run over unreliable transports such as UDP, the
2792 KDC MUST be prepared to retransmit responses in case they are lost.
2793 If a KDC receives a request identical to one it has recently
2794 successfully processed, the KDC MUST respond with a KDC-REP message
2795 rather than a replay error. In order to reduce the amount of
2796 ciphertext given to a potential attacker, KDCs MAY send the same
2797 response generated when the request was first handled. KDCs MUST
2799 Yu Expires: Apr 2007 [Page 50]
2801 Internet-Draft rfc1510ter-03 23 Oct 2006
2803 obey this replay behavior even if the actual transport in use is
2804 reliable. If the AP-REQ which authenticates a TGS-REQ is a replay,
2805 and the entire request is not identical to a recently successfully
2806 processed request, the KDC SHOULD return "krb-ap-err-repeat", as is
2807 appropriate for AP-REQ processing.
2809 8.3.2. Request Validation
2811 8.3.2.1. AS-REQ Authentication
2813 Site policy determines whether a given client principal is required
2814 to provide some pre-authentication prior to receiving an AS-REP.
2815 Since the default reply key is typically the client's long-term
2816 password-based key, an attacker may easily request known plaintext
2817 (in the form of an AS-REP) upon which to mount a dictionary attack.
2818 Pre-authentication can limit the possibility of such an attack.
2820 If site policy requires pre-authentication for a client principal,
2821 and no pre-authentication is provided, the KDC returns the error
2822 "kdc-err-preauth-required". Accompanying this error are "e-data"
2823 which include hints telling the client which pre-authentication
2824 mechanisms to use, or data for input to pre-authentication mechanisms
2825 (e.g., input to challenge-response systems). If pre-authentication
2826 fails, the KDC returns the error "kdc-err-preauth-failed".
2828 [ may need additional changes based on Sam's preauth draft ]
2830 8.3.2.2. TGS-REQ Authentication
2832 A TGS-REQ has an accompanying AP-REQ, which is included in the "pa-
2833 tgs-req". The KDC MUST validate the checksum in the Authenticator of
2834 the AP-REQ, which is computed over the KDC-REQ-BODY-1510 or KDC-REQ-
2835 BODY-EXT (for TGS-REQ-1510 or TGS-REQ-EXT, respectively) of the
2836 request. [ padata not signed by authenticator! ] Any error from the
2837 AP-REQ validation process SHOULD be returned in a KRB-ERROR message.
2838 The service principal in the ticket of the AP-REQ may be a ticket-
2839 granting service principal, or a normal application service
2840 principal. A ticket which is not a ticket-granting ticket MUST NOT
2841 be used to issue a ticket for any service other than the one named in
2842 the ticket. In this case, the "renew", "validate", or "proxy" [?also
2843 forwarded?] option must be set in the request.
2845 8.3.2.3. Principal Validation
2847 If the client principal in an AS-REQ is unknown, the KDC returns the
2848 error "kdc-err-c-principal-unknown". If the server principal in a
2849 KDC-REQ is unknown, the KDC returns the error "kdc-err-s-principal-
2855 Yu Expires: Apr 2007 [Page 51]
2857 Internet-Draft rfc1510ter-03 23 Oct 2006
2859 8.3.2.4. Checking For Revoked or Invalid Tickets
2863 Whenever a request is made to the ticket-granting server, the
2864 presented ticket(s) is(are) checked against a hot-list of tickets
2865 which have been canceled. This hot-list might be implemented by
2866 storing a range of issue timestamps for "suspect tickets"; if a
2867 presented ticket had an authtime in that range, it would be rejected.
2868 In this way, a stolen ticket-granting ticket or renewable ticket
2869 cannot be used to gain additional tickets (renewals or otherwise)
2870 once the theft has been reported to the KDC for the realm in which
2871 the server resides. Any normal ticket obtained before it was
2872 reported stolen will still be valid (because they require no
2873 interaction with the KDC), but only until their normal expiration
2874 time. If TGTs have been issued for cross-realm authentication, use
2875 of the cross-realm TGT will not be affected unless the hot-list is
2876 propagated to the KDCs for the realms for which such cross-realm
2877 tickets were issued.
2879 If a TGS-REQ ticket has its "invalid" flag set, the KDC MUST NOT
2880 issue any ticket unless the TGS-REQ requests the "validate" option.
2882 8.3.3. Timestamp Handling
2884 [ some aspects of timestamp handling, especially regarding postdating
2885 and renewal, are difficult to read in KCLAR... needs closer
2888 Processing of "starttime" (requested in the "from" field) differs
2889 depending on whether the "postdated" option is set in the request.
2890 If the "postdated" option is not set, and the requested "starttime"
2891 is in the future beyond the window of acceptable clock skew, the KDC
2892 returns the error "kdc-err-cannot-postdate". If the "postdated"
2893 option is not set, and the requested "starttime" is absent or does
2894 not indicate a time in the future beyond the acceptable clock skew,
2895 the KDC sets the "starttime" to the KDC's current time. The
2896 "postdated" option MUST NOT be honored if the ticket is being
2897 requested by TGS-REQ and the "may-postdate" is not set in the TGT.
2898 Otherwise, if the "postdated" option is set, and site policy permits,
2899 the KDC sets the "starttime" as requested, and sets the "invalid"
2900 flag in the new ticket.
2902 The "till" field is required in the RFC 1510 version of the KDC-REQ.
2903 If the "till" field is equal to "19700101000000Z" (midnight, January
2904 1, 1970), the KDC SHOULD behave as if the "till" field were absent.
2906 The KDC MUST NOT issue a ticket whose "starttime", "endtime", or
2907 "renew-till" time is later than the "renew-till" time of the ticket
2908 from which it is derived.
2911 Yu Expires: Apr 2007 [Page 52]
2913 Internet-Draft rfc1510ter-03 23 Oct 2006
2915 8.3.3.1. AS-REQ Timestamp Processing
2917 In the AS exchange, the "authtime" of a ticket is set to the local
2920 The "endtime" of the ticket will be set to the earlier of the
2921 requested "till" time and a time determined by local policy, possibly
2922 determined using factors specific to the realm or principal. For
2923 example, the expiration time MAY be set to the earliest of the
2926 * the expiration time ("till" value) requested
2928 * the ticket's start time plus the maximum allowable lifetime
2929 associated with the client principal from the authentication
2932 * the ticket's start time plus the maximum allowable lifetime
2933 associated with the server principal
2935 * the ticket's start time plus the maximum lifetime set by the
2936 policy of the local realm
2938 If the requested expiration time minus the start time (as determined
2939 above) is less than a site-determined minimum lifetime, an error
2940 message with code "kdc-err-never-valid" is returned. If the
2941 requested expiration time for the ticket exceeds what was determined
2942 as above, and if the "renewable-ok" option was requested, then the
2943 "renewable" flag is set in the new ticket, and the "renew-till" value
2944 is set as if the "renewable" option were requested.
2946 If the "renewable" option has been requested or if the "renewable-ok"
2947 option has been set and a renewable ticket is to be issued, then the
2948 "renew-till" field MAY be set to the earliest of:
2950 * its requested value
2952 * the start time of the ticket plus the minimum of the two maximum
2953 renewable lifetimes associated with the principals' database
2956 * the start time of the ticket plus the maximum renewable lifetime
2957 set by the policy of the local realm
2959 8.3.3.2. TGS-REQ Timestamp Processing
2961 In the TGS exchange, the KDC sets the "authtime" to that of the
2962 ticket in the AP-REQ authenticating the TGS-REQ. [?application
2963 server can print a ticket for itself with a spoofed authtime.
2964 security issues for hot-list?] [ MIT implementation may change
2965 authtime of renewed tickets; needs check... ]
2967 Yu Expires: Apr 2007 [Page 53]
2969 Internet-Draft rfc1510ter-03 23 Oct 2006
2971 If the TGS-REQ has a TGT as the ticket in its AP-REQ, and the TGS-REQ
2972 requests an "endtime" (in the "till" field), then the "endtime" of
2973 the new ticket is set to the minimum of
2975 * the requested "endtime" value,
2977 * the "endtime" in the TGT, and
2979 * an "endtime" determined by site policy on ticket lifetimes.
2981 If the new ticket is a renewal, the "endtime" of the new ticket is
2982 bounded by the minimum of
2984 * the requested "endtime" value,
2986 * the value of the "renew-till" value of the old,
2988 * the "starttime" of the new ticket plus the lifetime (endtime
2989 minus starttime) of the old ticket, i.e., the lifetime of the
2990 new ticket may not exceed that of the ticket being renewed [
2991 adapted from KCLAR 3.3.3. ], and
2993 * an "endtime" determined by site policy on ticket lifetimes.
2995 When handling a TGS-REQ, a KDC MUST NOT issue a postdated ticket with
2996 a "starttime", "endtime", or "renew-till" time later than the
2997 "renew-till" time of the TGT.
2999 8.3.4. Handling Transited Realms
3001 The KDC checks the ticket in a TGS-REQ against site policy, unless
3002 the "disable-transited-check" option is set in the TGS-REQ. If site
3003 policy permits the transit path in the TGS-REQ ticket, the KDC sets
3004 the "transited-policy-checked" flag in the issued ticket. If the
3005 "disable-transited-check" option is set, the issued ticket will have
3006 the "transited-policy-checked" flag cleared.
3008 8.3.5. Address Processing The requested "addresses" in the KDC-REQ are
3009 copied into the issued ticket. If the "addresses" field is absent or
3010 empty in a TGS-REQ, the KDC copies addresses from the ticket in the
3011 TGS-REQ into the issued ticket, unless the either "forwarded" or
3012 "proxy" option is set. If the "forwarded" option is set, and the
3013 ticket in the TGS-REQ has its "forwardable" flag set, the KDC copies
3014 the addresses from the TGS-REQ, not the from TGS-REQ ticket, into the
3015 issued ticket. The KDC behaves similarly if the "proxy" option is
3016 set in the TGS-REQ and the "proxiable" flag is set in the ticket.
3017 The "proxy" option will not be honored on requests for additional
3018 ticket-granting tickets.
3023 Yu Expires: Apr 2007 [Page 54]
3025 Internet-Draft rfc1510ter-03 23 Oct 2006
3027 8.3.6. Ticket Flag Processing
3029 Many kdc-options request that the KDC set a corresponding flag in the
3030 issued ticket. kdc-options marked with an asterisk (*) in the
3031 following table do not directly request the corresponding ticket flag
3032 and therefore require special handling.
3035 kdc-option | ticket flag affected
3036 ________________________|__________________________
3037 forwardable | forwardable
3038 forwarded | forwarded
3039 proxiable | proxiable
3041 allow-postdate | may-postdate
3042 postdated | postdated
3043 renewable | renewable
3044 requestanonymous | anonymous
3046 disable-transited-check*| transited-policy-checked
3047 renewable-ok* | renewable
3055 The KDC sets the "forwarded" flag in the issued ticket if the
3056 "forwarded" option is set in the TGS-REQ and the "forwardable"
3057 flag is set in the TGS-REQ ticket.
3060 The KDC sets the "proxy" flag in the issued ticket if the
3061 "proxy" option is set in the TGS-REQ and the "proxiable" flag is
3062 set in the TGS-REQ ticket.
3064 disable-transited-check
3065 The handling of the "disable-transited-check" kdc-option is
3066 described in Section 8.3.4.
3069 The handling of the "renewable-ok" kdc-option is described in
3073 This flag modifies ticket key selection to use the session key
3074 of an additional ticket included in the TGS-REQ, for the purpose
3075 of user-to-user authentication.
3079 Yu Expires: Apr 2007 [Page 55]
3081 Internet-Draft rfc1510ter-03 23 Oct 2006
3084 If the "validate" kdc-option is set in a TGS-REQ, and the
3085 "starttime" has passed, the KDC will clear the "invalid" bit on
3086 the ticket before re-issuing it.
3088 8.3.7. Key Selection
3090 Three keys are involved in creating a KDC-REP. The reply key
3091 encrypts the encrypted part of the KDC-REP. The session key is
3092 stored in the encrypted part of the ticket, and is also present in
3093 the encrypted part of the KDC-REP so that the client can retrieve it.
3094 The ticket key is used to encrypt the ticket. These keys all have
3095 initial values for a given exchange; pre-authentication and other
3096 extension mechanisms may change the value used for any of these keys.
3098 [ again, may need changes based on Sam's preauth draft ]
3100 8.3.7.1. Reply Key and Session Key Selection
3102 The set of encryption types which the client will understand appears
3103 in the "etype" field of KDC-REQ-BODY. The KDC limits the set of
3104 possible reply keys and the set of session key encryption types based
3105 on the "etype" field.
3107 For the AS exchange, the reply key is initially a long-term key of
3108 the client, limited to those encryption types listed in the "etype"
3109 field. The KDC SHOULD use the first valid strong "etype" for which
3110 an encryption key is available. For the TGS exchange, the reply key
3111 is initially the subsession key of the Authenticator. If the
3112 Authenticator subsesion key is absent, the reply key is initially the
3113 session key of the ticket used to authenticate the TGS-REQ.
3115 The session key is initially randomly generated, and has an
3116 encryption type which both the client and the server will understand.
3117 Typically, the KDC has prior knowledge of which encryption types the
3118 server will understand. It selects the first valid strong "etype"
3119 listed the request which the server also will understand.
3121 8.3.7.2. Ticket Key Selection
3123 The ticket key is initially the long-term key of the service. The
3124 "enc-tkt-in-skey" option requests user-to-user authentication, where
3125 the ticket encryption key of the issued ticket is set equal to the
3126 session key of the additional ticket in the request.
3130 The important parts of the KDC-REP are encrypted.
3135 Yu Expires: Apr 2007 [Page 56]
3137 Internet-Draft rfc1510ter-03 23 Oct 2006
3139 EncASRepPart1510 ::= [APPLICATION 25] EncKDCRepPart1510
3140 EncTGSRepPart1510 ::= [APPLICATION 26] EncKDCRepPart1510
3142 EncASRepPartExt ::= [APPLICATION 32] EncKDCRepPartExt
3143 EncTGSRepPartExt ::= [APPLICATION 33] EncKDCRepPartExt
3145 EncKDCRepPart1510 ::= SEQUENCE {
3146 key [0] EncryptionKey,
3147 last-req [1] LastReq,
3149 key-expiration [3] KerberosTime OPTIONAL,
3150 flags [4] TicketFlags,
3151 authtime [5] KerberosTime,
3152 starttime [6] KerberosTime OPTIONAL,
3153 endtime [7] KerberosTime,
3154 renew-till [8] KerberosTime OPTIONAL,
3155 srealm [9] RealmIA5,
3156 sname [10] PrincipalNameIA5,
3157 caddr [11] HostAddresses OPTIONAL
3160 EncKDCRepPartExt ::= SEQUENCE {
3161 key [0] EncryptionKey,
3162 last-req [1] LastReq,
3164 key-expiration [3] KerberosTime OPTIONAL,
3165 flags [4] TicketFlags,
3166 authtime [5] KerberosTime,
3167 starttime [6] KerberosTime OPTIONAL,
3168 endtime [7] KerberosTime,
3169 renew-till [8] KerberosTime OPTIONAL,
3171 sname [10] PrincipalName,
3172 caddr [11] HostAddresses OPTIONAL,
3177 Most of the fields of EncKDCRepPartCom are duplicates of the
3178 corresponding fields in the returned ticket.
3191 Yu Expires: Apr 2007 [Page 57]
3193 Internet-Draft rfc1510ter-03 23 Oct 2006
3195 KDC-REP-1510 { EncPart } ::= SEQUENCE {
3196 pvno [0] INTEGER (5),
3197 msg-type [1] INTEGER (11 -- AS-REP.rfc1510 -- |
3198 13 -- TGS.rfc1510 -- ),
3199 padata [2] SEQUENCE OF PA-DATA OPTIONAL,
3200 crealm [3] RealmIA5,
3201 cname [4] PrincipalNameIA5,
3204 enc-part [6] EncryptedData {
3207 -- maybe reach into EncryptedData in AS-REP/TGS-REP
3208 -- definitions to apply constraints on key usages?
3209 { ku-EncASRepPart -- if AS-REP -- |
3210 ku-EncTGSRepPart-subkey -- if TGS-REP and
3211 -- using Authenticator
3213 ku-EncTGSRepPart-sesskey -- if TGS-REP and using
3214 -- subsession key -- }
3247 Yu Expires: Apr 2007 [Page 58]
3249 Internet-Draft rfc1510ter-03 23 Oct 2006
3251 KDC-REP-EXT { EncPart } ::= SEQUENCE {
3252 pvno [0] INTEGER (5),
3253 msg-type [1] INTEGER (7 -- AS-REP.ext -- |
3254 9 -- TGS-REP.ext -- ),
3255 padata [2] SEQUENCE OF PA-DATA OPTIONAL,
3256 crealm [3] RealmExt,
3257 cname [4] PrincipalNameExt,
3260 enc-part [6] EncryptedData {
3263 -- maybe reach into EncryptedData in AS-REP/TGS-REP
3264 -- definitions to apply constraints on key usages?
3265 { ku-EncASRepPart -- if AS-REP -- |
3266 ku-EncTGSRepPart-subkey -- if TGS-REP and
3267 -- using Authenticator
3269 ku-EncTGSRepPart-sesskey -- if TGS-REP and using
3270 -- subsession key -- }
3274 -- In extensible version, KDC signs original request
3275 -- to avoid replay attacks against client.
3276 req-cksum [7] ChecksumOf { CHOICE {
3279 }, { key-reply }, { ku-KDCRep-cksum }} OPTIONAL,
3280 lang-tag [8] LangTag OPTIONAL,
3286 Signature of the original request using the reply key, to avoid
3287 replay attacks against the client, among other things. Only
3288 present in the extensible version of KDC-REP.
3291 rfc1510 AS-REP-1510,
3294 AS-REP-1510 ::= [APPLICATION 11] KDC-REP-1510
3295 AS-REP-EXT ::= [APPLICATION 7] Signed {
3296 [APPLICATION 7] KDC-REP-EXT,
3297 { key-reply }, { ku-ASRep-cksum }
3303 Yu Expires: Apr 2007 [Page 59]
3305 Internet-Draft rfc1510ter-03 23 Oct 2006
3307 TGS-REP ::= CHOICE {
3308 rfc1510 TGS-REP-1510,
3311 TGS-REP-1510 ::= [APPLICATION 13] KDC-REP-1510 { EncTGSRepPart1510 }
3312 TGS-REP-EXT ::= [APPLICATION 9] Signed {
3313 [APPLICATION 9] KDC-REP-EXT { EncTGSRepPartExt },
3314 { key-reply }, { ku-TGSRep-cksum }
3318 The extensible versions of AS-REQ and TGS-REQ are signed with the
3319 reply key, to prevent an attacker from performing a delayed denial-
3320 of-service attack by substituting the ticket.
3322 8.5. Reply Validation
3324 [ signature verification ]
3330 Kerberos defines two IP transport mechanisms for the credentials
3331 acquisition protocol: UDP/IP and TCP/IP.
3333 8.6.1. UDP/IP transport
3335 Kerberos servers (KDCs) supporting IP transports MUST accept UDP
3336 requests and SHOULD listen for such requests on port 88 (decimal)
3337 unless specifically configured to listen on an alternative UDP port.
3338 Alternate ports MAY be used when running multiple KDCs for multiple
3339 realms on the same host.
3341 Kerberos clients supporting IP transports SHOULD support the sending
3342 of UDP requests. Clients SHOULD use KDC discovery (Section 8.6.3) to
3343 identify the IP address and port to which they will send their
3346 When contacting a KDC for a KRB_KDC_REQ request using UDP/IP
3347 transport, the client shall send a UDP datagram containing only an
3348 encoding of the request to the KDC. The KDC will respond with a reply
3349 datagram containing only an encoding of the reply message (either a
3350 KRB-ERROR or a KDC-REP) to the sending port at the sender's IP
3351 address. The response to a request made through UDP/IP transport MUST
3352 also use UDP/IP transport. If the response can not be handled using
3353 UDP (for example because it is too large), the KDC MUST return "krb-
3354 err-response-too-big", forcing the client to retry the request using
3359 Yu Expires: Apr 2007 [Page 60]
3361 Internet-Draft rfc1510ter-03 23 Oct 2006
3363 8.6.2. TCP/IP transport
3365 Kerberos servers (KDCs) supporting IP transports MUST accept TCP
3366 requests and SHOULD listen for such requests on port 88 (decimal)
3367 unless specifically configured to listen on an alternate TCP port.
3368 Alternate ports MAY be used when running multiple KDCs for multiple
3369 realms on the same host.
3371 Clients MUST support the sending of TCP requests, but MAY choose to
3372 initially try a request using the UDP transport. Clients SHOULD use
3373 KDC discovery (Section 8.6.3) to identify the IP address and port to
3374 which they will send their request.
3376 Implementation note: Some extensions to the Kerberos protocol will
3377 not succeed if any client or KDC not supporting the TCP transport is
3378 involved. Implementations of RFC 1510 were not required to support
3381 When the KDC-REQ message is sent to the KDC over a TCP stream, the
3382 response (KDC-REP or KRB-ERROR message) MUST be returned to the
3383 client on the same TCP stream that was established for the request.
3384 The KDC MAY close the TCP stream after sending a response, but MAY
3385 leave the stream open for a reasonable period of time if it expects a
3386 followup. Care must be taken in managing TCP/IP connections on the
3387 KDC to prevent denial of service attacks based on the number of open
3390 The client MUST be prepared to have the stream closed by the KDC at
3391 anytime after the receipt of a response. A stream closure SHOULD NOT
3392 be treated as a fatal error. Instead, if multiple exchanges are
3393 required (e.g., certain forms of pre-authentication) the client may
3394 need to establish a new connection when it is ready to send
3395 subsequent messages. A client MAY close the stream after receiving a
3396 response, and SHOULD close the stream if it does not expect to send
3399 A client MAY send multiple requests before receiving responses,
3400 though it must be prepared to handle the connection being closed
3401 after the first response.
3403 Each request (KDC-REQ) and response (KDC-REP or KRB-ERROR) sent over
3404 the TCP stream is preceded by the length of the request as 4 octets
3405 in network byte order. The high bit of the length is reserved for
3406 future expansion and MUST currently be set to zero. If a KDC that
3407 does not understand how to interpret a set high bit of the length
3408 encoding receives a request with the high order bit of the length
3409 set, it MUST return a KRB-ERROR message with the error "krb-err-
3410 field-toolong" and MUST close the TCP stream.
3412 If multiple requests are sent over a single TCP connection, and the
3413 KDC sends multiple responses, the KDC is not required to send the
3415 Yu Expires: Apr 2007 [Page 61]
3417 Internet-Draft rfc1510ter-03 23 Oct 2006
3419 responses in the order of the corresponding requests. This may
3420 permit some implementations to send each response as soon as it is
3421 ready even if earlier requests are still being processed (for
3422 example, waiting for a response from an external device or database).
3424 8.6.3. KDC Discovery on IP Networks
3426 Kerberos client implementations MUST provide a means for the client
3427 to determine the location of the Kerberos Key Distribution Centers
3428 (KDCs). Traditionally, Kerberos implementations have stored such
3429 configuration information in a file on each client machine.
3430 Experience has shown this method of storing configuration information
3431 presents problems with out-of-date information and scaling problems,
3432 especially when using cross-realm authentication. This section
3433 describes a method for using the Domain Name System [RFC 1035] for
3434 storing KDC location information.
3436 8.6.3.1. DNS vs. Kerberos - Case Sensitivity of Realm Names
3438 In Kerberos, realm names are case sensitive. While it is strongly
3439 encouraged that all realm names be all upper case this recommendation
3440 has not been adopted by all sites. Some sites use all lower case
3441 names and other use mixed case. DNS, on the other hand, is case
3442 insensitive for queries. Since the realm names "MYREALM", "myrealm",
3443 and "MyRealm" are all different, but resolve the same in the domain
3444 name system, it is necessary that only one of the possible
3445 combinations of upper and lower case characters be used in realm
3448 8.6.3.2. DNS SRV records for KDC location
3450 KDC location information is to be stored using the DNS SRV RR [RFC
3451 2782]. The format of this RR is as follows:
3453 _Service._Proto.Realm TTL Class SRV Priority Weight Port Target
3455 The Service name for Kerberos is always "kerberos".
3457 The Proto can be one of "udp", "tcp". If these SRV records are to be
3458 used, both "udp" and "tcp" records MUST be specified for all KDC
3461 The Realm is the Kerberos realm that this record corresponds to. The
3462 realm MUST be a domain style realm name.
3464 TTL, Class, SRV, Priority, Weight, and Target have the standard
3465 meaning as defined in RFC 2782.
3467 As per RFC 2782 the Port number used for "_udp" and "_tcp" SRV
3468 records SHOULD be the value assigned to "kerberos" by the Internet
3469 Assigned Number Authority: 88 (decimal) unless the KDC is configured
3471 Yu Expires: Apr 2007 [Page 62]
3473 Internet-Draft rfc1510ter-03 23 Oct 2006
3475 to listen on an alternate TCP port.
3477 Implementation note: Many existing client implementations do not
3478 support KDC Discovery and are configured to send requests to the IANA
3479 assigned port (88 decimal), so it is strongly recommended that KDCs
3480 be configured to listen on that port.
3482 8.6.3.3. KDC Discovery for Domain Style Realm Names on IP Networks
3484 These are DNS records for a Kerberos realm EXAMPLE.COM. It has two
3485 Kerberos servers, kdc1.example.com and kdc2.example.com. Queries
3486 should be directed to kdc1.example.com first as per the specified
3487 priority. Weights are not used in these sample records.
3489 _kerberos._udp.EXAMPLE.COM. IN SRV 0 0 88 kdc1.example.com.
3490 _kerberos._udp.EXAMPLE.COM. IN SRV 1 0 88 kdc2.example.com.
3491 _kerberos._tcp.EXAMPLE.COM. IN SRV 0 0 88 kdc1.example.com.
3492 _kerberos._tcp.EXAMPLE.COM. IN SRV 1 0 88 kdc2.example.com.
3497 The KRB-ERROR message is returned by the KDC if an error occurs
3498 during credentials acquisition. It may also be returned by an
3499 application server if an error occurs during authentication.
3503 KRB-ERROR ::= CHOICE {
3504 rfc1510 KRB-ERROR-1510,
3509 The extensible KRB-ERROR is only signed if there has been a key
3510 negotiated with its recipient. KRB-ERROR messages sent in response
3511 to AS-REQ messages will probably not be signed unless a
3512 preauthentication mechanism has negotiated a key. (Signing using a
3513 client's long-term key can expose ciphertext to dictionary attacks.)
3527 Yu Expires: Apr 2007 [Page 63]
3529 Internet-Draft rfc1510ter-03 23 Oct 2006
3531 KRB-ERROR-1510 ::= [APPLICATION 30] SEQUENCE {
3532 pvno [0] INTEGER (5),
3533 msg-type [1] INTEGER (30),
3534 ctime [2] KerberosTime OPTIONAL,
3535 cusec [3] Microseconds OPTIONAL,
3536 stime [4] KerberosTime,
3537 susec [5] Microseconds,
3538 error-code [6] ErrCode,
3539 crealm [7] RealmIA5 OPTIONAL,
3540 cname [8] PrincipalNameIA5 OPTIONAL,
3541 realm [9] RealmIA5 -- Correct realm --,
3542 sname [10] PrincipalNameIA5 -- Correct name --,
3543 e-text [11] KerberosString OPTIONAL,
3544 e-data [12] OCTET STRING OPTIONAL
3548 KRB-ERROR-EXT ::= [APPLICATION 23] Signed {
3549 [APPLICATION 23] SEQUENCE{
3550 pvno [0] INTEGER (5),
3551 msg-type [1] INTEGER (23),
3552 ctime [2] KerberosTime OPTIONAL,
3553 cusec [3] Microseconds OPTIONAL,
3554 stime [4] KerberosTime,
3555 susec [5] Microseconds,
3556 error-code [6] ErrCode,
3557 crealm [7] Realm OPTIONAL,
3558 cname [8] PrincipalName OPTIONAL,
3559 realm [9] Realm -- Correct realm --,
3560 sname [10] PrincipalName -- Correct name --,
3561 e-text [11] KerberosString OPTIONAL,
3562 e-data [12] OCTET STRING OPTIONAL,
3564 typed-data [13] TYPED-DATA OPTIONAL,
3565 nonce [14] Nonce OPTIONAL,
3566 lang-tag [15] LangTag OPTIONAL,
3568 }, { }, { ku-KrbError-cksum }
3573 Client's time, if known from a KDC-REQ or AP-REQ.
3576 KDC or application server's current time.
3579 Numeric error code designating the error.
3583 Yu Expires: Apr 2007 [Page 64]
3585 Internet-Draft rfc1510ter-03 23 Oct 2006
3588 Client's realm and name, if known.
3591 server's realm and name. [ XXX what if these aren't known? ]
3594 Human-readable text providing additional details for the error.
3597 This field contains additional data about the error for use by
3598 the client to help it recover from or handle the error. If the
3599 "error-code" is "kdc-err-preauth-required", then the e-data
3600 field will contain an encoding of a sequence of padata fields,
3601 each corresponding to an acceptable pre-authentication method
3602 and optionally containing data for the method:
3604 METHOD-DATA ::= SEQUENCE OF PA-DATA
3607 For error codes defined in this document other than "kdc-err-
3608 preauth-required", the format and contents of the e-data field
3609 are implementation-defined. Similarly, for future error codes,
3610 the format and contents of the e-data field are implementation-
3611 defined unless specified.
3614 Indicates the language of the message in the "e-text" field. It
3615 is only present in the extensible KRB-ERROR.
3618 is the nonce from a KDC-REQ. It is only present in the
3619 extensible KRB-ERROR.
3622 TYPED-DATA is a typed hole allowing for additional data to be
3623 returned in error conditions, since "e-data" is insufficiently
3624 flexible for some purposes. TYPED-DATA is only present in the
3625 extensible KRB-ERROR.
3629 TYPED-DATA ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
3630 data-type [0] TDType,
3631 data-value [1] OCTET STRING OPTIONAL
3639 Yu Expires: Apr 2007 [Page 65]
3641 Internet-Draft rfc1510ter-03 23 Oct 2006
3643 10. Session Key Exchange
3645 Session key exchange consists of the AP-REQ and AP-REP messages. The
3646 client sends the AP-REQ message, and the service responds with an
3647 AP-REP message if mutual authentication is desired. Following
3648 session key exchange, the client and service share a secret session
3649 key, or possibly a subsesion key, which can be used to protect
3650 further communications. Additionally, the session key exchange
3651 process can establish initial sequence numbers which the client and
3652 service can use to detect replayed messages.
3656 An AP-REQ message contains a ticket and a authenticator. The
3657 authenticator is ciphertext encrypted with the session key contained
3658 in the ticket. The plaintext contents of the authenticator are:
3660 -- plaintext of authenticator
3661 Authenticator1510 ::= [APPLICATION 2] SEQUENCE {
3662 authenticator-vno [0] INTEGER (5),
3663 crealm [1] RealmIA5,
3664 cname [2] PrincipalNameIA5,
3665 cksum [3] Checksum {{ key-session },
3666 { ku-Authenticator-cksum |
3667 ku-pa-TGSReq-cksum }} OPTIONAL,
3668 cusec [4] Microseconds,
3669 ctime [5] KerberosTime,
3670 subkey [6] EncryptionKey OPTIONAL,
3671 seq-number [7] SeqNum32 OPTIONAL,
3672 authorization-data [8] AuthorizationData OPTIONAL
3675 AuthenticatorExt ::= [APPLICATION 35] SEQUENCE {
3676 authenticator-vno [0] INTEGER (5),
3677 crealm [1] RealmExt,
3678 cname [2] PrincipalNameExt,
3679 cksum [3] Checksum {{ key-session },
3680 { ku-Authenticator-cksum |
3681 ku-pa-TGSReq-cksum }} OPTIONAL,
3682 cusec [4] Microseconds,
3683 ctime [5] KerberosTime,
3684 subkey [6] EncryptionKey OPTIONAL,
3685 seq-number [7] SeqNum OPTIONAL,
3686 authorization-data [8] AuthorizationData OPTIONAL,
3690 The complete definition of AP-REQ is:
3695 Yu Expires: Apr 2007 [Page 66]
3697 Internet-Draft rfc1510ter-03 23 Oct 2006
3700 rfc1510 AP-REQ-1510,
3705 AP-REQ-1510 ::= [APPLICATION 14] SEQUENCE {
3706 pvno [0] INTEGER (5),
3707 msg-type [1] INTEGER (14),
3708 ap-options [2] APOptions,
3709 ticket [3] Ticket1510,
3710 authenticator [4] EncryptedData {
3713 { ku-APReq-authenticator |
3714 ku-pa-TGSReq-authenticator }
3719 AP-REQ-EXT ::= [APPLICATION 18] Signed {
3720 [APPLICATION 18] SEQUENCE {
3721 pvno [0] INTEGER (5),
3722 msg-type [1] INTEGER (18),
3723 ap-options [2] APOptions,
3725 authenticator [4] EncryptedData {
3728 { ku-APReq-authenticator |
3729 ku-pa-TGSReq-authenticator }
3732 extensions [5] ApReqExtensions OPTIONAL,
3733 lang-tag [6] SEQUENCE (SIZE (1..MAX))
3734 OF LangTag OPTIONAL,
3736 }, { key-session }, { ku-APReq-cksum }
3740 APOptions ::= KerberosFlags { APOptionsBits }
3742 APOptionsBits ::= BIT STRING {
3744 use-session-key (1),
3751 Yu Expires: Apr 2007 [Page 67]
3753 Internet-Draft rfc1510ter-03 23 Oct 2006
3757 An AP-REP message provides mutual authentication of the service to
3760 EncAPRepPart ::= CHOICE {
3761 rfc1510 EncAPRepPart1510,
3766 EncAPRepPart1510 ::= [APPLICATION 27] SEQUENCE {
3767 ctime [0] KerberosTime,
3768 cusec [1] Microseconds,
3769 subkey [2] EncryptionKey OPTIONAL,
3770 seq-number [3] SeqNum32 OPTIONAL
3774 EncAPRepPartExt ::= [APPLICATION 31] SEQUENCE {
3775 ctime [0] KerberosTime,
3776 cusec [1] Microseconds,
3777 subkey [2] EncryptionKey OPTIONAL,
3778 seq-number [3] SeqNum OPTIONAL,
3780 authorization-data [4] AuthorizationData OPTIONAL,
3786 rfc1510 AP-REP-1510,
3791 AP-REP-1510 ::= [APPLICATION 15] SEQUENCE {
3792 pvno [0] INTEGER (5),
3793 msg-type [1] INTEGER (15),
3794 enc-part [2] EncryptedData {
3796 { key-session | key-subsession }, { ku-EncAPRepPart }}
3807 Yu Expires: Apr 2007 [Page 68]
3809 Internet-Draft rfc1510ter-03 23 Oct 2006
3811 AP-REP-EXT ::= [APPLICATION 19] Signed {
3812 [APPLICATION 19] SEQUENCE {
3813 pvno [0] INTEGER (5),
3814 msg-type [1] INTEGER (19),
3815 enc-part [2] EncryptedData {
3817 { key-session | key-subsession }, { ku-EncAPRepPart }},
3819 extensions [3] ApRepExtensions OPTIONAL,
3821 }, { key-session | key-subsession }, { ku-APRep-cksum }
3827 Once a session key has been established, the client and server can
3828 use several kinds of messages to securely transmit data. KRB-SAFE
3829 provides integrity protection for application data, while KRB-PRIV
3830 provides confidentiality along with integrity protection. The KRB-
3831 CRED message provides a means of securely forwarding credentials from
3832 the client host to the server host.
3836 The KRB-SAFE message provides integrity protection for an included
3839 KRB-SAFE ::= CHOICE {
3840 rfc1510 KRB-SAFE-1510,
3845 KRB-SAFE-BODY ::= SEQUENCE {
3846 user-data [0] OCTET STRING,
3847 timestamp [1] KerberosTime OPTIONAL,
3848 usec [2] Microseconds OPTIONAL,
3849 seq-number [3] SeqNum OPTIONAL,
3850 s-address [4] HostAddress,
3851 r-address [5] HostAddress OPTIONAL,
3852 ... -- ASN.1 extensions must be excluded
3853 -- when sending to rfc1510 implementations
3859 The KRB-PRIV message provides confidentiality and integrity
3863 Yu Expires: Apr 2007 [Page 69]
3865 Internet-Draft rfc1510ter-03 23 Oct 2006
3867 KRB-PRIV ::= [APPLICATION 21] SEQUENCE {
3868 pvno [0] INTEGER (5),
3869 msg-type [1] INTEGER (21),
3870 enc-part [3] EncryptedData {
3872 { key-session | key-subsession }, { ku-EncKrbPrivPart }},
3877 EncKrbPrivPart ::= [APPLICATION 28] SEQUENCE {
3878 user-data [0] OCTET STRING,
3879 timestamp [1] KerberosTime OPTIONAL,
3880 usec [2] Microseconds OPTIONAL,
3881 seq-number [3] SeqNum OPTIONAL,
3882 s-address [4] HostAddress -- sender's addr --,
3883 r-address [5] HostAddress OPTIONAL -- recip's addr --,
3884 ... -- ASN.1 extensions must be excluded
3885 -- when sending to rfc1510 implementations
3891 The KRB-CRED message provides a means of securely transferring
3892 credentials from the client to the service.
3894 KRB-CRED ::= CHOICE {
3895 rfc1510 KRB-CRED-1510,
3901 KRB-CRED-1510 ::= [APPLICATION 22] SEQUENCE {
3902 pvno [0] INTEGER (5),
3903 msg-type [1] INTEGER (22),
3904 tickets [2] SEQUENCE OF Ticket,
3905 enc-part [3] EncryptedData {
3907 { key-session | key-subsession }, { ku-EncKrbCredPart }}
3919 Yu Expires: Apr 2007 [Page 70]
3921 Internet-Draft rfc1510ter-03 23 Oct 2006
3923 KRB-CRED-EXT ::= [APPLICATION 24] Signed {
3924 [APPLICATION 24] SEQUENCE {
3925 pvno [0] INTEGER (5),
3926 msg-type [1] INTEGER (24),
3927 tickets [2] SEQUENCE OF Ticket,
3928 enc-part [3] EncryptedData {
3930 { key-session | key-subsession }, { ku-EncKrbCredPart }},
3932 }, { key-session | key-subsession }, { ku-KrbCred-cksum }
3937 EncKrbCredPart ::= [APPLICATION 29] SEQUENCE {
3938 ticket-info [0] SEQUENCE OF KrbCredInfo,
3939 nonce [1] Nonce OPTIONAL,
3940 timestamp [2] KerberosTime OPTIONAL,
3941 usec [3] Microseconds OPTIONAL,
3942 s-address [4] HostAddress OPTIONAL,
3943 r-address [5] HostAddress OPTIONAL
3947 KrbCredInfo ::= SEQUENCE {
3948 key [0] EncryptionKey,
3949 prealm [1] Realm OPTIONAL,
3950 pname [2] PrincipalName OPTIONAL,
3951 flags [3] TicketFlags OPTIONAL,
3952 authtime [4] KerberosTime OPTIONAL,
3953 starttime [5] KerberosTime OPTIONAL,
3954 endtime [6] KerberosTime OPTIONAL,
3955 renew-till [7] KerberosTime OPTIONAL,
3956 srealm [8] Realm OPTIONAL,
3957 sname [9] PrincipalName OPTIONAL,
3958 caddr [10] HostAddresses OPTIONAL
3962 12. Security Considerations
3964 12.1. Time Synchronization
3966 Time synchronization between the KDC and application servers is
3967 necessary to prevent acceptance of expired tickets.
3969 Time synchronization is needed between application servers and
3970 clients to prevent replay attacks if a replay cache is being used.
3971 If negotiated subsession keys are used to encrypt application data,
3972 replay caches may not be necessary.
3975 Yu Expires: Apr 2007 [Page 71]
3977 Internet-Draft rfc1510ter-03 23 Oct 2006
3981 12.3. Principal Name Reuse
3985 12.4. Password Guessing
3987 12.5. Forward Secrecy
3989 [from KCLAR 10.; needs some rewriting]
3991 The Kerberos protocol in its basic form does not provide perfect
3992 forward secrecy for communications. If traffic has been recorded by
3993 an eavesdropper, then messages encrypted using the KRB-PRIV message,
3994 or messages encrypted using application-specific encryption under
3995 keys exchanged using Kerberos can be decrypted if any of the user's,
3996 application server's, or KDC's key is subsequently discovered. This
3997 is because the session key used to encrypt such messages is
3998 transmitted over the network encrypted in the key of the application
3999 server, and also encrypted under the session key from the user's
4000 ticket-granting ticket when returned to the user in the TGS-REP
4001 message. The session key from the ticket-granting ticket was sent to
4002 the user in the AS-REP message encrypted in the user's secret key,
4003 and embedded in the ticket-granting ticket, which was encrypted in
4004 the key of the KDC. Application requiring perfect forward secrecy
4005 must exchange keys through mechanisms that provide such assurance,
4006 but may use Kerberos for authentication of the encrypted channel
4007 established through such other means.
4011 As an authentication service, Kerberos provides a means of verifying
4012 the identity of principals on a network. Kerberos does not, by
4013 itself, provide authorization. Applications SHOULD NOT accept the
4014 mere issuance of a service ticket by the Kerberos server as granting
4015 authority to use the service.
4017 12.7. Login Authentication
4019 Some applications, particularly those which provide login access when
4020 provided with a password, SHOULD NOT treat successful acquisition of
4021 credentials as sufficient proof of the user's identity. An attacker
4022 posing as a user could generate an illegitimate KDC-REP message which
4023 decrypts properly. To authenticate a user logging on to a local
4024 system, the credentials obtained SHOULD be used in a TGS exchange to
4025 obtain credentials for a local service. Successful use of those
4026 credentials to authenticate to the local service assures that the
4027 initially obtained credentials are from a valid KDC.
4031 Yu Expires: Apr 2007 [Page 72]
4033 Internet-Draft rfc1510ter-03 23 Oct 2006
4035 13. IANA Considerations
4039 Each use of Int32 in this document defines a number space. [ XXX
4040 enumerate these ] Negative numbers are reserved for private use;
4041 local and experimental extensions should use these values. Zero is
4042 reserved and may not be assigned.
4044 Typed hole contents may be identified by either Int32 values or by
4045 RELATIVE-OID values. Since RELATIVE-OIDs define a hierarchical
4046 namespace, assignments to the top level of the RELATIVE-OID space may
4047 be made on a first-come, first-served basis.
4051 Much of the text here is adapted from draft-ietf-krb-wg-kerberos-
4052 clarifications-07. The description of the general form of the
4053 extensibility framework was derived from text by Sam Hartman. Some
4054 text concerning internationalization of internationalized domain
4055 names in principal names and realm names was contributed by Jeffrey
4056 Altman and Jeffrey Hutzelman.
4060 A. ASN.1 Module (Normative)
4063 iso(1) identified-organization(3) dod(6) internet(1)
4064 security(5) kerberosV5(2) modules(4) krb5spec3(4)
4065 } DEFINITIONS EXPLICIT TAGS ::= BEGIN
4068 -- OID arc for KerberosV5
4070 -- This OID may be used to identify Kerberos protocol messages
4071 -- encapsulated in other protocols.
4073 -- This OID also designates the OID arc for KerberosV5-related
4076 -- NOTE: RFC 1510 had an incorrect value (5) for "dod" in its
4078 id-krb5 OBJECT IDENTIFIER ::= {
4079 iso(1) identified-organization(3) dod(6) internet(1)
4080 security(5) kerberosV5(2)
4087 Yu Expires: Apr 2007 [Page 73]
4089 Internet-Draft rfc1510ter-03 23 Oct 2006
4093 -- Applications should not directly reference any types
4094 -- other than KRB-PDU and its component types.
4096 KRB-PDU ::= CHOICE {
4108 krb-error KRB-ERROR,
4118 -- signed values representable in 32 bits
4120 -- These are often used as assigned numbers for various things.
4121 Int32 ::= INTEGER (-2147483648..2147483647)
4124 -- Typed hole identifiers
4127 rel-oid RELATIVE-OID
4131 -- unsigned 32 bit values
4132 UInt32 ::= INTEGER (0..4294967295)
4135 -- unsigned 64 bit values
4136 UInt64 ::= INTEGER (0..18446744073709551615)
4143 Yu Expires: Apr 2007 [Page 74]
4145 Internet-Draft rfc1510ter-03 23 Oct 2006
4152 Microseconds ::= INTEGER (0..999999)
4155 KerberosTime ::= GeneralizedTime (CONSTRAINED BY {
4156 -- MUST NOT include fractional seconds
4160 -- used for names and for error messages
4161 KerberosString ::= CHOICE {
4162 ia5 GeneralString (IA5String),
4164 ... -- no extension may be sent
4165 -- to an rfc1510 implementation --
4169 -- IA5 choice only; useful for constraints
4170 KerberosStringIA5 ::= KerberosString
4171 (WITH COMPONENTS { ia5 PRESENT })
4173 -- IA5 excluded; useful for constraints
4174 KerberosStringExt ::= KerberosString
4175 (WITH COMPONENTS { ia5 ABSENT })
4178 -- used for language tags
4179 LangTag ::= PrintableString
4180 (FROM ("A".."Z" | "a".."z" | "0".."9" | "-"))
4199 Yu Expires: Apr 2007 [Page 75]
4201 Internet-Draft rfc1510ter-03 23 Oct 2006
4203 -- assigned numbers for name types (used in principal names)
4206 -- Name type not known
4207 nt-unknown NameType ::= 0
4208 -- Just the name of the principal as in DCE, or for users
4209 nt-principal NameType ::= 1
4210 -- Service and other unique instance (krbtgt)
4211 nt-srv-inst NameType ::= 2
4212 -- Service with host name as instance (telnet, rcommands)
4213 nt-srv-hst NameType ::= 3
4214 -- Service with host as remaining components
4215 nt-srv-xhst NameType ::= 4
4217 nt-uid NameType ::= 5
4218 -- Encoded X.509 Distingished name [RFC 2253]
4219 nt-x500-principal NameType ::= 6
4220 -- Name in form of SMTP email name (e.g. user@foo.com)
4221 nt-smtp-name NameType ::= 7
4222 -- Enterprise name - may be mapped to principal name
4223 nt-enterprise NameType ::= 10
4226 PrincipalName { StrType } ::= SEQUENCE {
4227 name-type [0] NameType,
4228 -- May have zero elements, or individual elements may be
4229 -- zero-length, but this is NOT RECOMMENDED.
4230 name-string [1] SEQUENCE OF KerberosString (StrType)
4235 PrincipalNameIA5 ::= PrincipalName { KerberosStringIA5 }
4237 PrincipalNameExt ::= PrincipalName { KerberosStringExt }
4239 PrincipalNameEither ::= PrincipalName { KerberosString }
4242 Realm { StrType } ::= KerberosString (StrType)
4245 RealmIA5 ::= Realm { KerberosStringIA5 }
4248 RealmExt ::= Realm { KerberosStringExt }
4251 RealmEither ::= Realm { KerberosString }
4255 Yu Expires: Apr 2007 [Page 76]
4257 Internet-Draft rfc1510ter-03 23 Oct 2006
4259 KerberosFlags { NamedBits } ::= BIT STRING (SIZE (32..MAX))
4261 -- MUST be a valid value of -- NamedBits
4262 -- but if the value to be sent would be truncated to shorter
4263 -- than 32 bits according to DER, the value MUST be padded
4264 -- with trailing zero bits to 32 bits. Otherwise, no
4265 -- trailing zero bits may be present.
4272 HostAddress ::= SEQUENCE {
4273 addr-type [0] AddrType,
4274 address [1] OCTET STRING
4277 -- NOTE: HostAddresses is always used as an OPTIONAL field and
4278 -- should not be a zero-length SEQUENCE OF.
4280 -- The extensible messages explicitly constrain this to be
4282 HostAddresses ::= SEQUENCE OF HostAddress
4286 -- *** crypto-related types and assignments
4311 Yu Expires: Apr 2007 [Page 77]
4313 Internet-Draft rfc1510ter-03 23 Oct 2006
4315 -- Assigned numbers denoting encryption mechanisms.
4318 -- assigned numbers for encryption schemes
4319 et-des-cbc-crc EType ::= 1
4320 et-des-cbc-md4 EType ::= 2
4321 et-des-cbc-md5 EType ::= 3
4323 et-des3-cbc-md5 EType ::= 5
4325 et-des3-cbc-sha1 EType ::= 7
4326 et-dsaWithSHA1-CmsOID EType ::= 9
4327 et-md5WithRSAEncryption-CmsOID EType ::= 10
4328 et-sha1WithRSAEncryption-CmsOID EType ::= 11
4329 et-rc2CBC-EnvOID EType ::= 12
4330 et-rsaEncryption-EnvOID EType ::= 13
4331 et-rsaES-OAEP-ENV-OID EType ::= 14
4332 et-des-ede3-cbc-Env-OID EType ::= 15
4333 et-des3-cbc-sha1-kd EType ::= 16
4335 et-aes128-cts-hmac-sha1-96 EType ::= 17
4337 et-aes256-cts-hmac-sha1-96 EType ::= 18
4339 et-rc4-hmac EType ::= 23
4341 et-rc4-hmac-exp EType ::= 24
4342 -- opaque; PacketCable
4343 et-subkey-keymaterial EType ::= 65
4367 Yu Expires: Apr 2007 [Page 78]
4369 Internet-Draft rfc1510ter-03 23 Oct 2006
4371 -- Assigned numbers denoting key usages.
4375 -- Actual identifier names are provisional and subject to
4378 ku-pa-enc-ts KeyUsage ::= 1
4379 ku-Ticket KeyUsage ::= 2
4380 ku-EncASRepPart KeyUsage ::= 3
4381 ku-TGSReqAuthData-sesskey KeyUsage ::= 4
4382 ku-TGSReqAuthData-subkey KeyUsage ::= 5
4383 ku-pa-TGSReq-cksum KeyUsage ::= 6
4384 ku-pa-TGSReq-authenticator KeyUsage ::= 7
4385 ku-EncTGSRepPart-sesskey KeyUsage ::= 8
4386 ku-EncTGSRepPart-subkey KeyUsage ::= 9
4387 ku-Authenticator-cksum KeyUsage ::= 10
4388 ku-APReq-authenticator KeyUsage ::= 11
4389 ku-EncAPRepPart KeyUsage ::= 12
4390 ku-EncKrbPrivPart KeyUsage ::= 13
4391 ku-EncKrbCredPart KeyUsage ::= 14
4392 ku-KrbSafe-cksum KeyUsage ::= 15
4393 ku-ad-KDCIssued-cksum KeyUsage ::= 19
4396 -- The following numbers are provisional...
4397 -- conflicts may exist elsewhere.
4398 ku-Ticket-cksum KeyUsage ::= 29
4399 ku-ASReq-cksum KeyUsage ::= 30
4400 ku-TGSReq-cksum KeyUsage ::= 31
4401 ku-ASRep-cksum KeyUsage ::= 32
4402 ku-TGSRep-cksum KeyUsage ::= 33
4403 ku-APReq-cksum KeyUsage ::= 34
4404 ku-APRep-cksum KeyUsage ::= 35
4405 ku-KrbCred-cksum KeyUsage ::= 36
4406 ku-KrbError-cksum KeyUsage ::= 37
4407 ku-KDCRep-cksum KeyUsage ::= 38
4409 ku-kg-acceptor-seal KeyUsage ::= 22
4410 ku-kg-acceptor-sign KeyUsage ::= 23
4411 ku-kg-intiator-seal KeyUsage ::= 24
4412 ku-kg-intiator-sign KeyUsage ::= 25
4414 -- KeyUsage values 25..27 used by hardware preauth?
4417 ku-kink-encrypt KeyUsage ::= 39
4418 ku-kink-cksum KeyUsage ::= 40
4423 Yu Expires: Apr 2007 [Page 79]
4425 Internet-Draft rfc1510ter-03 23 Oct 2006
4427 -- KeyToUse identifies which key is to be used to encrypt or
4428 -- sign a given value.
4430 -- Values of KeyToUse are never actually transmitted over the
4431 -- wire, or even used directly by the implementation in any
4432 -- way, as key usages are; it exists primarily to identify
4433 -- which key gets used for what purpose. Thus, the specific
4434 -- numeric values associated with this type are irrelevant.
4435 KeyToUse ::= ENUMERATED {
4438 -- server long term key
4440 -- client long term key
4442 -- key selected by KDC for encryption of a KDC-REP
4444 -- session key from ticket
4446 -- subsession key negotiated via AP-REQ/AP-REP
4452 EncryptionKey ::= SEQUENCE {
4454 keyvalue [1] OCTET STRING
4479 Yu Expires: Apr 2007 [Page 80]
4481 Internet-Draft rfc1510ter-03 23 Oct 2006
4484 -- "Type" specifies which ASN.1 type is encrypted to the
4485 -- ciphertext in the EncryptedData. "Keys" specifies a set of
4486 -- keys of which one key may be used to encrypt the data.
4487 -- "KeyUsages" specifies a set of key usages, one of which may
4488 -- be used to encrypt.
4490 -- None of the parameters is transmitted over the wire.
4492 Type, KeyToUse:Keys, KeyUsage:KeyUsages
4495 kvno [1] UInt32 OPTIONAL,
4496 cipher [2] OCTET STRING (CONSTRAINED BY {
4497 -- must be encryption of --
4498 OCTET STRING (CONTAINING Type),
4499 -- with one of the keys -- KeyToUse:Keys,
4500 -- with key usage being one of --
4510 -- The parameters specify which key to use to produce the
4511 -- signature, as well as which key usage to use. The
4512 -- parameters are not actually sent over the wire.
4514 KeyToUse:Keys, KeyUsage:KeyUsages
4516 cksumtype [0] CksumType,
4517 checksum [1] OCTET STRING (CONSTRAINED BY {
4518 -- signed using one of the keys --
4520 -- with key usage being one of --
4535 Yu Expires: Apr 2007 [Page 81]
4537 Internet-Draft rfc1510ter-03 23 Oct 2006
4539 -- a Checksum that must contain the checksum
4540 -- of a particular type
4542 Type, KeyToUse:Keys, KeyUsage:KeyUsages
4543 } ::= Checksum { Keys, KeyUsages } (WITH COMPONENTS {
4545 checksum (CONSTRAINED BY {
4546 -- must be checksum of --
4547 OCTET STRING (CONTAINING Type)
4552 -- parameterized type for wrapping authenticated plaintext
4554 InnerType, KeyToUse:Keys, KeyUsage:KeyUsages
4556 cksum [0] ChecksumOf {
4557 InnerType, Keys, KeyUsages
4559 inner [1] InnerType,
4575 Ticket1510 ::= [APPLICATION 1] SEQUENCE {
4576 tkt-vno [0] INTEGER (5),
4578 sname [2] PrincipalNameIA5,
4579 enc-part [3] EncryptedData {
4580 EncTicketPart1510, { key-server }, { ku-Ticket }
4591 Yu Expires: Apr 2007 [Page 82]
4593 Internet-Draft rfc1510ter-03 23 Oct 2006
4595 TicketExt ::= [APPLICATION 4] Signed {
4596 [APPLICATION 4] SEQUENCE {
4597 tkt-vno [0] INTEGER (5),
4599 sname [2] PrincipalNameExt,
4600 enc-part [3] EncryptedData {
4601 EncTicketPartExt, { key-server }, { ku-Ticket }
4604 extensions [4] TicketExtensions OPTIONAL,
4607 { key-ticket }, { ku-Ticket-cksum }
4611 -- Encrypted part of ticket
4612 EncTicketPart ::= CHOICE {
4613 rfc1510 EncTicketPart1510,
4614 ext EncTicketPartExt
4618 EncTicketPart1510 ::= [APPLICATION 3] SEQUENCE {
4619 flags [0] TicketFlags,
4620 key [1] EncryptionKey,
4621 crealm [2] RealmIA5,
4622 cname [3] PrincipalNameIA5,
4623 transited [4] TransitedEncoding,
4624 authtime [5] KerberosTime,
4625 starttime [6] KerberosTime OPTIONAL,
4626 endtime [7] KerberosTime,
4627 renew-till [8] KerberosTime OPTIONAL,
4628 caddr [9] HostAddresses OPTIONAL,
4629 authorization-data [10] AuthorizationData OPTIONAL
4647 Yu Expires: Apr 2007 [Page 83]
4649 Internet-Draft rfc1510ter-03 23 Oct 2006
4651 EncTicketPartExt ::= [APPLICATION 5] SEQUENCE {
4652 flags [0] TicketFlags,
4653 key [1] EncryptionKey,
4654 crealm [2] RealmExt,
4655 cname [3] PrincipalNameExt,
4656 transited [4] TransitedEncoding,
4657 authtime [5] KerberosTime,
4658 starttime [6] KerberosTime OPTIONAL,
4659 endtime [7] KerberosTime,
4660 renew-till [8] KerberosTime OPTIONAL,
4661 caddr [9] HostAddresses OPTIONAL,
4662 authorization-data [10] AuthorizationData OPTIONAL,
4668 -- *** Authorization Data
4674 AuthorizationData ::= SEQUENCE OF SEQUENCE {
4676 ad-data [1] OCTET STRING
4680 ad-if-relevant ADType ::= int32 : 1
4682 -- Encapsulates another AuthorizationData.
4683 -- Intended for application servers; receiving application servers
4685 AD-IF-RELEVANT ::= AuthorizationData
4688 -- KDC-issued privilege attributes
4689 ad-kdcissued ADType ::= int32 : 4
4691 AD-KDCIssued ::= SEQUENCE {
4692 ad-checksum [0] ChecksumOf {
4693 AuthorizationData, { key-session },
4694 { ku-ad-KDCIssued-cksum }},
4695 i-realm [1] Realm OPTIONAL,
4696 i-sname [2] PrincipalName OPTIONAL,
4697 elements [3] AuthorizationData
4703 Yu Expires: Apr 2007 [Page 84]
4705 Internet-Draft rfc1510ter-03 23 Oct 2006
4707 ad-and-or ADType ::= int32 : 5
4709 AD-AND-OR ::= SEQUENCE {
4710 condition-count [0] Int32,
4711 elements [1] AuthorizationData
4715 -- KDCs MUST interpret any AuthorizationData wrapped in this.
4716 ad-mandatory-for-kdc ADType ::= int32 : 8
4717 AD-MANDATORY-FOR-KDC ::= AuthorizationData
4720 ad-initial-verified-cas ADType ::= int32 : 9
4723 TrType ::= TH-id -- must be registered
4725 -- encoded Transited field
4726 TransitedEncoding ::= SEQUENCE {
4728 contents [1] OCTET STRING
4734 -- ticket extensions: for TicketExt only
4735 TicketExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
4737 te-data [1] OCTET STRING
4759 Yu Expires: Apr 2007 [Page 85]
4761 Internet-Draft rfc1510ter-03 23 Oct 2006
4763 TicketFlags ::= KerberosFlags { TicketFlagsBits }
4765 TicketFlagsBits ::= BIT STRING {
4778 transited-policy-checked (12),
4779 ok-as-delegate (13),
4781 cksummed-ticket (15)
4791 rfc1510 AS-REQ-1510,
4794 AS-REQ-1510 ::= [APPLICATION 10] KDC-REQ-1510
4795 -- AS-REQ must include client name
4797 AS-REQ-EXT ::= [APPLICATION 6] Signed {
4798 [APPLICATION 6] KDC-REQ-EXT, { key-client }, { ku-ASReq-cksum }
4800 -- AS-REQ must include client name
4803 TGS-REQ ::= CHOICE {
4804 rfc1510 TGS-REQ-1510,
4808 TGS-REQ-1510 ::= [APPLICATION 12] KDC-REQ-1510
4810 TGS-REQ-EXT ::= [APPLICATION 8] Signed {
4811 [APPLICATION 8] KDC-REQ-EXT, { key-session }, { ku-TGSReq-cksum }
4815 Yu Expires: Apr 2007 [Page 86]
4817 Internet-Draft rfc1510ter-03 23 Oct 2006
4819 KDC-REQ-1510 ::= SEQUENCE {
4820 -- NOTE: first tag is [1], not [0]
4821 pvno [1] INTEGER (5),
4822 msg-type [2] INTEGER ( 10 -- AS-REQ --
4823 | 12 -- TGS-REQ -- ),
4824 padata [3] SEQUENCE OF PA-DATA OPTIONAL,
4825 req-body [4] KDC-REQ-BODY-1510
4829 KDC-REQ-EXT ::= SEQUENCE {
4830 pvno [1] INTEGER (5),
4831 msg-type [2] INTEGER ( 6 -- AS-REQ --
4832 | 8 -- TGS-REQ -- ),
4833 padata [3] SEQUENCE (SIZE (1..MAX)) OF PA-DATA OPTIONAL,
4834 req-body [4] KDC-REQ-BODY-EXT,
4839 KDC-REQ-BODY-1510 ::= SEQUENCE {
4840 kdc-options [0] KDCOptions,
4841 cname [1] PrincipalNameIA5 OPTIONAL
4842 -- Used only in AS-REQ --,
4845 -- Server's realm; also client's in AS-REQ --,
4847 sname [3] PrincipalNameIA5 OPTIONAL,
4848 from [4] KerberosTime OPTIONAL,
4849 till [5] KerberosTime,
4850 rtime [6] KerberosTime OPTIONAL,
4852 etype [8] SEQUENCE OF EType
4853 -- in preference order --,
4855 addresses [9] HostAddresses OPTIONAL,
4856 enc-authorization-data [10] EncryptedData {
4857 AuthorizationData, { key-session | key-subsession },
4858 { ku-TGSReqAuthData-subkey |
4859 ku-TGSReqAuthData-sesskey }
4862 additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
4863 -- NOTE: not empty --
4871 Yu Expires: Apr 2007 [Page 87]
4873 Internet-Draft rfc1510ter-03 23 Oct 2006
4875 KDC-REQ-BODY-EXT ::= SEQUENCE {
4876 kdc-options [0] KDCOptions,
4877 cname [1] PrincipalName OPTIONAL
4878 -- Used only in AS-REQ --,
4881 -- Server's realm; also client's in AS-REQ --,
4883 sname [3] PrincipalName OPTIONAL,
4884 from [4] KerberosTime OPTIONAL,
4885 till [5] KerberosTime OPTIONAL
4886 -- was required in rfc1510;
4887 -- still required for compat versions
4890 rtime [6] KerberosTime OPTIONAL,
4892 etype [8] SEQUENCE OF EType
4893 -- in preference order --,
4895 addresses [9] HostAddresses OPTIONAL,
4896 enc-authorization-data [10] EncryptedData {
4897 AuthorizationData, { key-session | key-subsession },
4898 { ku-TGSReqAuthData-subkey |
4899 ku-TGSReqAuthData-sesskey }
4902 additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
4903 -- NOTE: not empty --,
4905 lang-tags [5] SEQUENCE (SIZE (1..MAX)) OF
4927 Yu Expires: Apr 2007 [Page 88]
4929 Internet-Draft rfc1510ter-03 23 Oct 2006
4931 KDCOptions ::= KerberosFlags { KDCOptionsBits }
4933 KDCOptionsBits ::= BIT STRING {
4948 requestanonymous (14),
4950 disable-transited-check (26),
4952 enc-tkt-in-skey (28),
4955 -- XXX need "need ticket1" flag?
4960 rfc1510 AS-REP-1510,
4963 AS-REP-1510 ::= [APPLICATION 11] KDC-REP-1510
4964 AS-REP-EXT ::= [APPLICATION 7] Signed {
4965 [APPLICATION 7] KDC-REP-EXT,
4966 { key-reply }, { ku-ASRep-cksum }
4970 TGS-REP ::= CHOICE {
4971 rfc1510 TGS-REP-1510,
4974 TGS-REP-1510 ::= [APPLICATION 13] KDC-REP-1510 { EncTGSRepPart1510 }
4975 TGS-REP-EXT ::= [APPLICATION 9] Signed {
4976 [APPLICATION 9] KDC-REP-EXT { EncTGSRepPartExt },
4977 { key-reply }, { ku-TGSRep-cksum }
4983 Yu Expires: Apr 2007 [Page 89]
4985 Internet-Draft rfc1510ter-03 23 Oct 2006
4987 KDC-REP-1510 { EncPart } ::= SEQUENCE {
4988 pvno [0] INTEGER (5),
4989 msg-type [1] INTEGER (11 -- AS-REP.rfc1510 -- |
4990 13 -- TGS.rfc1510 -- ),
4991 padata [2] SEQUENCE OF PA-DATA OPTIONAL,
4992 crealm [3] RealmIA5,
4993 cname [4] PrincipalNameIA5,
4996 enc-part [6] EncryptedData {
4999 -- maybe reach into EncryptedData in AS-REP/TGS-REP
5000 -- definitions to apply constraints on key usages?
5001 { ku-EncASRepPart -- if AS-REP -- |
5002 ku-EncTGSRepPart-subkey -- if TGS-REP and
5003 -- using Authenticator
5005 ku-EncTGSRepPart-sesskey -- if TGS-REP and using
5006 -- subsession key -- }
5039 Yu Expires: Apr 2007 [Page 90]
5041 Internet-Draft rfc1510ter-03 23 Oct 2006
5043 KDC-REP-EXT { EncPart } ::= SEQUENCE {
5044 pvno [0] INTEGER (5),
5045 msg-type [1] INTEGER (7 -- AS-REP.ext -- |
5046 9 -- TGS-REP.ext -- ),
5047 padata [2] SEQUENCE OF PA-DATA OPTIONAL,
5048 crealm [3] RealmExt,
5049 cname [4] PrincipalNameExt,
5052 enc-part [6] EncryptedData {
5055 -- maybe reach into EncryptedData in AS-REP/TGS-REP
5056 -- definitions to apply constraints on key usages?
5057 { ku-EncASRepPart -- if AS-REP -- |
5058 ku-EncTGSRepPart-subkey -- if TGS-REP and
5059 -- using Authenticator
5061 ku-EncTGSRepPart-sesskey -- if TGS-REP and using
5062 -- subsession key -- }
5066 -- In extensible version, KDC signs original request
5067 -- to avoid replay attacks against client.
5068 req-cksum [7] ChecksumOf { CHOICE {
5071 }, { key-reply }, { ku-KDCRep-cksum }} OPTIONAL,
5072 lang-tag [8] LangTag OPTIONAL,
5095 Yu Expires: Apr 2007 [Page 91]
5097 Internet-Draft rfc1510ter-03 23 Oct 2006
5099 EncASRepPart1510 ::= [APPLICATION 25] EncKDCRepPart1510
5100 EncTGSRepPart1510 ::= [APPLICATION 26] EncKDCRepPart1510
5102 EncASRepPartExt ::= [APPLICATION 32] EncKDCRepPartExt
5103 EncTGSRepPartExt ::= [APPLICATION 33] EncKDCRepPartExt
5105 EncKDCRepPart1510 ::= SEQUENCE {
5106 key [0] EncryptionKey,
5107 last-req [1] LastReq,
5109 key-expiration [3] KerberosTime OPTIONAL,
5110 flags [4] TicketFlags,
5111 authtime [5] KerberosTime,
5112 starttime [6] KerberosTime OPTIONAL,
5113 endtime [7] KerberosTime,
5114 renew-till [8] KerberosTime OPTIONAL,
5115 srealm [9] RealmIA5,
5116 sname [10] PrincipalNameIA5,
5117 caddr [11] HostAddresses OPTIONAL
5120 EncKDCRepPartExt ::= SEQUENCE {
5121 key [0] EncryptionKey,
5122 last-req [1] LastReq,
5124 key-expiration [3] KerberosTime OPTIONAL,
5125 flags [4] TicketFlags,
5126 authtime [5] KerberosTime,
5127 starttime [6] KerberosTime OPTIONAL,
5128 endtime [7] KerberosTime,
5129 renew-till [8] KerberosTime OPTIONAL,
5131 sname [10] PrincipalName,
5132 caddr [11] HostAddresses OPTIONAL,
5138 LastReq ::= SEQUENCE OF SEQUENCE {
5140 lr-value [1] KerberosTime
5151 Yu Expires: Apr 2007 [Page 92]
5153 Internet-Draft rfc1510ter-03 23 Oct 2006
5155 PaDataType ::= TH-id
5156 PaDataOID ::= RELATIVE-OID
5158 PA-DATA ::= SEQUENCE {
5159 -- NOTE: first tag is [1], not [0]
5160 padata-type [1] PaDataType,
5161 padata-value [2] OCTET STRING
5165 -- AP-REQ authenticating a TGS-REQ
5166 pa-tgs-req PaDataType ::= int32 : 1
5167 PA-TGS-REQ ::= AP-REQ
5170 -- Encrypted timestamp preauth
5171 -- Encryption key used is client's long-term key.
5172 pa-enc-timestamp PaDataType ::= int32 : 2
5174 PA-ENC-TIMESTAMP ::= EncryptedData {
5175 PA-ENC-TS-ENC, { key-client }, { ku-pa-enc-ts }
5178 PA-ENC-TS-ENC ::= SEQUENCE {
5179 patimestamp [0] KerberosTime -- client's time --,
5180 pausec [1] Microseconds OPTIONAL
5184 -- Hints returned in AS-REP or KRB-ERROR to help client
5185 -- choose a password-derived key, either for preauthentication
5186 -- or for decryption of the reply.
5187 pa-etype-info PaDataType ::= int32 : 11
5189 ETYPE-INFO ::= SEQUENCE OF ETYPE-INFO-ENTRY
5191 ETYPE-INFO-ENTRY ::= SEQUENCE {
5193 salt [1] OCTET STRING OPTIONAL
5207 Yu Expires: Apr 2007 [Page 93]
5209 Internet-Draft rfc1510ter-03 23 Oct 2006
5211 -- Similar to etype-info, but with parameters provided for
5212 -- the string-to-key function.
5213 pa-etype-info2 PaDataType ::= int32 : 19
5215 ETYPE-INFO2 ::= SEQUENCE (SIZE (1..MAX))
5218 ETYPE-INFO2-ENTRY ::= SEQUENCE {
5220 salt [1] KerberosString OPTIONAL,
5221 s2kparams [2] OCTET STRING OPTIONAL
5225 -- Obsolescent. Salt for client long-term key
5226 -- Its character encoding is unspecified.
5227 pa-pw-salt PaDataType ::= int32 : 3
5229 -- The "padata-value" does not encode an ASN.1 type.
5230 -- Instead, "padata-value" must consist of the salt string to
5231 -- be used by the client, in an unspecified character
5235 -- An extensible AS-REQ may be sent as a padata in a
5236 -- non-extensible AS-REQ to allow for backwards compatibility.
5237 pa-as-req PaDataType ::= int32 : 42 -- provisional
5238 PA-AS-REQ ::= AS-REQ (WITH COMPONENTS ext)
5242 -- *** Session key exchange
5247 rfc1510 AP-REQ-1510,
5263 Yu Expires: Apr 2007 [Page 94]
5265 Internet-Draft rfc1510ter-03 23 Oct 2006
5267 AP-REQ-1510 ::= [APPLICATION 14] SEQUENCE {
5268 pvno [0] INTEGER (5),
5269 msg-type [1] INTEGER (14),
5270 ap-options [2] APOptions,
5271 ticket [3] Ticket1510,
5272 authenticator [4] EncryptedData {
5275 { ku-APReq-authenticator |
5276 ku-pa-TGSReq-authenticator }
5281 AP-REQ-EXT ::= [APPLICATION 18] Signed {
5282 [APPLICATION 18] SEQUENCE {
5283 pvno [0] INTEGER (5),
5284 msg-type [1] INTEGER (18),
5285 ap-options [2] APOptions,
5287 authenticator [4] EncryptedData {
5290 { ku-APReq-authenticator |
5291 ku-pa-TGSReq-authenticator }
5294 extensions [5] ApReqExtensions OPTIONAL,
5295 lang-tag [6] SEQUENCE (SIZE (1..MAX))
5296 OF LangTag OPTIONAL,
5298 }, { key-session }, { ku-APReq-cksum }
5302 ApReqExtType ::= TH-id
5304 ApReqExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
5305 apReqExt-Type [0] ApReqExtType,
5306 apReqExt-Data [1] OCTET STRING
5310 APOptions ::= KerberosFlags { APOptionsBits }
5312 APOptionsBits ::= BIT STRING {
5314 use-session-key (1),
5319 Yu Expires: Apr 2007 [Page 95]
5321 Internet-Draft rfc1510ter-03 23 Oct 2006
5323 -- plaintext of authenticator
5324 Authenticator1510 ::= [APPLICATION 2] SEQUENCE {
5325 authenticator-vno [0] INTEGER (5),
5326 crealm [1] RealmIA5,
5327 cname [2] PrincipalNameIA5,
5328 cksum [3] Checksum {{ key-session },
5329 { ku-Authenticator-cksum |
5330 ku-pa-TGSReq-cksum }} OPTIONAL,
5331 cusec [4] Microseconds,
5332 ctime [5] KerberosTime,
5333 subkey [6] EncryptionKey OPTIONAL,
5334 seq-number [7] SeqNum32 OPTIONAL,
5335 authorization-data [8] AuthorizationData OPTIONAL
5338 AuthenticatorExt ::= [APPLICATION 35] SEQUENCE {
5339 authenticator-vno [0] INTEGER (5),
5340 crealm [1] RealmExt,
5341 cname [2] PrincipalNameExt,
5342 cksum [3] Checksum {{ key-session },
5343 { ku-Authenticator-cksum |
5344 ku-pa-TGSReq-cksum }} OPTIONAL,
5345 cusec [4] Microseconds,
5346 ctime [5] KerberosTime,
5347 subkey [6] EncryptionKey OPTIONAL,
5348 seq-number [7] SeqNum OPTIONAL,
5349 authorization-data [8] AuthorizationData OPTIONAL,
5355 rfc1510 AP-REP-1510,
5360 AP-REP-1510 ::= [APPLICATION 15] SEQUENCE {
5361 pvno [0] INTEGER (5),
5362 msg-type [1] INTEGER (15),
5363 enc-part [2] EncryptedData {
5365 { key-session | key-subsession }, { ku-EncAPRepPart }}
5375 Yu Expires: Apr 2007 [Page 96]
5377 Internet-Draft rfc1510ter-03 23 Oct 2006
5379 AP-REP-EXT ::= [APPLICATION 19] Signed {
5380 [APPLICATION 19] SEQUENCE {
5381 pvno [0] INTEGER (5),
5382 msg-type [1] INTEGER (19),
5383 enc-part [2] EncryptedData {
5385 { key-session | key-subsession }, { ku-EncAPRepPart }},
5387 extensions [3] ApRepExtensions OPTIONAL,
5389 }, { key-session | key-subsession }, { ku-APRep-cksum }
5393 ApRepExtType ::= TH-id
5395 ApRepExtensions ::= SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
5396 apRepExt-Type [0] ApRepExtType,
5397 apRepExt-Data [1] OCTET STRING
5401 EncAPRepPart ::= CHOICE {
5402 rfc1510 EncAPRepPart1510,
5407 EncAPRepPart1510 ::= [APPLICATION 27] SEQUENCE {
5408 ctime [0] KerberosTime,
5409 cusec [1] Microseconds,
5410 subkey [2] EncryptionKey OPTIONAL,
5411 seq-number [3] SeqNum32 OPTIONAL
5415 EncAPRepPartExt ::= [APPLICATION 31] SEQUENCE {
5416 ctime [0] KerberosTime,
5417 cusec [1] Microseconds,
5418 subkey [2] EncryptionKey OPTIONAL,
5419 seq-number [3] SeqNum OPTIONAL,
5421 authorization-data [4] AuthorizationData OPTIONAL,
5427 -- *** Application messages
5431 Yu Expires: Apr 2007 [Page 97]
5433 Internet-Draft rfc1510ter-03 23 Oct 2006
5435 KRB-SAFE ::= CHOICE {
5436 rfc1510 KRB-SAFE-1510,
5441 KRB-SAFE-1510 ::= [APPLICATION 20] SEQUENCE {
5442 pvno [0] INTEGER (5),
5443 msg-type [1] INTEGER (20),
5444 safe-body [2] KRB-SAFE-BODY,
5445 cksum [3] ChecksumOf {
5447 { key-session | key-subsession }, { ku-KrbSafe-cksum }}
5451 -- Has safe-body optional to allow for GSS-MIC type functionality
5452 KRB-SAFE-EXT ::= [APPLICATION 34] SEQUENCE {
5453 pvno [0] INTEGER (5),
5454 msg-type [1] INTEGER (20),
5455 safe-body [2] KRB-SAFE-BODY OPTIONAL,
5456 cksum [3] ChecksumOf {
5458 { key-session | key-subsession }, { ku-KrbSafe-cksum }},
5463 KRB-SAFE-BODY ::= SEQUENCE {
5464 user-data [0] OCTET STRING,
5465 timestamp [1] KerberosTime OPTIONAL,
5466 usec [2] Microseconds OPTIONAL,
5467 seq-number [3] SeqNum OPTIONAL,
5468 s-address [4] HostAddress,
5469 r-address [5] HostAddress OPTIONAL,
5470 ... -- ASN.1 extensions must be excluded
5471 -- when sending to rfc1510 implementations
5475 KRB-PRIV ::= [APPLICATION 21] SEQUENCE {
5476 pvno [0] INTEGER (5),
5477 msg-type [1] INTEGER (21),
5478 enc-part [3] EncryptedData {
5480 { key-session | key-subsession }, { ku-EncKrbPrivPart }},
5487 Yu Expires: Apr 2007 [Page 98]
5489 Internet-Draft rfc1510ter-03 23 Oct 2006
5491 EncKrbPrivPart ::= [APPLICATION 28] SEQUENCE {
5492 user-data [0] OCTET STRING,
5493 timestamp [1] KerberosTime OPTIONAL,
5494 usec [2] Microseconds OPTIONAL,
5495 seq-number [3] SeqNum OPTIONAL,
5496 s-address [4] HostAddress -- sender's addr --,
5497 r-address [5] HostAddress OPTIONAL -- recip's addr --,
5498 ... -- ASN.1 extensions must be excluded
5499 -- when sending to rfc1510 implementations
5503 KRB-CRED ::= CHOICE {
5504 rfc1510 KRB-CRED-1510,
5510 KRB-CRED-1510 ::= [APPLICATION 22] SEQUENCE {
5511 pvno [0] INTEGER (5),
5512 msg-type [1] INTEGER (22),
5513 tickets [2] SEQUENCE OF Ticket,
5514 enc-part [3] EncryptedData {
5516 { key-session | key-subsession }, { ku-EncKrbCredPart }}
5520 KRB-CRED-EXT ::= [APPLICATION 24] Signed {
5521 [APPLICATION 24] SEQUENCE {
5522 pvno [0] INTEGER (5),
5523 msg-type [1] INTEGER (24),
5524 tickets [2] SEQUENCE OF Ticket,
5525 enc-part [3] EncryptedData {
5527 { key-session | key-subsession }, { ku-EncKrbCredPart }},
5529 }, { key-session | key-subsession }, { ku-KrbCred-cksum }
5543 Yu Expires: Apr 2007 [Page 99]
5545 Internet-Draft rfc1510ter-03 23 Oct 2006
5547 EncKrbCredPart ::= [APPLICATION 29] SEQUENCE {
5548 ticket-info [0] SEQUENCE OF KrbCredInfo,
5549 nonce [1] Nonce OPTIONAL,
5550 timestamp [2] KerberosTime OPTIONAL,
5551 usec [3] Microseconds OPTIONAL,
5552 s-address [4] HostAddress OPTIONAL,
5553 r-address [5] HostAddress OPTIONAL
5557 KrbCredInfo ::= SEQUENCE {
5558 key [0] EncryptionKey,
5559 prealm [1] Realm OPTIONAL,
5560 pname [2] PrincipalName OPTIONAL,
5561 flags [3] TicketFlags OPTIONAL,
5562 authtime [4] KerberosTime OPTIONAL,
5563 starttime [5] KerberosTime OPTIONAL,
5564 endtime [6] KerberosTime OPTIONAL,
5565 renew-till [7] KerberosTime OPTIONAL,
5566 srealm [8] Realm OPTIONAL,
5567 sname [9] PrincipalName OPTIONAL,
5568 caddr [10] HostAddresses OPTIONAL
5572 TGT-REQ ::= [APPLICATION 16] SEQUENCE {
5573 pvno [0] INTEGER (5),
5574 msg-type [1] INTEGER (16),
5575 sname [2] PrincipalName OPTIONAL,
5576 srealm [3] Realm OPTIONAL,
5582 -- *** Error messages
5588 KRB-ERROR ::= CHOICE {
5589 rfc1510 KRB-ERROR-1510,
5599 Yu Expires: Apr 2007 [Page 100]
5601 Internet-Draft rfc1510ter-03 23 Oct 2006
5603 KRB-ERROR-1510 ::= [APPLICATION 30] SEQUENCE {
5604 pvno [0] INTEGER (5),
5605 msg-type [1] INTEGER (30),
5606 ctime [2] KerberosTime OPTIONAL,
5607 cusec [3] Microseconds OPTIONAL,
5608 stime [4] KerberosTime,
5609 susec [5] Microseconds,
5610 error-code [6] ErrCode,
5611 crealm [7] RealmIA5 OPTIONAL,
5612 cname [8] PrincipalNameIA5 OPTIONAL,
5613 realm [9] RealmIA5 -- Correct realm --,
5614 sname [10] PrincipalNameIA5 -- Correct name --,
5615 e-text [11] KerberosString OPTIONAL,
5616 e-data [12] OCTET STRING OPTIONAL
5620 KRB-ERROR-EXT ::= [APPLICATION 23] Signed {
5621 [APPLICATION 23] SEQUENCE{
5622 pvno [0] INTEGER (5),
5623 msg-type [1] INTEGER (23),
5624 ctime [2] KerberosTime OPTIONAL,
5625 cusec [3] Microseconds OPTIONAL,
5626 stime [4] KerberosTime,
5627 susec [5] Microseconds,
5628 error-code [6] ErrCode,
5629 crealm [7] Realm OPTIONAL,
5630 cname [8] PrincipalName OPTIONAL,
5631 realm [9] Realm -- Correct realm --,
5632 sname [10] PrincipalName -- Correct name --,
5633 e-text [11] KerberosString OPTIONAL,
5634 e-data [12] OCTET STRING OPTIONAL,
5636 typed-data [13] TYPED-DATA OPTIONAL,
5637 nonce [14] Nonce OPTIONAL,
5638 lang-tag [15] LangTag OPTIONAL,
5640 }, { }, { ku-KrbError-cksum }
5644 METHOD-DATA ::= SEQUENCE OF PA-DATA
5649 TYPED-DATA ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
5650 data-type [0] TDType,
5651 data-value [1] OCTET STRING OPTIONAL
5655 Yu Expires: Apr 2007 [Page 101]
5657 Internet-Draft rfc1510ter-03 23 Oct 2006
5659 td-dh-parameters TDType ::= int32 : 109
5667 kdc-err-none ErrCode ::= 0
5668 -- Client's entry in database has expired
5669 kdc-err-name-exp ErrCode ::= 1
5670 -- Server's entry in database has expired
5671 kdc-err-service-exp ErrCode ::= 2
5672 -- Requested protocol version number not supported
5673 kdc-err-bad-pvno ErrCode ::= 3
5674 -- Client's key encrypted in old master key
5675 kdc-err-c-old-mast-kvno ErrCode ::= 4
5676 -- Server's key encrypted in old master key
5677 kdc-err-s-old-mast-kvno ErrCode ::= 5
5678 -- Client not found in Kerberos database
5679 kdc-err-c-principal-unknown ErrCode ::= 6
5680 -- Server not found in Kerberos database
5681 kdc-err-s-principal-unknown ErrCode ::= 7
5682 -- Multiple principal entries in database
5683 kdc-err-principal-not-unique ErrCode ::= 8
5684 -- The client or server has a null key
5685 kdc-err-null-key ErrCode ::= 9
5686 -- Ticket not eligible for postdating
5687 kdc-err-cannot-postdate ErrCode ::= 10
5688 -- Requested start time is later than end time
5689 kdc-err-never-valid ErrCode ::= 11
5690 -- KDC policy rejects request
5691 kdc-err-policy ErrCode ::= 12
5692 -- KDC cannot accommodate requested option
5693 kdc-err-badoption ErrCode ::= 13
5694 -- KDC has no support for encryption type
5695 kdc-err-etype-nosupp ErrCode ::= 14
5696 -- KDC has no support for checksum type
5697 kdc-err-sumtype-nosupp ErrCode ::= 15
5698 -- KDC has no support for padata type
5699 kdc-err-padata-type-nosupp ErrCode ::= 16
5700 -- KDC has no support for transited type
5701 kdc-err-trtype-nosupp ErrCode ::= 17
5702 -- Clients credentials have been revoked
5703 kdc-err-client-revoked ErrCode ::= 18
5704 -- Credentials for server have been revoked
5705 kdc-err-service-revoked ErrCode ::= 19
5706 -- TGT has been revoked
5707 kdc-err-tgt-revoked ErrCode ::= 20
5711 Yu Expires: Apr 2007 [Page 102]
5713 Internet-Draft rfc1510ter-03 23 Oct 2006
5715 -- Client not yet valid - try again later
5716 kdc-err-client-notyet ErrCode ::= 21
5717 -- Server not yet valid - try again later
5718 kdc-err-service-notyet ErrCode ::= 22
5719 -- Password has expired - change password to reset
5720 kdc-err-key-expired ErrCode ::= 23
5721 -- Pre-authentication information was invalid
5722 kdc-err-preauth-failed ErrCode ::= 24
5723 -- Additional pre-authenticationrequired
5724 kdc-err-preauth-required ErrCode ::= 25
5725 -- Requested server and ticket don't match
5726 kdc-err-server-nomatch ErrCode ::= 26
5727 -- Server principal valid for user2user only
5728 kdc-err-must-use-user2user ErrCode ::= 27
5729 -- KDC Policy rejects transited path
5730 kdc-err-path-not-accpeted ErrCode ::= 28
5731 -- A service is not available
5732 kdc-err-svc-unavailable ErrCode ::= 29
5733 -- Integrity check on decrypted field failed
5734 krb-ap-err-bad-integrity ErrCode ::= 31
5736 krb-ap-err-tkt-expired ErrCode ::= 32
5737 -- Ticket not yet valid
5738 krb-ap-err-tkt-nyv ErrCode ::= 33
5739 -- Request is a replay
5740 krb-ap-err-repeat ErrCode ::= 34
5741 -- The ticket isn't for us
5742 krb-ap-err-not-us ErrCode ::= 35
5743 -- Ticket and authenticator don't match
5744 krb-ap-err-badmatch ErrCode ::= 36
5745 -- Clock skew too great
5746 krb-ap-err-skew ErrCode ::= 37
5747 -- Incorrect net address
5748 krb-ap-err-badaddr ErrCode ::= 38
5749 -- Protocol version mismatch
5750 krb-ap-err-badversion ErrCode ::= 39
5752 krb-ap-err-msg-type ErrCode ::= 40
5767 Yu Expires: Apr 2007 [Page 103]
5769 Internet-Draft rfc1510ter-03 23 Oct 2006
5771 -- Message stream modified
5772 krb-ap-err-modified ErrCode ::= 41
5773 -- Message out of order
5774 krb-ap-err-badorder ErrCode ::= 42
5775 -- Specified version of key is not available
5776 krb-ap-err-badkeyver ErrCode ::= 44
5777 -- Service key not available
5778 krb-ap-err-nokey ErrCode ::= 45
5779 -- Mutual authentication failed
5780 krb-ap-err-mut-fail ErrCode ::= 46
5781 -- Incorrect message direction
5782 krb-ap-err-baddirection ErrCode ::= 47
5783 -- Alternative authentication method required
5784 krb-ap-err-method ErrCode ::= 48
5785 -- Incorrect sequence number in message
5786 krb-ap-err-badseq ErrCode ::= 49
5787 -- Inappropriate type of checksum in message
5788 krb-ap-err-inapp-cksum ErrCode ::= 50
5789 -- Policy rejects transited path
5790 krb-ap-path-not-accepted ErrCode ::= 51
5791 -- Response too big for UDP, retry with TCP
5792 krb-err-response-too-big ErrCode ::= 52
5793 -- Generic error (description in e-text)
5794 krb-err-generic ErrCode ::= 60
5823 Yu Expires: Apr 2007 [Page 104]
5825 Internet-Draft rfc1510ter-03 23 Oct 2006
5827 -- Field is too long for this implementation
5828 krb-err-field-toolong ErrCode ::= 61
5829 -- Reserved for PKINIT
5830 kdc-error-client-not-trusted ErrCode ::= 62
5831 -- Reserved for PKINIT
5832 kdc-error-kdc-not-trusted ErrCode ::= 63
5833 -- Reserved for PKINIT
5834 kdc-error-invalid-sig ErrCode ::= 64
5835 -- Reserved for PKINIT
5836 kdc-err-key-too-weak ErrCode ::= 65
5837 -- Reserved for PKINIT
5838 kdc-err-certificate-mismatch ErrCode ::= 66
5839 -- No TGT available to validate USER-TO-USER
5840 krb-ap-err-no-tgt ErrCode ::= 67
5841 -- USER-TO-USER TGT issued different KDC
5842 kdc-err-wrong-realm ErrCode ::= 68
5843 -- Ticket must be for USER-TO-USER
5844 krb-ap-err-user-to-user-required ErrCode ::= 69
5845 -- Reserved for PKINIT
5846 kdc-err-cant-verify-certificate ErrCode ::= 70
5847 -- Reserved for PKINIT
5848 kdc-err-invalid-certificate ErrCode ::= 71
5849 -- Reserved for PKINIT
5850 kdc-err-revoked-certificate ErrCode ::= 72
5851 -- Reserved for PKINIT
5852 kdc-err-revocation-status-unknown ErrCode ::= 73
5853 -- Reserved for PKINIT
5854 kdc-err-revocation-status-unavailable ErrCode ::= 74
5855 -- Reserved for PKINIT
5856 kdc-err-client-name-mismatch ErrCode ::= 75
5857 -- Reserved for PKINIT
5858 kdc-err-kdc-name-mismatch ErrCode ::= 76
5859 -- Reserved for PKINIT
5860 kdc-err-inconsistent-key-purpose ErrCode ::= 77
5861 -- Reserved for PKINIT
5862 kdc-err-digest-in-cert-not-accepted ErrCode ::= 78
5863 -- Reserved for PKINIT
5864 kdc-err-pa-checksum-must-be-included ErrCode ::= 79
5865 -- Reserved for PKINIT
5866 kdc-err-digest-in-signed-data-not-accepted ErrCode ::= 80
5867 -- Reserved for PKINIT
5868 kdc-err-public-key-encryption-not-supported ErrCode ::= 81
5874 B. Kerberos and Character Encodings (Informative)
5876 [adapted from KCLAR 5.2.1]
5879 Yu Expires: Apr 2007 [Page 105]
5881 Internet-Draft rfc1510ter-03 23 Oct 2006
5883 The original specification of the Kerberos protocol in RFC 1510 uses
5884 GeneralString in numerous places for human-readable string data.
5885 Historical implementations of Kerberos cannot utilize the full power
5886 of GeneralString. This ASN.1 type requires the use of designation
5887 and invocation escape sequences as specified in ISO 2022 | ECMA-35
5888 [ISO2022] to switch character sets, and the default character set
5889 that is designated as G0 is the ISO 646 | ECMA-6 [ISO646]
5890 International Reference Version (IRV) (aka U.S. ASCII), which mostly
5893 ISO 2022 | ECMA-35 defines four character-set code elements (G0..G3)
5894 and two Control-function code elements (C0..C1). DER previously
5895 [X690-1997] prohibited the designation of character sets as any but
5896 the G0 and C0 sets. This had the side effect of prohibiting the use
5897 of (ISO Latin) character-sets such as ISO 8859-1 [ISO8859-1] or any
5898 other character-sets that utilize a 96-character set, since it is
5899 prohibited by ISO 2022 | ECMA-35 to designate them as the G0 code
5900 element. Recent revisions to the ASN.1 standards resolve this
5903 In practice, many implementations treat RFC 1510 GeneralStrings as if
5904 they were 8-bit strings of whichever character set the implementation
5905 defaults to, without regard for correct usage of character-set
5906 designation escape sequences. The default character set is often
5907 determined by the current user's operating system dependent locale.
5908 At least one major implementation places unescaped UTF-8 encoded
5909 Unicode characters in the GeneralString. This failure to conform to
5910 the GeneralString specifications results in interoperability issues
5911 when conflicting character encodings are utilized by the Kerberos
5912 clients, services, and KDC.
5914 This unfortunate situation is the result of improper documentation of
5915 the restrictions of the ASN.1 GeneralString type in prior Kerberos
5918 [the following should probably be rewritten and moved into the
5919 principal name section]
5921 For compatibility, implementations MAY choose to accept GeneralString
5922 values that contain characters other than those permitted by
5923 IA5String, but they should be aware that character set designation
5924 codes will likely be absent, and that the encoding should probably be
5925 treated as locale-specific in almost every way. Implementations MAY
5926 also choose to emit GeneralString values that are beyond those
5927 permitted by IA5String, but should be aware that doing so is
5928 extraordinarily risky from an interoperability perspective.
5930 Some existing implementations use GeneralString to encode unescaped
5931 locale-specific characters. This is a violation of the ASN.1
5932 standard. Most of these implementations encode US-ASCII in the left-
5933 hand half, so as long the implementation transmits only US-ASCII, the
5935 Yu Expires: Apr 2007 [Page 106]
5937 Internet-Draft rfc1510ter-03 23 Oct 2006
5939 ASN.1 standard is not violated in this regard. As soon as such an
5940 implementation encodes unescaped locale-specific characters with the
5941 high bit set, it violates the ASN.1 standard.
5943 Other implementations have been known to use GeneralString to contain
5944 a UTF-8 encoding. This also violates the ASN.1 standard, since UTF-8
5945 is a different encoding, not a 94 or 96 character "G" set as defined
5946 by ISO 2022. It is believed that these implementations do not even
5947 use the ISO 2022 escape sequence to change the character encoding.
5948 Even if implementations were to announce the change of encoding by
5949 using that escape sequence, the ASN.1 standard prohibits the use of
5950 any escape sequences other than those used to designate/invoke "G" or
5951 "C" sets allowed by GeneralString.
5953 C. Kerberos History (Informative)
5955 [Adapted from KCLAR "BACKGROUND"]
5957 The Kerberos model is based in part on Needham and Schroeder's
5958 trusted third-party authentication protocol [NS78] and on
5959 modifications suggested by Denning and Sacco [DS81]. The original
5960 design and implementation of Kerberos Versions 1 through 4 was the
5961 work of two former Project Athena staff members, Steve Miller of
5962 Digital Equipment Corporation and Clifford Neuman (now at the
5963 Information Sciences Institute of the University of Southern
5964 California), along with Jerome Saltzer, Technical Director of Project
5965 Athena, and Jeffrey Schiller, MIT Campus Network Manager. Many other
5966 members of Project Athena have also contributed to the work on
5969 Version 5 of the Kerberos protocol (described in this document) has
5970 evolved from Version 4 based on new requirements and desires for
5971 features not available in Version 4. The design of Version 5 of the
5972 Kerberos protocol was led by Clifford Neuman and John Kohl with much
5973 input from the community. The development of the MIT reference
5974 implementation was led at MIT by John Kohl and Theodore Ts'o, with
5975 help and contributed code from many others. Since RFC1510 was
5976 issued, extensions and revisions to the protocol have been proposed
5977 by many individuals. Some of these proposals are reflected in this
5978 document. Where such changes involved significant effort, the
5979 document cites the contribution of the proposer.
5981 Reference implementations of both version 4 and version 5 of Kerberos
5982 are publicly available and commercial implementations have been
5983 developed and are widely used. Details on the differences between
5984 Kerberos Versions 4 and 5 can be found in [KNT94].
5986 D. Notational Differences from [KCLAR]
5988 [ possible point for discussion ]
5991 Yu Expires: Apr 2007 [Page 107]
5993 Internet-Draft rfc1510ter-03 23 Oct 2006
5995 [KCLAR] uses notational conventions slightly different from this
5996 document. As a derivative of RFC 1510, the text of [KCLAR] uses C-
5997 language style identifier names for defined values. In ASN.1
5998 notation, identifiers referencing defined values must begin with a
5999 lowercase letter and contain hyphen (-) characters rather than
6000 underscore (_) characters, while identifiers referencing types begin
6001 with an uppercase letter. [KCLAR] and RFC 1510 use all-uppercase
6002 identifiers with underscores to identify defined values. This has
6003 the potential to create confusion, but neither document defines
6004 values using actual ASN.1 value-assignment notation.
6006 It is debatable whether it is advantageous to write all identifier
6007 names (regardless of their ASN.1 token type) in all-uppercase letters
6008 for the purpose of emphasis in running text. The alternative is to
6009 use double-quote characters (") when ambiguity is possible.
6011 Normative References
6014 "7-bit coded character set", ISO/IEC 646:1991 | ECMA-6:1991.
6017 "Information technology -- Character code structure and
6018 extension techniques", ISO/IEC 2022:1994 | ECMA-35:1994.
6021 K. Raeburn, "Encryption and Checksum Specifications for Kerberos
6022 5", draft-ietf-krb-wg-crypto-07.txt, work in progress.
6025 S. Bradner, RFC2119: "Key words for use in RFC's to Indicate
6026 Requirement Levels", March 1997.
6029 H. Alvestrand, "Tags for the Identification of Languages",
6030 RFC 3660, January 2001.
6033 Kurt D. Zeilenga, "SASLprep: Stringprep profile for user names
6034 and passwords", draft-ietf-sasl-saslprep-10.txt, work in
6038 "Information technology -- Abstract Syntax Notation One (ASN.1):
6039 Specification of basic notation", ITU-T Recommendation X.680
6040 (2002) | ISO/IEC 8824-1:2002.
6043 "Information technology -- Abstract Syntax Notation One (ASN.1):
6044 Constraint specification", ITU-T Recommendation X.682 (2002) |
6045 ISO/IEC 8824-3:2002.
6047 Yu Expires: Apr 2007 [Page 108]
6049 Internet-Draft rfc1510ter-03 23 Oct 2006
6052 "Information technology -- Abstract Syntax Notation One (ASN.1):
6053 Parameterization of ASN.1 specifications", ITU-T Recommendation
6054 X.683 (2002) | ISO/IEC 8824-4:2002.
6057 "Information technology -- ASN.1 encoding Rules: Specification
6058 of Basic Encoding Rules (BER), Canonical Encoding Rules (CER)
6059 and Distinguished Encoding Rules (DER)", ITU-T Recommendation
6060 X.690 (2002) | ISO/IEC 8825-1:2002.
6062 Informative References
6065 Dorothy E. Denning and Giovanni Maria Sacco, "Time-stamps in Key
6066 Distribution Protocols," Communications of the ACM, Vol. 24(8),
6067 pp. 533-536 (August 1981).
6070 Olivier Dubuisson, "ASN.1 - Communication between Heterogeneous
6071 Systems", Elsevier-Morgan Kaufmann, 2000.
6072 <http://www.oss.com/asn1/dubuisson.html>
6075 "Information technology -- 8-bit single-byte coded graphic
6076 character sets -- Part 1: Latin alphabet No. 1", ISO/IEC 8859-
6080 Clifford Neuman, Tom Yu, Sam Hartman, Ken Raeburn, "The Kerberos
6081 Network Authentication Service (V5)", draft-ietf-krb-wg-
6082 kerberos-clarifications-07.txt, work in progress.
6085 John T. Kohl, B. Clifford Neuman, and Theodore Y. Ts'o, "The
6086 Evolution of the Kerberos Authentication System". In
6087 Distributed Open Systems, pages 78-94. IEEE Computer Society
6091 John Larmouth, "Understanding OSI", International Thomson
6092 Computer Press, 1996.
6093 <http://www.isi.salford.ac.uk/books/osi.html>
6096 John Larmouth, "ASN.1 Complete", Elsevier-Morgan Kaufmann,
6097 1999. <http://www.oss.com/asn1/larmouth.html>
6100 Roger M. Needham and Michael D. Schroeder, "Using Encryption for
6101 Authentication in Large Networks of Computers", Communications
6103 Yu Expires: Apr 2007 [Page 109]
6105 Internet-Draft rfc1510ter-03 23 Oct 2006
6107 of the ACM, Vol. 21(12), pp. 993-999 (December, 1978).
6110 J. Kohl and B. C. Neuman, "The Kerberos Network Authentication
6111 Service (v5)", RFC1510, September 1993, Status: Proposed
6115 J. Linn, "The Kerberos Version 5 GSS-API Mechanism", RFC 1964,
6116 June 1996, Status: Proposed Standard.
6119 "Information technology -- ASN.1 encoding rules: Specification
6120 of Basic Encoding Rules (BER), Canonical Encoding Rules (CER)
6121 and Distinguished Encoding Rules (DER)", ITU-T Recommendation
6122 X.690 (2002) | ISO/IEC 8825-1:2002.
6127 77 Massachusetts Ave
6134 Copyright (C) The Internet Society (2006). This document is subject
6135 to the rights, licenses and restrictions contained in BCP 78, and
6136 except as set forth therein, the authors retain all their rights.
6138 This document and the information contained herein are provided on an
6139 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
6140 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
6141 ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
6142 INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
6143 INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
6144 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
6146 Intellectual Property Statement
6148 The IETF takes no position regarding the validity or scope of any
6149 Intellectual Property Rights or other rights that might be claimed to
6150 pertain to the implementation or use of the technology described in
6151 this document or the extent to which any license under such rights
6152 might or might not be available; nor does it represent that it has
6153 made any independent effort to identify any such rights. Information
6154 on the procedures with respect to rights in RFC documents can be
6155 found in BCP 78 and BCP 79.
6159 Yu Expires: Apr 2007 [Page 110]
6161 Internet-Draft rfc1510ter-03 23 Oct 2006
6163 Copies of IPR disclosures made to the IETF Secretariat and any
6164 assurances of licenses to be made available, or the result of an
6165 attempt made to obtain a general license or permission for the use of
6166 such proprietary rights by implementers or users of this
6167 specification can be obtained from the IETF on-line IPR repository at
6168 http://www.ietf.org/ipr.
6170 The IETF invites any interested party to bring to its attention any
6171 copyrights, patents or patent applications, or other proprietary
6172 rights that may cover technology that may be required to implement
6173 this standard. Please address the information to the IETF at ietf-
6215 Yu Expires: Apr 2007 [Page 111]