+++ /dev/null
-
-
-
-
-
-
-Network Working Group C. Neuman
-Request for Comments: 4120 USC-ISI
-Obsoletes: 1510 T. Yu
-Category: Standards Track S. Hartman
- K. Raeburn
- MIT
- July 2005
-
-
- The Kerberos Network Authentication Service (V5)
-
-Status of This Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Copyright Notice
-
- Copyright (C) The Internet Society (2005).
-
-Abstract
-
- This document provides an overview and specification of Version 5 of
- the Kerberos protocol, and it obsoletes RFC 1510 to clarify aspects
- of the protocol and its intended use that require more detailed or
- clearer explanation than was provided in RFC 1510. This document is
- intended to provide a detailed description of the protocol, suitable
- for implementation, together with descriptions of the appropriate use
- of protocol messages and fields within those messages.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 1]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-Table of Contents
-
- 1. Introduction ....................................................5
- 1.1. The Kerberos Protocol ......................................6
- 1.2. Cross-Realm Operation ......................................8
- 1.3. Choosing a Principal with Which to Communicate .............9
- 1.4. Authorization .............................................10
- 1.5. Extending Kerberos without Breaking Interoperability ......11
- 1.5.1. Compatibility with RFC 1510 ........................11
- 1.5.2. Sending Extensible Messages ........................12
- 1.6. Environmental Assumptions .................................12
- 1.7. Glossary of Terms .........................................13
- 2. Ticket Flag Uses and Requests ..................................16
- 2.1. Initial, Pre-authenticated, and
- Hardware-Authenticated Tickets ............................17
- 2.2. Invalid Tickets ...........................................17
- 2.3. Renewable Tickets .........................................17
- 2.4. Postdated Tickets .........................................18
- 2.5. Proxiable and Proxy Tickets ...............................19
- 2.6. Forwardable Tickets .......................................19
- 2.7. Transited Policy Checking .................................20
- 2.8. OK as Delegate ............................................21
- 2.9. Other KDC Options .........................................21
- 2.9.1. Renewable-OK .......................................21
- 2.9.2. ENC-TKT-IN-SKEY ....................................22
- 2.9.3. Passwordless Hardware Authentication ...............22
- 3. Message Exchanges ..............................................22
- 3.1. The Authentication Service Exchange .......................22
- 3.1.1. Generation of KRB_AS_REQ Message ...................24
- 3.1.2. Receipt of KRB_AS_REQ Message ......................24
- 3.1.3. Generation of KRB_AS_REP Message ...................24
- 3.1.4. Generation of KRB_ERROR Message ....................27
- 3.1.5. Receipt of KRB_AS_REP Message ......................27
- 3.1.6. Receipt of KRB_ERROR Message .......................28
- 3.2. The Client/Server Authentication Exchange .................29
- 3.2.1. The KRB_AP_REQ Message .............................29
- 3.2.2. Generation of a KRB_AP_REQ Message .................29
- 3.2.3. Receipt of KRB_AP_REQ Message ......................30
- 3.2.4. Generation of a KRB_AP_REP Message .................33
- 3.2.5. Receipt of KRB_AP_REP Message ......................33
- 3.2.6. Using the Encryption Key ...........................33
- 3.3. The Ticket-Granting Service (TGS) Exchange ................34
- 3.3.1. Generation of KRB_TGS_REQ Message ..................35
- 3.3.2. Receipt of KRB_TGS_REQ Message .....................37
- 3.3.3. Generation of KRB_TGS_REP Message ..................38
- 3.3.4. Receipt of KRB_TGS_REP Message .....................42
-
-
-
-
-
-Neuman, et al. Standards Track [Page 2]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- 3.4. The KRB_SAFE Exchange .....................................42
- 3.4.1. Generation of a KRB_SAFE Message ...................42
- 3.4.2. Receipt of KRB_SAFE Message ........................43
- 3.5. The KRB_PRIV Exchange .....................................44
- 3.5.1. Generation of a KRB_PRIV Message ...................44
- 3.5.2. Receipt of KRB_PRIV Message ........................44
- 3.6. The KRB_CRED Exchange .....................................45
- 3.6.1. Generation of a KRB_CRED Message ...................45
- 3.6.2. Receipt of KRB_CRED Message ........................46
- 3.7. User-to-User Authentication Exchanges .....................47
- 4. Encryption and Checksum Specifications .........................48
- 5. Message Specifications .........................................50
- 5.1. Specific Compatibility Notes on ASN.1 .....................51
- 5.1.1. ASN.1 Distinguished Encoding Rules .................51
- 5.1.2. Optional Integer Fields ............................52
- 5.1.3. Empty SEQUENCE OF Types ............................52
- 5.1.4. Unrecognized Tag Numbers ...........................52
- 5.1.5. Tag Numbers Greater Than 30 ........................53
- 5.2. Basic Kerberos Types ......................................53
- 5.2.1. KerberosString .....................................53
- 5.2.2. Realm and PrincipalName ............................55
- 5.2.3. KerberosTime .......................................55
- 5.2.4. Constrained Integer Types ..........................55
- 5.2.5. HostAddress and HostAddresses ......................56
- 5.2.6. AuthorizationData ..................................57
- 5.2.7. PA-DATA ............................................60
- 5.2.8. KerberosFlags ......................................64
- 5.2.9. Cryptosystem-Related Types .........................65
- 5.3. Tickets ...................................................66
- 5.4. Specifications for the AS and TGS Exchanges ...............73
- 5.4.1. KRB_KDC_REQ Definition .............................73
- 5.4.2. KRB_KDC_REP Definition .............................81
- 5.5. Client/Server (CS) Message Specifications .................84
- 5.5.1. KRB_AP_REQ Definition ..............................84
- 5.5.2. KRB_AP_REP Definition ..............................88
- 5.5.3. Error Message Reply ................................89
- 5.6. KRB_SAFE Message Specification ............................89
- 5.6.1. KRB_SAFE definition ................................89
- 5.7. KRB_PRIV Message Specification ............................91
- 5.7.1. KRB_PRIV Definition ................................91
- 5.8. KRB_CRED Message Specification ............................92
- 5.8.1. KRB_CRED Definition ................................92
- 5.9. Error Message Specification ...............................94
- 5.9.1. KRB_ERROR Definition ...............................94
- 5.10. Application Tag Numbers ..................................96
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 3]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- 6. Naming Constraints .............................................97
- 6.1. Realm Names ...............................................97
- 6.2. Principal Names .......................................... 99
- 6.2.1. Name of Server Principals .........................100
- 7. Constants and Other Defined Values ............................101
- 7.1. Host Address Types .......................................101
- 7.2. KDC Messaging: IP Transports .............................102
- 7.2.1. UDP/IP transport ..................................102
- 7.2.2. TCP/IP Transport ..................................103
- 7.2.3. KDC Discovery on IP Networks ......................104
- 7.3. Name of the TGS ..........................................105
- 7.4. OID Arc for KerberosV5 ...................................106
- 7.5. Protocol Constants and Associated Values .................106
- 7.5.1. Key Usage Numbers .................................106
- 7.5.2. PreAuthentication Data Types ......................108
- 7.5.3. Address Types .....................................109
- 7.5.4. Authorization Data Types ..........................109
- 7.5.5. Transited Encoding Types ..........................109
- 7.5.6. Protocol Version Number ...........................109
- 7.5.7. Kerberos Message Types ............................110
- 7.5.8. Name Types ........................................110
- 7.5.9. Error Codes .......................................110
- 8. Interoperability Requirements .................................113
- 8.1. Specification 2 ..........................................113
- 8.2. Recommended KDC Values ...................................116
- 9. IANA Considerations ...........................................116
- 10. Security Considerations ......................................117
- 11. Acknowledgements .............................................121
- A. ASN.1 Module ..................................................123
- B. Changes since RFC 1510 ........................................131
- Normative References .............................................134
- Informative References ...........................................135
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 4]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-1. Introduction
-
- This document describes the concepts and model upon which the
- Kerberos network authentication system is based. It also specifies
- Version 5 of the Kerberos protocol. The motivations, goals,
- assumptions, and rationale behind most design decisions are treated
- cursorily; they are more fully described in a paper available in IEEE
- communications [NT94] and earlier in the Kerberos portion of the
- Athena Technical Plan [MNSS87].
-
- This document is not intended to describe Kerberos to the end user,
- system administrator, or application developer. Higher-level papers
- describing Version 5 of the Kerberos system [NT94] and documenting
- version 4 [SNS88] are available elsewhere.
-
- The Kerberos model is based in part on Needham and Schroeder's
- trusted third-party authentication protocol [NS78] and on
- modifications suggested by Denning and Sacco [DS81]. The original
- design and implementation of Kerberos Versions 1 through 4 was the
- work of two former Project Athena staff members, Steve Miller of
- Digital Equipment Corporation and Clifford Neuman (now at the
- Information Sciences Institute of the University of Southern
- California), along with Jerome Saltzer, Technical Director of Project
- Athena, and Jeffrey Schiller, MIT Campus Network Manager. Many other
- members of Project Athena have also contributed to the work on
- Kerberos.
-
- Version 5 of the Kerberos protocol (described in this document) has
- evolved because of new requirements and desires for features not
- available in Version 4. The design of Version 5 was led by Clifford
- Neuman and John Kohl with much input from the community. The
- development of the MIT reference implementation was led at MIT by
- John Kohl and Theodore Ts'o, with help and contributed code from many
- others. Since RFC 1510 was issued, many individuals have proposed
- extensions and revisions to the protocol. This document reflects
- some of these proposals. Where such changes involved significant
- effort, the document cites the contribution of the proposer.
-
- Reference implementations of both Version 4 and Version 5 of Kerberos
- are publicly available, and commercial implementations have been
- developed and are widely used. Details on the differences between
- Versions 4 and 5 can be found in [KNT94].
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in [RFC2119].
-
-
-
-
-
-Neuman, et al. Standards Track [Page 5]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-1.1. The Kerberos Protocol
-
- Kerberos provides a means of verifying the identities of principals,
- (e.g., a workstation user or a network server) on an open
- (unprotected) network. This is accomplished without relying on
- assertions by the host operating system, without basing trust on host
- addresses, without requiring physical security of all the hosts on
- the network, and under the assumption that packets traveling along
- the network can be read, modified, and inserted at will. Kerberos
- performs authentication under these conditions as a trusted third-
- party authentication service by using conventional (shared secret
- key) cryptography. Extensions to Kerberos (outside the scope of this
- document) can provide for the use of public key cryptography during
- certain phases of the authentication protocol. Such extensions
- support Kerberos authentication for users registered with public key
- certification authorities and provide certain benefits of public key
- cryptography in situations where they are needed.
-
- The basic Kerberos authentication process proceeds as follows: A
- client sends a request to the authentication server (AS) for
- "credentials" for a given server. The AS responds with these
- credentials, encrypted in the client's key. The credentials consist
- of a "ticket" for the server and a temporary encryption key (often
- called a "session key"). The client transmits the ticket (which
- contains the client's identity and a copy of the session key, all
- encrypted in the server's key) to the server. The session key (now
- shared by the client and server) is used to authenticate the client
- and may optionally be used to authenticate the server. It may also
- be used to encrypt further communication between the two parties or
- to exchange a separate sub-session key to be used to encrypt further
- communication. Note that many applications use Kerberos' functions
- only upon the initiation of a stream-based network connection.
- Unless an application performs encryption or integrity protection for
- the data stream, the identity verification applies only to the
- initiation of the connection, and it does not guarantee that
- subsequent messages on the connection originate from the same
- principal.
-
- Implementation of the basic protocol consists of one or more
- authentication servers running on physically secure hosts. The
- authentication servers maintain a database of principals (i.e., users
- and servers) and their secret keys. Code libraries provide
- encryption and implement the Kerberos protocol. In order to add
- authentication to its transactions, a typical network application
- adds calls to the Kerberos library directly or through the Generic
- Security Services Application Programming Interface (GSS-API)
- described in a separate document [RFC4121]. These calls result in
- the transmission of the messages necessary to achieve authentication.
-
-
-
-Neuman, et al. Standards Track [Page 6]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- The Kerberos protocol consists of several sub-protocols (or
- exchanges). There are two basic methods by which a client can ask a
- Kerberos server for credentials. In the first approach, the client
- sends a cleartext request for a ticket for the desired server to the
- AS. The reply is sent encrypted in the client's secret key. Usually
- this request is for a ticket-granting ticket (TGT), which can later
- be used with the ticket-granting server (TGS). In the second method,
- the client sends a request to the TGS. The client uses the TGT to
- authenticate itself to the TGS in the same manner as if it were
- contacting any other application server that requires Kerberos
- authentication. The reply is encrypted in the session key from the
- TGT. Though the protocol specification describes the AS and the TGS
- as separate servers, in practice they are implemented as different
- protocol entry points within a single Kerberos server.
-
- Once obtained, credentials may be used to verify the identity of the
- principals in a transaction, to ensure the integrity of messages
- exchanged between them, or to preserve privacy of the messages. The
- application is free to choose whatever protection may be necessary.
-
- To verify the identities of the principals in a transaction, the
- client transmits the ticket to the application server. Because the
- ticket is sent "in the clear" (parts of it are encrypted, but this
- encryption doesn't thwart replay) and might be intercepted and reused
- by an attacker, additional information is sent to prove that the
- message originated with the principal to whom the ticket was issued.
- This information (called the authenticator) is encrypted in the
- session key and includes a timestamp. The timestamp proves that the
- message was recently generated and is not a replay. Encrypting the
- authenticator in the session key proves that it was generated by a
- party possessing the session key. Since no one except the requesting
- principal and the server know the session key (it is never sent over
- the network in the clear), this guarantees the identity of the
- client.
-
- The integrity of the messages exchanged between principals can also
- be guaranteed by using the session key (passed in the ticket and
- contained in the credentials). This approach provides detection of
- both replay attacks and message stream modification attacks. It is
- accomplished by generating and transmitting a collision-proof
- checksum (elsewhere called a hash or digest function) of the client's
- message, keyed with the session key. Privacy and integrity of the
- messages exchanged between principals can be secured by encrypting
- the data to be passed by using the session key contained in the
- ticket or the sub-session key found in the authenticator.
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 7]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- The authentication exchanges mentioned above require read-only access
- to the Kerberos database. Sometimes, however, the entries in the
- database must be modified, such as when adding new principals or
- changing a principal's key. This is done using a protocol between a
- client and a third Kerberos server, the Kerberos Administration
- Server (KADM). There is also a protocol for maintaining multiple
- copies of the Kerberos database. Neither of these protocols are
- described in this document.
-
-1.2. Cross-Realm Operation
-
- The Kerberos protocol is designed to operate across organizational
- boundaries. A client in one organization can be authenticated to a
- server in another. Each organization wishing to run a Kerberos
- server establishes its own "realm". The name of the realm in which a
- client is registered is part of the client's name and can be used by
- the end-service to decide whether to honor a request.
-
- By establishing "inter-realm" keys, the administrators of two realms
- can allow a client authenticated in the local realm to prove its
- identity to servers in other realms. The exchange of inter-realm
- keys (a separate key may be used for each direction) registers the
- ticket-granting service of each realm as a principal in the other
- realm. A client is then able to obtain a TGT for the remote realm's
- ticket-granting service from its local realm. When that TGT is used,
- the remote ticket-granting service uses the inter-realm key (which
- usually differs from its own normal TGS key) to decrypt the TGT; thus
- it is certain that the ticket was issued by the client's own TGS.
- Tickets issued by the remote ticket-granting service will indicate to
- the end-service that the client was authenticated from another realm.
-
- Without cross-realm operation, and with appropriate permission, the
- client can arrange registration of a separately-named principal in a
- remote realm and engage in normal exchanges with that realm's
- services. However, for even small numbers of clients this becomes
- cumbersome, and more automatic methods as described here are
- necessary.
-
- A realm is said to communicate with another realm if the two realms
- share an inter-realm key, or if the local realm shares an inter-realm
- key with an intermediate realm that communicates with the remote
- realm. An authentication path is the sequence of intermediate realms
- that are transited in communicating from one realm to another.
-
- Realms may be organized hierarchically. Each realm shares a key with
- its parent and a different key with each child. If an inter-realm
- key is not directly shared by two realms, the hierarchical
- organization allows an authentication path to be easily constructed.
-
-
-
-Neuman, et al. Standards Track [Page 8]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- If a hierarchical organization is not used, it may be necessary to
- consult a database in order to construct an authentication path
- between realms.
-
- Although realms are typically hierarchical, intermediate realms may
- be bypassed to achieve cross-realm authentication through alternate
- authentication paths. (These might be established to make
- communication between two realms more efficient.) It is important
- for the end-service to know which realms were transited when deciding
- how much faith to place in the authentication process. To facilitate
- this decision, a field in each ticket contains the names of the
- realms that were involved in authenticating the client.
-
- The application server is ultimately responsible for accepting or
- rejecting authentication and SHOULD check the transited field. The
- application server may choose to rely on the Key Distribution Center
- (KDC) for the application server's realm to check the transited
- field. The application server's KDC will set the
- TRANSITED-POLICY-CHECKED flag in this case. The KDCs for
- intermediate realms may also check the transited field as they issue
- TGTs for other realms, but they are encouraged not to do so. A
- client may request that the KDCs not check the transited field by
- setting the DISABLE-TRANSITED-CHECK flag. KDCs SHOULD honor this
- flag.
-
-1.3. Choosing a Principal with Which to Communicate
-
- The Kerberos protocol provides the means for verifying (subject to
- the assumptions in Section 1.6) that the entity with which one
- communicates is the same entity that was registered with the KDC
- using the claimed identity (principal name). It is still necessary
- to determine whether that identity corresponds to the entity with
- which one intends to communicate.
-
- When appropriate data has been exchanged in advance, the application
- may perform this determination syntactically based on the application
- protocol specification, information provided by the user, and
- configuration files. For example, the server principal name
- (including realm) for a telnet server might be derived from the
- user-specified host name (from the telnet command line), the "host/"
- prefix specified in the application protocol specification, and a
- mapping to a Kerberos realm derived syntactically from the domain
- part of the specified hostname and information from the local
- Kerberos realms database.
-
- One can also rely on trusted third parties to make this
- determination, but only when the data obtained from the third party
- is suitably integrity-protected while resident on the third-party
-
-
-
-Neuman, et al. Standards Track [Page 9]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- server and when transmitted. Thus, for example, one should not rely
- on an unprotected DNS record to map a host alias to the primary name
- of a server, accepting the primary name as the party that one intends
- to contact, since an attacker can modify the mapping and impersonate
- the party.
-
- Implementations of Kerberos and protocols based on Kerberos MUST NOT
- use insecure DNS queries to canonicalize the hostname components of
- the service principal names (i.e., they MUST NOT use insecure DNS
- queries to map one name to another to determine the host part of the
- principal name with which one is to communicate). In an environment
- without secure name service, application authors MAY append a
- statically configured domain name to unqualified hostnames before
- passing the name to the security mechanisms, but they should do no
- more than that. Secure name service facilities, if available, might
- be trusted for hostname canonicalization, but such canonicalization
- by the client SHOULD NOT be required by KDC implementations.
-
- Implementation note: Many current implementations do some degree of
- canonicalization of the provided service name, often using DNS even
- though it creates security problems. However, there is no
- consistency among implementations as to whether the service name is
- case folded to lowercase or whether reverse resolution is used. To
- maximize interoperability and security, applications SHOULD provide
- security mechanisms with names that result from folding the user-
- entered name to lowercase without performing any other modifications
- or canonicalization.
-
-1.4. Authorization
-
- As an authentication service, Kerberos provides a means of verifying
- the identity of principals on a network. Authentication is usually
- useful primarily as a first step in the process of authorization,
- determining whether a client may use a service, which objects the
- client is allowed to access, and the type of access allowed for each.
- Kerberos does not, by itself, provide authorization. Possession of a
- client ticket for a service provides only for authentication of the
- client to that service, and in the absence of a separate
- authorization procedure, an application should not consider it to
- authorize the use of that service.
-
- Separate authorization methods MAY be implemented as application-
- specific access control functions and may utilize files on the
- application server, on separately issued authorization credentials
- such as those based on proxies [Neu93], or on other authorization
- services. Separately authenticated authorization credentials MAY be
- embedded in a ticket's authorization data when encapsulated by the
- KDC-issued authorization data element.
-
-
-
-Neuman, et al. Standards Track [Page 10]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Applications should not accept the mere issuance of a service ticket
- by the Kerberos server (even by a modified Kerberos server) as
- granting authority to use the service, since such applications may
- become vulnerable to the bypass of this authorization check in an
- environment where other options for application authentication are
- provided, or if they interoperate with other KDCs.
-
-1.5. Extending Kerberos without Breaking Interoperability
-
- As the deployed base of Kerberos implementations grows, extending
- Kerberos becomes more important. Unfortunately, some extensions to
- the existing Kerberos protocol create interoperability issues because
- of uncertainty regarding the treatment of certain extensibility
- options by some implementations. This section includes guidelines
- that will enable future implementations to maintain interoperability.
-
- Kerberos provides a general mechanism for protocol extensibility.
- Some protocol messages contain typed holes -- sub-messages that
- contain an octet-string along with an integer that defines how to
- interpret the octet-string. The integer types are registered
- centrally, but they can be used both for vendor extensions and for
- extensions standardized through the IETF.
-
- In this document, the word "extension" refers to extension by
- defining a new type to insert into an existing typed hole in a
- protocol message. It does not refer to extension by addition of new
- fields to ASN.1 types, unless the text explicitly indicates
- otherwise.
-
-1.5.1. Compatibility with RFC 1510
-
- Note that existing Kerberos message formats cannot readily be
- extended by adding fields to the ASN.1 types. Sending additional
- fields often results in the entire message being discarded without an
- error indication. Future versions of this specification will provide
- guidelines to ensure that ASN.1 fields can be added without creating
- an interoperability problem.
-
- In the meantime, all new or modified implementations of Kerberos that
- receive an unknown message extension SHOULD preserve the encoding of
- the extension but otherwise ignore its presence. Recipients MUST NOT
- decline a request simply because an extension is present.
-
- There is one exception to this rule. If an unknown authorization
- data element type is received by a server other than the ticket-
- granting service either in an AP-REQ or in a ticket contained in an
- AP-REQ, then authentication MUST fail. One of the primary uses of
- authorization data is to restrict the use of the ticket. If the
-
-
-
-Neuman, et al. Standards Track [Page 11]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- service cannot determine whether the restriction applies to that
- service, then a security weakness may result if the ticket can be
- used for that service. Authorization elements that are optional
- SHOULD be enclosed in the AD-IF-RELEVANT element.
-
- The ticket-granting service MUST ignore but propagate to derivative
- tickets any unknown authorization data types, unless those data types
- are embedded in a MANDATORY-FOR-KDC element, in which case the
- request will be rejected. This behavior is appropriate because
- requiring that the ticket-granting service understand unknown
- authorization data types would require that KDC software be upgraded
- to understand new application-level restrictions before applications
- used these restrictions, decreasing the utility of authorization data
- as a mechanism for restricting the use of tickets. No security
- problem is created because services to which the tickets are issued
- will verify the authorization data.
-
- Implementation note: Many RFC 1510 implementations ignore unknown
- authorization data elements. Depending on these implementations to
- honor authorization data restrictions may create a security weakness.
-
-1.5.2. Sending Extensible Messages
-
- Care must be taken to ensure that old implementations can understand
- messages sent to them, even if they do not understand an extension
- that is used. Unless the sender knows that an extension is
- supported, the extension cannot change the semantics of the core
- message or previously defined extensions.
-
- For example, an extension including key information necessary to
- decrypt the encrypted part of a KDC-REP could only be used in
- situations where the recipient was known to support the extension.
- Thus when designing such extensions it is important to provide a way
- for the recipient to notify the sender of support for the extension.
- For example in the case of an extension that changes the KDC-REP
- reply key, the client could indicate support for the extension by
- including a padata element in the AS-REQ sequence. The KDC should
- only use the extension if this padata element is present in the
- AS-REQ. Even if policy requires the use of the extension, it is
- better to return an error indicating that the extension is required
- than to use the extension when the recipient may not support it.
- Debugging implementations that do not interoperate is easier when
- errors are returned.
-
-1.6. Environmental Assumptions
-
- Kerberos imposes a few assumptions on the environment in which it can
- properly function, including the following:
-
-
-
-Neuman, et al. Standards Track [Page 12]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- * "Denial of service" attacks are not solved with Kerberos. There
- are places in the protocols where an intruder can prevent an
- application from participating in the proper authentication steps.
- Detection and solution of such attacks (some of which can appear
- to be not-uncommon "normal" failure modes for the system) are
- usually best left to the human administrators and users.
-
- * Principals MUST keep their secret keys secret. If an intruder
- somehow steals a principal's key, it will be able to masquerade as
- that principal or to impersonate any server to the legitimate
- principal.
-
- * "Password guessing" attacks are not solved by Kerberos. If a user
- chooses a poor password, it is possible for an attacker to
- successfully mount an offline dictionary attack by repeatedly
- attempting to decrypt, with successive entries from a dictionary,
- messages obtained which are encrypted under a key derived from the
- user's password.
-
- * Each host on the network MUST have a clock which is "loosely
- synchronized" to the time of the other hosts; this synchronization
- is used to reduce the bookkeeping needs of application servers
- when they do replay detection. The degree of "looseness" can be
- configured on a per-server basis, but it is typically on the order
- of 5 minutes. If the clocks are synchronized over the network,
- the clock synchronization protocol MUST itself be secured from
- network attackers.
-
- * Principal identifiers are not recycled on a short-term basis. A
- typical mode of access control will use access control lists
- (ACLs) to grant permissions to particular principals. If a stale
- ACL entry remains for a deleted principal and the principal
- identifier is reused, the new principal will inherit rights
- specified in the stale ACL entry. By not re-using principal
- identifiers, the danger of inadvertent access is removed.
-
-1.7. Glossary of Terms
-
- Below is a list of terms used throughout this document.
-
- Authentication
- Verifying the claimed identity of a principal.
-
- Authentication header
- A record containing a Ticket and an Authenticator to be presented
- to a server as part of the authentication process.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 13]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Authentication path
- A sequence of intermediate realms transited in the authentication
- process when communicating from one realm to another.
-
- Authenticator
- A record containing information that can be shown to have been
- recently generated using the session key known only by the client
- and server.
-
- Authorization
- The process of determining whether a client may use a service,
- which objects the client is allowed to access, and the type of
- access allowed for each.
-
- Capability
- A token that grants the bearer permission to access an object or
- service. In Kerberos, this might be a ticket whose use is
- restricted by the contents of the authorization data field, but
- which lists no network addresses, together with the session key
- necessary to use the ticket.
-
- Ciphertext
- The output of an encryption function. Encryption transforms
- plaintext into ciphertext.
-
- Client
- A process that makes use of a network service on behalf of a user.
- Note that in some cases a Server may itself be a client of some
- other server (e.g., a print server may be a client of a file
- server).
-
- Credentials
- A ticket plus the secret session key necessary to use that ticket
- successfully in an authentication exchange.
-
- Encryption Type (etype)
- When associated with encrypted data, an encryption type identifies
- the algorithm used to encrypt the data and is used to select the
- appropriate algorithm for decrypting the data. Encryption type
- tags are communicated in other messages to enumerate algorithms
- that are desired, supported, preferred, or allowed to be used for
- encryption of data between parties. This preference is combined
- with local information and policy to select an algorithm to be
- used.
-
- KDC
- Key Distribution Center. A network service that supplies tickets
- and temporary session keys; or an instance of that service or the
-
-
-
-Neuman, et al. Standards Track [Page 14]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- host on which it runs. The KDC services both initial ticket and
- ticket-granting ticket requests. The initial ticket portion is
- sometimes referred to as the Authentication Server (or service).
- The ticket-granting ticket portion is sometimes referred to as the
- ticket-granting server (or service).
-
- Kerberos
- The name given to the Project Athena's authentication service, the
- protocol used by that service, or the code used to implement the
- authentication service. The name is adopted from the three-headed
- dog that guards Hades.
-
- Key Version Number (kvno)
- A tag associated with encrypted data identifies which key was used
- for encryption when a long-lived key associated with a principal
- changes over time. It is used during the transition to a new key
- so that the party decrypting a message can tell whether the data
- was encrypted with the old or the new key.
-
- Plaintext
- The input to an encryption function or the output of a decryption
- function. Decryption transforms ciphertext into plaintext.
-
- Principal
- A named client or server entity that participates in a network
- communication, with one name that is considered canonical.
-
- Principal identifier
- The canonical name used to identify each different principal
- uniquely.
-
- Seal
- To encipher a record containing several fields in such a way that
- the fields cannot be individually replaced without knowledge of
- the encryption key or leaving evidence of tampering.
-
- Secret key
- An encryption key shared by a principal and the KDC, distributed
- outside the bounds of the system, with a long lifetime. In the
- case of a human user's principal, the secret key MAY be derived
- from a password.
-
- Server
- A particular Principal that provides a resource to network
- clients. The server is sometimes referred to as the Application
- Server.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 15]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Service
- A resource provided to network clients; often provided by more
- than one server (for example, remote file service).
-
- Session key
- A temporary encryption key used between two principals, with a
- lifetime limited to the duration of a single login "session". In
- the Kerberos system, a session key is generated by the KDC. The
- session key is distinct from the sub-session key, described next.
-
- Sub-session key
- A temporary encryption key used between two principals, selected
- and exchanged by the principals using the session key, and with a
- lifetime limited to the duration of a single association. The
- sub-session key is also referred to as the subkey.
-
- Ticket
- A record that helps a client authenticate itself to a server; it
- contains the client's identity, a session key, a timestamp, and
- other information, all sealed using the server's secret key. It
- only serves to authenticate a client when presented along with a
- fresh Authenticator.
-
-2. Ticket Flag Uses and Requests
-
- Each Kerberos ticket contains a set of flags that are used to
- indicate attributes of that ticket. Most flags may be requested by a
- client when the ticket is obtained; some are automatically turned on
- and off by a Kerberos server as required. The following sections
- explain what the various flags mean and give examples of reasons to
- use them. With the exception of the INVALID flag, clients MUST
- ignore ticket flags that are not recognized. KDCs MUST ignore KDC
- options that are not recognized. Some implementations of RFC 1510
- are known to reject unknown KDC options, so clients may need to
- resend a request without new KDC options if the request was rejected
- when sent with options added since RFC 1510. Because new KDCs will
- ignore unknown options, clients MUST confirm that the ticket returned
- by the KDC meets their needs.
-
- Note that it is not, in general, possible to determine whether an
- option was not honored because it was not understood or because it
- was rejected through either configuration or policy. When adding a
- new option to the Kerberos protocol, designers should consider
- whether the distinction is important for their option. If it is, a
- mechanism for the KDC to return an indication that the option was
- understood but rejected needs to be provided in the specification of
- the option. Often in such cases, the mechanism needs to be broad
- enough to permit an error or reason to be returned.
-
-
-
-Neuman, et al. Standards Track [Page 16]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-2.1. Initial, Pre-authenticated, and Hardware-Authenticated Tickets
-
- The INITIAL flag indicates that a ticket was issued using the AS
- protocol, rather than issued based on a TGT. Application servers
- that want to require the demonstrated knowledge of a client's secret
- key (e.g., a password-changing program) can insist that this flag be
- set in any tickets they accept, and can thus be assured that the
- client's key was recently presented to the authentication server.
-
- The PRE-AUTHENT and HW-AUTHENT flags provide additional information
- about the initial authentication, regardless of whether the current
- ticket was issued directly (in which case INITIAL will also be set)
- or issued on the basis of a TGT (in which case the INITIAL flag is
- clear, but the PRE-AUTHENT and HW-AUTHENT flags are carried forward
- from the TGT).
-
-2.2. Invalid Tickets
-
- The INVALID flag indicates that a ticket is invalid. Application
- servers MUST reject tickets that have this flag set. A postdated
- ticket will be issued in this form. Invalid tickets MUST be
- validated by the KDC before use, by being presented to the KDC in a
- TGS request with the VALIDATE option specified. The KDC will only
- validate tickets after their starttime has passed. The validation is
- required so that postdated tickets that have been stolen before their
- starttime can be rendered permanently invalid (through a hot-list
- mechanism) (see Section 3.3.3.1).
-
-2.3. Renewable Tickets
-
- Applications may desire to hold tickets that can be valid for long
- periods of time. However, this can expose their credentials to
- potential theft for equally long periods, and those stolen
- credentials would be valid until the expiration time of the
- ticket(s). Simply using short-lived tickets and obtaining new ones
- periodically would require the client to have long-term access to its
- secret key, an even greater risk. Renewable tickets can be used to
- mitigate the consequences of theft. Renewable tickets have two
- "expiration times": the first is when the current instance of the
- ticket expires, and the second is the latest permissible value for an
- individual expiration time. An application client must periodically
- (i.e., before it expires) present a renewable ticket to the KDC, with
- the RENEW option set in the KDC request. The KDC will issue a new
- ticket with a new session key and a later expiration time. All other
- fields of the ticket are left unmodified by the renewal process.
- When the latest permissible expiration time arrives, the ticket
- expires permanently. At each renewal, the KDC MAY consult a hot-list
- to determine whether the ticket had been reported stolen since its
-
-
-
-Neuman, et al. Standards Track [Page 17]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- last renewal; it will refuse to renew stolen tickets, and thus the
- usable lifetime of stolen tickets is reduced.
-
- The RENEWABLE flag in a ticket is normally only interpreted by the
- ticket-granting service (discussed below in Section 3.3). It can
- usually be ignored by application servers. However, some
- particularly careful application servers MAY disallow renewable
- tickets.
-
- If a renewable ticket is not renewed by its expiration time, the KDC
- will not renew the ticket. The RENEWABLE flag is reset by default,
- but a client MAY request it be set by setting the RENEWABLE option in
- the KRB_AS_REQ message. If it is set, then the renew-till field in
- the ticket contains the time after which the ticket may not be
- renewed.
-
-2.4. Postdated Tickets
-
- Applications may occasionally need to obtain tickets for use much
- later; e.g., a batch submission system would need tickets to be valid
- at the time the batch job is serviced. However, it is dangerous to
- hold valid tickets in a batch queue, since they will be on-line
- longer and more prone to theft. Postdated tickets provide a way to
- obtain these tickets from the KDC at job submission time, but to
- leave them "dormant" until they are activated and validated by a
- further request of the KDC. If a ticket theft were reported in the
- interim, the KDC would refuse to validate the ticket, and the thief
- would be foiled.
-
- The MAY-POSTDATE flag in a ticket is normally only interpreted by the
- ticket-granting service. It can be ignored by application servers.
- This flag MUST be set in a TGT in order to issue a postdated ticket
- based on the presented ticket. It is reset by default; a client MAY
- request it by setting the ALLOW-POSTDATE option in the KRB_AS_REQ
- message. This flag does not allow a client to obtain a postdated
- TGT; postdated TGTs can only be obtained by requesting the postdating
- in the KRB_AS_REQ message. The life (endtime-starttime) of a
- postdated ticket will be the remaining life of the TGT at the time of
- the request, unless the RENEWABLE option is also set, in which case
- it can be the full life (endtime-starttime) of the TGT. The KDC MAY
- limit how far in the future a ticket may be postdated.
-
- The POSTDATED flag indicates that a ticket has been postdated. The
- application server can check the authtime field in the ticket to see
- when the original authentication occurred. Some services MAY choose
- to reject postdated tickets, or they may only accept them within a
- certain period after the original authentication. When the KDC
- issues a POSTDATED ticket, it will also be marked as INVALID, so that
-
-
-
-Neuman, et al. Standards Track [Page 18]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- the application client MUST present the ticket to the KDC to be
- validated before use.
-
-2.5. Proxiable and Proxy Tickets
-
- At times it may be necessary for a principal to allow a service to
- perform an operation on its behalf. The service must be able to take
- on the identity of the client, but only for a particular purpose. A
- principal can allow a service to do this by granting it a proxy.
-
- The process of granting a proxy by using the proxy and proxiable
- flags is used to provide credentials for use with specific services.
- Though conceptually also a proxy, users wishing to delegate their
- identity in a form usable for all purposes MUST use the ticket
- forwarding mechanism described in the next section to forward a TGT.
-
- The PROXIABLE flag in a ticket is normally only interpreted by the
- ticket-granting service. It can be ignored by application servers.
- When set, this flag tells the ticket-granting server that it is OK to
- issue a new ticket (but not a TGT) with a different network address
- based on this ticket. This flag is set if requested by the client on
- initial authentication. By default, the client will request that it
- be set when requesting a TGT, and that it be reset when requesting
- any other ticket.
-
- This flag allows a client to pass a proxy to a server to perform a
- remote request on its behalf (e.g., a print service client can give
- the print server a proxy to access the client's files on a particular
- file server in order to satisfy a print request).
-
- In order to complicate the use of stolen credentials, Kerberos
- tickets are often valid only from those network addresses
- specifically included in the ticket, but it is permissible as a
- policy option to allow requests and to issue tickets with no network
- addresses specified. When granting a proxy, the client MUST specify
- the new network address from which the proxy is to be used or
- indicate that the proxy is to be issued for use from any address.
-
- The PROXY flag is set in a ticket by the TGS when it issues a proxy
- ticket. Application servers MAY check this flag; and at their option
- they MAY require additional authentication from the agent presenting
- the proxy in order to provide an audit trail.
-
-2.6. Forwardable Tickets
-
- Authentication forwarding is an instance of a proxy where the service
- that is granted is complete use of the client's identity. An example
- of where it might be used is when a user logs in to a remote system
-
-
-
-Neuman, et al. Standards Track [Page 19]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- and wants authentication to work from that system as if the login
- were local.
-
- The FORWARDABLE flag in a ticket is normally only interpreted by the
- ticket-granting service. It can be ignored by application servers.
- The FORWARDABLE flag has an interpretation similar to that of the
- PROXIABLE flag, except TGTs may also be issued with different network
- addresses. This flag is reset by default, but users MAY request that
- it be set by setting the FORWARDABLE option in the AS request when
- they request their initial TGT.
-
- This flag allows for authentication forwarding without requiring the
- user to enter a password again. If the flag is not set, then
- authentication forwarding is not permitted, but the same result can
- still be achieved if the user engages in the AS exchange, specifies
- the requested network addresses, and supplies a password.
-
- The FORWARDED flag is set by the TGS when a client presents a ticket
- with the FORWARDABLE flag set and requests a forwarded ticket by
- specifying the FORWARDED KDC option and supplying a set of addresses
- for the new ticket. It is also set in all tickets issued based on
- tickets with the FORWARDED flag set. Application servers may choose
- to process FORWARDED tickets differently than non-FORWARDED tickets.
-
- If addressless tickets are forwarded from one system to another,
- clients SHOULD still use this option to obtain a new TGT in order to
- have different session keys on the different systems.
-
-2.7. Transited Policy Checking
-
- In Kerberos, the application server is ultimately responsible for
- accepting or rejecting authentication, and it SHOULD check that only
- suitably trusted KDCs are relied upon to authenticate a principal.
- The transited field in the ticket identifies which realms (and thus
- which KDCs) were involved in the authentication process, and an
- application server would normally check this field. If any of these
- are untrusted to authenticate the indicated client principal
- (probably determined by a realm-based policy), the authentication
- attempt MUST be rejected. The presence of trusted KDCs in this list
- does not provide any guarantee; an untrusted KDC may have fabricated
- the list.
-
- Although the end server ultimately decides whether authentication is
- valid, the KDC for the end server's realm MAY apply a realm-specific
- policy for validating the transited field and accepting credentials
- for cross-realm authentication. When the KDC applies such checks and
- accepts such cross-realm authentication, it will set the
- TRANSITED-POLICY-CHECKED flag in the service tickets it issues based
-
-
-
-Neuman, et al. Standards Track [Page 20]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- on the cross-realm TGT. A client MAY request that the KDCs not check
- the transited field by setting the DISABLE-TRANSITED-CHECK flag.
- KDCs are encouraged but not required to honor this flag.
-
- Application servers MUST either do the transited-realm checks
- themselves or reject cross-realm tickets without
- TRANSITED-POLICY-CHECKED set.
-
-2.8. OK as Delegate
-
- For some applications, a client may need to delegate authority to a
- server to act on its behalf in contacting other services. This
- requires that the client forward credentials to an intermediate
- server. The ability for a client to obtain a service ticket to a
- server conveys no information to the client about whether the server
- should be trusted to accept delegated credentials. The
- OK-AS-DELEGATE provides a way for a KDC to communicate local realm
- policy to a client regarding whether an intermediate server is
- trusted to accept such credentials.
-
- The copy of the ticket flags in the encrypted part of the KDC reply
- may have the OK-AS-DELEGATE flag set to indicate to the client that
- the server specified in the ticket has been determined by the policy
- of the realm to be a suitable recipient of delegation. A client can
- use the presence of this flag to help it decide whether to delegate
- credentials (grant either a proxy or a forwarded TGT) to this server.
- It is acceptable to ignore the value of this flag. When setting this
- flag, an administrator should consider the security and placement of
- the server on which the service will run, as well as whether the
- service requires the use of delegated credentials.
-
-2.9. Other KDC Options
-
- There are three additional options that MAY be set in a client's
- request of the KDC.
-
-2.9.1. Renewable-OK
-
- The RENEWABLE-OK option indicates that the client will accept a
- renewable ticket if a ticket with the requested life cannot otherwise
- be provided. If a ticket with the requested life cannot be provided,
- then the KDC MAY issue a renewable ticket with a renew-till equal to
- the requested endtime. The value of the renew-till field MAY still
- be adjusted by site-determined limits or limits imposed by the
- individual principal or server.
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 21]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-2.9.2. ENC-TKT-IN-SKEY
-
- In its basic form, the Kerberos protocol supports authentication in a
- client-server setting and is not well suited to authentication in a
- peer-to-peer environment because the long-term key of the user does
- not remain on the workstation after initial login. Authentication of
- such peers may be supported by Kerberos in its user-to-user variant.
- The ENC-TKT-IN-SKEY option supports user-to-user authentication by
- allowing the KDC to issue a service ticket encrypted using the
- session key from another TGT issued to another user. The
- ENC-TKT-IN-SKEY option is honored only by the ticket-granting
- service. It indicates that the ticket to be issued for the end
- server is to be encrypted in the session key from the additional
- second TGT provided with the request. See Section 3.3.3 for specific
- details.
-
-2.9.3. Passwordless Hardware Authentication
-
- The OPT-HARDWARE-AUTH option indicates that the client wishes to use
- some form of hardware authentication instead of or in addition to the
- client's password or other long-lived encryption key.
- OPT-HARDWARE-AUTH is honored only by the authentication service. If
- supported and allowed by policy, the KDC will return an error code of
- KDC_ERR_PREAUTH_REQUIRED and include the required METHOD-DATA to
- perform such authentication.
-
-3. Message Exchanges
-
- The following sections describe the interactions between network
- clients and servers and the messages involved in those exchanges.
-
-3.1. The Authentication Service Exchange
-
- Summary
-
- Message direction Message type Section
- 1. Client to Kerberos KRB_AS_REQ 5.4.1
- 2. Kerberos to client KRB_AS_REP or 5.4.2
- KRB_ERROR 5.9.1
-
- The Authentication Service (AS) Exchange between the client and the
- Kerberos Authentication Server is initiated by a client when it
- wishes to obtain authentication credentials for a given server but
- currently holds no credentials. In its basic form, the client's
- secret key is used for encryption and decryption. This exchange is
- typically used at the initiation of a login session to obtain
- credentials for a Ticket-Granting Server, which will subsequently be
- used to obtain credentials for other servers (see Section 3.3)
-
-
-
-Neuman, et al. Standards Track [Page 22]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- without requiring further use of the client's secret key. This
- exchange is also used to request credentials for services that must
- not be mediated through the Ticket-Granting Service, but rather
- require knowledge of a principal's secret key, such as the password-
- changing service (the password-changing service denies requests
- unless the requester can demonstrate knowledge of the user's old
- password; requiring this knowledge prevents unauthorized password
- changes by someone walking up to an unattended session).
-
- This exchange does not by itself provide any assurance of the
- identity of the user. To authenticate a user logging on to a local
- system, the credentials obtained in the AS exchange may first be used
- in a TGS exchange to obtain credentials for a local server; those
- credentials must then be verified by a local server through
- successful completion of the Client/Server exchange.
-
- The AS exchange consists of two messages: KRB_AS_REQ from the client
- to Kerberos, and KRB_AS_REP or KRB_ERROR in reply. The formats for
- these messages are described in Sections 5.4.1, 5.4.2, and 5.9.1.
-
- In the request, the client sends (in cleartext) its own identity and
- the identity of the server for which it is requesting credentials,
- other information about the credentials it is requesting, and a
- randomly generated nonce, which can be used to detect replays and to
- associate replies with the matching requests. This nonce MUST be
- generated randomly by the client and remembered for checking against
- the nonce in the expected reply. The response, KRB_AS_REP, contains
- a ticket for the client to present to the server, and a session key
- that will be shared by the client and the server. The session key
- and additional information are encrypted in the client's secret key.
- The encrypted part of the KRB_AS_REP message also contains the nonce
- that MUST be matched with the nonce from the KRB_AS_REQ message.
-
- Without pre-authentication, the authentication server does not know
- whether the client is actually the principal named in the request.
- It simply sends a reply without knowing or caring whether they are
- the same. This is acceptable because nobody but the principal whose
- identity was given in the request will be able to use the reply. Its
- critical information is encrypted in that principal's key. However,
- an attacker can send a KRB_AS_REQ message to get known plaintext in
- order to attack the principal's key. Especially if the key is based
- on a password, this may create a security exposure. So the initial
- request supports an optional field that can be used to pass
- additional information that might be needed for the initial exchange.
- This field SHOULD be used for pre-authentication as described in
- sections 3.1.1 and 5.2.7.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 23]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Various errors can occur; these are indicated by an error response
- (KRB_ERROR) instead of the KRB_AS_REP response. The error message is
- not encrypted. The KRB_ERROR message contains information that can
- be used to associate it with the message to which it replies. The
- contents of the KRB_ERROR message are not integrity-protected. As
- such, the client cannot detect replays, fabrications, or
- modifications. A solution to this problem will be included in a
- future version of the protocol.
-
-3.1.1. Generation of KRB_AS_REQ Message
-
- The client may specify a number of options in the initial request.
- Among these options are whether pre-authentication is to be
- performed; whether the requested ticket is to be renewable,
- proxiable, or forwardable; whether it should be postdated or allow
- postdating of derivative tickets; and whether a renewable ticket will
- be accepted in lieu of a non-renewable ticket if the requested ticket
- expiration date cannot be satisfied by a non-renewable ticket (due to
- configuration constraints).
-
- The client prepares the KRB_AS_REQ message and sends it to the KDC.
-
-3.1.2. Receipt of KRB_AS_REQ Message
-
- If all goes well, processing the KRB_AS_REQ message will result in
- the creation of a ticket for the client to present to the server.
- The format for the ticket is described in Section 5.3.
-
- Because Kerberos can run over unreliable transports such as UDP, the
- KDC MUST be prepared to retransmit responses in case they are lost.
- If a KDC receives a request identical to one it has recently
- processed successfully, the KDC MUST respond with a KRB_AS_REP
- message rather than a replay error. In order to reduce ciphertext
- given to a potential attacker, KDCs MAY send the same response
- generated when the request was first handled. KDCs MUST obey this
- replay behavior even if the actual transport in use is reliable.
-
-3.1.3. Generation of KRB_AS_REP Message
-
- The authentication server looks up the client and server principals
- named in the KRB_AS_REQ in its database, extracting their respective
- keys. If the requested client principal named in the request is
- unknown because it doesn't exist in the KDC's principal database,
- then an error message with a KDC_ERR_C_PRINCIPAL_UNKNOWN is returned.
-
- If required to do so, the server pre-authenticates the request, and
- if the pre-authentication check fails, an error message with the code
- KDC_ERR_PREAUTH_FAILED is returned. If pre-authentication is
-
-
-
-Neuman, et al. Standards Track [Page 24]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- required, but was not present in the request, an error message with
- the code KDC_ERR_PREAUTH_REQUIRED is returned, and a METHOD-DATA
- object will be stored in the e-data field of the KRB-ERROR message to
- specify which pre-authentication mechanisms are acceptable. Usually
- this will include PA-ETYPE-INFO and/or PA-ETYPE-INFO2 elements as
- described below. If the server cannot accommodate any encryption
- type requested by the client, an error message with code
- KDC_ERR_ETYPE_NOSUPP is returned. Otherwise, the KDC generates a
- 'random' session key, meaning that, among other things, it should be
- impossible to guess the next session key based on knowledge of past
- session keys. Although this can be achieved in a pseudo-random
- number generator if it is based on cryptographic principles, it is
- more desirable to use a truly random number generator, such as one
- based on measurements of random physical phenomena. See [RFC4086]
- for an in-depth discussion of randomness.
-
- In response to an AS request, if there are multiple encryption keys
- registered for a client in the Kerberos database, then the etype
- field from the AS request is used by the KDC to select the encryption
- method to be used to protect the encrypted part of the KRB_AS_REP
- message that is sent to the client. If there is more than one
- supported strong encryption type in the etype list, the KDC SHOULD
- use the first valid strong etype for which an encryption key is
- available.
-
- When the user's key is generated from a password or pass phrase, the
- string-to-key function for the particular encryption key type is
- used, as specified in [RFC3961]. The salt value and additional
- parameters for the string-to-key function have default values
- (specified by Section 4 and by the encryption mechanism
- specification, respectively) that may be overridden by
- pre-authentication data (PA-PW-SALT, PA-AFS3-SALT, PA-ETYPE-INFO,
- PA-ETYPE-INFO2, etc). Since the KDC is presumed to store a copy of
- the resulting key only, these values should not be changed for
- password-based keys except when changing the principal's key.
-
- When the AS server is to include pre-authentication data in a
- KRB-ERROR or in an AS-REP, it MUST use PA-ETYPE-INFO2, not PA-ETYPE-
- INFO, if the etype field of the client's AS-REQ lists at least one
- "newer" encryption type. Otherwise (when the etype field of the
- client's AS-REQ does not list any "newer" encryption types), it MUST
- send both PA-ETYPE-INFO2 and PA-ETYPE-INFO (both with an entry for
- each enctype). A "newer" enctype is any enctype first officially
- specified concurrently with or subsequent to the issue of this RFC.
- The enctypes DES, 3DES, or RC4 and any defined in [RFC1510] are not
- "newer" enctypes.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 25]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- It is not possible to generate a user's key reliably given a pass
- phrase without contacting the KDC, since it will not be known whether
- alternate salt or parameter values are required.
-
- The KDC will attempt to assign the type of the random session key
- from the list of methods in the etype field. The KDC will select the
- appropriate type using the list of methods provided and information
- from the Kerberos database indicating acceptable encryption methods
- for the application server. The KDC will not issue tickets with a
- weak session key encryption type.
-
- If the requested starttime is absent, indicates a time in the past,
- or is within the window of acceptable clock skew for the KDC and the
- POSTDATE option has not been specified, then the starttime of the
- ticket is set to the authentication server's current time. If it
- indicates a time in the future beyond the acceptable clock skew, but
- the POSTDATED option has not been specified, then the error
- KDC_ERR_CANNOT_POSTDATE is returned. Otherwise the requested
- starttime is checked against the policy of the local realm (the
- administrator might decide to prohibit certain types or ranges of
- postdated tickets), and if the ticket's starttime is acceptable, it
- is set as requested, and the INVALID flag is set in the new ticket.
- The postdated ticket MUST be validated before use by presenting it to
- the KDC after the starttime has been reached.
-
- The expiration time of the ticket will be set to the earlier of the
- requested endtime and a time determined by local policy, possibly by
- using realm- or principal-specific factors. For example, the
- expiration time MAY be set to the earliest of the following:
-
- * The expiration time (endtime) requested in the KRB_AS_REQ
- message.
-
- * The ticket's starttime plus the maximum allowable lifetime
- associated with the client principal from the authentication
- server's database.
-
- * The ticket's starttime plus the maximum allowable lifetime
- associated with the server principal.
-
- * The ticket's starttime plus the maximum lifetime set by the
- policy of the local realm.
-
- If the requested expiration time minus the starttime (as determined
- above) is less than a site-determined minimum lifetime, an error
- message with code KDC_ERR_NEVER_VALID is returned. If the requested
- expiration time for the ticket exceeds what was determined as above,
- and if the 'RENEWABLE-OK' option was requested, then the 'RENEWABLE'
-
-
-
-Neuman, et al. Standards Track [Page 26]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- flag is set in the new ticket, and the renew-till value is set as if
- the 'RENEWABLE' option were requested (the field and option names are
- described fully in Section 5.4.1).
-
- If the RENEWABLE option has been requested or if the RENEWABLE-OK
- option has been set and a renewable ticket is to be issued, then the
- renew-till field MAY be set to the earliest of:
-
- * Its requested value.
-
- * The starttime of the ticket plus the minimum of the two maximum
- renewable lifetimes associated with the principals' database
- entries.
-
- * The starttime of the ticket plus the maximum renewable lifetime
- set by the policy of the local realm.
-
- The flags field of the new ticket will have the following options set
- if they have been requested and if the policy of the local realm
- allows: FORWARDABLE, MAY-POSTDATE, POSTDATED, PROXIABLE, RENEWABLE.
- If the new ticket is postdated (the starttime is in the future), its
- INVALID flag will also be set.
-
- If all of the above succeed, the server will encrypt the ciphertext
- part of the ticket using the encryption key extracted from the server
- principal's record in the Kerberos database using the encryption type
- associated with the server principal's key. (This choice is NOT
- affected by the etype field in the request.) It then formats a
- KRB_AS_REP message (see Section 5.4.2), copying the addresses in the
- request into the caddr of the response, placing any required pre-
- authentication data into the padata of the response, and encrypts the
- ciphertext part in the client's key using an acceptable encryption
- method requested in the etype field of the request, or in some key
- specified by pre-authentication mechanisms being used.
-
-3.1.4. Generation of KRB_ERROR Message
-
- Several errors can occur, and the Authentication Server responds by
- returning an error message, KRB_ERROR, to the client, with the
- error-code and e-text fields set to appropriate values. The error
- message contents and details are described in Section 5.9.1.
-
-3.1.5. Receipt of KRB_AS_REP Message
-
- If the reply message type is KRB_AS_REP, then the client verifies
- that the cname and crealm fields in the cleartext portion of the
- reply match what it requested. If any padata fields are present,
- they may be used to derive the proper secret key to decrypt the
-
-
-
-Neuman, et al. Standards Track [Page 27]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- message. The client decrypts the encrypted part of the response
- using its secret key and verifies that the nonce in the encrypted
- part matches the nonce it supplied in its request (to detect
- replays). It also verifies that the sname and srealm in the response
- match those in the request (or are otherwise expected values), and
- that the host address field is also correct. It then stores the
- ticket, session key, start and expiration times, and other
- information for later use. The last-req field (and the deprecated
- key-expiration field) from the encrypted part of the response MAY be
- checked to notify the user of impending key expiration. This enables
- the client program to suggest remedial action, such as a password
- change.
-
- Upon validation of the KRB_AS_REP message (by checking the returned
- nonce against that sent in the KRB_AS_REQ message), the client knows
- that the current time on the KDC is that read from the authtime field
- of the encrypted part of the reply. The client can optionally use
- this value for clock synchronization in subsequent messages by
- recording with the ticket the difference (offset) between the
- authtime value and the local clock. This offset can then be used by
- the same user to adjust the time read from the system clock when
- generating messages [DGT96].
-
- This technique MUST be used when adjusting for clock skew instead of
- directly changing the system clock, because the KDC reply is only
- authenticated to the user whose secret key was used, but not to the
- system or workstation. If the clock were adjusted, an attacker
- colluding with a user logging into a workstation could agree on a
- password, resulting in a KDC reply that would be correctly validated
- even though it did not originate from a KDC trusted by the
- workstation.
-
- Proper decryption of the KRB_AS_REP message is not sufficient for the
- host to verify the identity of the user; the user and an attacker
- could cooperate to generate a KRB_AS_REP format message that decrypts
- properly but is not from the proper KDC. If the host wishes to
- verify the identity of the user, it MUST require the user to present
- application credentials that can be verified using a securely-stored
- secret key for the host. If those credentials can be verified, then
- the identity of the user can be assured.
-
-3.1.6. Receipt of KRB_ERROR Message
-
- If the reply message type is KRB_ERROR, then the client interprets it
- as an error and performs whatever application-specific tasks are
- necessary for recovery.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 28]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-3.2. The Client/Server Authentication Exchange
-
- Summary
-
- Message direction Message type Section
- Client to Application server KRB_AP_REQ 5.5.1
- [optional] Application server to client KRB_AP_REP or 5.5.2
- KRB_ERROR 5.9.1
-
- The client/server authentication (CS) exchange is used by network
- applications to authenticate the client to the server and vice versa.
- The client MUST have already acquired credentials for the server
- using the AS or TGS exchange.
-
-3.2.1. The KRB_AP_REQ Message
-
- The KRB_AP_REQ contains authentication information that SHOULD be
- part of the first message in an authenticated transaction. It
- contains a ticket, an authenticator, and some additional bookkeeping
- information (see Section 5.5.1 for the exact format). The ticket by
- itself is insufficient to authenticate a client, since tickets are
- passed across the network in cleartext (tickets contain both an
- encrypted and unencrypted portion, so cleartext here refers to the
- entire unit, which can be copied from one message and replayed in
- another without any cryptographic skill). The authenticator is used
- to prevent invalid replay of tickets by proving to the server that
- the client knows the session key of the ticket and thus is entitled
- to use the ticket. The KRB_AP_REQ message is referred to elsewhere
- as the 'authentication header'.
-
-3.2.2. Generation of a KRB_AP_REQ Message
-
- When a client wishes to initiate authentication to a server, it
- obtains (either through a credentials cache, the AS exchange, or the
- TGS exchange) a ticket and session key for the desired service. The
- client MAY re-use any tickets it holds until they expire. To use a
- ticket, the client constructs a new Authenticator from the system
- time and its name, and optionally from an application-specific
- checksum, an initial sequence number to be used in KRB_SAFE or
- KRB_PRIV messages, and/or a session subkey to be used in negotiations
- for a session key unique to this particular session. Authenticators
- MUST NOT be re-used and SHOULD be rejected if replayed to a server.
- Note that this can make applications based on unreliable transports
- difficult to code correctly. If the transport might deliver
- duplicated messages, either a new authenticator MUST be generated for
- each retry, or the application server MUST match requests and replies
- and replay the first reply in response to a detected duplicate.
-
-
-
-
-Neuman, et al. Standards Track [Page 29]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- If a sequence number is to be included, it SHOULD be randomly chosen
- so that even after many messages have been exchanged it is not likely
- to collide with other sequence numbers in use.
-
- The client MAY indicate a requirement of mutual authentication or the
- use of a session-key based ticket (for user-to-user authentication,
- see section 3.7) by setting the appropriate flag(s) in the ap-options
- field of the message.
-
- The Authenticator is encrypted in the session key and combined with
- the ticket to form the KRB_AP_REQ message, which is then sent to the
- end server along with any additional application-specific
- information.
-
-3.2.3. Receipt of KRB_AP_REQ Message
-
- Authentication is based on the server's current time of day (clocks
- MUST be loosely synchronized), the authenticator, and the ticket.
- Several errors are possible. If an error occurs, the server is
- expected to reply to the client with a KRB_ERROR message. This
- message MAY be encapsulated in the application protocol if its raw
- form is not acceptable to the protocol. The format of error messages
- is described in Section 5.9.1.
-
- The algorithm for verifying authentication information is as follows.
- If the message type is not KRB_AP_REQ, the server returns the
- KRB_AP_ERR_MSG_TYPE error. If the key version indicated by the
- Ticket in the KRB_AP_REQ is not one the server can use (e.g., it
- indicates an old key, and the server no longer possesses a copy of
- the old key), the KRB_AP_ERR_BADKEYVER error is returned. If the
- USE-SESSION-KEY flag is set in the ap-options field, it indicates to
- the server that user-to-user authentication is in use, and that the
- ticket is encrypted in the session key from the server's TGT rather
- than in the server's secret key. See Section 3.7 for a more complete
- description of the effect of user-to-user authentication on all
- messages in the Kerberos protocol.
-
- Because it is possible for the server to be registered in multiple
- realms, with different keys in each, the srealm field in the
- unencrypted portion of the ticket in the KRB_AP_REQ is used to
- specify which secret key the server should use to decrypt that
- ticket. The KRB_AP_ERR_NOKEY error code is returned if the server
- doesn't have the proper key to decipher the ticket.
-
- The ticket is decrypted using the version of the server's key
- specified by the ticket. If the decryption routines detect a
- modification of the ticket (each encryption system MUST provide
- safeguards to detect modified ciphertext), the
-
-
-
-Neuman, et al. Standards Track [Page 30]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- KRB_AP_ERR_BAD_INTEGRITY error is returned (chances are good that
- different keys were used to encrypt and decrypt).
-
- The authenticator is decrypted using the session key extracted from
- the decrypted ticket. If decryption shows that is has been modified,
- the KRB_AP_ERR_BAD_INTEGRITY error is returned. The name and realm
- of the client from the ticket are compared against the same fields in
- the authenticator. If they don't match, the KRB_AP_ERR_BADMATCH
- error is returned; normally this is caused by a client error or an
- attempted attack. The addresses in the ticket (if any) are then
- searched for an address matching the operating-system reported
- address of the client. If no match is found or the server insists on
- ticket addresses but none are present in the ticket, the
- KRB_AP_ERR_BADADDR error is returned. If the local (server) time and
- the client time in the authenticator differ by more than the
- allowable clock skew (e.g., 5 minutes), the KRB_AP_ERR_SKEW error is
- returned.
-
- Unless the application server provides its own suitable means to
- protect against replay (for example, a challenge-response sequence
- initiated by the server after authentication, or use of a server-
- generated encryption subkey), the server MUST utilize a replay cache
- to remember any authenticator presented within the allowable clock
- skew. Careful analysis of the application protocol and
- implementation is recommended before eliminating this cache. The
- replay cache will store at least the server name, along with the
- client name, time, and microsecond fields from the recently-seen
- authenticators, and if a matching tuple is found, the
- KRB_AP_ERR_REPEAT error is returned. Note that the rejection here is
- restricted to authenticators from the same principal to the same
- server. Other client principals communicating with the same server
- principal should not have their authenticators rejected if the time
- and microsecond fields happen to match some other client's
- authenticator.
-
- If a server loses track of authenticators presented within the
- allowable clock skew, it MUST reject all requests until the clock
- skew interval has passed, providing assurance that any lost or
- replayed authenticators will fall outside the allowable clock skew
- and can no longer be successfully replayed. If this were not done,
- an attacker could subvert the authentication by recording the ticket
- and authenticator sent over the network to a server and replaying
- them following an event that caused the server to lose track of
- recently seen authenticators.
-
- Implementation note: If a client generates multiple requests to the
- KDC with the same timestamp, including the microsecond field, all but
- the first of the requests received will be rejected as replays. This
-
-
-
-Neuman, et al. Standards Track [Page 31]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- might happen, for example, if the resolution of the client's clock is
- too coarse. Client implementations SHOULD ensure that the timestamps
- are not reused, possibly by incrementing the microseconds field in
- the time stamp when the clock returns the same time for multiple
- requests.
-
- If multiple servers (for example, different services on one machine,
- or a single service implemented on multiple machines) share a service
- principal (a practice that we do not recommend in general, but that
- we acknowledge will be used in some cases), either they MUST share
- this replay cache, or the application protocol MUST be designed so as
- to eliminate the need for it. Note that this applies to all of the
- services. If any of the application protocols does not have replay
- protection built in, an authenticator used with such a service could
- later be replayed to a different service with the same service
- principal but no replay protection, if the former doesn't record the
- authenticator information in the common replay cache.
-
- If a sequence number is provided in the authenticator, the server
- saves it for later use in processing KRB_SAFE and/or KRB_PRIV
- messages. If a subkey is present, the server either saves it for
- later use or uses it to help generate its own choice for a subkey to
- be returned in a KRB_AP_REP message.
-
- The server computes the age of the ticket: local (server) time minus
- the starttime inside the Ticket. If the starttime is later than the
- current time by more than the allowable clock skew, or if the INVALID
- flag is set in the ticket, the KRB_AP_ERR_TKT_NYV error is returned.
- Otherwise, if the current time is later than end time by more than
- the allowable clock skew, the KRB_AP_ERR_TKT_EXPIRED error is
- returned.
-
- If all these checks succeed without an error, the server is assured
- that the client possesses the credentials of the principal named in
- the ticket, and thus, that the client has been authenticated to the
- server.
-
- Passing these checks provides only authentication of the named
- principal; it does not imply authorization to use the named service.
- Applications MUST make a separate authorization decision based upon
- the authenticated name of the user, the requested operation, local
- access control information such as that contained in a .k5login or
- .k5users file, and possibly a separate distributed authorization
- service.
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 32]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-3.2.4. Generation of a KRB_AP_REP Message
-
- Typically, a client's request will include both the authentication
- information and its initial request in the same message, and the
- server need not explicitly reply to the KRB_AP_REQ. However, if
- mutual authentication (authenticating not only the client to the
- server, but also the server to the client) is being performed, the
- KRB_AP_REQ message will have MUTUAL-REQUIRED set in its ap-options
- field, and a KRB_AP_REP message is required in response. As with the
- error message, this message MAY be encapsulated in the application
- protocol if its "raw" form is not acceptable to the application's
- protocol. The timestamp and microsecond field used in the reply MUST
- be the client's timestamp and microsecond field (as provided in the
- authenticator). If a sequence number is to be included, it SHOULD be
- randomly chosen as described above for the authenticator. A subkey
- MAY be included if the server desires to negotiate a different
- subkey. The KRB_AP_REP message is encrypted in the session key
- extracted from the ticket.
-
- Note that in the Kerberos Version 4 protocol, the timestamp in the
- reply was the client's timestamp plus one. This is not necessary in
- Version 5 because Version 5 messages are formatted in such a way that
- it is not possible to create the reply by judicious message surgery
- (even in encrypted form) without knowledge of the appropriate
- encryption keys.
-
-3.2.5. Receipt of KRB_AP_REP Message
-
- If a KRB_AP_REP message is returned, the client uses the session key
- from the credentials obtained for the server to decrypt the message
- and verifies that the timestamp and microsecond fields match those in
- the Authenticator it sent to the server. If they match, then the
- client is assured that the server is genuine. The sequence number
- and subkey (if present) are retained for later use. (Note that for
- encrypting the KRB_AP_REP message, the sub-session key is not used,
- even if it is present in the Authentication.)
-
-3.2.6. Using the Encryption Key
-
- After the KRB_AP_REQ/KRB_AP_REP exchange has occurred, the client and
- server share an encryption key that can be used by the application.
- In some cases, the use of this session key will be implicit in the
- protocol; in others the method of use must be chosen from several
- alternatives. The application MAY choose the actual encryption key
- to be used for KRB_PRIV, KRB_SAFE, or other application-specific uses
- based on the session key from the ticket and subkeys in the
- KRB_AP_REP message and the authenticator. Implementations of the
- protocol MAY provide routines to choose subkeys based on session keys
-
-
-
-Neuman, et al. Standards Track [Page 33]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- and random numbers and to generate a negotiated key to be returned in
- the KRB_AP_REP message.
-
- To mitigate the effect of failures in random number generation on the
- client, it is strongly encouraged that any key derived by an
- application for subsequent use include the full key entropy derived
- from the KDC-generated session key carried in the ticket. We leave
- the protocol negotiations of how to use the key (e.g., for selecting
- an encryption or checksum type) to the application programmer. The
- Kerberos protocol does not constrain the implementation options, but
- an example of how this might be done follows.
-
- One way that an application may choose to negotiate a key to be used
- for subsequent integrity and privacy protection is for the client to
- propose a key in the subkey field of the authenticator. The server
- can then choose a key using the key proposed by the client as input,
- returning the new subkey in the subkey field of the application
- reply. This key could then be used for subsequent communication.
-
- With both the one-way and mutual authentication exchanges, the peers
- should take care not to send sensitive information to each other
- without proper assurances. In particular, applications that require
- privacy or integrity SHOULD use the KRB_AP_REP response from the
- server to the client to assure both client and server of their peer's
- identity. If an application protocol requires privacy of its
- messages, it can use the KRB_PRIV message (section 3.5). The
- KRB_SAFE message (Section 3.4) can be used to ensure integrity.
-
-3.3. The Ticket-Granting Service (TGS) Exchange
-
- Summary
-
- Message direction Message type Section
- 1. Client to Kerberos KRB_TGS_REQ 5.4.1
- 2. Kerberos to client KRB_TGS_REP or 5.4.2
- KRB_ERROR 5.9.1
-
- The TGS exchange between a client and the Kerberos TGS is initiated
- by a client when it seeks to obtain authentication credentials for a
- given server (which might be registered in a remote realm), when it
- seeks to renew or validate an existing ticket, or when it seeks to
- obtain a proxy ticket. In the first case, the client must already
- have acquired a ticket for the Ticket-Granting Service using the AS
- exchange (the TGT is usually obtained when a client initially
- authenticates to the system, such as when a user logs in). The
- message format for the TGS exchange is almost identical to that for
- the AS exchange. The primary difference is that encryption and
- decryption in the TGS exchange does not take place under the client's
-
-
-
-Neuman, et al. Standards Track [Page 34]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- key. Instead, the session key from the TGT or renewable ticket, or
- sub-session key from an Authenticator is used. As is the case for
- all application servers, expired tickets are not accepted by the TGS,
- so once a renewable or TGT expires, the client must use a separate
- exchange to obtain valid tickets.
-
- The TGS exchange consists of two messages: a request (KRB_TGS_REQ)
- from the client to the Kerberos Ticket-Granting Server, and a reply
- (KRB_TGS_REP or KRB_ERROR). The KRB_TGS_REQ message includes
- information authenticating the client plus a request for credentials.
- The authentication information consists of the authentication header
- (KRB_AP_REQ), which includes the client's previously obtained
- ticket-granting, renewable, or invalid ticket. In the TGT and proxy
- cases, the request MAY include one or more of the following: a list
- of network addresses, a collection of typed authorization data to be
- sealed in the ticket for authorization use by the application server,
- or additional tickets (the use of which are described later). The
- TGS reply (KRB_TGS_REP) contains the requested credentials, encrypted
- in the session key from the TGT or renewable ticket, or, if present,
- in the sub-session key from the Authenticator (part of the
- authentication header). The KRB_ERROR message contains an error code
- and text explaining what went wrong. The KRB_ERROR message is not
- encrypted. The KRB_TGS_REP message contains information that can be
- used to detect replays, and to associate it with the message to which
- it replies. The KRB_ERROR message also contains information that can
- be used to associate it with the message to which it replies. The
- same comments about integrity protection of KRB_ERROR messages
- mentioned in Section 3.1 apply to the TGS exchange.
-
-3.3.1. Generation of KRB_TGS_REQ Message
-
- Before sending a request to the ticket-granting service, the client
- MUST determine in which realm the application server is believed to
- be registered. This can be accomplished in several ways. It might
- be known beforehand (since the realm is part of the principal
- identifier), it might be stored in a nameserver, or it might be
- obtained from a configuration file. If the realm to be used is
- obtained from a nameserver, there is a danger of being spoofed if the
- nameservice providing the realm name is not authenticated. This
- might result in the use of a realm that has been compromised, which
- would result in an attacker's ability to compromise the
- authentication of the application server to the client.
-
- If the client knows the service principal name and realm and it does
- not already possess a TGT for the appropriate realm, then one must be
- obtained. This is first attempted by requesting a TGT for the
- destination realm from a Kerberos server for which the client
- possesses a TGT (by using the KRB_TGS_REQ message recursively). The
-
-
-
-Neuman, et al. Standards Track [Page 35]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Kerberos server MAY return a TGT for the desired realm, in which case
- one can proceed. Alternatively, the Kerberos server MAY return a TGT
- for a realm that is 'closer' to the desired realm (further along the
- standard hierarchical path between the client's realm and the
- requested realm server's realm). Note that in this case
- misconfiguration of the Kerberos servers may cause loops in the
- resulting authentication path, which the client should be careful to
- detect and avoid.
-
- If the Kerberos server returns a TGT for a realm 'closer' than the
- desired realm, the client MAY use local policy configuration to
- verify that the authentication path used is an acceptable one.
- Alternatively, a client MAY choose its own authentication path,
- rather than rely on the Kerberos server to select one. In either
- case, any policy or configuration information used to choose or
- validate authentication paths, whether by the Kerberos server or by
- the client, MUST be obtained from a trusted source.
-
- When a client obtains a TGT that is 'closer' to the destination
- realm, the client MAY cache this ticket and reuse it in future
- KRB-TGS exchanges with services in the 'closer' realm. However, if
- the client were to obtain a TGT for the 'closer' realm by starting at
- the initial KDC rather than as part of obtaining another ticket, then
- a shorter path to the 'closer' realm might be used. This shorter
- path may be desirable because fewer intermediate KDCs would know the
- session key of the ticket involved. For this reason, clients SHOULD
- evaluate whether they trust the realms transited in obtaining the
- 'closer' ticket when making a decision to use the ticket in future.
-
- Once the client obtains a TGT for the appropriate realm, it
- determines which Kerberos servers serve that realm and contacts one
- of them. The list might be obtained through a configuration file or
- network service, or it MAY be generated from the name of the realm.
- As long as the secret keys exchanged by realms are kept secret, only
- denial of service results from using a false Kerberos server.
-
- As in the AS exchange, the client MAY specify a number of options in
- the KRB_TGS_REQ message. One of these options is the ENC-TKT-IN-SKEY
- option used for user-to-user authentication. An overview of user-
- to-user authentication can be found in Section 3.7. When generating
- the KRB_TGS_REQ message, this option indicates that the client is
- including a TGT obtained from the application server in the
- additional tickets field of the request and that the KDC SHOULD
- encrypt the ticket for the application server using the session key
- from this additional ticket, instead of a server key from the
- principal database.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 36]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- The client prepares the KRB_TGS_REQ message, providing an
- authentication header as an element of the padata field, and
- including the same fields as used in the KRB_AS_REQ message along
- with several optional fields: the enc-authorizatfion-data field for
- application server use and additional tickets required by some
- options.
-
- In preparing the authentication header, the client can select a sub-
- session key under which the response from the Kerberos server will be
- encrypted. If the client selects a sub-session key, care must be
- taken to ensure the randomness of the selected sub-session key.
-
- If the sub-session key is not specified, the session key from the TGT
- will be used. If the enc-authorization-data is present, it MUST be
- encrypted in the sub-session key, if present, from the authenticator
- portion of the authentication header, or, if not present, by using
- the session key from the TGT.
-
- Once prepared, the message is sent to a Kerberos server for the
- destination realm.
-
-3.3.2. Receipt of KRB_TGS_REQ Message
-
- The KRB_TGS_REQ message is processed in a manner similar to the
- KRB_AS_REQ message, but there are many additional checks to be
- performed. First, the Kerberos server MUST determine which server
- the accompanying ticket is for, and it MUST select the appropriate
- key to decrypt it. For a normal KRB_TGS_REQ message, it will be for
- the ticket-granting service, and the TGS's key will be used. If the
- TGT was issued by another realm, then the appropriate inter-realm key
- MUST be used. If (a) the accompanying ticket is not a TGT for the
- current realm, but is for an application server in the current realm,
- (b) the RENEW, VALIDATE, or PROXY options are specified in the
- request, and (c) the server for which a ticket is requested is the
- server named in the accompanying ticket, then the KDC will decrypt
- the ticket in the authentication header using the key of the server
- for which it was issued. If no ticket can be found in the padata
- field, the KDC_ERR_PADATA_TYPE_NOSUPP error is returned.
-
- Once the accompanying ticket has been decrypted, the user-supplied
- checksum in the Authenticator MUST be verified against the contents
- of the request, and the message MUST be rejected if the checksums do
- not match (with an error code of KRB_AP_ERR_MODIFIED) or if the
- checksum is not collision-proof (with an error code of
- KRB_AP_ERR_INAPP_CKSUM). If the checksum type is not supported, the
- KDC_ERR_SUMTYPE_NOSUPP error is returned. If the authorization-data
- are present, they are decrypted using the sub-session key from the
- Authenticator.
-
-
-
-Neuman, et al. Standards Track [Page 37]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- If any of the decryptions indicate failed integrity checks, the
- KRB_AP_ERR_BAD_INTEGRITY error is returned.
-
- As discussed in Section 3.1.2, the KDC MUST send a valid KRB_TGS_REP
- message if it receives a KRB_TGS_REQ message identical to one it has
- recently processed. However, if the authenticator is a replay, but
- the rest of the request is not identical, then the KDC SHOULD return
- KRB_AP_ERR_REPEAT.
-
-3.3.3. Generation of KRB_TGS_REP Message
-
- The KRB_TGS_REP message shares its format with the KRB_AS_REP
- (KRB_KDC_REP), but with its type field set to KRB_TGS_REP. The
- detailed specification is in Section 5.4.2.
-
- The response will include a ticket for the requested server or for a
- ticket granting server of an intermediate KDC to be contacted to
- obtain the requested ticket. The Kerberos database is queried to
- retrieve the record for the appropriate server (including the key
- with which the ticket will be encrypted). If the request is for a
- TGT for a remote realm, and if no key is shared with the requested
- realm, then the Kerberos server will select the realm 'closest' to
- the requested realm with which it does share a key and use that realm
- instead. This is the only case where the response for the KDC will
- be for a different server than that requested by the client.
-
- By default, the address field, the client's name and realm, the list
- of transited realms, the time of initial authentication, the
- expiration time, and the authorization data of the newly-issued
- ticket will be copied from the TGT or renewable ticket. If the
- transited field needs to be updated, but the transited type is not
- supported, the KDC_ERR_TRTYPE_NOSUPP error is returned.
-
- If the request specifies an endtime, then the endtime of the new
- ticket is set to the minimum of (a) that request, (b) the endtime
- from the TGT, and (c) the starttime of the TGT plus the minimum of
- the maximum life for the application server and the maximum life for
- the local realm (the maximum life for the requesting principal was
- already applied when the TGT was issued). If the new ticket is to be
- a renewal, then the endtime above is replaced by the minimum of (a)
- the value of the renew_till field of the ticket and (b) the starttime
- for the new ticket plus the life (endtime-starttime) of the old
- ticket.
-
- If the FORWARDED option has been requested, then the resulting ticket
- will contain the addresses specified by the client. This option will
- only be honored if the FORWARDABLE flag is set in the TGT. The PROXY
- option is similar; the resulting ticket will contain the addresses
-
-
-
-Neuman, et al. Standards Track [Page 38]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- specified by the client. It will be honored only if the PROXIABLE
- flag in the TGT is set. The PROXY option will not be honored on
- requests for additional TGTs.
-
- If the requested starttime is absent, indicates a time in the past,
- or is within the window of acceptable clock skew for the KDC and the
- POSTDATE option has not been specified, then the starttime of the
- ticket is set to the authentication server's current time. If it
- indicates a time in the future beyond the acceptable clock skew, but
- the POSTDATED option has not been specified or the MAY-POSTDATE flag
- is not set in the TGT, then the error KDC_ERR_CANNOT_POSTDATE is
- returned. Otherwise, if the TGT has the MAY-POSTDATE flag set, then
- the resulting ticket will be postdated, and the requested starttime
- is checked against the policy of the local realm. If acceptable, the
- ticket's starttime is set as requested, and the INVALID flag is set.
- The postdated ticket MUST be validated before use by presenting it to
- the KDC after the starttime has been reached. However, in no case
- may the starttime, endtime, or renew-till time of a newly-issued
- postdated ticket extend beyond the renew-till time of the TGT.
-
- If the ENC-TKT-IN-SKEY option has been specified and an additional
- ticket has been included in the request, it indicates that the client
- is using user-to-user authentication to prove its identity to a
- server that does not have access to a persistent key. Section 3.7
- describes the effect of this option on the entire Kerberos protocol.
- When generating the KRB_TGS_REP message, this option in the
- KRB_TGS_REQ message tells the KDC to decrypt the additional ticket
- using the key for the server to which the additional ticket was
- issued and to verify that it is a TGT. If the name of the requested
- server is missing from the request, the name of the client in the
- additional ticket will be used. Otherwise, the name of the requested
- server will be compared to the name of the client in the additional
- ticket. If it is different, the request will be rejected. If the
- request succeeds, the session key from the additional ticket will be
- used to encrypt the new ticket that is issued instead of using the
- key of the server for which the new ticket will be used.
-
- If (a) the name of the server in the ticket that is presented to the
- KDC as part of the authentication header is not that of the TGS
- itself, (b) the server is registered in the realm of the KDC, and (c)
- the RENEW option is requested, then the KDC will verify that the
- RENEWABLE flag is set in the ticket, that the INVALID flag is not set
- in the ticket, and that the renew_till time is still in the future.
- If the VALIDATE option is requested, the KDC will check that the
- starttime has passed and that the INVALID flag is set. If the PROXY
- option is requested, then the KDC will check that the PROXIABLE flag
-
-
-
-
-
-Neuman, et al. Standards Track [Page 39]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- is set in the ticket. If the tests succeed and the ticket passes the
- hotlist check described in the next section, the KDC will issue the
- appropriate new ticket.
-
- The ciphertext part of the response in the KRB_TGS_REP message is
- encrypted in the sub-session key from the Authenticator, if present,
- or in the session key from the TGT. It is not encrypted using the
- client's secret key. Furthermore, the client's key's expiration date
- and the key version number fields are left out since these values are
- stored along with the client's database record, and that record is
- not needed to satisfy a request based on a TGT.
-
-3.3.3.1. Checking for Revoked Tickets
-
- Whenever a request is made to the ticket-granting server, the
- presented ticket(s) is (are) checked against a hot-list of tickets
- that have been canceled. This hot-list might be implemented by
- storing a range of issue timestamps for 'suspect tickets'; if a
- presented ticket had an authtime in that range, it would be rejected.
- In this way, a stolen TGT or renewable ticket cannot be used to gain
- additional tickets (renewals or otherwise) once the theft has been
- reported to the KDC for the realm in which the server resides. Any
- normal ticket obtained before it was reported stolen will still be
- valid (because tickets require no interaction with the KDC), but only
- until its normal expiration time. If TGTs have been issued for
- cross-realm authentication, use of the cross-realm TGT will not be
- affected unless the hot-list is propagated to the KDCs for the realms
- for which such cross-realm tickets were issued.
-
-3.3.3.2. Encoding the Transited Field
-
- If the identity of the server in the TGT that is presented to the KDC
- as part of the authentication header is that of the ticket-granting
- service, but the TGT was issued from another realm, the KDC will look
- up the inter-realm key shared with that realm and use that key to
- decrypt the ticket. If the ticket is valid, then the KDC will honor
- the request, subject to the constraints outlined above in the section
- describing the AS exchange. The realm part of the client's identity
- will be taken from the TGT. The name of the realm that issued the
- TGT, if it is not the realm of the client principal, will be added to
- the transited field of the ticket to be issued. This is accomplished
- by reading the transited field from the TGT (which is treated as an
- unordered set of realm names), adding the new realm to the set, and
- then constructing and writing out its encoded (shorthand) form (this
- may involve a rearrangement of the existing encoding).
-
- Note that the ticket-granting service does not add the name of its
- own realm. Instead, its responsibility is to add the name of the
-
-
-
-Neuman, et al. Standards Track [Page 40]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- previous realm. This prevents a malicious Kerberos server from
- intentionally leaving out its own name (it could, however, omit other
- realms' names).
-
- The names of neither the local realm nor the principal's realm are to
- be included in the transited field. They appear elsewhere in the
- ticket and both are known to have taken part in authenticating the
- principal. Because the endpoints are not included, both local and
- single-hop inter-realm authentication result in a transited field
- that is empty.
-
- Because this field has the name of each transited realm added to it,
- it might potentially be very long. To decrease the length of this
- field, its contents are encoded. The initially supported encoding is
- optimized for the normal case of inter-realm communication: a
- hierarchical arrangement of realms using either domain or X.500 style
- realm names. This encoding (called DOMAIN-X500-COMPRESS) is now
- described.
-
- Realm names in the transited field are separated by a ",". The ",",
- "\", trailing "."s, and leading spaces (" ") are special characters,
- and if they are part of a realm name, they MUST be quoted in the
- transited field by preceding them with a "\".
-
- A realm name ending with a "." is interpreted as being prepended to
- the previous realm. For example, we can encode traversal of EDU,
- MIT.EDU, ATHENA.MIT.EDU, WASHINGTON.EDU, and CS.WASHINGTON.EDU as:
-
- "EDU,MIT.,ATHENA.,WASHINGTON.EDU,CS.".
-
- Note that if either ATHENA.MIT.EDU, or CS.WASHINGTON.EDU were
- endpoints, they would not be included in this field, and we would
- have:
-
- "EDU,MIT.,WASHINGTON.EDU"
-
- A realm name beginning with a "/" is interpreted as being appended to
- the previous realm. For the purpose of appending, the realm
- preceding the first listed realm is considered the null realm ("").
- If a realm name beginning with a "/" is to stand by itself, then it
- SHOULD be preceded by a space (" "). For example, we can encode
- traversal of /COM/HP/APOLLO, /COM/HP, /COM, and /COM/DEC as:
-
- "/COM,/HP,/APOLLO, /COM/DEC".
-
- As in the example above, if /COM/HP/APOLLO and /COM/DEC were
- endpoints, they would not be included in this field, and we would
- have:
-
-
-
-Neuman, et al. Standards Track [Page 41]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- "/COM,/HP"
-
- A null subfield preceding or following a "," indicates that all
- realms between the previous realm and the next realm have been
- traversed. For the purpose of interpreting null subfields, the
- client's realm is considered to precede those in the transited field,
- and the server's realm is considered to follow them. Thus, "," means
- that all realms along the path between the client and the server have
- been traversed. ",EDU, /COM," means that all realms from the
- client's realm up to EDU (in a domain style hierarchy) have been
- traversed, and that everything from /COM down to the server's realm
- in an X.500 style has also been traversed. This could occur if the
- EDU realm in one hierarchy shares an inter-realm key directly with
- the /COM realm in another hierarchy.
-
-3.3.4. Receipt of KRB_TGS_REP Message
-
- When the KRB_TGS_REP is received by the client, it is processed in
- the same manner as the KRB_AS_REP processing described above. The
- primary difference is that the ciphertext part of the response must
- be decrypted using the sub-session key from the Authenticator, if it
- was specified in the request, or the session key from the TGT, rather
- than the client's secret key. The server name returned in the reply
- is the true principal name of the service.
-
-3.4. The KRB_SAFE Exchange
-
- The KRB_SAFE message MAY be used by clients requiring the ability to
- detect modifications of messages they exchange. It achieves this by
- including a keyed collision-proof checksum of the user data and some
- control information. The checksum is keyed with an encryption key
- (usually the last key negotiated via subkeys, or the session key if
- no negotiation has occurred).
-
-3.4.1. Generation of a KRB_SAFE Message
-
- When an application wishes to send a KRB_SAFE message, it collects
- its data and the appropriate control information and computes a
- checksum over them. The checksum algorithm should be the keyed
- checksum mandated to be implemented along with the crypto system used
- for the sub-session or session key. The checksum is generated using
- the sub-session key, if present, or the session key. Some
- implementations use a different checksum algorithm for the KRB_SAFE
- messages, but doing so in an interoperable manner is not always
- possible.
-
- The control information for the KRB_SAFE message includes both a
- timestamp and a sequence number. The designer of an application
-
-
-
-Neuman, et al. Standards Track [Page 42]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- using the KRB_SAFE message MUST choose at least one of the two
- mechanisms. This choice SHOULD be based on the needs of the
- application protocol.
-
- Sequence numbers are useful when all messages sent will be received
- by one's peer. Connection state is presently required to maintain
- the session key, so maintaining the next sequence number should not
- present an additional problem.
-
- If the application protocol is expected to tolerate lost messages
- without their being resent, the use of the timestamp is the
- appropriate replay detection mechanism. Using timestamps is also the
- appropriate mechanism for multi-cast protocols in which all of one's
- peers share a common sub-session key, but some messages will be sent
- to a subset of one's peers.
-
- After computing the checksum, the client then transmits the
- information and checksum to the recipient in the message format
- specified in Section 5.6.1.
-
-3.4.2. Receipt of KRB_SAFE Message
-
- When an application receives a KRB_SAFE message, it verifies it as
- follows. If any error occurs, an error code is reported for use by
- the application.
-
- The message is first checked by verifying that the protocol version
- and type fields match the current version and KRB_SAFE, respectively.
- A mismatch generates a KRB_AP_ERR_BADVERSION or KRB_AP_ERR_MSG_TYPE
- error. The application verifies that the checksum used is a
- collision-proof keyed checksum that uses keys compatible with the
- sub-session or session key as appropriate (or with the application
- key derived from the session or sub-session keys). If it is not, a
- KRB_AP_ERR_INAPP_CKSUM error is generated. The sender's address MUST
- be included in the control information; the recipient verifies that
- the operating system's report of the sender's address matches the
- sender's address in the message, and (if a recipient address is
- specified or the recipient requires an address) that one of the
- recipient's addresses appears as the recipient's address in the
- message. To work with network address translation, senders MAY use
- the directional address type specified in Section 8.1 for the sender
- address and not include recipient addresses. A failed match for
- either case generates a KRB_AP_ERR_BADADDR error. Then the timestamp
- and usec and/or the sequence number fields are checked. If timestamp
- and usec are expected and not present, or if they are present but not
- current, the KRB_AP_ERR_SKEW error is generated. Timestamps are not
- required to be strictly ordered; they are only required to be in the
- skew window. If the server name, along with the client name, time,
-
-
-
-Neuman, et al. Standards Track [Page 43]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- and microsecond fields from the Authenticator match any recently-seen
- (sent or received) such tuples, the KRB_AP_ERR_REPEAT error is
- generated. If an incorrect sequence number is included, or if a
- sequence number is expected but not present, the KRB_AP_ERR_BADORDER
- error is generated. If neither a time-stamp and usec nor a sequence
- number is present, a KRB_AP_ERR_MODIFIED error is generated.
- Finally, the checksum is computed over the data and control
- information, and if it doesn't match the received checksum, a
- KRB_AP_ERR_MODIFIED error is generated.
-
- If all the checks succeed, the application is assured that the
- message was generated by its peer and was not modified in transit.
-
- Implementations SHOULD accept any checksum algorithm they implement
- that has both adequate security and keys compatible with the sub-
- session or session key. Unkeyed or non-collision-proof checksums are
- not suitable for this use.
-
-3.5. The KRB_PRIV Exchange
-
- The KRB_PRIV message MAY be used by clients requiring confidentiality
- and the ability to detect modifications of exchanged messages. It
- achieves this by encrypting the messages and adding control
- information.
-
-3.5.1. Generation of a KRB_PRIV Message
-
- When an application wishes to send a KRB_PRIV message, it collects
- its data and the appropriate control information (specified in
- Section 5.7.1) and encrypts them under an encryption key (usually the
- last key negotiated via subkeys, or the session key if no negotiation
- has occurred). As part of the control information, the client MUST
- choose to use either a timestamp or a sequence number (or both); see
- the discussion in Section 3.4.1 for guidelines on which to use.
- After the user data and control information are encrypted, the client
- transmits the ciphertext and some 'envelope' information to the
- recipient.
-
-3.5.2. Receipt of KRB_PRIV Message
-
- When an application receives a KRB_PRIV message, it verifies it as
- follows. If any error occurs, an error code is reported for use by
- the application.
-
- The message is first checked by verifying that the protocol version
- and type fields match the current version and KRB_PRIV, respectively.
- A mismatch generates a KRB_AP_ERR_BADVERSION or KRB_AP_ERR_MSG_TYPE
- error. The application then decrypts the ciphertext and processes
-
-
-
-Neuman, et al. Standards Track [Page 44]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- the resultant plaintext. If decryption shows that the data has been
- modified, a KRB_AP_ERR_BAD_INTEGRITY error is generated.
-
- The sender's address MUST be included in the control information; the
- recipient verifies that the operating system's report of the sender's
- address matches the sender's address in the message. If a recipient
- address is specified or the recipient requires an address, then one
- of the recipient's addresses MUST also appear as the recipient's
- address in the message. Where a sender's or receiver's address might
- not otherwise match the address in a message because of network
- address translation, an application MAY be written to use addresses
- of the directional address type in place of the actual network
- address.
-
- A failed match for either case generates a KRB_AP_ERR_BADADDR error.
- To work with network address translation, implementations MAY use the
- directional address type defined in Section 7.1 for the sender
- address and include no recipient address.
-
- Next the timestamp and usec and/or the sequence number fields are
- checked. If timestamp and usec are expected and not present, or if
- they are present but not current, the KRB_AP_ERR_SKEW error is
- generated. If the server name, along with the client name, time, and
- microsecond fields from the Authenticator match any such recently-
- seen tuples, the KRB_AP_ERR_REPEAT error is generated. If an
- incorrect sequence number is included, or if a sequence number is
- expected but not present, the KRB_AP_ERR_BADORDER error is generated.
- If neither a time-stamp and usec nor a sequence number is present, a
- KRB_AP_ERR_MODIFIED error is generated.
-
- If all the checks succeed, the application can assume the message was
- generated by its peer and was securely transmitted (without intruders
- seeing the unencrypted contents).
-
-3.6. The KRB_CRED Exchange
-
- The KRB_CRED message MAY be used by clients requiring the ability to
- send Kerberos credentials from one host to another. It achieves this
- by sending the tickets together with encrypted data containing the
- session keys and other information associated with the tickets.
-
-3.6.1. Generation of a KRB_CRED Message
-
- When an application wishes to send a KRB_CRED message, it first
- (using the KRB_TGS exchange) obtains credentials to be sent to the
- remote host. It then constructs a KRB_CRED message using the ticket
- or tickets so obtained, placing the session key needed to use each
-
-
-
-
-Neuman, et al. Standards Track [Page 45]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- ticket in the key field of the corresponding KrbCredInfo sequence of
- the encrypted part of the KRB_CRED message.
-
- Other information associated with each ticket and obtained during the
- KRB_TGS exchange is also placed in the corresponding KrbCredInfo
- sequence in the encrypted part of the KRB_CRED message. The current
- time and, if they are specifically required by the application, the
- nonce, s-address, and r-address fields are placed in the encrypted
- part of the KRB_CRED message, which is then encrypted under an
- encryption key previously exchanged in the KRB_AP exchange (usually
- the last key negotiated via subkeys, or the session key if no
- negotiation has occurred).
-
- Implementation note: When constructing a KRB_CRED message for
- inclusion in a GSSAPI initial context token, the MIT implementation
- of Kerberos will not encrypt the KRB_CRED message if the session key
- is a DES or triple DES key. For interoperability with MIT, the
- Microsoft implementation will not encrypt the KRB_CRED in a GSSAPI
- token if it is using a DES session key. Starting at version 1.2.5,
- MIT Kerberos can receive and decode either encrypted or unencrypted
- KRB_CRED tokens in the GSSAPI exchange. The Heimdal implementation
- of Kerberos can also accept either encrypted or unencrypted KRB_CRED
- messages. Since the KRB_CRED message in a GSSAPI token is encrypted
- in the authenticator, the MIT behavior does not present a security
- problem, although it is a violation of the Kerberos specification.
-
-3.6.2. Receipt of KRB_CRED Message
-
- When an application receives a KRB_CRED message, it verifies it. If
- any error occurs, an error code is reported for use by the
- application. The message is verified by checking that the protocol
- version and type fields match the current version and KRB_CRED,
- respectively. A mismatch generates a KRB_AP_ERR_BADVERSION or
- KRB_AP_ERR_MSG_TYPE error. The application then decrypts the
- ciphertext and processes the resultant plaintext. If decryption
- shows the data to have been modified, a KRB_AP_ERR_BAD_INTEGRITY
- error is generated.
-
- If present or required, the recipient MAY verify that the operating
- system's report of the sender's address matches the sender's address
- in the message, and that one of the recipient's addresses appears as
- the recipient's address in the message. The address check does not
- provide any added security, since the address, if present, has
- already been checked in the KRB_AP_REQ message and there is not any
- benefit to be gained by an attacker in reflecting a KRB_CRED message
- back to its originator. Thus, the recipient MAY ignore the address
- even if it is present in order to work better in Network Address
- Translation (NAT) environments. A failed match for either case
-
-
-
-Neuman, et al. Standards Track [Page 46]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- generates a KRB_AP_ERR_BADADDR error. Recipients MAY skip the
- address check, as the KRB_CRED message cannot generally be reflected
- back to the originator. The timestamp and usec fields (and the nonce
- field, if required) are checked next. If the timestamp and usec are
- not present, or if they are present but not current, the
- KRB_AP_ERR_SKEW error is generated.
-
- If all the checks succeed, the application stores each of the new
- tickets in its credentials cache together with the session key and
- other information in the corresponding KrbCredInfo sequence from the
- encrypted part of the KRB_CRED message.
-
-3.7. User-to-User Authentication Exchanges
-
- User-to-User authentication provides a method to perform
- authentication when the verifier does not have a access to long-term
- service key. This might be the case when running a server (for
- example, a window server) as a user on a workstation. In such cases,
- the server may have access to the TGT obtained when the user logged
- in to the workstation, but because the server is running as an
- unprivileged user, it might not have access to system keys. Similar
- situations may arise when running peer-to-peer applications.
-
- Summary
-
- Message direction Message type Sections
- 0. Message from application server Not specified
- 1. Client to Kerberos KRB_TGS_REQ 3.3 & 5.4.1
- 2. Kerberos to client KRB_TGS_REP or 3.3 & 5.4.2
- KRB_ERROR 5.9.1
- 3. Client to application server KRB_AP_REQ 3.2 & 5.5.1
-
- To address this problem, the Kerberos protocol allows the client to
- request that the ticket issued by the KDC be encrypted using a
- session key from a TGT issued to the party that will verify the
- authentication. This TGT must be obtained from the verifier by means
- of an exchange external to the Kerberos protocol, usually as part of
- the application protocol. This message is shown in the summary above
- as message 0. Note that because the TGT is encrypted in the KDC's
- secret key, it cannot be used for authentication without possession
- of the corresponding secret key. Furthermore, because the verifier
- does not reveal the corresponding secret key, providing a copy of the
- verifier's TGT does not allow impersonation of the verifier.
-
- Message 0 in the table above represents an application-specific
- negotiation between the client and server, at the end of which both
- have determined that they will use user-to-user authentication, and
- the client has obtained the server's TGT.
-
-
-
-Neuman, et al. Standards Track [Page 47]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Next, the client includes the server's TGT as an additional ticket in
- its KRB_TGS_REQ request to the KDC (message 1 in the table above) and
- specifies the ENC-TKT-IN-SKEY option in its request.
-
- If validated according to the instructions in Section 3.3.3, the
- application ticket returned to the client (message 2 in the table
- above) will be encrypted using the session key from the additional
- ticket and the client will note this when it uses or stores the
- application ticket.
-
- When contacting the server using a ticket obtained for user-to-user
- authentication (message 3 in the table above), the client MUST
- specify the USE-SESSION-KEY flag in the ap-options field. This tells
- the application server to use the session key associated with its TGT
- to decrypt the server ticket provided in the application request.
-
-4. Encryption and Checksum Specifications
-
- The Kerberos protocols described in this document are designed to
- encrypt messages of arbitrary sizes, using stream or block encryption
- ciphers. Encryption is used to prove the identities of the network
- entities participating in message exchanges. The Key Distribution
- Center for each realm is trusted by all principals registered in that
- realm to store a secret key in confidence. Proof of knowledge of
- this secret key is used to verify the authenticity of a principal.
-
- The KDC uses the principal's secret key (in the AS exchange) or a
- shared session key (in the TGS exchange) to encrypt responses to
- ticket requests; the ability to obtain the secret key or session key
- implies the knowledge of the appropriate keys and the identity of the
- KDC. The ability of a principal to decrypt the KDC response and to
- present a Ticket and a properly formed Authenticator (generated with
- the session key from the KDC response) to a service verifies the
- identity of the principal; likewise the ability of the service to
- extract the session key from the Ticket and to prove its knowledge
- thereof in a response verifies the identity of the service.
-
- [RFC3961] defines a framework for defining encryption and checksum
- mechanisms for use with Kerberos. It also defines several such
- mechanisms, and more may be added in future updates to that document.
-
- The string-to-key operation provided by [RFC3961] is used to produce
- a long-term key for a principal (generally for a user). The default
- salt string, if none is provided via pre-authentication data, is the
- concatenation of the principal's realm and name components, in order,
- with no separators. Unless it is indicated otherwise, the default
- string-to-key opaque parameter set as defined in [RFC3961] is used.
-
-
-
-
-Neuman, et al. Standards Track [Page 48]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Encrypted data, keys, and checksums are transmitted using the
- EncryptedData, EncryptionKey, and Checksum data objects defined in
- Section 5.2.9. The encryption, decryption, and checksum operations
- described in this document use the corresponding encryption,
- decryption, and get_mic operations described in [RFC3961], with
- implicit "specific key" generation using the "key usage" values
- specified in the description of each EncryptedData or Checksum object
- to vary the key for each operation. Note that in some cases, the
- value to be used is dependent on the method of choosing the key or
- the context of the message.
-
- Key usages are unsigned 32-bit integers; zero is not permitted. The
- key usage values for encrypting or checksumming Kerberos messages are
- indicated in Section 5 along with the message definitions. The key
- usage values 512-1023 are reserved for uses internal to a Kerberos
- implementation. (For example, seeding a pseudo-random number
- generator with a value produced by encrypting something with a
- session key and a key usage value not used for any other purpose.)
- Key usage values between 1024 and 2047 (inclusive) are reserved for
- application use; applications SHOULD use even values for encryption
- and odd values for checksums within this range. Key usage values are
- also summarized in a table in Section 7.5.1.
-
- There might exist other documents that define protocols in terms of
- the RFC 1510 encryption types or checksum types. These documents
- would not know about key usages. In order that these specifications
- continue to be meaningful until they are updated, if no key usage
- values are specified, then key usages 1024 and 1025 must be used to
- derive keys for encryption and checksums, respectively. (This does
- not apply to protocols that do their own encryption independent of
- this framework, by directly using the key resulting from the Kerberos
- authentication exchange.) New protocols defined in terms of the
- Kerberos encryption and checksum types SHOULD use their own key usage
- values.
-
- Unless it is indicated otherwise, no cipher state chaining is done
- from one encryption operation to another.
-
- Implementation note: Although it is not recommended, some application
- protocols will continue to use the key data directly, even if only in
- currently existing protocol specifications. An implementation
- intended to support general Kerberos applications may therefore need
- to make key data available, as well as the attributes and operations
- described in [RFC3961]. One of the more common reasons for directly
- performing encryption is direct control over negotiation and
- selection of a "sufficiently strong" encryption algorithm (in the
- context of a given application). Although Kerberos does not directly
- provide a facility for negotiating encryption types between the
-
-
-
-Neuman, et al. Standards Track [Page 49]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- application client and server, there are approaches for using
- Kerberos to facilitate this negotiation. For example, a client may
- request only "sufficiently strong" session key types from the KDC and
- expect that any type returned by the KDC will be understood and
- supported by the application server.
-
-5. Message Specifications
-
- The ASN.1 collected here should be identical to the contents of
- Appendix A. In the case of a conflict, the contents of Appendix A
- shall take precedence.
-
- The Kerberos protocol is defined here in terms of Abstract Syntax
- Notation One (ASN.1) [X680], which provides a syntax for specifying
- both the abstract layout of protocol messages as well as their
- encodings. Implementors not utilizing an existing ASN.1 compiler or
- support library are cautioned to understand the actual ASN.1
- specification thoroughly in order to ensure correct implementation
- behavior. There is more complexity in the notation than is
- immediately obvious, and some tutorials and guides to ASN.1 are
- misleading or erroneous.
-
- Note that in several places, changes to abstract types from RFC 1510
- have been made. This is in part to address widespread assumptions
- that various implementors have made, in some cases resulting in
- unintentional violations of the ASN.1 standard. These are clearly
- flagged where they occur. The differences between the abstract types
- in RFC 1510 and abstract types in this document can cause
- incompatible encodings to be emitted when certain encoding rules,
- e.g., the Packed Encoding Rules (PER), are used. This theoretical
- incompatibility should not be relevant for Kerberos, since Kerberos
- explicitly specifies the use of the Distinguished Encoding Rules
- (DER). It might be an issue for protocols seeking to use Kerberos
- types with other encoding rules. (This practice is not recommended.)
- With very few exceptions (most notably the usages of BIT STRING), the
- encodings resulting from using the DER remain identical between the
- types defined in RFC 1510 and the types defined in this document.
-
- The type definitions in this section assume an ASN.1 module
- definition of the following form:
-
-
-
-
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 50]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- KerberosV5Spec2 {
- iso(1) identified-organization(3) dod(6) internet(1)
- security(5) kerberosV5(2) modules(4) krb5spec2(2)
- } DEFINITIONS EXPLICIT TAGS ::= BEGIN
-
- -- rest of definitions here
-
- END
-
- This specifies that the tagging context for the module will be
- explicit and non-automatic.
-
- Note that in some other publications (such as [RFC1510] and
- [RFC1964]), the "dod" portion of the object identifier is erroneously
- specified as having the value "5". In the case of RFC 1964, use of
- the "correct" OID value would result in a change in the wire
- protocol; therefore, it remains unchanged for now.
-
- Note that elsewhere in this document, nomenclature for various
- message types is inconsistent, but it largely follows C language
- conventions, including use of underscore (_) characters and all-caps
- spelling of names intended to be numeric constants. Also, in some
- places, identifiers (especially those referring to constants) are
- written in all-caps in order to distinguish them from surrounding
- explanatory text.
-
- The ASN.1 notation does not permit underscores in identifiers, so in
- actual ASN.1 definitions, underscores are replaced with hyphens (-).
- Additionally, structure member names and defined values in ASN.1 MUST
- begin with a lowercase letter, whereas type names MUST begin with an
- uppercase letter.
-
-5.1. Specific Compatibility Notes on ASN.1
-
- For compatibility purposes, implementors should heed the following
- specific notes regarding the use of ASN.1 in Kerberos. These notes
- do not describe deviations from standard usage of ASN.1. The purpose
- of these notes is instead to describe some historical quirks and
- non-compliance of various implementations, as well as historical
- ambiguities, which, although they are valid ASN.1, can lead to
- confusion during implementation.
-
-5.1.1. ASN.1 Distinguished Encoding Rules
-
- The encoding of Kerberos protocol messages shall obey the
- Distinguished Encoding Rules (DER) of ASN.1 as described in [X690].
- Some implementations (believed primarily to be those derived from DCE
- 1.1 and earlier) are known to use the more general Basic Encoding
-
-
-
-Neuman, et al. Standards Track [Page 51]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Rules (BER); in particular, these implementations send indefinite
- encodings of lengths. Implementations MAY accept such encodings in
- the interest of backward compatibility, though implementors are
- warned that decoding fully-general BER is fraught with peril.
-
-5.1.2. Optional Integer Fields
-
- Some implementations do not internally distinguish between an omitted
- optional integer value and a transmitted value of zero. The places
- in the protocol where this is relevant include various microseconds
- fields, nonces, and sequence numbers. Implementations SHOULD treat
- omitted optional integer values as having been transmitted with a
- value of zero, if the application is expecting this.
-
-5.1.3. Empty SEQUENCE OF Types
-
- There are places in the protocol where a message contains a SEQUENCE
- OF type as an optional member. This can result in an encoding that
- contains an empty SEQUENCE OF encoding. The Kerberos protocol does
- not semantically distinguish between an absent optional SEQUENCE OF
- type and a present optional but empty SEQUENCE OF type.
- Implementations SHOULD NOT send empty SEQUENCE OF encodings that are
- marked OPTIONAL, but SHOULD accept them as being equivalent to an
- omitted OPTIONAL type. In the ASN.1 syntax describing Kerberos
- messages, instances of these problematic optional SEQUENCE OF types
- are indicated with a comment.
-
-5.1.4. Unrecognized Tag Numbers
-
- Future revisions to this protocol may include new message types with
- different APPLICATION class tag numbers. Such revisions should
- protect older implementations by only sending the message types to
- parties that are known to understand them; e.g., by means of a flag
- bit set by the receiver in a preceding request. In the interest of
- robust error handling, implementations SHOULD gracefully handle
- receiving a message with an unrecognized tag anyway, and return an
- error message, if appropriate.
-
- In particular, KDCs SHOULD return KRB_AP_ERR_MSG_TYPE if the
- incorrect tag is sent over a TCP transport. The KDCs SHOULD NOT
- respond to messages received with an unknown tag over UDP transport
- in order to avoid denial of service attacks. For non-KDC
- applications, the Kerberos implementation typically indicates an
- error to the application which takes appropriate steps based on the
- application protocol.
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 52]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-5.1.5. Tag Numbers Greater Than 30
-
- A naive implementation of a DER ASN.1 decoder may experience problems
- with ASN.1 tag numbers greater than 30, due to such tag numbers being
- encoded using more than one byte. Future revisions of this protocol
- may utilize tag numbers greater than 30, and implementations SHOULD
- be prepared to gracefully return an error, if appropriate, when they
- do not recognize the tag.
-
-5.2. Basic Kerberos Types
-
- This section defines a number of basic types that are potentially
- used in multiple Kerberos protocol messages.
-
-5.2.1. KerberosString
-
- The original specification of the Kerberos protocol in RFC 1510 uses
- GeneralString in numerous places for human-readable string data.
- Historical implementations of Kerberos cannot utilize the full power
- of GeneralString. This ASN.1 type requires the use of designation
- and invocation escape sequences as specified in ISO-2022/ECMA-35
- [ISO-2022/ECMA-35] to switch character sets, and the default
- character set that is designated as G0 is the ISO-646/ECMA-6
- [ISO-646/ECMA-6] International Reference Version (IRV) (a.k.a. U.S.
- ASCII), which mostly works.
-
- ISO-2022/ECMA-35 defines four character-set code elements (G0..G3)
- and two Control-function code elements (C0..C1). DER prohibits the
- designation of character sets as any but the G0 and C0 sets.
- Unfortunately, this seems to have the side effect of prohibiting the
- use of ISO-8859 (ISO Latin) [ISO-8859] character sets or any other
- character sets that utilize a 96-character set, as ISO-2022/ECMA-35
- prohibits designating them as the G0 code element. This side effect
- is being investigated in the ASN.1 standards community.
-
- In practice, many implementations treat GeneralStrings as if they
- were 8-bit strings of whichever character set the implementation
- defaults to, without regard to correct usage of character-set
- designation escape sequences. The default character set is often
- determined by the current user's operating system-dependent locale.
- At least one major implementation places unescaped UTF-8 encoded
- Unicode characters in the GeneralString. This failure to adhere to
- the GeneralString specifications results in interoperability issues
- when conflicting character encodings are utilized by the Kerberos
- clients, services, and KDC.
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 53]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- This unfortunate situation is the result of improper documentation of
- the restrictions of the ASN.1 GeneralString type in prior Kerberos
- specifications.
-
- The new (post-RFC 1510) type KerberosString, defined below, is a
- GeneralString that is constrained to contain only characters in
- IA5String.
-
- KerberosString ::= GeneralString (IA5String)
-
- In general, US-ASCII control characters should not be used in
- KerberosString. Control characters SHOULD NOT be used in principal
- names or realm names.
-
- For compatibility, implementations MAY choose to accept GeneralString
- values that contain characters other than those permitted by
- IA5String, but they should be aware that character set designation
- codes will likely be absent, and that the encoding should probably be
- treated as locale-specific in almost every way. Implementations MAY
- also choose to emit GeneralString values that are beyond those
- permitted by IA5String, but they should be aware that doing so is
- extraordinarily risky from an interoperability perspective.
-
- Some existing implementations use GeneralString to encode unescaped
- locale-specific characters. This is a violation of the ASN.1
- standard. Most of these implementations encode US-ASCII in the
- left-hand half, so as long as the implementation transmits only
- US-ASCII, the ASN.1 standard is not violated in this regard. As soon
- as such an implementation encodes unescaped locale-specific
- characters with the high bit set, it violates the ASN.1 standard.
-
- Other implementations have been known to use GeneralString to contain
- a UTF-8 encoding. This also violates the ASN.1 standard, since UTF-8
- is a different encoding, not a 94 or 96 character "G" set as defined
- by ISO 2022. It is believed that these implementations do not even
- use the ISO 2022 escape sequence to change the character encoding.
- Even if implementations were to announce the encoding change by using
- that escape sequence, the ASN.1 standard prohibits the use of any
- escape sequences other than those used to designate/invoke "G" or "C"
- sets allowed by GeneralString.
-
- Future revisions to this protocol will almost certainly allow for a
- more interoperable representation of principal names, probably
- including UTF8String.
-
- Note that applying a new constraint to a previously unconstrained
- type constitutes creation of a new ASN.1 type. In this particular
- case, the change does not result in a changed encoding under DER.
-
-
-
-Neuman, et al. Standards Track [Page 54]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-5.2.2. Realm and PrincipalName
-
- Realm ::= KerberosString
-
- PrincipalName ::= SEQUENCE {
- name-type [0] Int32,
- name-string [1] SEQUENCE OF KerberosString
- }
-
- Kerberos realm names are encoded as KerberosStrings. Realms shall
- not contain a character with the code 0 (the US-ASCII NUL). Most
- realms will usually consist of several components separated by
- periods (.), in the style of Internet Domain Names, or separated by
- slashes (/), in the style of X.500 names. Acceptable forms for realm
- names are specified in Section 6.1. A PrincipalName is a typed
- sequence of components consisting of the following subfields:
-
- name-type
- This field specifies the type of name that follows. Pre-defined
- values for this field are specified in Section 6.2. The name-type
- SHOULD be treated as a hint. Ignoring the name type, no two names
- can be the same (i.e., at least one of the components, or the
- realm, must be different).
-
- name-string
- This field encodes a sequence of components that form a name, each
- component encoded as a KerberosString. Taken together, a
- PrincipalName and a Realm form a principal identifier. Most
- PrincipalNames will have only a few components (typically one or
- two).
-
-5.2.3. KerberosTime
-
- KerberosTime ::= GeneralizedTime -- with no fractional seconds
-
- The timestamps used in Kerberos are encoded as GeneralizedTimes. A
- KerberosTime value shall not include any fractional portions of the
- seconds. As required by the DER, it further shall not include any
- separators, and it shall specify the UTC time zone (Z). Example: The
- only valid format for UTC time 6 minutes, 27 seconds after 9 pm on 6
- November 1985 is 19851106210627Z.
-
-5.2.4. Constrained Integer Types
-
- Some integer members of types SHOULD be constrained to values
- representable in 32 bits, for compatibility with reasonable
- implementation limits.
-
-
-
-
-Neuman, et al. Standards Track [Page 55]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Int32 ::= INTEGER (-2147483648..2147483647)
- -- signed values representable in 32 bits
-
- UInt32 ::= INTEGER (0..4294967295)
- -- unsigned 32 bit values
-
- Microseconds ::= INTEGER (0..999999)
- -- microseconds
-
- Although this results in changes to the abstract types from the RFC
- 1510 version, the encoding in DER should be unaltered. Historical
- implementations were typically limited to 32-bit integer values
- anyway, and assigned numbers SHOULD fall in the space of integer
- values representable in 32 bits in order to promote interoperability
- anyway.
-
- Several integer fields in messages are constrained to fixed values.
-
- pvno
- also TKT-VNO or AUTHENTICATOR-VNO, this recurring field is always
- the constant integer 5. There is no easy way to make this field
- into a useful protocol version number, so its value is fixed.
-
- msg-type
- this integer field is usually identical to the application tag
- number of the containing message type.
-
-5.2.5. HostAddress and HostAddresses
-
- HostAddress ::= SEQUENCE {
- addr-type [0] Int32,
- address [1] OCTET STRING
- }
-
- -- NOTE: HostAddresses is always used as an OPTIONAL field and
- -- should not be empty.
- HostAddresses -- NOTE: subtly different from rfc1510,
- -- but has a value mapping and encodes the same
- ::= SEQUENCE OF HostAddress
-
- The host address encodings consist of two fields:
-
- addr-type
- This field specifies the type of address that follows. Pre-
- defined values for this field are specified in Section 7.5.3.
-
- address
- This field encodes a single address of type addr-type.
-
-
-
-Neuman, et al. Standards Track [Page 56]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-5.2.6. AuthorizationData
-
- -- NOTE: AuthorizationData is always used as an OPTIONAL field and
- -- should not be empty.
- AuthorizationData ::= SEQUENCE OF SEQUENCE {
- ad-type [0] Int32,
- ad-data [1] OCTET STRING
- }
-
- ad-data
- This field contains authorization data to be interpreted according
- to the value of the corresponding ad-type field.
-
- ad-type
- This field specifies the format for the ad-data subfield. All
- negative values are reserved for local use. Non-negative values
- are reserved for registered use.
-
- Each sequence of type and data is referred to as an authorization
- element. Elements MAY be application specific; however, there is a
- common set of recursive elements that should be understood by all
- implementations. These elements contain other elements embedded
- within them, and the interpretation of the encapsulating element
- determines which of the embedded elements must be interpreted, and
- which may be ignored.
-
- These common authorization data elements are recursively defined,
- meaning that the ad-data for these types will itself contain a
- sequence of authorization data whose interpretation is affected by
- the encapsulating element. Depending on the meaning of the
- encapsulating element, the encapsulated elements may be ignored,
- might be interpreted as issued directly by the KDC, or might be
- stored in a separate plaintext part of the ticket. The types of the
- encapsulating elements are specified as part of the Kerberos
- specification because the behavior based on these values should be
- understood across implementations, whereas other elements need only
- be understood by the applications that they affect.
-
- Authorization data elements are considered critical if present in a
- ticket or authenticator. If an unknown authorization data element
- type is received by a server either in an AP-REQ or in a ticket
- contained in an AP-REQ, then, unless it is encapsulated in a known
- authorization data element amending the criticality of the elements
- it contains, authentication MUST fail. Authorization data is
- intended to restrict the use of a ticket. If the service cannot
- determine whether the restriction applies to that service, then a
-
-
-
-
-
-Neuman, et al. Standards Track [Page 57]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- security weakness may result if the ticket can be used for that
- service. Authorization elements that are optional can be enclosed in
- an AD-IF-RELEVANT element.
-
- In the definitions that follow, the value of the ad-type for the
- element will be specified as the least significant part of the
- subsection number, and the value of the ad-data will be as shown in
- the ASN.1 structure that follows the subsection heading.
-
- Contents of ad-data ad-type
-
- DER encoding of AD-IF-RELEVANT 1
-
- DER encoding of AD-KDCIssued 4
-
- DER encoding of AD-AND-OR 5
-
- DER encoding of AD-MANDATORY-FOR-KDC 8
-
-5.2.6.1. IF-RELEVANT
-
- AD-IF-RELEVANT ::= AuthorizationData
-
- AD elements encapsulated within the if-relevant element are intended
- for interpretation only by application servers that understand the
- particular ad-type of the embedded element. Application servers that
- do not understand the type of an element embedded within the
- if-relevant element MAY ignore the uninterpretable element. This
- element promotes interoperability across implementations that may
- have local extensions for authorization. The ad-type for
- AD-IF-RELEVANT is (1).
-
-5.2.6.2. KDCIssued
-
- AD-KDCIssued ::= SEQUENCE {
- ad-checksum [0] Checksum,
- i-realm [1] Realm OPTIONAL,
- i-sname [2] PrincipalName OPTIONAL,
- elements [3] AuthorizationData
- }
-
- ad-checksum
- A cryptographic checksum computed over the DER encoding of the
- AuthorizationData in the "elements" field, keyed with the session
- key. Its checksumtype is the mandatory checksum type for the
- encryption type of the session key, and its key usage value is 19.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 58]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- i-realm, i-sname
- The name of the issuing principal if different from that of the
- KDC itself. This field would be used when the KDC can verify the
- authenticity of elements signed by the issuing principal, and it
- allows this KDC to notify the application server of the validity
- of those elements.
-
- elements
- A sequence of authorization data elements issued by the KDC.
-
- The KDC-issued ad-data field is intended to provide a means for
- Kerberos principal credentials to embed within themselves privilege
- attributes and other mechanisms for positive authorization,
- amplifying the privileges of the principal beyond what can be done
- using credentials without such an a-data element.
-
- The above means cannot be provided without this element because the
- definition of the authorization-data field allows elements to be
- added at will by the bearer of a TGT at the time when they request
- service tickets, and elements may also be added to a delegated ticket
- by inclusion in the authenticator.
-
- For KDC-issued elements, this is prevented because the elements are
- signed by the KDC by including a checksum encrypted using the
- server's key (the same key used to encrypt the ticket or a key
- derived from that key). Elements encapsulated with in the KDC-issued
- element MUST be ignored by the application server if this "signature"
- is not present. Further, elements encapsulated within this element
- from a TGT MAY be interpreted by the KDC, and used as a basis
- according to policy for including new signed elements within
- derivative tickets, but they will not be copied to a derivative
- ticket directly. If they are copied directly to a derivative ticket
- by a KDC that is not aware of this element, the signature will not be
- correct for the application ticket elements, and the field will be
- ignored by the application server.
-
- This element and the elements it encapsulates MAY safely be ignored
- by applications, application servers, and KDCs that do not implement
- this element.
-
- The ad-type for AD-KDC-ISSUED is (4).
-
-5.2.6.3. AND-OR
-
- AD-AND-OR ::= SEQUENCE {
- condition-count [0] Int32,
- elements [1] AuthorizationData
- }
-
-
-
-Neuman, et al. Standards Track [Page 59]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- When restrictive AD elements are encapsulated within the and-or
- element, the and-or element is considered satisfied if and only if at
- least the number of encapsulated elements specified in condition-
- count are satisfied. Therefore, this element MAY be used to
- implement an "or" operation by setting the condition-count field to
- 1, and it MAY specify an "and" operation by setting the condition
- count to the number of embedded elements. Application servers that
- do not implement this element MUST reject tickets that contain
- authorization data elements of this type.
-
- The ad-type for AD-AND-OR is (5).
-
-5.2.6.4. MANDATORY-FOR-KDC
-
- AD-MANDATORY-FOR-KDC ::= AuthorizationData
-
- AD elements encapsulated within the mandatory-for-kdc element are to
- be interpreted by the KDC. KDCs that do not understand the type of
- an element embedded within the mandatory-for-kdc element MUST reject
- the request.
-
- The ad-type for AD-MANDATORY-FOR-KDC is (8).
-
-5.2.7. PA-DATA
-
- Historically, PA-DATA have been known as "pre-authentication data",
- meaning that they were used to augment the initial authentication
- with the KDC. Since that time, they have also been used as a typed
- hole with which to extend protocol exchanges with the KDC.
-
- PA-DATA ::= SEQUENCE {
- -- NOTE: first tag is [1], not [0]
- padata-type [1] Int32,
- padata-value [2] OCTET STRING -- might be encoded AP-REQ
- }
-
- padata-type
- Indicates the way that the padata-value element is to be
- interpreted. Negative values of padata-type are reserved for
- unregistered use; non-negative values are used for a registered
- interpretation of the element type.
-
- padata-value
- Usually contains the DER encoding of another type; the padata-type
- field identifies which type is encoded here.
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 60]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- padata-type Name Contents of padata-value
-
- 1 pa-tgs-req DER encoding of AP-REQ
-
- 2 pa-enc-timestamp DER encoding of PA-ENC-TIMESTAMP
-
- 3 pa-pw-salt salt (not ASN.1 encoded)
-
- 11 pa-etype-info DER encoding of ETYPE-INFO
-
- 19 pa-etype-info2 DER encoding of ETYPE-INFO2
-
- This field MAY also contain information needed by certain
- extensions to the Kerberos protocol. For example, it might be
- used to verify the identity of a client initially before any
- response is returned.
-
- The padata field can also contain information needed to help the
- KDC or the client select the key needed for generating or
- decrypting the response. This form of the padata is useful for
- supporting the use of certain token cards with Kerberos. The
- details of such extensions are specified in separate documents.
- See [Pat92] for additional uses of this field.
-
-5.2.7.1. PA-TGS-REQ
-
- In the case of requests for additional tickets (KRB_TGS_REQ),
- padata-value will contain an encoded AP-REQ. The checksum in the
- authenticator (which MUST be collision-proof) is to be computed over
- the KDC-REQ-BODY encoding.
-
-5.2.7.2. Encrypted Timestamp Pre-authentication
-
- There are pre-authentication types that may be used to pre-
- authenticate a client by means of an encrypted timestamp.
-
- PA-ENC-TIMESTAMP ::= EncryptedData -- PA-ENC-TS-ENC
-
- PA-ENC-TS-ENC ::= SEQUENCE {
- patimestamp [0] KerberosTime -- client's time --,
- pausec [1] Microseconds OPTIONAL
- }
-
- Patimestamp contains the client's time, and pausec contains the
- microseconds, which MAY be omitted if a client will not generate more
- than one request per second. The ciphertext (padata-value) consists
- of the PA-ENC-TS-ENC encoding, encrypted using the client's secret
- key and a key usage value of 1.
-
-
-
-Neuman, et al. Standards Track [Page 61]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- This pre-authentication type was not present in RFC 1510, but many
- implementations support it.
-
-5.2.7.3. PA-PW-SALT
-
- The padata-value for this pre-authentication type contains the salt
- for the string-to-key to be used by the client to obtain the key for
- decrypting the encrypted part of an AS-REP message. Unfortunately,
- for historical reasons, the character set to be used is unspecified
- and probably locale-specific.
-
- This pre-authentication type was not present in RFC 1510, but many
- implementations support it. It is necessary in any case where the
- salt for the string-to-key algorithm is not the default.
-
- In the trivial example, a zero-length salt string is very commonplace
- for realms that have converted their principal databases from
- Kerberos Version 4.
-
- A KDC SHOULD NOT send PA-PW-SALT when issuing a KRB-ERROR message
- that requests additional pre-authentication. Implementation note:
- Some KDC implementations issue an erroneous PA-PW-SALT when issuing a
- KRB-ERROR message that requests additional pre-authentication.
- Therefore, clients SHOULD ignore a PA-PW-SALT accompanying a
- KRB-ERROR message that requests additional pre-authentication. As
- noted in section 3.1.3, a KDC MUST NOT send PA-PW-SALT when the
- client's AS-REQ includes at least one "newer" etype.
-
-5.2.7.4. PA-ETYPE-INFO
-
- The ETYPE-INFO pre-authentication type is sent by the KDC in a
- KRB-ERROR indicating a requirement for additional pre-authentication.
- It is usually used to notify a client of which key to use for the
- encryption of an encrypted timestamp for the purposes of sending a
- PA-ENC-TIMESTAMP pre-authentication value. It MAY also be sent in an
- AS-REP to provide information to the client about which key salt to
- use for the string-to-key to be used by the client to obtain the key
- for decrypting the encrypted part the AS-REP.
-
- ETYPE-INFO-ENTRY ::= SEQUENCE {
- etype [0] Int32,
- salt [1] OCTET STRING OPTIONAL
- }
-
- ETYPE-INFO ::= SEQUENCE OF ETYPE-INFO-ENTRY
-
- The salt, like that of PA-PW-SALT, is also completely unspecified
- with respect to character set and is probably locale-specific.
-
-
-
-Neuman, et al. Standards Track [Page 62]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- If ETYPE-INFO is sent in an AS-REP, there shall be exactly one
- ETYPE-INFO-ENTRY, and its etype shall match that of the enc-part in
- the AS-REP.
-
- This pre-authentication type was not present in RFC 1510, but many
- implementations that support encrypted timestamps for pre-
- authentication need to support ETYPE-INFO as well. As noted in
- Section 3.1.3, a KDC MUST NOT send PA-ETYPE-INFO when the client's
- AS-REQ includes at least one "newer" etype.
-
-5.2.7.5. PA-ETYPE-INFO2
-
- The ETYPE-INFO2 pre-authentication type is sent by the KDC in a
- KRB-ERROR indicating a requirement for additional pre-authentication.
- It is usually used to notify a client of which key to use for the
- encryption of an encrypted timestamp for the purposes of sending a
- PA-ENC-TIMESTAMP pre-authentication value. It MAY also be sent in an
- AS-REP to provide information to the client about which key salt to
- use for the string-to-key to be used by the client to obtain the key
- for decrypting the encrypted part the AS-REP.
-
-ETYPE-INFO2-ENTRY ::= SEQUENCE {
- etype [0] Int32,
- salt [1] KerberosString OPTIONAL,
- s2kparams [2] OCTET STRING OPTIONAL
-}
-
-ETYPE-INFO2 ::= SEQUENCE SIZE (1..MAX) OF ETYPE-INFO2-ENTRY
-
- The type of the salt is KerberosString, but existing installations
- might have locale-specific characters stored in salt strings, and
- implementors MAY choose to handle them.
-
- The interpretation of s2kparams is specified in the cryptosystem
- description associated with the etype. Each cryptosystem has a
- default interpretation of s2kparams that will hold if that element is
- omitted from the encoding of ETYPE-INFO2-ENTRY.
-
- If ETYPE-INFO2 is sent in an AS-REP, there shall be exactly one
- ETYPE-INFO2-ENTRY, and its etype shall match that of the enc-part in
- the AS-REP.
-
- The preferred ordering of the "hint" pre-authentication data that
- affect client key selection is: ETYPE-INFO2, followed by ETYPE-INFO,
- followed by PW-SALT. As noted in Section 3.1.3, a KDC MUST NOT send
- ETYPE-INFO or PW-SALT when the client's AS-REQ includes at least one
- "newer" etype.
-
-
-
-
-Neuman, et al. Standards Track [Page 63]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- The ETYPE-INFO2 pre-authentication type was not present in RFC 1510.
-
-5.2.8. KerberosFlags
-
- For several message types, a specific constrained bit string type,
- KerberosFlags, is used.
-
- KerberosFlags ::= BIT STRING (SIZE (32..MAX))
- -- minimum number of bits shall be sent,
- -- but no fewer than 32
-
- Compatibility note: The following paragraphs describe a change from
- the RFC 1510 description of bit strings that would result in
- incompatility in the case of an implementation that strictly
- conformed to ASN.1 DER and RFC 1510.
-
- ASN.1 bit strings have multiple uses. The simplest use of a bit
- string is to contain a vector of bits, with no particular meaning
- attached to individual bits. This vector of bits is not necessarily
- a multiple of eight bits long. The use in Kerberos of a bit string
- as a compact boolean vector wherein each element has a distinct
- meaning poses some problems. The natural notation for a compact
- boolean vector is the ASN.1 "NamedBit" notation, and the DER require
- that encodings of a bit string using "NamedBit" notation exclude any
- trailing zero bits. This truncation is easy to neglect, especially
- given C language implementations that naturally choose to store
- boolean vectors as 32-bit integers.
-
- For example, if the notation for KDCOptions were to include the
- "NamedBit" notation, as in RFC 1510, and a KDCOptions value to be
- encoded had only the "forwardable" (bit number one) bit set, the DER
- encoding MUST include only two bits: the first reserved bit
- ("reserved", bit number zero, value zero) and the one-valued bit (bit
- number one) for "forwardable".
-
- Most existing implementations of Kerberos unconditionally send 32
- bits on the wire when encoding bit strings used as boolean vectors.
- This behavior violates the ASN.1 syntax used for flag values in RFC
- 1510, but it occurs on such a widely installed base that the protocol
- description is being modified to accommodate it.
-
- Consequently, this document removes the "NamedBit" notations for
- individual bits, relegating them to comments. The size constraint on
- the KerberosFlags type requires that at least 32 bits be encoded at
- all times, though a lenient implementation MAY choose to accept fewer
- than 32 bits and to treat the missing bits as set to zero.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 64]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Currently, no uses of KerberosFlags specify more than 32 bits' worth
- of flags, although future revisions of this document may do so. When
- more than 32 bits are to be transmitted in a KerberosFlags value,
- future revisions to this document will likely specify that the
- smallest number of bits needed to encode the highest-numbered one-
- valued bit should be sent. This is somewhat similar to the DER
- encoding of a bit string that is declared with the "NamedBit"
- notation.
-
-5.2.9. Cryptosystem-Related Types
-
- Many Kerberos protocol messages contain an EncryptedData as a
- container for arbitrary encrypted data, which is often the encrypted
- encoding of another data type. Fields within EncryptedData assist
- the recipient in selecting a key with which to decrypt the enclosed
- data.
-
- EncryptedData ::= SEQUENCE {
- etype [0] Int32 -- EncryptionType --,
- kvno [1] UInt32 OPTIONAL,
- cipher [2] OCTET STRING -- ciphertext
- }
-
- etype
- This field identifies which encryption algorithm was used to
- encipher the cipher.
-
- kvno
- This field contains the version number of the key under which data
- is encrypted. It is only present in messages encrypted under long
- lasting keys, such as principals' secret keys.
-
- cipher
- This field contains the enciphered text, encoded as an OCTET
- STRING. (Note that the encryption mechanisms defined in [RFC3961]
- MUST incorporate integrity protection as well, so no additional
- checksum is required.)
-
- The EncryptionKey type is the means by which cryptographic keys used
- for encryption are transferred.
-
- EncryptionKey ::= SEQUENCE {
- keytype [0] Int32 -- actually encryption type --,
- keyvalue [1] OCTET STRING
- }
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 65]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- keytype
- This field specifies the encryption type of the encryption key
- that follows in the keyvalue field. Although its name is
- "keytype", it actually specifies an encryption type. Previously,
- multiple cryptosystems that performed encryption differently but
- were capable of using keys with the same characteristics were
- permitted to share an assigned number to designate the type of
- key; this usage is now deprecated.
-
- keyvalue
- This field contains the key itself, encoded as an octet string.
-
- Messages containing cleartext data to be authenticated will usually
- do so by using a member of type Checksum. Most instances of Checksum
- use a keyed hash, though exceptions will be noted.
-
- Checksum ::= SEQUENCE {
- cksumtype [0] Int32,
- checksum [1] OCTET STRING
- }
-
- cksumtype
- This field indicates the algorithm used to generate the
- accompanying checksum.
-
- checksum
- This field contains the checksum itself, encoded as an octet
- string.
-
- See Section 4 for a brief description of the use of encryption and
- checksums in Kerberos.
-
-5.3. Tickets
-
- This section describes the format and encryption parameters for
- tickets and authenticators. When a ticket or authenticator is
- included in a protocol message, it is treated as an opaque object. A
- ticket is a record that helps a client authenticate to a service. A
- Ticket contains the following information:
-
- Ticket ::= [APPLICATION 1] SEQUENCE {
- tkt-vno [0] INTEGER (5),
- realm [1] Realm,
- sname [2] PrincipalName,
- enc-part [3] EncryptedData -- EncTicketPart
- }
-
- -- Encrypted part of ticket
-
-
-
-Neuman, et al. Standards Track [Page 66]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- EncTicketPart ::= [APPLICATION 3] SEQUENCE {
- flags [0] TicketFlags,
- key [1] EncryptionKey,
- crealm [2] Realm,
- cname [3] PrincipalName,
- transited [4] TransitedEncoding,
- authtime [5] KerberosTime,
- starttime [6] KerberosTime OPTIONAL,
- endtime [7] KerberosTime,
- renew-till [8] KerberosTime OPTIONAL,
- caddr [9] HostAddresses OPTIONAL,
- authorization-data [10] AuthorizationData OPTIONAL
- }
-
- -- encoded Transited field
- TransitedEncoding ::= SEQUENCE {
- tr-type [0] Int32 -- must be registered --,
- contents [1] OCTET STRING
- }
-
- TicketFlags ::= KerberosFlags
- -- reserved(0),
- -- forwardable(1),
- -- forwarded(2),
- -- proxiable(3),
- -- proxy(4),
- -- may-postdate(5),
- -- postdated(6),
- -- invalid(7),
- -- renewable(8),
- -- initial(9),
- -- pre-authent(10),
- -- hw-authent(11),
- -- the following are new since 1510
- -- transited-policy-checked(12),
- -- ok-as-delegate(13)
-
- tkt-vno
- This field specifies the version number for the ticket format.
- This document describes version number 5.
-
- realm
- This field specifies the realm that issued a ticket. It also
- serves to identify the realm part of the server's principal
- identifier. Since a Kerberos server can only issue tickets for
- servers within its realm, the two will always be identical.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 67]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- sname
- This field specifies all components of the name part of the
- server's identity, including those parts that identify a specific
- instance of a service.
-
- enc-part
- This field holds the encrypted encoding of the EncTicketPart
- sequence. It is encrypted in the key shared by Kerberos and the
- end server (the server's secret key), using a key usage value of
- 2.
-
- flags
- This field indicates which of various options were used or
- requested when the ticket was issued. The meanings of the flags
- are as follows:
-
- Bit(s) Name Description
-
- 0 reserved Reserved for future expansion of this field.
-
- 1 forwardable The FORWARDABLE flag is normally only
- interpreted by the TGS, and can be ignored
- by end servers. When set, this flag tells
- the ticket-granting server that it is OK to
- issue a new TGT with a different network
- address based on the presented ticket.
-
- 2 forwarded When set, this flag indicates that the
- ticket has either been forwarded or was
- issued based on authentication involving a
- forwarded TGT.
-
- 3 proxiable The PROXIABLE flag is normally only
- interpreted by the TGS, and can be ignored
- by end servers. The PROXIABLE flag has an
- interpretation identical to that of the
- FORWARDABLE flag, except that the PROXIABLE
- flag tells the ticket-granting server that
- only non-TGTs may be issued with different
- network addresses.
-
- 4 proxy When set, this flag indicates that a ticket
- is a proxy.
-
- 5 may-postdate The MAY-POSTDATE flag is normally only
- interpreted by the TGS, and can be ignored
- by end servers. This flag tells the
-
-
-
-
-Neuman, et al. Standards Track [Page 68]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- ticket-granting server that a post-dated
- ticket MAY be issued based on this TGT.
-
- 6 postdated This flag indicates that this ticket has
- been postdated. The end-service can check
- the authtime field to see when the original
- authentication occurred.
-
- 7 invalid This flag indicates that a ticket is
- invalid, and it must be validated by the KDC
- before use. Application servers must reject
- tickets which have this flag set.
-
- 8 renewable The RENEWABLE flag is normally only
- interpreted by the TGS, and can usually be
- ignored by end servers (some particularly
- careful servers MAY disallow renewable
- tickets). A renewable ticket can be used to
- obtain a replacement ticket that expires at
- a later date.
-
- 9 initial This flag indicates that this ticket was
- issued using the AS protocol, and not issued
- based on a TGT.
-
- 10 pre-authent This flag indicates that during initial
- authentication, the client was authenticated
- by the KDC before a ticket was issued. The
- strength of the pre-authentication method is
- not indicated, but is acceptable to the KDC.
-
- 11 hw-authent This flag indicates that the protocol
- employed for initial authentication required
- the use of hardware expected to be possessed
- solely by the named client. The hardware
- authentication method is selected by the KDC
- and the strength of the method is not
- indicated.
-
- 12 transited- This flag indicates that the KDC for
- policy-checked the realm has checked the transited field
- against a realm-defined policy for trusted
- certifiers. If this flag is reset (0), then
- the application server must check the
- transited field itself, and if unable to do
- so, it must reject the authentication. If
- the flag is set (1), then the application
- server MAY skip its own validation of the
-
-
-
-Neuman, et al. Standards Track [Page 69]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- transited field, relying on the validation
- performed by the KDC. At its option the
- application server MAY still apply its own
- validation based on a separate policy for
- acceptance.
-
- This flag is new since RFC 1510.
-
- 13 ok-as-delegate This flag indicates that the server (not the
- client) specified in the ticket has been
- determined by policy of the realm to be a
- suitable recipient of delegation. A client
- can use the presence of this flag to help it
- decide whether to delegate credentials
- (either grant a proxy or a forwarded TGT) to
- this server. The client is free to ignore
- the value of this flag. When setting this
- flag, an administrator should consider the
- security and placement of the server on
- which the service will run, as well as
- whether the service requires the use of
- delegated credentials.
-
- This flag is new since RFC 1510.
-
- 14-31 reserved Reserved for future use.
-
- key
- This field exists in the ticket and the KDC response and is used
- to pass the session key from Kerberos to the application server
- and the client.
-
- crealm
- This field contains the name of the realm in which the client is
- registered and in which initial authentication took place.
-
- cname
- This field contains the name part of the client's principal
- identifier.
-
- transited
- This field lists the names of the Kerberos realms that took part
- in authenticating the user to whom this ticket was issued. It
- does not specify the order in which the realms were transited.
- See Section 3.3.3.2 for details on how this field encodes the
- traversed realms. When the names of CAs are to be embedded in the
- transited field (as specified for some extensions to the
-
-
-
-
-Neuman, et al. Standards Track [Page 70]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- protocol), the X.500 names of the CAs SHOULD be mapped into items
- in the transited field using the mapping defined by RFC 2253.
-
- authtime
- This field indicates the time of initial authentication for the
- named principal. It is the time of issue for the original ticket
- on which this ticket is based. It is included in the ticket to
- provide additional information to the end service, and to provide
- the necessary information for implementation of a "hot list"
- service at the KDC. An end service that is particularly paranoid
- could refuse to accept tickets for which the initial
- authentication occurred "too far" in the past. This field is also
- returned as part of the response from the KDC. When it is
- returned as part of the response to initial authentication
- (KRB_AS_REP), this is the current time on the Kerberos server. It
- is NOT recommended that this time value be used to adjust the
- workstation's clock, as the workstation cannot reliably determine
- that such a KRB_AS_REP actually came from the proper KDC in a
- timely manner.
-
- starttime
- This field in the ticket specifies the time after which the ticket
- is valid. Together with endtime, this field specifies the life of
- the ticket. If the starttime field is absent from the ticket,
- then the authtime field SHOULD be used in its place to determine
- the life of the ticket.
-
- endtime
- This field contains the time after which the ticket will not be
- honored (its expiration time). Note that individual services MAY
- place their own limits on the life of a ticket and MAY reject
- tickets which have not yet expired. As such, this is really an
- upper bound on the expiration time for the ticket.
-
- renew-till
- This field is only present in tickets that have the RENEWABLE flag
- set in the flags field. It indicates the maximum endtime that may
- be included in a renewal. It can be thought of as the absolute
- expiration time for the ticket, including all renewals.
-
- caddr
- This field in a ticket contains zero (if omitted) or more (if
- present) host addresses. These are the addresses from which the
- ticket can be used. If there are no addresses, the ticket can be
- used from any location. The decision by the KDC to issue or by
- the end server to accept addressless tickets is a policy decision
- and is left to the Kerberos and end-service administrators; they
- MAY refuse to issue or accept such tickets. Because of the wide
-
-
-
-Neuman, et al. Standards Track [Page 71]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- deployment of network address translation, it is recommended that
- policy allow the issue and acceptance of such tickets.
-
- Network addresses are included in the ticket to make it harder for
- an attacker to use stolen credentials. Because the session key is
- not sent over the network in cleartext, credentials can't be
- stolen simply by listening to the network; an attacker has to gain
- access to the session key (perhaps through operating system
- security breaches or a careless user's unattended session) to make
- use of stolen tickets.
-
- Note that the network address from which a connection is received
- cannot be reliably determined. Even if it could be, an attacker
- who has compromised the client's workstation could use the
- credentials from there. Including the network addresses only
- makes it more difficult, not impossible, for an attacker to walk
- off with stolen credentials and then to use them from a "safe"
- location.
-
- authorization-data
- The authorization-data field is used to pass authorization data
- from the principal on whose behalf a ticket was issued to the
- application service. If no authorization data is included, this
- field will be left out. Experience has shown that the name of
- this field is confusing, and that a better name would be
- "restrictions". Unfortunately, it is not possible to change the
- name at this time.
-
- This field contains restrictions on any authority obtained on the
- basis of authentication using the ticket. It is possible for any
- principal in possession of credentials to add entries to the
- authorization data field since these entries further restrict what
- can be done with the ticket. Such additions can be made by
- specifying the additional entries when a new ticket is obtained
- during the TGS exchange, or they MAY be added during chained
- delegation using the authorization data field of the
- authenticator.
-
- Because entries may be added to this field by the holder of
- credentials, except when an entry is separately authenticated by
- encapsulation in the KDC-issued element, it is not allowable for
- the presence of an entry in the authorization data field of a
- ticket to amplify the privileges one would obtain from using a
- ticket.
-
- The data in this field may be specific to the end service; the
- field will contain the names of service specific objects, and the
- rights to those objects. The format for this field is described
-
-
-
-Neuman, et al. Standards Track [Page 72]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- in Section 5.2.6. Although Kerberos is not concerned with the
- format of the contents of the subfields, it does carry type
- information (ad-type).
-
- By using the authorization_data field, a principal is able to
- issue a proxy that is valid for a specific purpose. For example,
- a client wishing to print a file can obtain a file server proxy to
- be passed to the print server. By specifying the name of the file
- in the authorization_data field, the file server knows that the
- print server can only use the client's rights when accessing the
- particular file to be printed.
-
- A separate service providing authorization or certifying group
- membership may be built using the authorization-data field. In
- this case, the entity granting authorization (not the authorized
- entity) may obtain a ticket in its own name (e.g., the ticket is
- issued in the name of a privilege server), and this entity adds
- restrictions on its own authority and delegates the restricted
- authority through a proxy to the client. The client would then
- present this authorization credential to the application server
- separately from the authentication exchange. Alternatively, such
- authorization credentials MAY be embedded in the ticket
- authenticating the authorized entity, when the authorization is
- separately authenticated using the KDC-issued authorization data
- element (see 5.2.6.2).
-
- Similarly, if one specifies the authorization-data field of a
- proxy and leaves the host addresses blank, the resulting ticket
- and session key can be treated as a capability. See [Neu93] for
- some suggested uses of this field.
-
- The authorization-data field is optional and does not have to be
- included in a ticket.
-
-5.4. Specifications for the AS and TGS Exchanges
-
- This section specifies the format of the messages used in the
- exchange between the client and the Kerberos server. The format of
- possible error messages appears in Section 5.9.1.
-
-5.4.1. KRB_KDC_REQ Definition
-
- The KRB_KDC_REQ message has no application tag number of its own.
- Instead, it is incorporated into either KRB_AS_REQ or KRB_TGS_REQ,
- each of which has an application tag, depending on whether the
- request is for an initial ticket or an additional ticket. In either
- case, the message is sent from the client to the KDC to request
- credentials for a service.
-
-
-
-Neuman, et al. Standards Track [Page 73]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- The message fields are as follows:
-
-AS-REQ ::= [APPLICATION 10] KDC-REQ
-
-TGS-REQ ::= [APPLICATION 12] KDC-REQ
-
-KDC-REQ ::= SEQUENCE {
- -- NOTE: first tag is [1], not [0]
- pvno [1] INTEGER (5) ,
- msg-type [2] INTEGER (10 -- AS -- | 12 -- TGS --),
- padata [3] SEQUENCE OF PA-DATA OPTIONAL
- -- NOTE: not empty --,
- req-body [4] KDC-REQ-BODY
-}
-
-KDC-REQ-BODY ::= SEQUENCE {
- kdc-options [0] KDCOptions,
- cname [1] PrincipalName OPTIONAL
- -- Used only in AS-REQ --,
- realm [2] Realm
- -- Server's realm
- -- Also client's in AS-REQ --,
- sname [3] PrincipalName OPTIONAL,
- from [4] KerberosTime OPTIONAL,
- till [5] KerberosTime,
- rtime [6] KerberosTime OPTIONAL,
- nonce [7] UInt32,
- etype [8] SEQUENCE OF Int32 -- EncryptionType
- -- in preference order --,
- addresses [9] HostAddresses OPTIONAL,
- enc-authorization-data [10] EncryptedData OPTIONAL
- -- AuthorizationData --,
- additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
- -- NOTE: not empty
-}
-
-KDCOptions ::= KerberosFlags
- -- reserved(0),
- -- forwardable(1),
- -- forwarded(2),
- -- proxiable(3),
- -- proxy(4),
- -- allow-postdate(5),
- -- postdated(6),
- -- unused7(7),
- -- renewable(8),
- -- unused9(9),
- -- unused10(10),
-
-
-
-Neuman, et al. Standards Track [Page 74]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- -- opt-hardware-auth(11),
- -- unused12(12),
- -- unused13(13),
--- 15 is reserved for canonicalize
- -- unused15(15),
--- 26 was unused in 1510
- -- disable-transited-check(26),
---
- -- renewable-ok(27),
- -- enc-tkt-in-skey(28),
- -- renew(30),
- -- validate(31)
-
- The fields in this message are as follows:
-
- pvno
- This field is included in each message, and specifies the protocol
- version number. This document specifies protocol version 5.
-
- msg-type
- This field indicates the type of a protocol message. It will
- almost always be the same as the application identifier associated
- with a message. It is included to make the identifier more
- readily accessible to the application. For the KDC-REQ message,
- this type will be KRB_AS_REQ or KRB_TGS_REQ.
-
- padata
- Contains pre-authentication data. Requests for additional tickets
- (KRB_TGS_REQ) MUST contain a padata of PA-TGS-REQ.
-
- The padata (pre-authentication data) field contains a sequence of
- authentication information that may be needed before credentials
- can be issued or decrypted.
-
- req-body
- This field is a placeholder delimiting the extent of the remaining
- fields. If a checksum is to be calculated over the request, it is
- calculated over an encoding of the KDC-REQ-BODY sequence which is
- enclosed within the req-body field.
-
- kdc-options
- This field appears in the KRB_AS_REQ and KRB_TGS_REQ requests to
- the KDC and indicates the flags that the client wants set on the
- tickets as well as other information that is to modify the
- behavior of the KDC. Where appropriate, the name of an option may
- be the same as the flag that is set by that option. Although in
- most cases, the bit in the options field will be the same as that
- in the flags field, this is not guaranteed, so it is not
-
-
-
-Neuman, et al. Standards Track [Page 75]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- acceptable simply to copy the options field to the flags field.
- There are various checks that must be made before an option is
- honored anyway.
-
- The kdc_options field is a bit-field, where the selected options
- are indicated by the bit being set (1), and the unselected options
- and reserved fields being reset (0). The encoding of the bits is
- specified in Section 5.2. The options are described in more
- detail above in Section 2. The meanings of the options are as
- follows:
-
- Bits Name Description
-
- 0 RESERVED Reserved for future expansion of
- this field.
-
- 1 FORWARDABLE The FORWARDABLE option indicates
- that the ticket to be issued is to
- have its forwardable flag set. It
- may only be set on the initial
- request, or in a subsequent request
- if the TGT on which it is based is
- also forwardable.
-
- 2 FORWARDED The FORWARDED option is only
- specified in a request to the
- ticket-granting server and will only
- be honored if the TGT in the request
- has its FORWARDABLE bit set. This
- option indicates that this is a
- request for forwarding. The
- address(es) of the host from which
- the resulting ticket is to be valid
- are included in the addresses field
- of the request.
-
- 3 PROXIABLE The PROXIABLE option indicates that
- the ticket to be issued is to have
- its proxiable flag set. It may only
- be set on the initial request, or a
- subsequent request if the TGT on
- which it is based is also proxiable.
-
- 4 PROXY The PROXY option indicates that this
- is a request for a proxy. This
- option will only be honored if the
- TGT in the request has its PROXIABLE
- bit set. The address(es) of the
-
-
-
-Neuman, et al. Standards Track [Page 76]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- host from which the resulting ticket
- is to be valid are included in the
- addresses field of the request.
-
- 5 ALLOW-POSTDATE The ALLOW-POSTDATE option indicates
- that the ticket to be issued is to
- have its MAY-POSTDATE flag set. It
- may only be set on the initial
- request, or in a subsequent request
- if the TGT on which it is based also
- has its MAY-POSTDATE flag set.
-
- 6 POSTDATED The POSTDATED option indicates that
- this is a request for a postdated
- ticket. This option will only be
- honored if the TGT on which it is
- based has its MAY-POSTDATE flag set.
- The resulting ticket will also have
- its INVALID flag set, and that flag
- may be reset by a subsequent request
- to the KDC after the starttime in
- the ticket has been reached.
-
- 7 RESERVED This option is presently unused.
-
- 8 RENEWABLE The RENEWABLE option indicates that
- the ticket to be issued is to have
- its RENEWABLE flag set. It may only
- be set on the initial request, or
- when the TGT on which the request is
- based is also renewable. If this
- option is requested, then the rtime
- field in the request contains the
- desired absolute expiration time for
- the ticket.
-
- 9 RESERVED Reserved for PK-Cross.
-
- 10 RESERVED Reserved for future use.
-
- 11 RESERVED Reserved for opt-hardware-auth.
-
- 12-25 RESERVED Reserved for future use.
-
- 26 DISABLE-TRANSITED-CHECK By default the KDC will check the
- transited field of a TGT against the
- policy of the local realm before it
- will issue derivative tickets based
-
-
-
-Neuman, et al. Standards Track [Page 77]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- on the TGT. If this flag is set in
- the request, checking of the
- transited field is disabled.
- Tickets issued without the
- performance of this check will be
- noted by the reset (0) value of the
- TRANSITED-POLICY-CHECKED flag,
- indicating to the application server
- that the transited field must be
- checked locally. KDCs are
- encouraged but not required to honor
- the DISABLE-TRANSITED-CHECK option.
-
- This flag is new since RFC 1510.
-
- 27 RENEWABLE-OK The RENEWABLE-OK option indicates
- that a renewable ticket will be
- acceptable if a ticket with the
- requested life cannot otherwise be
- provided, in which case a renewable
- ticket may be issued with a renew-
- till equal to the requested endtime.
- The value of the renew-till field
- may still be limited by local
- limits, or limits selected by the
- individual principal or server.
-
- 28 ENC-TKT-IN-SKEY This option is used only by the
- ticket-granting service. The ENC-
- TKT-IN-SKEY option indicates that
- the ticket for the end server is to
- be encrypted in the session key from
- the additional TGT provided.
-
- 29 RESERVED Reserved for future use.
-
- 30 RENEW This option is used only by the
- ticket-granting service. The RENEW
- option indicates that the present
- request is for a renewal. The
- ticket provided is encrypted in the
- secret key for the server on which
- it is valid. This option will only
- be honored if the ticket to be
- renewed has its RENEWABLE flag set
- and if the time in its renew-till
- field has not passed. The ticket to
- be renewed is passed in the padata
-
-
-
-Neuman, et al. Standards Track [Page 78]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- field as part of the authentication
- header.
-
- 31 VALIDATE This option is used only by the
- ticket-granting service. The
- VALIDATE option indicates that the
- request is to validate a postdated
- ticket. It will only be honored if
- the ticket presented is postdated,
- presently has its INVALID flag set,
- and would otherwise be usable at
- this time. A ticket cannot be
- validated before its starttime. The
- ticket presented for validation is
- encrypted in the key of the server
- for which it is valid and is passed
- in the padata field as part of the
- authentication header.
-
- cname and sname
- These fields are the same as those described for the ticket in
- section 5.3. The sname may only be absent when the ENC-TKT-IN-
- SKEY option is specified. If the sname is absent, the name of the
- server is taken from the name of the client in the ticket passed
- as additional-tickets.
-
- enc-authorization-data
- The enc-authorization-data, if present (and it can only be present
- in the TGS_REQ form), is an encoding of the desired
- authorization-data encrypted under the sub-session key if present
- in the Authenticator, or alternatively from the session key in the
- TGT (both the Authenticator and TGT come from the padata field in
- the KRB_TGS_REQ). The key usage value used when encrypting is 5
- if a sub-session key is used, or 4 if the session key is used.
-
- realm
- This field specifies the realm part of the server's principal
- identifier. In the AS exchange, this is also the realm part of
- the client's principal identifier.
-
- from
- This field is included in the KRB_AS_REQ and KRB_TGS_REQ ticket
- requests when the requested ticket is to be postdated. It
- specifies the desired starttime for the requested ticket. If this
- field is omitted, then the KDC SHOULD use the current time
- instead.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 79]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- till
- This field contains the expiration date requested by the client in
- a ticket request. It is not optional, but if the requested
- endtime is "19700101000000Z", the requested ticket is to have the
- maximum endtime permitted according to KDC policy. Implementation
- note: This special timestamp corresponds to a UNIX time_t value of
- zero on most systems.
-
- rtime
- This field is the requested renew-till time sent from a client to
- the KDC in a ticket request. It is optional.
-
- nonce
- This field is part of the KDC request and response. It is
- intended to hold a random number generated by the client. If the
- same number is included in the encrypted response from the KDC, it
- provides evidence that the response is fresh and has not been
- replayed by an attacker. Nonces MUST NEVER be reused.
-
- etype
- This field specifies the desired encryption algorithm to be used
- in the response.
-
- addresses
- This field is included in the initial request for tickets, and it
- is optionally included in requests for additional tickets from the
- ticket-granting server. It specifies the addresses from which the
- requested ticket is to be valid. Normally it includes the
- addresses for the client's host. If a proxy is requested, this
- field will contain other addresses. The contents of this field
- are usually copied by the KDC into the caddr field of the
- resulting ticket.
-
- additional-tickets
- Additional tickets MAY be optionally included in a request to the
- ticket-granting server. If the ENC-TKT-IN-SKEY option has been
- specified, then the session key from the additional ticket will be
- used in place of the server's key to encrypt the new ticket. When
- the ENC-TKT-IN-SKEY option is used for user-to-user
- authentication, this additional ticket MAY be a TGT issued by the
- local realm or an inter-realm TGT issued for the current KDC's
- realm by a remote KDC. If more than one option that requires
- additional tickets has been specified, then the additional tickets
- are used in the order specified by the ordering of the options
- bits (see kdc-options, above).
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 80]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- The application tag number will be either ten (10) or twelve (12)
- depending on whether the request is for an initial ticket (AS-REQ) or
- for an additional ticket (TGS-REQ).
-
- The optional fields (addresses, authorization-data, and additional-
- tickets) are only included if necessary to perform the operation
- specified in the kdc-options field.
-
- Note that in KRB_TGS_REQ, the protocol version number appears twice
- and two different message types appear: the KRB_TGS_REQ message
- contains these fields as does the authentication header (KRB_AP_REQ)
- that is passed in the padata field.
-
-5.4.2. KRB_KDC_REP Definition
-
- The KRB_KDC_REP message format is used for the reply from the KDC for
- either an initial (AS) request or a subsequent (TGS) request. There
- is no message type for KRB_KDC_REP. Instead, the type will be either
- KRB_AS_REP or KRB_TGS_REP. The key used to encrypt the ciphertext
- part of the reply depends on the message type. For KRB_AS_REP, the
- ciphertext is encrypted in the client's secret key, and the client's
- key version number is included in the key version number for the
- encrypted data. For KRB_TGS_REP, the ciphertext is encrypted in the
- sub-session key from the Authenticator; if it is absent, the
- ciphertext is encrypted in the session key from the TGT used in the
- request. In that case, no version number will be present in the
- EncryptedData sequence.
-
- The KRB_KDC_REP message contains the following fields:
-
- AS-REP ::= [APPLICATION 11] KDC-REP
-
- TGS-REP ::= [APPLICATION 13] KDC-REP
-
- KDC-REP ::= SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (11 -- AS -- | 13 -- TGS --),
- padata [2] SEQUENCE OF PA-DATA OPTIONAL
- -- NOTE: not empty --,
- crealm [3] Realm,
- cname [4] PrincipalName,
- ticket [5] Ticket,
- enc-part [6] EncryptedData
- -- EncASRepPart or EncTGSRepPart,
- -- as appropriate
- }
-
- EncASRepPart ::= [APPLICATION 25] EncKDCRepPart
-
-
-
-Neuman, et al. Standards Track [Page 81]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- EncTGSRepPart ::= [APPLICATION 26] EncKDCRepPart
-
- EncKDCRepPart ::= SEQUENCE {
- key [0] EncryptionKey,
- last-req [1] LastReq,
- nonce [2] UInt32,
- key-expiration [3] KerberosTime OPTIONAL,
- flags [4] TicketFlags,
- authtime [5] KerberosTime,
- starttime [6] KerberosTime OPTIONAL,
- endtime [7] KerberosTime,
- renew-till [8] KerberosTime OPTIONAL,
- srealm [9] Realm,
- sname [10] PrincipalName,
- caddr [11] HostAddresses OPTIONAL
- }
-
- LastReq ::= SEQUENCE OF SEQUENCE {
- lr-type [0] Int32,
- lr-value [1] KerberosTime
- }
-
- pvno and msg-type
- These fields are described above in Section 5.4.1. msg-type is
- either KRB_AS_REP or KRB_TGS_REP.
-
- padata
- This field is described in detail in Section 5.4.1. One possible
- use for it is to encode an alternate "salt" string to be used with
- a string-to-key algorithm. This ability is useful for easing
- transitions if a realm name needs to change (e.g., when a company
- is acquired); in such a case all existing password-derived entries
- in the KDC database would be flagged as needing a special salt
- string until the next password change.
-
- crealm, cname, srealm, and sname
- These fields are the same as those described for the ticket in
- section 5.3.
-
- ticket
- The newly-issued ticket, from Section 5.3.
-
- enc-part
- This field is a place holder for the ciphertext and related
- information that forms the encrypted part of a message. The
- description of the encrypted part of the message follows each
- appearance of this field.
-
-
-
-
-Neuman, et al. Standards Track [Page 82]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- The key usage value for encrypting this field is 3 in an AS-REP
- message, using the client's long-term key or another key selected
- via pre-authentication mechanisms. In a TGS-REP message, the key
- usage value is 8 if the TGS session key is used, or 9 if a TGS
- authenticator subkey is used.
-
- Compatibility note: Some implementations unconditionally send an
- encrypted EncTGSRepPart (application tag number 26) in this field
- regardless of whether the reply is a AS-REP or a TGS-REP. In the
- interest of compatibility, implementors MAY relax the check on the
- tag number of the decrypted ENC-PART.
-
- key
- This field is the same as described for the ticket in Section 5.3.
-
- last-req
- This field is returned by the KDC and specifies the time(s) of the
- last request by a principal. Depending on what information is
- available, this might be the last time that a request for a TGT
- was made, or the last time that a request based on a TGT was
- successful. It also might cover all servers for a realm, or just
- the particular server. Some implementations MAY display this
- information to the user to aid in discovering unauthorized use of
- one's identity. It is similar in spirit to the last login time
- displayed when logging in to timesharing systems.
-
- lr-type
- This field indicates how the following lr-value field is to be
- interpreted. Negative values indicate that the information
- pertains only to the responding server. Non-negative values
- pertain to all servers for the realm.
-
- If the lr-type field is zero (0), then no information is conveyed
- by the lr-value subfield. If the absolute value of the lr-type
- field is one (1), then the lr-value subfield is the time of last
- initial request for a TGT. If it is two (2), then the lr-value
- subfield is the time of last initial request. If it is three (3),
- then the lr-value subfield is the time of issue for the newest TGT
- used. If it is four (4), then the lr-value subfield is the time
- of the last renewal. If it is five (5), then the lr-value
- subfield is the time of last request (of any type). If it is (6),
- then the lr-value subfield is the time when the password will
- expire. If it is (7), then the lr-value subfield is the time when
- the account will expire.
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 83]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- lr-value
- This field contains the time of the last request. The time MUST
- be interpreted according to the contents of the accompanying lr-
- type subfield.
-
- nonce
- This field is described above in Section 5.4.1.
-
- key-expiration
- The key-expiration field is part of the response from the KDC and
- specifies the time that the client's secret key is due to expire.
- The expiration might be the result of password aging or an account
- expiration. If present, it SHOULD be set to the earlier of the
- user's key expiration and account expiration. The use of this
- field is deprecated, and the last-req field SHOULD be used to
- convey this information instead. This field will usually be left
- out of the TGS reply since the response to the TGS request is
- encrypted in a session key and no client information has to be
- retrieved from the KDC database. It is up to the application
- client (usually the login program) to take appropriate action
- (such as notifying the user) if the expiration time is imminent.
-
- flags, authtime, starttime, endtime, renew-till and caddr
- These fields are duplicates of those found in the encrypted
- portion of the attached ticket (see Section 5.3), provided so the
- client MAY verify that they match the intended request and in
- order to assist in proper ticket caching. If the message is of
- type KRB_TGS_REP, the caddr field will only be filled in if the
- request was for a proxy or forwarded ticket, or if the user is
- substituting a subset of the addresses from the TGT. If the
- client-requested addresses are not present or not used, then the
- addresses contained in the ticket will be the same as those
- included in the TGT.
-
-5.5. Client/Server (CS) Message Specifications
-
- This section specifies the format of the messages used for the
- authentication of the client to the application server.
-
-5.5.1. KRB_AP_REQ Definition
-
- The KRB_AP_REQ message contains the Kerberos protocol version number,
- the message type KRB_AP_REQ, an options field to indicate any options
- in use, and the ticket and authenticator themselves. The KRB_AP_REQ
- message is often referred to as the "authentication header".
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 84]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- AP-REQ ::= [APPLICATION 14] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (14),
- ap-options [2] APOptions,
- ticket [3] Ticket,
- authenticator [4] EncryptedData -- Authenticator
- }
-
- APOptions ::= KerberosFlags
- -- reserved(0),
- -- use-session-key(1),
- -- mutual-required(2)
-
- pvno and msg-type
- These fields are described above in Section 5.4.1. msg-type is
- KRB_AP_REQ.
-
- ap-options
- This field appears in the application request (KRB_AP_REQ) and
- affects the way the request is processed. It is a bit-field,
- where the selected options are indicated by the bit being set (1),
- and the unselected options and reserved fields by being reset (0).
- The encoding of the bits is specified in Section 5.2. The
- meanings of the options are as follows:
-
- Bit(s) Name Description
-
- 0 reserved Reserved for future expansion of this field.
-
- 1 use-session-key The USE-SESSION-KEY option indicates that
- the ticket the client is presenting to a
- server is encrypted in the session key from
- the server's TGT. When this option is not
- specified, the ticket is encrypted in the
- server's secret key.
-
- 2 mutual-required The MUTUAL-REQUIRED option tells the server
- that the client requires mutual
- authentication, and that it must respond
- with a KRB_AP_REP message.
-
- 3-31 reserved Reserved for future use.
-
- ticket
- This field is a ticket authenticating the client to the server.
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 85]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- authenticator
- This contains the encrypted authenticator, which includes the
- client's choice of a subkey.
-
- The encrypted authenticator is included in the AP-REQ; it certifies
- to a server that the sender has recent knowledge of the encryption
- key in the accompanying ticket, to help the server detect replays.
- It also assists in the selection of a "true session key" to use with
- the particular session. The DER encoding of the following is
- encrypted in the ticket's session key, with a key usage value of 11
- in normal application exchanges, or 7 when used as the PA-TGS-REQ
- PA-DATA field of a TGS-REQ exchange (see Section 5.4.1):
-
- -- Unencrypted authenticator
- Authenticator ::= [APPLICATION 2] SEQUENCE {
- authenticator-vno [0] INTEGER (5),
- crealm [1] Realm,
- cname [2] PrincipalName,
- cksum [3] Checksum OPTIONAL,
- cusec [4] Microseconds,
- ctime [5] KerberosTime,
- subkey [6] EncryptionKey OPTIONAL,
- seq-number [7] UInt32 OPTIONAL,
- authorization-data [8] AuthorizationData OPTIONAL
- }
-
- authenticator-vno
- This field specifies the version number for the format of the
- authenticator. This document specifies version 5.
-
- crealm and cname
- These fields are the same as those described for the ticket in
- section 5.3.
-
- cksum
- This field contains a checksum of the application data that
- accompanies the KRB_AP_REQ, computed using a key usage value of 10
- in normal application exchanges, or 6 when used in the TGS-REQ
- PA-TGS-REQ AP-DATA field.
-
- cusec
- This field contains the microsecond part of the client's
- timestamp. Its value (before encryption) ranges from 0 to 999999.
- It often appears along with ctime. The two fields are used
- together to specify a reasonably accurate timestamp.
-
- ctime
- This field contains the current time on the client's host.
-
-
-
-Neuman, et al. Standards Track [Page 86]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- subkey
- This field contains the client's choice for an encryption key to
- be used to protect this specific application session. Unless an
- application specifies otherwise, if this field is left out, the
- session key from the ticket will be used.
-
- seq-number
- This optional field includes the initial sequence number to be
- used by the KRB_PRIV or KRB_SAFE messages when sequence numbers
- are used to detect replays. (It may also be used by application
- specific messages.) When included in the authenticator, this
- field specifies the initial sequence number for messages from the
- client to the server. When included in the AP-REP message, the
- initial sequence number is that for messages from the server to
- the client. When used in KRB_PRIV or KRB_SAFE messages, it is
- incremented by one after each message is sent. Sequence numbers
- fall in the range 0 through 2^32 - 1 and wrap to zero following
- the value 2^32 - 1.
-
- For sequence numbers to support the detection of replays
- adequately, they SHOULD be non-repeating, even across connection
- boundaries. The initial sequence number SHOULD be random and
- uniformly distributed across the full space of possible sequence
- numbers, so that it cannot be guessed by an attacker and so that
- it and the successive sequence numbers do not repeat other
- sequences. In the event that more than 2^32 messages are to be
- generated in a series of KRB_PRIV or KRB_SAFE messages, rekeying
- SHOULD be performed before sequence numbers are reused with the
- same encryption key.
-
- Implmentation note: Historically, some implementations transmit
- signed twos-complement numbers for sequence numbers. In the
- interests of compatibility, implementations MAY accept the
- equivalent negative number where a positive number greater than
- 2^31 - 1 is expected.
-
- Implementation note: As noted before, some implementations omit
- the optional sequence number when its value would be zero.
- Implementations MAY accept an omitted sequence number when
- expecting a value of zero, and SHOULD NOT transmit an
- Authenticator with a initial sequence number of zero.
-
- authorization-data
- This field is the same as described for the ticket in Section 5.3.
- It is optional and will only appear when additional restrictions
- are to be placed on the use of a ticket, beyond those carried in
- the ticket itself.
-
-
-
-
-Neuman, et al. Standards Track [Page 87]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-5.5.2. KRB_AP_REP Definition
-
- The KRB_AP_REP message contains the Kerberos protocol version number,
- the message type, and an encrypted time-stamp. The message is sent
- in response to an application request (KRB_AP_REQ) for which the
- mutual authentication option has been selected in the ap-options
- field.
-
- AP-REP ::= [APPLICATION 15] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (15),
- enc-part [2] EncryptedData -- EncAPRepPart
- }
-
- EncAPRepPart ::= [APPLICATION 27] SEQUENCE {
- ctime [0] KerberosTime,
- cusec [1] Microseconds,
- subkey [2] EncryptionKey OPTIONAL,
- seq-number [3] UInt32 OPTIONAL
- }
-
- The encoded EncAPRepPart is encrypted in the shared session key of
- the ticket. The optional subkey field can be used in an
- application-arranged negotiation to choose a per association session
- key.
-
- pvno and msg-type
- These fields are described above in Section 5.4.1. msg-type is
- KRB_AP_REP.
-
- enc-part
- This field is described above in Section 5.4.2. It is computed
- with a key usage value of 12.
-
- ctime
- This field contains the current time on the client's host.
-
- cusec
- This field contains the microsecond part of the client's
- timestamp.
-
- subkey
- This field contains an encryption key that is to be used to
- protect this specific application session. See Section 3.2.6 for
- specifics on how this field is used to negotiate a key. Unless an
- application specifies otherwise, if this field is left out, the
- sub-session key from the authenticator or if the latter is also
- left out, the session key from the ticket will be used.
-
-
-
-Neuman, et al. Standards Track [Page 88]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- seq-number
- This field is described above in Section 5.3.2.
-
-5.5.3. Error Message Reply
-
- If an error occurs while processing the application request, the
- KRB_ERROR message will be sent in response. See Section 5.9.1 for
- the format of the error message. The cname and crealm fields MAY be
- left out if the server cannot determine their appropriate values from
- the corresponding KRB_AP_REQ message. If the authenticator was
- decipherable, the ctime and cusec fields will contain the values from
- it.
-
-5.6. KRB_SAFE Message Specification
-
- This section specifies the format of a message that can be used by
- either side (client or server) of an application to send a tamper-
- proof message to its peer. It presumes that a session key has
- previously been exchanged (for example, by using the
- KRB_AP_REQ/KRB_AP_REP messages).
-
-5.6.1. KRB_SAFE definition
-
- The KRB_SAFE message contains user data along with a collision-proof
- checksum keyed with the last encryption key negotiated via subkeys,
- or with the session key if no negotiation has occurred. The message
- fields are as follows:
-
- KRB-SAFE ::= [APPLICATION 20] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (20),
- safe-body [2] KRB-SAFE-BODY,
- cksum [3] Checksum
- }
-
- KRB-SAFE-BODY ::= SEQUENCE {
- user-data [0] OCTET STRING,
- timestamp [1] KerberosTime OPTIONAL,
- usec [2] Microseconds OPTIONAL,
- seq-number [3] UInt32 OPTIONAL,
- s-address [4] HostAddress,
- r-address [5] HostAddress OPTIONAL
- }
-
- pvno and msg-type
- These fields are described above in Section 5.4.1. msg-type is
- KRB_SAFE.
-
-
-
-
-Neuman, et al. Standards Track [Page 89]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- safe-body
- This field is a placeholder for the body of the KRB-SAFE message.
-
- cksum
- This field contains the checksum of the application data, computed
- with a key usage value of 15.
-
- The checksum is computed over the encoding of the KRB-SAFE
- sequence. First, the cksum is set to a type zero, zero-length
- value, and the checksum is computed over the encoding of the KRB-
- SAFE sequence. Then the checksum is set to the result of that
- computation. Finally, the KRB-SAFE sequence is encoded again.
- This method, although different than the one specified in RFC
- 1510, corresponds to existing practice.
-
- user-data
- This field is part of the KRB_SAFE and KRB_PRIV messages, and
- contains the application-specific data that is being passed from
- the sender to the recipient.
-
- timestamp
- This field is part of the KRB_SAFE and KRB_PRIV messages. Its
- contents are the current time as known by the sender of the
- message. By checking the timestamp, the recipient of the message
- is able to make sure that it was recently generated, and is not a
- replay.
-
- usec
- This field is part of the KRB_SAFE and KRB_PRIV headers. It
- contains the microsecond part of the timestamp.
-
- seq-number
- This field is described above in Section 5.3.2.
-
- s-address
- Sender's address.
-
- This field specifies the address in use by the sender of the
- message.
-
- r-address
- This field specifies the address in use by the recipient of the
- message. It MAY be omitted for some uses (such as broadcast
- protocols), but the recipient MAY arbitrarily reject such
- messages. This field, along with s-address, can be used to help
- detect messages that have been incorrectly or maliciously
- delivered to the wrong recipient.
-
-
-
-
-Neuman, et al. Standards Track [Page 90]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-5.7. KRB_PRIV Message Specification
-
- This section specifies the format of a message that can be used by
- either side (client or server) of an application to send a message to
- its peer securely and privately. It presumes that a session key has
- previously been exchanged (for example, by using the
- KRB_AP_REQ/KRB_AP_REP messages).
-
-5.7.1. KRB_PRIV Definition
-
- The KRB_PRIV message contains user data encrypted in the Session Key.
- The message fields are as follows:
-
- KRB-PRIV ::= [APPLICATION 21] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (21),
- -- NOTE: there is no [2] tag
- enc-part [3] EncryptedData -- EncKrbPrivPart
- }
-
- EncKrbPrivPart ::= [APPLICATION 28] SEQUENCE {
- user-data [0] OCTET STRING,
- timestamp [1] KerberosTime OPTIONAL,
- usec [2] Microseconds OPTIONAL,
- seq-number [3] UInt32 OPTIONAL,
- s-address [4] HostAddress -- sender's addr --,
- r-address [5] HostAddress OPTIONAL -- recip's addr
- }
-
- pvno and msg-type
- These fields are described above in Section 5.4.1. msg-type is
- KRB_PRIV.
-
- enc-part
- This field holds an encoding of the EncKrbPrivPart sequence
- encrypted under the session key, with a key usage value of 13.
- This encrypted encoding is used for the enc-part field of the
- KRB-PRIV message.
-
- user-data, timestamp, usec, s-address, and r-address
- These fields are described above in Section 5.6.1.
-
- seq-number
- This field is described above in Section 5.3.2.
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 91]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-5.8. KRB_CRED Message Specification
-
- This section specifies the format of a message that can be used to
- send Kerberos credentials from one principal to another. It is
- presented here to encourage a common mechanism to be used by
- applications when forwarding tickets or providing proxies to
- subordinate servers. It presumes that a session key has already been
- exchanged, perhaps by using the KRB_AP_REQ/KRB_AP_REP messages.
-
-5.8.1. KRB_CRED Definition
-
- The KRB_CRED message contains a sequence of tickets to be sent and
- information needed to use the tickets, including the session key from
- each. The information needed to use the tickets is encrypted under
- an encryption key previously exchanged or transferred alongside the
- KRB_CRED message. The message fields are as follows:
-
- KRB-CRED ::= [APPLICATION 22] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (22),
- tickets [2] SEQUENCE OF Ticket,
- enc-part [3] EncryptedData -- EncKrbCredPart
- }
-
- EncKrbCredPart ::= [APPLICATION 29] SEQUENCE {
- ticket-info [0] SEQUENCE OF KrbCredInfo,
- nonce [1] UInt32 OPTIONAL,
- timestamp [2] KerberosTime OPTIONAL,
- usec [3] Microseconds OPTIONAL,
- s-address [4] HostAddress OPTIONAL,
- r-address [5] HostAddress OPTIONAL
- }
-
- KrbCredInfo ::= SEQUENCE {
- key [0] EncryptionKey,
- prealm [1] Realm OPTIONAL,
- pname [2] PrincipalName OPTIONAL,
- flags [3] TicketFlags OPTIONAL,
- authtime [4] KerberosTime OPTIONAL,
- starttime [5] KerberosTime OPTIONAL,
- endtime [6] KerberosTime OPTIONAL,
- renew-till [7] KerberosTime OPTIONAL,
- srealm [8] Realm OPTIONAL,
- sname [9] PrincipalName OPTIONAL,
- caddr [10] HostAddresses OPTIONAL
- }
-
-
-
-
-
-Neuman, et al. Standards Track [Page 92]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- pvno and msg-type
- These fields are described above in Section 5.4.1. msg-type is
- KRB_CRED.
-
- tickets
- These are the tickets obtained from the KDC specifically for use
- by the intended recipient. Successive tickets are paired with the
- corresponding KrbCredInfo sequence from the enc-part of the KRB-
- CRED message.
-
- enc-part
- This field holds an encoding of the EncKrbCredPart sequence
- encrypted under the session key shared by the sender and the
- intended recipient, with a key usage value of 14. This encrypted
- encoding is used for the enc-part field of the KRB-CRED message.
-
- Implementation note: Implementations of certain applications, most
- notably certain implementations of the Kerberos GSS-API mechanism,
- do not separately encrypt the contents of the EncKrbCredPart of
- the KRB-CRED message when sending it. In the case of those GSS-
- API mechanisms, this is not a security vulnerability, as the
- entire KRB-CRED message is itself embedded in an encrypted
- message.
-
- nonce
- If practical, an application MAY require the inclusion of a nonce
- generated by the recipient of the message. If the same value is
- included as the nonce in the message, it provides evidence that
- the message is fresh and has not been replayed by an attacker. A
- nonce MUST NEVER be reused.
-
- timestamp and usec
- These fields specify the time that the KRB-CRED message was
- generated. The time is used to provide assurance that the message
- is fresh.
-
- s-address and r-address
- These fields are described above in Section 5.6.1. They are used
- optionally to provide additional assurance of the integrity of the
- KRB-CRED message.
-
- key
- This field exists in the corresponding ticket passed by the KRB-
- CRED message and is used to pass the session key from the sender
- to the intended recipient. The field's encoding is described in
- Section 5.2.9.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 93]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- The following fields are optional. If present, they can be
- associated with the credentials in the remote ticket file. If left
- out, then it is assumed that the recipient of the credentials already
- knows their values.
-
- prealm and pname
- The name and realm of the delegated principal identity.
-
- flags, authtime, starttime, endtime, renew-till, srealm, sname,
- and caddr
- These fields contain the values of the corresponding fields from
- the ticket found in the ticket field. Descriptions of the fields
- are identical to the descriptions in the KDC-REP message.
-
-5.9. Error Message Specification
-
- This section specifies the format for the KRB_ERROR message. The
- fields included in the message are intended to return as much
- information as possible about an error. It is not expected that all
- the information required by the fields will be available for all
- types of errors. If the appropriate information is not available
- when the message is composed, the corresponding field will be left
- out of the message.
-
- Note that because the KRB_ERROR message is not integrity protected,
- it is quite possible for an intruder to synthesize or modify it. In
- particular, this means that the client SHOULD NOT use any fields in
- this message for security-critical purposes, such as setting a system
- clock or generating a fresh authenticator. The message can be
- useful, however, for advising a user on the reason for some failure.
-
-5.9.1. KRB_ERROR Definition
-
- The KRB_ERROR message consists of the following fields:
-
- KRB-ERROR ::= [APPLICATION 30] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (30),
- ctime [2] KerberosTime OPTIONAL,
- cusec [3] Microseconds OPTIONAL,
- stime [4] KerberosTime,
- susec [5] Microseconds,
- error-code [6] Int32,
- crealm [7] Realm OPTIONAL,
- cname [8] PrincipalName OPTIONAL,
- realm [9] Realm -- service realm --,
- sname [10] PrincipalName -- service name --,
- e-text [11] KerberosString OPTIONAL,
-
-
-
-Neuman, et al. Standards Track [Page 94]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- e-data [12] OCTET STRING OPTIONAL
- }
-
- pvno and msg-type
- These fields are described above in Section 5.4.1. msg-type is
- KRB_ERROR.
-
- ctime and cusec
- These fields are described above in Section 5.5.2. If the values
- for these fields are known to the entity generating the error (as
- they would be if the KRB-ERROR is generated in reply to, e.g., a
- failed authentication service request), they should be populated
- in the KRB-ERROR. If the values are not available, these fields
- can be omitted.
-
- stime
- This field contains the current time on the server. It is of type
- KerberosTime.
-
- susec
- This field contains the microsecond part of the server's
- timestamp. Its value ranges from 0 to 999999. It appears along
- with stime. The two fields are used in conjunction to specify a
- reasonably accurate timestamp.
-
- error-code
- This field contains the error code returned by Kerberos or the
- server when a request fails. To interpret the value of this field
- see the list of error codes in Section 7.5.9. Implementations are
- encouraged to provide for national language support in the display
- of error messages.
-
- crealm, and cname
- These fields are described above in Section 5.3. When the entity
- generating the error knows these values, they should be populated
- in the KRB-ERROR. If the values are not known, the crealm and
- cname fields SHOULD be omitted.
-
- realm and sname
- These fields are described above in Section 5.3.
-
- e-text
- This field contains additional text to help explain the error code
- associated with the failed request (for example, it might include
- a principal name which was unknown).
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 95]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- e-data
- This field contains additional data about the error for use by the
- application to help it recover from or handle the error. If the
- errorcode is KDC_ERR_PREAUTH_REQUIRED, then the e-data field will
- contain an encoding of a sequence of padata fields, each
- corresponding to an acceptable pre-authentication method and
- optionally containing data for the method:
-
- METHOD-DATA ::= SEQUENCE OF PA-DATA
-
- For error codes defined in this document other than
- KDC_ERR_PREAUTH_REQUIRED, the format and contents of the e-data field
- are implementation-defined. Similarly, for future error codes, the
- format and contents of the e-data field are implementation-defined
- unless specified otherwise. Whether defined by the implementation or
- in a future document, the e-data field MAY take the form of TYPED-
- DATA:
-
- TYPED-DATA ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
- data-type [0] Int32,
- data-value [1] OCTET STRING OPTIONAL
- }
-
-5.10. Application Tag Numbers
-
- The following table lists the application class tag numbers used by
- various data types defined in this section.
-
- Tag Number(s) Type Name Comments
-
- 0 unused
-
- 1 Ticket PDU
-
- 2 Authenticator non-PDU
-
- 3 EncTicketPart non-PDU
-
- 4-9 unused
-
- 10 AS-REQ PDU
-
- 11 AS-REP PDU
-
- 12 TGS-REQ PDU
-
- 13 TGS-REP PDU
-
-
-
-
-Neuman, et al. Standards Track [Page 96]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- 14 AP-REQ PDU
-
- 15 AP-REP PDU
-
- 16 RESERVED16 TGT-REQ (for user-to-user)
-
- 17 RESERVED17 TGT-REP (for user-to-user)
-
- 18-19 unused
-
- 20 KRB-SAFE PDU
-
- 21 KRB-PRIV PDU
-
- 22 KRB-CRED PDU
-
- 23-24 unused
-
- 25 EncASRepPart non-PDU
-
- 26 EncTGSRepPart non-PDU
-
- 27 EncApRepPart non-PDU
-
- 28 EncKrbPrivPart non-PDU
-
- 29 EncKrbCredPart non-PDU
-
- 30 KRB-ERROR PDU
-
- The ASN.1 types marked above as "PDU" (Protocol Data Unit) are the
- only ASN.1 types intended as top-level types of the Kerberos
- protocol, and are the only types that may be used as elements in
- another protocol that makes use of Kerberos.
-
-6. Naming Constraints
-
-6.1. Realm Names
-
- Although realm names are encoded as GeneralStrings and technically a
- realm can select any name it chooses, interoperability across realm
- boundaries requires agreement on how realm names are to be assigned,
- and what information they imply.
-
- To enforce these conventions, each realm MUST conform to the
- conventions itself, and it MUST require that any realms with which
- inter-realm keys are shared also conform to the conventions and
- require the same from its neighbors.
-
-
-
-Neuman, et al. Standards Track [Page 97]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Kerberos realm names are case sensitive. Realm names that differ
- only in the case of the characters are not equivalent. There are
- presently three styles of realm names: domain, X500, and other.
- Examples of each style follow:
-
- domain: ATHENA.MIT.EDU
- X500: C=US/O=OSF
- other: NAMETYPE:rest/of.name=without-restrictions
-
- Domain style realm names MUST look like domain names: they consist of
- components separated by periods (.) and they contain neither colons
- (:) nor slashes (/). Though domain names themselves are case
- insensitive, in order for realms to match, the case must match as
- well. When establishing a new realm name based on an internet domain
- name it is recommended by convention that the characters be converted
- to uppercase.
-
- X.500 names contain an equals sign (=) and cannot contain a colon (:)
- before the equals sign. The realm names for X.500 names will be
- string representations of the names with components separated by
- slashes. Leading and trailing slashes will not be included. Note
- that the slash separator is consistent with Kerberos implementations
- based on RFC 1510, but it is different from the separator recommended
- in RFC 2253.
-
- Names that fall into the other category MUST begin with a prefix that
- contains no equals sign (=) or period (.), and the prefix MUST be
- followed by a colon (:) and the rest of the name. All prefixes
- expect those beginning with used. Presently none are assigned.
-
- The reserved category includes strings that do not fall into the
- first three categories. All names in this category are reserved. It
- is unlikely that names will be assigned to this category unless there
- is a very strong argument for not using the 'other' category.
-
- These rules guarantee that there will be no conflicts between the
- various name styles. The following additional constraints apply to
- the assignment of realm names in the domain and X.500 categories:
- either the name of a realm for the domain or X.500 formats must be
- used by the organization owning (to whom it was assigned) an Internet
- domain name or X.500 name, or, in the case that no such names are
- registered, authority to use a realm name MAY be derived from the
- authority of the parent realm. For example, if there is no domain
- name for E40.MIT.EDU, then the administrator of the MIT.EDU realm can
- authorize the creation of a realm with that name.
-
- This is acceptable because the organization to which the parent is
- assigned is presumably the organization authorized to assign names to
-
-
-
-Neuman, et al. Standards Track [Page 98]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- its children in the X.500 and domain name systems as well. If the
- parent assigns a realm name without also registering it in the domain
- name or X.500 hierarchy, it is the parent's responsibility to make
- sure that in the future there will not exist a name identical to the
- realm name of the child unless it is assigned to the same entity as
- the realm name.
-
-6.2. Principal Names
-
- As was the case for realm names, conventions are needed to ensure
- that all agree on what information is implied by a principal name.
- The name-type field that is part of the principal name indicates the
- kind of information implied by the name. The name-type SHOULD be
- treated only as a hint to interpreting the meaning of a name. It is
- not significant when checking for equivalence. Principal names that
- differ only in the name-type identify the same principal. The name
- type does not partition the name space. Ignoring the name type, no
- two names can be the same (i.e., at least one of the components, or
- the realm, MUST be different). The following name types are defined:
-
- Name Type Value Meaning
-
- NT-UNKNOWN 0 Name type not known
- NT-PRINCIPAL 1 Just the name of the principal as in DCE,
- or for users
- NT-SRV-INST 2 Service and other unique instance (krbtgt)
- NT-SRV-HST 3 Service with host name as instance
- (telnet, rcommands)
- NT-SRV-XHST 4 Service with host as remaining components
- NT-UID 5 Unique ID
- NT-X500-PRINCIPAL 6 Encoded X.509 Distinguished name [RFC2253]
- NT-SMTP-NAME 7 Name in form of SMTP email name
- (e.g., user@example.com)
- NT-ENTERPRISE 10 Enterprise name - may be mapped to principal
- name
-
- When a name implies no information other than its uniqueness at a
- particular time, the name type PRINCIPAL SHOULD be used. The
- principal name type SHOULD be used for users, and it might also be
- used for a unique server. If the name is a unique machine-generated
- ID that is guaranteed never to be reassigned, then the name type of
- UID SHOULD be used. (Note that it is generally a bad idea to
- reassign names of any type since stale entries might remain in access
- control lists.)
-
- If the first component of a name identifies a service and the
- remaining components identify an instance of the service in a
- server-specified manner, then the name type of SRV-INST SHOULD be
-
-
-
-Neuman, et al. Standards Track [Page 99]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- used. An example of this name type is the Kerberos ticket-granting
- service whose name has a first component of krbtgt and a second
- component identifying the realm for which the ticket is valid.
-
- If the first component of a name identifies a service and there is a
- single component following the service name identifying the instance
- as the host on which the server is running, then the name type
- SRV-HST SHOULD be used. This type is typically used for Internet
- services such as telnet and the Berkeley R commands. If the separate
- components of the host name appear as successive components following
- the name of the service, then the name type SRV-XHST SHOULD be used.
- This type might be used to identify servers on hosts with X.500
- names, where the slash (/) might otherwise be ambiguous.
-
- A name type of NT-X500-PRINCIPAL SHOULD be used when a name from an
- X.509 certificate is translated into a Kerberos name. The encoding
- of the X.509 name as a Kerberos principal shall conform to the
- encoding rules specified in RFC 2253.
-
- A name type of SMTP allows a name to be of a form that resembles an
- SMTP email name. This name, including an "@" and a domain name, is
- used as the one component of the principal name.
-
- A name type of UNKNOWN SHOULD be used when the form of the name is
- not known. When comparing names, a name of type UNKNOWN will match
- principals authenticated with names of any type. A principal
- authenticated with a name of type UNKNOWN, however, will only match
- other names of type UNKNOWN.
-
- Names of any type with an initial component of 'krbtgt' are reserved
- for the Kerberos ticket-granting service. See Section 7.3 for the
- form of such names.
-
-6.2.1. Name of Server Principals
-
- The principal identifier for a server on a host will generally be
- composed of two parts: (1) the realm of the KDC with which the server
- is registered, and (2) a two-component name of type NT-SRV-HST, if
- the host name is an Internet domain name, or a multi-component name
- of type NT-SRV-XHST, if the name of the host is of a form (such as
- X.500) that allows slash (/) separators. The first component of the
- two- or multi-component name will identify the service, and the
- latter components will identify the host. Where the name of the host
- is not case sensitive (for example, with Internet domain names) the
- name of the host MUST be lowercase. If specified by the application
- protocol for services such as telnet and the Berkeley R commands that
- run with system privileges, the first component MAY be the string
- 'host' instead of a service-specific identifier.
-
-
-
-Neuman, et al. Standards Track [Page 100]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-7. Constants and Other Defined Values
-
-7.1. Host Address Types
-
- All negative values for the host address type are reserved for local
- use. All non-negative values are reserved for officially assigned
- type fields and interpretations.
-
- Internet (IPv4) Addresses
-
- Internet (IPv4) addresses are 32-bit (4-octet) quantities, encoded
- in MSB order (most significant byte first). The IPv4 loopback
- address SHOULD NOT appear in a Kerberos PDU. The type of IPv4
- addresses is two (2).
-
- Internet (IPv6) Addresses
-
- IPv6 addresses [RFC3513] are 128-bit (16-octet) quantities,
- encoded in MSB order (most significant byte first). The type of
- IPv6 addresses is twenty-four (24). The following addresses MUST
- NOT appear in any Kerberos PDU:
-
- * the Unspecified Address
- * the Loopback Address
- * Link-Local addresses
-
- This restriction applies to the inclusion in the address fields of
- Kerberos PDUs, but not to the address fields of packets that might
- carry such PDUs. The restriction is necessary because the use of
- an address with non-global scope could allow the acceptance of a
- message sent from a node that may have the same address, but which
- is not the host intended by the entity that added the restriction.
- If the link-local address type needs to be used for communication,
- then the address restriction in tickets must not be used (i.e.,
- addressless tickets must be used).
-
- IPv4-mapped IPv6 addresses MUST be represented as addresses of
- type 2.
-
- DECnet Phase IV Addresses
-
- DECnet Phase IV addresses are 16-bit addresses, encoded in LSB
- order. The type of DECnet Phase IV addresses is twelve (12).
-
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 101]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Netbios Addresses
-
- Netbios addresses are 16-octet addresses typically composed of 1
- to 15 alphanumeric characters and padded with the US-ASCII SPC
- character (code 32). The 16th octet MUST be the US-ASCII NUL
- character (code 0). The type of Netbios addresses is twenty (20).
-
- Directional Addresses
-
- Including the sender address in KRB_SAFE and KRB_PRIV messages is
- undesirable in many environments because the addresses may be
- changed in transport by network address translators. However, if
- these addresses are removed, the messages may be subject to a
- reflection attack in which a message is reflected back to its
- originator. The directional address type provides a way to avoid
- transport addresses and reflection attacks. Directional addresses
- are encoded as four-byte unsigned integers in network byte order.
- If the message is originated by the party sending the original
- KRB_AP_REQ message, then an address of 0 SHOULD be used. If the
- message is originated by the party to whom that KRB_AP_REQ was
- sent, then the address 1 SHOULD be used. Applications involving
- multiple parties can specify the use of other addresses.
-
- Directional addresses MUST only be used for the sender address
- field in the KRB_SAFE or KRB_PRIV messages. They MUST NOT be used
- as a ticket address or in a KRB_AP_REQ message. This address type
- SHOULD only be used in situations where the sending party knows
- that the receiving party supports the address type. This
- generally means that directional addresses may only be used when
- the application protocol requires their support. Directional
- addresses are type (3).
-
-7.2. KDC Messaging: IP Transports
-
- Kerberos defines two IP transport mechanisms for communication
- between clients and servers: UDP/IP and TCP/IP.
-
-7.2.1. UDP/IP transport
-
- Kerberos servers (KDCs) supporting IP transports MUST accept UDP
- requests and SHOULD listen for them on port 88 (decimal) unless
- specifically configured to listen on an alternative UDP port.
- Alternate ports MAY be used when running multiple KDCs for multiple
- realms on the same host.
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 102]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Kerberos clients supporting IP transports SHOULD support the sending
- of UDP requests. Clients SHOULD use KDC discovery [7.2.3] to
- identify the IP address and port to which they will send their
- request.
-
- When contacting a KDC for a KRB_KDC_REQ request using UDP/IP
- transport, the client shall send a UDP datagram containing only an
- encoding of the request to the KDC. The KDC will respond with a
- reply datagram containing only an encoding of the reply message
- (either a KRB_ERROR or a KRB_KDC_REP) to the sending port at the
- sender's IP address. The response to a request made through UDP/IP
- transport MUST also use UDP/IP transport. If the response cannot be
- handled using UDP (for example, because it is too large), the KDC
- MUST return KRB_ERR_RESPONSE_TOO_BIG, forcing the client to retry the
- request using the TCP transport.
-
-7.2.2. TCP/IP Transport
-
- Kerberos servers (KDCs) supporting IP transports MUST accept TCP
- requests and SHOULD listen for them on port 88 (decimal) unless
- specifically configured to listen on an alternate TCP port.
- Alternate ports MAY be used when running multiple KDCs for multiple
- realms on the same host.
-
- Clients MUST support the sending of TCP requests, but MAY choose to
- try a request initially using the UDP transport. Clients SHOULD use
- KDC discovery [7.2.3] to identify the IP address and port to which
- they will send their request.
-
- Implementation note: Some extensions to the Kerberos protocol will
- not succeed if any client or KDC not supporting the TCP transport is
- involved. Implementations of RFC 1510 were not required to support
- TCP/IP transports.
-
- When the KRB_KDC_REQ message is sent to the KDC over a TCP stream,
- the response (KRB_KDC_REP or KRB_ERROR message) MUST be returned to
- the client on the same TCP stream that was established for the
- request. The KDC MAY close the TCP stream after sending a response,
- but MAY leave the stream open for a reasonable period of time if it
- expects a follow-up. Care must be taken in managing TCP/IP
- connections on the KDC to prevent denial of service attacks based on
- the number of open TCP/IP connections.
-
- The client MUST be prepared to have the stream closed by the KDC at
- any time after the receipt of a response. A stream closure SHOULD
- NOT be treated as a fatal error. Instead, if multiple exchanges are
- required (e.g., certain forms of pre-authentication), the client may
- need to establish a new connection when it is ready to send
-
-
-
-Neuman, et al. Standards Track [Page 103]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- subsequent messages. A client MAY close the stream after receiving a
- response, and SHOULD close the stream if it does not expect to send
- follow-up messages.
-
- A client MAY send multiple requests before receiving responses,
- though it must be prepared to handle the connection being closed
- after the first response.
-
- Each request (KRB_KDC_REQ) and response (KRB_KDC_REP or KRB_ERROR)
- sent over the TCP stream is preceded by the length of the request as
- 4 octets in network byte order. The high bit of the length is
- reserved for future expansion and MUST currently be set to zero. If
- a KDC that does not understand how to interpret a set high bit of the
- length encoding receives a request with the high order bit of the
- length set, it MUST return a KRB-ERROR message with the error
- KRB_ERR_FIELD_TOOLONG and MUST close the TCP stream.
-
- If multiple requests are sent over a single TCP connection and the
- KDC sends multiple responses, the KDC is not required to send the
- responses in the order of the corresponding requests. This may
- permit some implementations to send each response as soon as it is
- ready, even if earlier requests are still being processed (for
- example, waiting for a response from an external device or database).
-
-7.2.3. KDC Discovery on IP Networks
-
- Kerberos client implementations MUST provide a means for the client
- to determine the location of the Kerberos Key Distribution Centers
- (KDCs). Traditionally, Kerberos implementations have stored such
- configuration information in a file on each client machine.
- Experience has shown that this method of storing configuration
- information presents problems with out-of-date information and
- scaling, especially when using cross-realm authentication. This
- section describes a method for using the Domain Name System [RFC1035]
- for storing KDC location information.
-
-7.2.3.1. DNS vs. Kerberos: Case Sensitivity of Realm Names
-
- In Kerberos, realm names are case sensitive. Although it is strongly
- encouraged that all realm names be all uppercase, this recommendation
- has not been adopted by all sites. Some sites use all lowercase
- names and other use mixed case. DNS, on the other hand, is case
- insensitive for queries. Because the realm names "MYREALM",
- "myrealm", and "MyRealm" are all different, but resolve the same in
- the domain name system, it is necessary that only one of the possible
- combinations of upper- and lowercase characters be used in realm
- names.
-
-
-
-
-Neuman, et al. Standards Track [Page 104]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-7.2.3.2. Specifying KDC Location Information with DNS SRV records
-
- KDC location information is to be stored using the DNS SRV RR
- [RFC2782]. The format of this RR is as follows:
-
- _Service._Proto.Realm TTL Class SRV Priority Weight Port Target
-
- The Service name for Kerberos is always "kerberos".
-
- The Proto can be either "udp" or "tcp". If these SRV records are to
- be used, both "udp" and "tcp" records MUST be specified for all KDC
- deployments.
-
- The Realm is the Kerberos realm that this record corresponds to. The
- realm MUST be a domain-style realm name.
-
- TTL, Class, SRV, Priority, Weight, and Target have the standard
- meaning as defined in RFC 2782.
-
- As per RFC 2782, the Port number used for "_udp" and "_tcp" SRV
- records SHOULD be the value assigned to "kerberos" by the Internet
- Assigned Number Authority: 88 (decimal), unless the KDC is configured
- to listen on an alternate TCP port.
-
- Implementation note: Many existing client implementations do not
- support KDC Discovery and are configured to send requests to the IANA
- assigned port (88 decimal), so it is strongly recommended that KDCs
- be configured to listen on that port.
-
-7.2.3.3. KDC Discovery for Domain Style Realm Names on IP Networks
-
- These are DNS records for a Kerberos realm EXAMPLE.COM. It has two
- Kerberos servers, kdc1.example.com and kdc2.example.com. Queries
- should be directed to kdc1.example.com first as per the specified
- priority. Weights are not used in these sample records.
-
- _kerberos._udp.EXAMPLE.COM. IN SRV 0 0 88 kdc1.example.com.
- _kerberos._udp.EXAMPLE.COM. IN SRV 1 0 88 kdc2.example.com.
- _kerberos._tcp.EXAMPLE.COM. IN SRV 0 0 88 kdc1.example.com.
- _kerberos._tcp.EXAMPLE.COM. IN SRV 1 0 88 kdc2.example.com.
-
-7.3. Name of the TGS
-
- The principal identifier of the ticket-granting service shall be
- composed of three parts: the realm of the KDC issuing the TGS ticket,
- and a two-part name of type NT-SRV-INST, with the first part "krbtgt"
- and the second part the name of the realm that will accept the TGT.
- For example, a TGT issued by the ATHENA.MIT.EDU realm to be used to
-
-
-
-Neuman, et al. Standards Track [Page 105]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- get tickets from the ATHENA.MIT.EDU KDC has a principal identifier of
- "ATHENA.MIT.EDU" (realm), ("krbtgt", "ATHENA.MIT.EDU") (name). A TGT
- issued by the ATHENA.MIT.EDU realm to be used to get tickets from the
- MIT.EDU realm has a principal identifier of "ATHENA.MIT.EDU" (realm),
- ("krbtgt", "MIT.EDU") (name).
-
-7.4. OID Arc for KerberosV5
-
- This OID MAY be used to identify Kerberos protocol messages
- encapsulated in other protocols. It also designates the OID arc for
- KerberosV5-related OIDs assigned by future IETF action.
- Implementation note: RFC 1510 had an incorrect value (5) for "dod" in
- its OID.
-
- id-krb5 OBJECT IDENTIFIER ::= {
- iso(1) identified-organization(3) dod(6) internet(1)
- security(5) kerberosV5(2)
- }
-
- Assignment of OIDs beneath the id-krb5 arc must be obtained by
- contacting the registrar for the id-krb5 arc, or its designee. At
- the time of the issuance of this RFC, such registrations can be
- obtained by contacting krb5-oid-registrar@mit.edu.
-
-7.5. Protocol Constants and Associated Values
-
- The following tables list constants used in the protocol and define
- their meanings. In the "specification" section, ranges are specified
- that limit the values of constants for which values are defined here.
- This allows implementations to make assumptions about the maximum
- values that will be received for these constants. Implementations
- receiving values outside the range specified in the "specification"
- section MAY reject the request, but they MUST recover cleanly.
-
-7.5.1. Key Usage Numbers
-
- The encryption and checksum specifications in [RFC3961] require as
- input a "key usage number", to alter the encryption key used in any
- specific message in order to make certain types of cryptographic
- attack more difficult. These are the key usage values assigned in
- this document:
-
- 1. AS-REQ PA-ENC-TIMESTAMP padata timestamp, encrypted with
- the client key (Section 5.2.7.2)
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 106]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- 2. AS-REP Ticket and TGS-REP Ticket (includes TGS session
- key or application session key), encrypted with the
- service key (Section 5.3)
- 3. AS-REP encrypted part (includes TGS session key or
- application session key), encrypted with the client key
- (Section 5.4.2)
- 4. TGS-REQ KDC-REQ-BODY AuthorizationData, encrypted with
- the TGS session key (Section 5.4.1)
- 5. TGS-REQ KDC-REQ-BODY AuthorizationData, encrypted with
- the TGS authenticator subkey (Section 5.4.1)
- 6. TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator cksum,
- keyed with the TGS session key (Section 5.5.1)
- 7. TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator (includes
- TGS authenticator subkey), encrypted with the TGS session
- key (Section 5.5.1)
- 8. TGS-REP encrypted part (includes application session
- key), encrypted with the TGS session key (Section 5.4.2)
- 9. TGS-REP encrypted part (includes application session
- key), encrypted with the TGS authenticator subkey
- (Section 5.4.2)
- 10. AP-REQ Authenticator cksum, keyed with the application
- session key (Section 5.5.1)
- 11. AP-REQ Authenticator (includes application authenticator
- subkey), encrypted with the application session key
- (Section 5.5.1)
- 12. AP-REP encrypted part (includes application session
- subkey), encrypted with the application session key
- (Section 5.5.2)
- 13. KRB-PRIV encrypted part, encrypted with a key chosen by
- the application (Section 5.7.1)
- 14. KRB-CRED encrypted part, encrypted with a key chosen by
- the application (Section 5.8.1)
- 15. KRB-SAFE cksum, keyed with a key chosen by the
- application (Section 5.6.1)
- 16-18. Reserved for future use in Kerberos and related
- protocols.
- 19. AD-KDC-ISSUED checksum (ad-checksum in 5.2.6.4)
- 20-21. Reserved for future use in Kerberos and related
- protocols.
- 22-25. Reserved for use in the Kerberos Version 5 GSS-API
- mechanisms [RFC4121].
- 26-511. Reserved for future use in Kerberos and related
- protocols.
- 512-1023. Reserved for uses internal to a Kerberos implementation.
- 1024. Encryption for application use in protocols that do not
- specify key usage values
-
-
-
-
-
-Neuman, et al. Standards Track [Page 107]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- 1025. Checksums for application use in protocols that do not
- specify key usage values
- 1026-2047. Reserved for application use.
-
-7.5.2. PreAuthentication Data Types
-
- Padata and Data Type Padata-type Comment
- Value
-
- PA-TGS-REQ 1
- PA-ENC-TIMESTAMP 2
- PA-PW-SALT 3
- [reserved] 4
- PA-ENC-UNIX-TIME 5 (deprecated)
- PA-SANDIA-SECUREID 6
- PA-SESAME 7
- PA-OSF-DCE 8
- PA-CYBERSAFE-SECUREID 9
- PA-AFS3-SALT 10
- PA-ETYPE-INFO 11
- PA-SAM-CHALLENGE 12 (sam/otp)
- PA-SAM-RESPONSE 13 (sam/otp)
- PA-PK-AS-REQ_OLD 14 (pkinit)
- PA-PK-AS-REP_OLD 15 (pkinit)
- PA-PK-AS-REQ 16 (pkinit)
- PA-PK-AS-REP 17 (pkinit)
- PA-ETYPE-INFO2 19 (replaces pa-etype-info)
- PA-USE-SPECIFIED-KVNO 20
- PA-SAM-REDIRECT 21 (sam/otp)
- PA-GET-FROM-TYPED-DATA 22 (embedded in typed data)
- TD-PADATA 22 (embeds padata)
- PA-SAM-ETYPE-INFO 23 (sam/otp)
- PA-ALT-PRINC 24 (crawdad@fnal.gov)
- PA-SAM-CHALLENGE2 30 (kenh@pobox.com)
- PA-SAM-RESPONSE2 31 (kenh@pobox.com)
- PA-EXTRA-TGT 41 Reserved extra TGT
- TD-PKINIT-CMS-CERTIFICATES 101 CertificateSet from CMS
- TD-KRB-PRINCIPAL 102 PrincipalName
- TD-KRB-REALM 103 Realm
- TD-TRUSTED-CERTIFIERS 104 from PKINIT
- TD-CERTIFICATE-INDEX 105 from PKINIT
- TD-APP-DEFINED-ERROR 106 application specific
- TD-REQ-NONCE 107 INTEGER
- TD-REQ-SEQ 108 INTEGER
- PA-PAC-REQUEST 128 (jbrezak@exchange.microsoft.com)
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 108]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-7.5.3. Address Types
-
- Address Type Value
-
- IPv4 2
- Directional 3
- ChaosNet 5
- XNS 6
- ISO 7
- DECNET Phase IV 12
- AppleTalk DDP 16
- NetBios 20
- IPv6 24
-
-7.5.4. Authorization Data Types
-
- Authorization Data Type Ad-type Value
-
- AD-IF-RELEVANT 1
- AD-INTENDED-FOR-SERVER 2
- AD-INTENDED-FOR-APPLICATION-CLASS 3
- AD-KDC-ISSUED 4
- AD-AND-OR 5
- AD-MANDATORY-TICKET-EXTENSIONS 6
- AD-IN-TICKET-EXTENSIONS 7
- AD-MANDATORY-FOR-KDC 8
- Reserved values 9-63
- OSF-DCE 64
- SESAME 65
- AD-OSF-DCE-PKI-CERTID 66 (hemsath@us.ibm.com)
- AD-WIN2K-PAC 128 (jbrezak@exchange.microsoft.com)
- AD-ETYPE-NEGOTIATION 129 (lzhu@windows.microsoft.com)
-
-7.5.5. Transited Encoding Types
-
- Transited Encoding Type Tr-type Value
-
- DOMAIN-X500-COMPRESS 1
- Reserved values All others
-
-7.5.6. Protocol Version Number
-
- Label Value Meaning or MIT Code
-
- pvno 5 Current Kerberos protocol version number
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 109]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-7.5.7. Kerberos Message Types
-
- Message Type Value Meaning
-
- KRB_AS_REQ 10 Request for initial authentication
- KRB_AS_REP 11 Response to KRB_AS_REQ request
- KRB_TGS_REQ 12 Request for authentication based on TGT
- KRB_TGS_REP 13 Response to KRB_TGS_REQ request
- KRB_AP_REQ 14 Application request to server
- KRB_AP_REP 15 Response to KRB_AP_REQ_MUTUAL
- KRB_RESERVED16 16 Reserved for user-to-user krb_tgt_request
- KRB_RESERVED17 17 Reserved for user-to-user krb_tgt_reply
- KRB_SAFE 20 Safe (checksummed) application message
- KRB_PRIV 21 Private (encrypted) application message
- KRB_CRED 22 Private (encrypted) message to forward
- credentials
- KRB_ERROR 30 Error response
-
-7.5.8. Name Types
-
- Name Type Value Meaning
-
- KRB_NT_UNKNOWN 0 Name type not known
- KRB_NT_PRINCIPAL 1 Just the name of the principal as in DCE,
- or for users
- KRB_NT_SRV_INST 2 Service and other unique instance (krbtgt)
- KRB_NT_SRV_HST 3 Service with host name as instance
- (telnet, rcommands)
- KRB_NT_SRV_XHST 4 Service with host as remaining components
- KRB_NT_UID 5 Unique ID
- KRB_NT_X500_PRINCIPAL 6 Encoded X.509 Distinguished name [RFC2253]
- KRB_NT_SMTP_NAME 7 Name in form of SMTP email name
- (e.g., user@example.com)
- KRB_NT_ENTERPRISE 10 Enterprise name; may be mapped to
- principal name
-
-7.5.9. Error Codes
-
- Error Code Value Meaning
-
- KDC_ERR_NONE 0 No error
- KDC_ERR_NAME_EXP 1 Client's entry in database
- has expired
- KDC_ERR_SERVICE_EXP 2 Server's entry in database
- has expired
- KDC_ERR_BAD_PVNO 3 Requested protocol version
- number not supported
-
-
-
-
-Neuman, et al. Standards Track [Page 110]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- KDC_ERR_C_OLD_MAST_KVNO 4 Client's key encrypted in
- old master key
- KDC_ERR_S_OLD_MAST_KVNO 5 Server's key encrypted in
- old master key
- KDC_ERR_C_PRINCIPAL_UNKNOWN 6 Client not found in
- Kerberos database
- KDC_ERR_S_PRINCIPAL_UNKNOWN 7 Server not found in
- Kerberos database
- KDC_ERR_PRINCIPAL_NOT_UNIQUE 8 Multiple principal entries
- in database
- KDC_ERR_NULL_KEY 9 The client or server has a
- null key
- KDC_ERR_CANNOT_POSTDATE 10 Ticket not eligible for
- postdating
- KDC_ERR_NEVER_VALID 11 Requested starttime is
- later than end time
- KDC_ERR_POLICY 12 KDC policy rejects request
- KDC_ERR_BADOPTION 13 KDC cannot accommodate
- requested option
- KDC_ERR_ETYPE_NOSUPP 14 KDC has no support for
- encryption type
- KDC_ERR_SUMTYPE_NOSUPP 15 KDC has no support for
- checksum type
- KDC_ERR_PADATA_TYPE_NOSUPP 16 KDC has no support for
- padata type
- KDC_ERR_TRTYPE_NOSUPP 17 KDC has no support for
- transited type
- KDC_ERR_CLIENT_REVOKED 18 Clients credentials have
- been revoked
- KDC_ERR_SERVICE_REVOKED 19 Credentials for server have
- been revoked
- KDC_ERR_TGT_REVOKED 20 TGT has been revoked
- KDC_ERR_CLIENT_NOTYET 21 Client not yet valid; try
- again later
- KDC_ERR_SERVICE_NOTYET 22 Server not yet valid; try
- again later
- KDC_ERR_KEY_EXPIRED 23 Password has expired;
- change password to reset
- KDC_ERR_PREAUTH_FAILED 24 Pre-authentication
- information was invalid
- KDC_ERR_PREAUTH_REQUIRED 25 Additional pre-
- authentication required
- KDC_ERR_SERVER_NOMATCH 26 Requested server and ticket
- don't match
- KDC_ERR_MUST_USE_USER2USER 27 Server principal valid for
- user2user only
- KDC_ERR_PATH_NOT_ACCEPTED 28 KDC Policy rejects
- transited path
-
-
-
-Neuman, et al. Standards Track [Page 111]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- KDC_ERR_SVC_UNAVAILABLE 29 A service is not available
- KRB_AP_ERR_BAD_INTEGRITY 31 Integrity check on
- decrypted field failed
- KRB_AP_ERR_TKT_EXPIRED 32 Ticket expired
- KRB_AP_ERR_TKT_NYV 33 Ticket not yet valid
- KRB_AP_ERR_REPEAT 34 Request is a replay
- KRB_AP_ERR_NOT_US 35 The ticket isn't for us
- KRB_AP_ERR_BADMATCH 36 Ticket and authenticator
- don't match
- KRB_AP_ERR_SKEW 37 Clock skew too great
- KRB_AP_ERR_BADADDR 38 Incorrect net address
- KRB_AP_ERR_BADVERSION 39 Protocol version mismatch
- KRB_AP_ERR_MSG_TYPE 40 Invalid msg type
- KRB_AP_ERR_MODIFIED 41 Message stream modified
- KRB_AP_ERR_BADORDER 42 Message out of order
- KRB_AP_ERR_BADKEYVER 44 Specified version of key is
- not available
- KRB_AP_ERR_NOKEY 45 Service key not available
- KRB_AP_ERR_MUT_FAIL 46 Mutual authentication
- failed
- KRB_AP_ERR_BADDIRECTION 47 Incorrect message direction
- KRB_AP_ERR_METHOD 48 Alternative authentication
- method required
- KRB_AP_ERR_BADSEQ 49 Incorrect sequence number
- in message
- KRB_AP_ERR_INAPP_CKSUM 50 Inappropriate type of
- checksum in message
- KRB_AP_PATH_NOT_ACCEPTED 51 Policy rejects transited
- path
- KRB_ERR_RESPONSE_TOO_BIG 52 Response too big for UDP;
- retry with TCP
- KRB_ERR_GENERIC 60 Generic error (description
- in e-text)
- KRB_ERR_FIELD_TOOLONG 61 Field is too long for this
- implementation
- KDC_ERROR_CLIENT_NOT_TRUSTED 62 Reserved for PKINIT
- KDC_ERROR_KDC_NOT_TRUSTED 63 Reserved for PKINIT
- KDC_ERROR_INVALID_SIG 64 Reserved for PKINIT
- KDC_ERR_KEY_TOO_WEAK 65 Reserved for PKINIT
- KDC_ERR_CERTIFICATE_MISMATCH 66 Reserved for PKINIT
- KRB_AP_ERR_NO_TGT 67 No TGT available to
- validate USER-TO-USER
- KDC_ERR_WRONG_REALM 68 Reserved for future use
- KRB_AP_ERR_USER_TO_USER_REQUIRED 69 Ticket must be for
- USER-TO-USER
- KDC_ERR_CANT_VERIFY_CERTIFICATE 70 Reserved for PKINIT
- KDC_ERR_INVALID_CERTIFICATE 71 Reserved for PKINIT
- KDC_ERR_REVOKED_CERTIFICATE 72 Reserved for PKINIT
-
-
-
-Neuman, et al. Standards Track [Page 112]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- KDC_ERR_REVOCATION_STATUS_UNKNOWN 73 Reserved for PKINIT
- KDC_ERR_REVOCATION_STATUS_UNAVAILABLE 74 Reserved for PKINIT
- KDC_ERR_CLIENT_NAME_MISMATCH 75 Reserved for PKINIT
- KDC_ERR_KDC_NAME_MISMATCH 76 Reserved for PKINIT
-
-8. Interoperability Requirements
-
- Version 5 of the Kerberos protocol supports a myriad of options.
- Among these are multiple encryption and checksum types; alternative
- encoding schemes for the transited field; optional mechanisms for
- pre-authentication; the handling of tickets with no addresses;
- options for mutual authentication; user-to-user authentication;
- support for proxies; the format of realm names; the handling of
- authorization data; and forwarding, postdating, and renewing tickets.
-
- In order to ensure the interoperability of realms, it is necessary to
- define a minimal configuration that must be supported by all
- implementations. This minimal configuration is subject to change as
- technology does. For example, if at some later date it is discovered
- that one of the required encryption or checksum algorithms is not
- secure, it will be replaced.
-
-8.1. Specification 2
-
- This section defines the second specification of these options.
- Implementations which are configured in this way can be said to
- support Kerberos Version 5 Specification 2 (5.2). Specification 1
- (deprecated) may be found in RFC 1510.
-
- Transport
-
- TCP/IP and UDP/IP transport MUST be supported by clients and KDCs
- claiming conformance to specification 2.
-
- Encryption and Checksum Methods
-
- The following encryption and checksum mechanisms MUST be
- supported:
-
- Encryption: AES256-CTS-HMAC-SHA1-96 [RFC3962]
- Checksums: HMAC-SHA1-96-AES256 [RFC3962]
-
- Implementations SHOULD support other mechanisms as well, but the
- additional mechanisms may only be used when communicating with
- principals known to also support them. The following mechanisms
- from [RFC3961] and [RFC3962] SHOULD be supported:
-
-
-
-
-
-Neuman, et al. Standards Track [Page 113]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Encryption: AES128-CTS-HMAC-SHA1-96, DES-CBC-MD5, DES3-CBC-SHA1-KD
- Checksums: DES-MD5, HMAC-SHA1-DES3-KD, HMAC-SHA1-96-AES128
-
- Implementations MAY support other mechanisms as well, but the
- additional mechanisms may only be used when communicating with
- principals known to support them also.
-
- Implementation note: Earlier implementations of Kerberos generate
- messages using the CRC-32 and RSA-MD5 checksum methods. For
- interoperability with these earlier releases, implementors MAY
- consider supporting these checksum methods but should carefully
- analyze the security implications to limit the situations within
- which these methods are accepted.
-
- Realm Names
-
- All implementations MUST understand hierarchical realms in both
- the Internet Domain and the X.500 style. When a TGT for an
- unknown realm is requested, the KDC MUST be able to determine the
- names of the intermediate realms between the KDCs realm and the
- requested realm.
-
- Transited Field Encoding
-
- DOMAIN-X500-COMPRESS (described in Section 3.3.3.2) MUST be
- supported. Alternative encodings MAY be supported, but they may
- only be used when that encoding is supported by ALL intermediate
- realms.
-
- Pre-authentication Methods
-
- The TGS-REQ method MUST be supported. It is not used on the
- initial request. The PA-ENC-TIMESTAMP method MUST be supported by
- clients, but whether it is enabled by default MAY be determined on
- a realm-by-realm basis. If the method is not used in the initial
- request and the error KDC_ERR_PREAUTH_REQUIRED is returned
- specifying PA-ENC-TIMESTAMP as an acceptable method, the client
- SHOULD retry the initial request using the PA-ENC-TIMESTAMP pre-
- authentication method. Servers need not support the PA-ENC-
- TIMESTAMP method, but if it is not supported the server SHOULD
- ignore the presence of PA-ENC-TIMESTAMP pre-authentication in a
- request.
-
- The ETYPE-INFO2 method MUST be supported; this method is used to
- communicate the set of supported encryption types, and
- corresponding salt and string to key parameters. The ETYPE-INFO
- method SHOULD be supported for interoperability with older
- implementation.
-
-
-
-Neuman, et al. Standards Track [Page 114]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Mutual Authentication
-
- Mutual authentication (via the KRB_AP_REP message) MUST be
- supported.
-
- Ticket Addresses and Flags
-
- All KDCs MUST pass through tickets that carry no addresses (i.e.,
- if a TGT contains no addresses, the KDC will return derivative
- tickets). Implementations SHOULD default to requesting
- addressless tickets, as this significantly increases
- interoperability with network address translation. In some cases,
- realms or application servers MAY require that tickets have an
- address.
-
- Implementations SHOULD accept directional address type for the
- KRB_SAFE and KRB_PRIV message and SHOULD include directional
- addresses in these messages when other address types are not
- available.
-
- Proxies and forwarded tickets MUST be supported. Individual
- realms and application servers can set their own policy on when
- such tickets will be accepted.
-
- All implementations MUST recognize renewable and postdated
- tickets, but they need not actually implement them. If these
- options are not supported, the starttime and endtime in the ticket
- SHALL specify a ticket's entire useful life. When a postdated
- ticket is decoded by a server, all implementations SHALL make the
- presence of the postdated flag visible to the calling server.
-
- User-to-User Authentication
-
- Support for user-to-user authentication (via the ENC-TKT-IN-SKEY
- KDC option) MUST be provided by implementations, but individual
- realms MAY decide as a matter of policy to reject such requests on
- a per-principal or realm-wide basis.
-
- Authorization Data
-
- Implementations MUST pass all authorization data subfields from
- TGTs to any derivative tickets unless they are directed to
- suppress a subfield as part of the definition of that registered
- subfield type. (It is never incorrect to pass on a subfield, and
- no registered subfield types presently specify suppression at the
- KDC.)
-
-
-
-
-
-Neuman, et al. Standards Track [Page 115]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Implementations MUST make the contents of any authorization data
- subfields available to the server when a ticket is used.
- Implementations are not required to allow clients to specify the
- contents of the authorization data fields.
-
- Constant Ranges
-
- All protocol constants are constrained to 32-bit (signed) values
- unless further constrained by the protocol definition. This limit
- is provided to allow implementations to make assumptions about the
- maximum values that will be received for these constants.
- Implementations receiving values outside this range MAY reject the
- request, but they MUST recover cleanly.
-
-8.2. Recommended KDC Values
-
- Following is a list of recommended values for a KDC configuration.
-
- Minimum lifetime 5 minutes
- Maximum renewable lifetime 1 week
- Maximum ticket lifetime 1 day
- Acceptable clock skew 5 minutes
- Empty addresses Allowed
- Proxiable, etc. Allowed
-
-9. IANA Considerations
-
- Section 7 of this document specifies protocol constants and other
- defined values required for the interoperability of multiple
- implementations. Until a subsequent RFC specifies otherwise, or the
- Kerberos working group is shut down, allocations of additional
- protocol constants and other defined values required for extensions
- to the Kerberos protocol will be administered by the Kerberos working
- group. Following the recommendations outlined in [RFC2434], guidance
- is provided to the IANA as follows:
-
- "reserved" realm name types in Section 6.1 and "other" realm types
- except those beginning with "X-" or "x-" will not be registered
- without IETF standards action, at which point guidelines for further
- assignment will be specified. Realm name types beginning with "X-"
- or "x-" are for private use.
-
- For host address types described in Section 7.1, negative values are
- for private use. Assignment of additional positive numbers is
- subject to review by the Kerberos working group or other expert
- review.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 116]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Additional key usage numbers, as defined in Section 7.5.1, will be
- assigned subject to review by the Kerberos working group or other
- expert review.
-
- Additional preauthentication data type values, as defined in section
- 7.5.2, will be assigned subject to review by the Kerberos working
- group or other expert review.
-
- Additional authorization data types as defined in Section 7.5.4, will
- be assigned subject to review by the Kerberos working group or other
- expert review. Although it is anticipated that there may be
- significant demand for private use types, provision is intentionally
- not made for a private use portion of the namespace because conflicts
- between privately assigned values could have detrimental security
- implications.
-
- Additional transited encoding types, as defined in Section 7.5.5,
- present special concerns for interoperability with existing
- implementations. As such, such assignments will only be made by
- standards action, except that the Kerberos working group or another
- other working group with competent jurisdiction may make preliminary
- assignments for documents that are moving through the standards
- process.
-
- Additional Kerberos message types, as described in Section 7.5.7,
- will be assigned subject to review by the Kerberos working group or
- other expert review.
-
- Additional name types, as described in Section 7.5.8, will be
- assigned subject to review by the Kerberos working group or other
- expert review.
-
- Additional error codes described in Section 7.5.9 will be assigned
- subject to review by the Kerberos working group or other expert
- review.
-
-10. Security Considerations
-
- As an authentication service, Kerberos provides a means of verifying
- the identity of principals on a network. By itself, Kerberos does
- not provide authorization. Applications should not accept the
- issuance of a service ticket by the Kerberos server as granting
- authority to use the service, since such applications may become
- vulnerable to the bypass of this authorization check in an
- environment where they inter-operate with other KDCs or where other
- options for application authentication are provided.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 117]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Denial of service attacks are not solved with Kerberos. There are
- places in the protocols where an intruder can prevent an application
- from participating in the proper authentication steps. Because
- authentication is a required step for the use of many services,
- successful denial of service attacks on a Kerberos server might
- result in the denial of other network services that rely on Kerberos
- for authentication. Kerberos is vulnerable to many kinds of denial
- of service attacks: those on the network, which would prevent clients
- from contacting the KDC; those on the domain name system, which could
- prevent a client from finding the IP address of the Kerberos server;
- and those by overloading the Kerberos KDC itself with repeated
- requests.
-
- Interoperability conflicts caused by incompatible character-set usage
- (see 5.2.1) can result in denial of service for clients that utilize
- character-sets in Kerberos strings other than those stored in the KDC
- database.
-
- Authentication servers maintain a database of principals (i.e., users
- and servers) and their secret keys. The security of the
- authentication server machines is critical. The breach of security
- of an authentication server will compromise the security of all
- servers that rely upon the compromised KDC, and will compromise the
- authentication of any principals registered in the realm of the
- compromised KDC.
-
- Principals must keep their secret keys secret. If an intruder
- somehow steals a principal's key, it will be able to masquerade as
- that principal or impersonate any server to the legitimate principal.
-
- Password-guessing attacks are not solved by Kerberos. If a user
- chooses a poor password, it is possible for an attacker to
- successfully mount an off-line dictionary attack by repeatedly
- attempting to decrypt, with successive entries from a dictionary,
- messages obtained that are encrypted under a key derived from the
- user's password.
-
- Unless pre-authentication options are required by the policy of a
- realm, the KDC will not know whether a request for authentication
- succeeds. An attacker can request a reply with credentials for any
- principal. These credentials will likely not be of much use to the
- attacker unless it knows the client's secret key, but the
- availability of the response encrypted in the client's secret key
- provides the attacker with ciphertext that may be used to mount brute
- force or dictionary attacks to decrypt the credentials, by guessing
- the user's password. For this reason it is strongly encouraged that
- Kerberos realms require the use of pre-authentication. Even with
-
-
-
-
-Neuman, et al. Standards Track [Page 118]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- pre-authentication, attackers may try brute force or dictionary
- attacks against credentials that are observed by eavesdropping on the
- network.
-
- Because a client can request a ticket for any server principal and
- can attempt a brute force or dictionary attack against the server
- principal's key using that ticket, it is strongly encouraged that
- keys be randomly generated (rather than generated from passwords) for
- any principals that are usable as the target principal for a
- KRB_TGS_REQ or KRB_AS_REQ messages. [RFC4086]
-
- Although the DES-CBC-MD5 encryption method and DES-MD5 checksum
- methods are listed as SHOULD be implemented for backward
- compatibility, the single DES encryption algorithm on which these are
- based is weak, and stronger algorithms should be used whenever
- possible.
-
- Each host on the network must have a clock that is loosely
- synchronized to the time of the other hosts; this synchronization is
- used to reduce the bookkeeping needs of application servers when they
- do replay detection. The degree of "looseness" can be configured on
- a per-server basis, but it is typically on the order of 5 minutes.
- If the clocks are synchronized over the network, the clock
- synchronization protocol MUST itself be secured from network
- attackers.
-
- Principal identifiers must not recycled on a short-term basis. A
- typical mode of access control will use access control lists (ACLs)
- to grant permissions to particular principals. If a stale ACL entry
- remains for a deleted principal and the principal identifier is
- reused, the new principal will inherit rights specified in the stale
- ACL entry. By not reusing principal identifiers, the danger of
- inadvertent access is removed.
-
- Proper decryption of an KRB_AS_REP message from the KDC is not
- sufficient for the host to verify the identity of the user; the user
- and an attacker could cooperate to generate a KRB_AS_REP format
- message that decrypts properly but is not from the proper KDC. To
- authenticate a user logging on to a local system, the credentials
- obtained in the AS exchange may first be used in a TGS exchange to
- obtain credentials for a local server. Those credentials must then
- be verified by a local server through successful completion of the
- Client/Server exchange.
-
- Many RFC 1510-compliant implementations ignore unknown authorization
- data elements. Depending on these implementations to honor
- authorization data restrictions may create a security weakness.
-
-
-
-
-Neuman, et al. Standards Track [Page 119]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Kerberos credentials contain clear-text information identifying the
- principals to which they apply. If privacy of this information is
- needed, this exchange should itself be encapsulated in a protocol
- providing for confidentiality on the exchange of these credentials.
-
- Applications must take care to protect communications subsequent to
- authentication, either by using the KRB_PRIV or KRB_SAFE messages as
- appropriate, or by applying their own confidentiality or integrity
- mechanisms on such communications. Completion of the KRB_AP_REQ and
- KRB_AP_REP exchange without subsequent use of confidentiality and
- integrity mechanisms provides only for authentication of the parties
- to the communication and not confidentiality and integrity of the
- subsequent communication. Applications applying confidentiality and
- integrity protection mechanisms other than KRB_PRIV and KRB_SAFE must
- make sure that the authentication step is appropriately linked with
- the protected communication channel that is established by the
- application.
-
- Unless the application server provides its own suitable means to
- protect against replay (for example, a challenge-response sequence
- initiated by the server after authentication, or use of a server-
- generated encryption subkey), the server must utilize a replay cache
- to remember any authenticator presented within the allowable clock
- skew. All services sharing a key need to use the same replay cache.
- If separate replay caches are used, then an authenticator used with
- one such service could later be replayed to a different service with
- the same service principal.
-
- If a server loses track of authenticators presented within the
- allowable clock skew, it must reject all requests until the clock
- skew interval has passed, providing assurance that any lost or
- replayed authenticators will fall outside the allowable clock skew
- and can no longer be successfully replayed.
-
- Implementations of Kerberos should not use untrusted directory
- servers to determine the realm of a host. To allow this would allow
- the compromise of the directory server to enable an attacker to
- direct the client to accept authentication with the wrong principal
- (i.e., one with a similar name, but in a realm with which the
- legitimate host was not registered).
-
- Implementations of Kerberos must not use DNS to map one name to
- another (canonicalize) in order to determine the host part of the
- principal name with which one is to communicate. To allow this
- canonicalization would allow a compromise of the DNS to result in a
- client obtaining credentials and correctly authenticating to the
-
-
-
-
-
-Neuman, et al. Standards Track [Page 120]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- wrong principal. Though the client will know who it is communicating
- with, it will not be the principal with which it intended to
- communicate.
-
- If the Kerberos server returns a TGT for a realm 'closer' than the
- desired realm, the client may use local policy configuration to
- verify that the authentication path used is an acceptable one.
- Alternatively, a client may choose its own authentication path rather
- than rely on the Kerberos server to select one. In either case, any
- policy or configuration information used to choose or validate
- authentication paths, whether by the Kerberos server or client, must
- be obtained from a trusted source.
-
- The Kerberos protocol in its basic form does not provide perfect
- forward secrecy for communications. If traffic has been recorded by
- an eavesdropper, then messages encrypted using the KRB_PRIV message,
- or messages encrypted using application-specific encryption under
- keys exchanged using Kerberos can be decrypted if the user's,
- application server's, or KDC's key is subsequently discovered. This
- is because the session key used to encrypt such messages, when
- transmitted over the network, is encrypted in the key of the
- application server. It is also encrypted under the session key from
- the user's TGT when it is returned to the user in the KRB_TGS_REP
- message. The session key from the TGT is sent to the user in the
- KRB_AS_REP message encrypted in the user's secret key and embedded in
- the TGT, which was encrypted in the key of the KDC. Applications
- requiring perfect forward secrecy must exchange keys through
- mechanisms that provide such assurance, but may use Kerberos for
- authentication of the encrypted channel established through such
- other means.
-
-11. Acknowledgements
-
- This document is a revision to RFC 1510 which was co-authored with
- John Kohl. The specification of the Kerberos protocol described in
- this document is the result of many years of effort. Over this
- period, many individuals have contributed to the definition of the
- protocol and to the writing of the specification. Unfortunately, it
- is not possible to list all contributors as authors of this document,
- though there are many not listed who are authors in spirit, including
- those who contributed text for parts of some sections, who
- contributed to the design of parts of the protocol, and who
- contributed significantly to the discussion of the protocol in the
- IETF common authentication technology (CAT) and Kerberos working
- groups.
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 121]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- Among those contributing to the development and specification of
- Kerberos were Jeffrey Altman, John Brezak, Marc Colan, Johan
- Danielsson, Don Davis, Doug Engert, Dan Geer, Paul Hill, John Kohl,
- Marc Horowitz, Matt Hur, Jeffrey Hutzelman, Paul Leach, John Linn,
- Ari Medvinsky, Sasha Medvinsky, Steve Miller, Jon Rochlis, Jerome
- Saltzer, Jeffrey Schiller, Jennifer Steiner, Ralph Swick, Mike Swift,
- Jonathan Trostle, Theodore Ts'o, Brian Tung, Jacques Vidrine, Assar
- Westerlund, and Nicolas Williams. Many other members of MIT Project
- Athena, the MIT networking group, and the Kerberos and CAT working
- groups of the IETF contributed but are not listed.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 122]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-A. ASN.1 module
-
-KerberosV5Spec2 {
- iso(1) identified-organization(3) dod(6) internet(1)
- security(5) kerberosV5(2) modules(4) krb5spec2(2)
-} DEFINITIONS EXPLICIT TAGS ::= BEGIN
-
--- OID arc for KerberosV5
---
--- This OID may be used to identify Kerberos protocol messages
--- encapsulated in other protocols.
---
--- This OID also designates the OID arc for KerberosV5-related OIDs.
---
--- NOTE: RFC 1510 had an incorrect value (5) for "dod" in its OID.
-id-krb5 OBJECT IDENTIFIER ::= {
- iso(1) identified-organization(3) dod(6) internet(1)
- security(5) kerberosV5(2)
-}
-
-Int32 ::= INTEGER (-2147483648..2147483647)
- -- signed values representable in 32 bits
-
-UInt32 ::= INTEGER (0..4294967295)
- -- unsigned 32 bit values
-
-Microseconds ::= INTEGER (0..999999)
- -- microseconds
-
-KerberosString ::= GeneralString (IA5String)
-
-Realm ::= KerberosString
-
-PrincipalName ::= SEQUENCE {
- name-type [0] Int32,
- name-string [1] SEQUENCE OF KerberosString
-}
-
-KerberosTime ::= GeneralizedTime -- with no fractional seconds
-
-HostAddress ::= SEQUENCE {
- addr-type [0] Int32,
- address [1] OCTET STRING
-}
-
--- NOTE: HostAddresses is always used as an OPTIONAL field and
--- should not be empty.
-HostAddresses -- NOTE: subtly different from rfc1510,
-
-
-
-Neuman, et al. Standards Track [Page 123]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- -- but has a value mapping and encodes the same
- ::= SEQUENCE OF HostAddress
-
--- NOTE: AuthorizationData is always used as an OPTIONAL field and
--- should not be empty.
-AuthorizationData ::= SEQUENCE OF SEQUENCE {
- ad-type [0] Int32,
- ad-data [1] OCTET STRING
-}
-
-PA-DATA ::= SEQUENCE {
- -- NOTE: first tag is [1], not [0]
- padata-type [1] Int32,
- padata-value [2] OCTET STRING -- might be encoded AP-REQ
-}
-
-KerberosFlags ::= BIT STRING (SIZE (32..MAX))
- -- minimum number of bits shall be sent,
- -- but no fewer than 32
-
-EncryptedData ::= SEQUENCE {
- etype [0] Int32 -- EncryptionType --,
- kvno [1] UInt32 OPTIONAL,
- cipher [2] OCTET STRING -- ciphertext
-}
-
-EncryptionKey ::= SEQUENCE {
- keytype [0] Int32 -- actually encryption type --,
- keyvalue [1] OCTET STRING
-}
-
-Checksum ::= SEQUENCE {
- cksumtype [0] Int32,
- checksum [1] OCTET STRING
-}
-
-Ticket ::= [APPLICATION 1] SEQUENCE {
- tkt-vno [0] INTEGER (5),
- realm [1] Realm,
- sname [2] PrincipalName,
- enc-part [3] EncryptedData -- EncTicketPart
-}
-
--- Encrypted part of ticket
-EncTicketPart ::= [APPLICATION 3] SEQUENCE {
- flags [0] TicketFlags,
- key [1] EncryptionKey,
- crealm [2] Realm,
-
-
-
-Neuman, et al. Standards Track [Page 124]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- cname [3] PrincipalName,
- transited [4] TransitedEncoding,
- authtime [5] KerberosTime,
- starttime [6] KerberosTime OPTIONAL,
- endtime [7] KerberosTime,
- renew-till [8] KerberosTime OPTIONAL,
- caddr [9] HostAddresses OPTIONAL,
- authorization-data [10] AuthorizationData OPTIONAL
-}
-
--- encoded Transited field
-TransitedEncoding ::= SEQUENCE {
- tr-type [0] Int32 -- must be registered --,
- contents [1] OCTET STRING
-}
-
-TicketFlags ::= KerberosFlags
- -- reserved(0),
- -- forwardable(1),
- -- forwarded(2),
- -- proxiable(3),
- -- proxy(4),
- -- may-postdate(5),
- -- postdated(6),
- -- invalid(7),
- -- renewable(8),
- -- initial(9),
- -- pre-authent(10),
- -- hw-authent(11),
--- the following are new since 1510
- -- transited-policy-checked(12),
- -- ok-as-delegate(13)
-
-AS-REQ ::= [APPLICATION 10] KDC-REQ
-
-TGS-REQ ::= [APPLICATION 12] KDC-REQ
-
-KDC-REQ ::= SEQUENCE {
- -- NOTE: first tag is [1], not [0]
- pvno [1] INTEGER (5) ,
- msg-type [2] INTEGER (10 -- AS -- | 12 -- TGS --),
- padata [3] SEQUENCE OF PA-DATA OPTIONAL
- -- NOTE: not empty --,
- req-body [4] KDC-REQ-BODY
-}
-
-KDC-REQ-BODY ::= SEQUENCE {
- kdc-options [0] KDCOptions,
-
-
-
-Neuman, et al. Standards Track [Page 125]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- cname [1] PrincipalName OPTIONAL
- -- Used only in AS-REQ --,
- realm [2] Realm
- -- Server's realm
- -- Also client's in AS-REQ --,
- sname [3] PrincipalName OPTIONAL,
- from [4] KerberosTime OPTIONAL,
- till [5] KerberosTime,
- rtime [6] KerberosTime OPTIONAL,
- nonce [7] UInt32,
- etype [8] SEQUENCE OF Int32 -- EncryptionType
- -- in preference order --,
- addresses [9] HostAddresses OPTIONAL,
- enc-authorization-data [10] EncryptedData OPTIONAL
- -- AuthorizationData --,
- additional-tickets [11] SEQUENCE OF Ticket OPTIONAL
- -- NOTE: not empty
-}
-
-KDCOptions ::= KerberosFlags
- -- reserved(0),
- -- forwardable(1),
- -- forwarded(2),
- -- proxiable(3),
- -- proxy(4),
- -- allow-postdate(5),
- -- postdated(6),
- -- unused7(7),
- -- renewable(8),
- -- unused9(9),
- -- unused10(10),
- -- opt-hardware-auth(11),
- -- unused12(12),
- -- unused13(13),
--- 15 is reserved for canonicalize
- -- unused15(15),
--- 26 was unused in 1510
- -- disable-transited-check(26),
---
- -- renewable-ok(27),
- -- enc-tkt-in-skey(28),
- -- renew(30),
- -- validate(31)
-
-AS-REP ::= [APPLICATION 11] KDC-REP
-
-TGS-REP ::= [APPLICATION 13] KDC-REP
-
-
-
-
-Neuman, et al. Standards Track [Page 126]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-KDC-REP ::= SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (11 -- AS -- | 13 -- TGS --),
- padata [2] SEQUENCE OF PA-DATA OPTIONAL
- -- NOTE: not empty --,
- crealm [3] Realm,
- cname [4] PrincipalName,
- ticket [5] Ticket,
- enc-part [6] EncryptedData
- -- EncASRepPart or EncTGSRepPart,
- -- as appropriate
-}
-
-EncASRepPart ::= [APPLICATION 25] EncKDCRepPart
-
-EncTGSRepPart ::= [APPLICATION 26] EncKDCRepPart
-
-EncKDCRepPart ::= SEQUENCE {
- key [0] EncryptionKey,
- last-req [1] LastReq,
- nonce [2] UInt32,
- key-expiration [3] KerberosTime OPTIONAL,
- flags [4] TicketFlags,
- authtime [5] KerberosTime,
- starttime [6] KerberosTime OPTIONAL,
- endtime [7] KerberosTime,
- renew-till [8] KerberosTime OPTIONAL,
- srealm [9] Realm,
- sname [10] PrincipalName,
- caddr [11] HostAddresses OPTIONAL
-}
-
-LastReq ::= SEQUENCE OF SEQUENCE {
- lr-type [0] Int32,
- lr-value [1] KerberosTime
-}
-
-AP-REQ ::= [APPLICATION 14] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (14),
- ap-options [2] APOptions,
- ticket [3] Ticket,
- authenticator [4] EncryptedData -- Authenticator
-}
-
-APOptions ::= KerberosFlags
- -- reserved(0),
- -- use-session-key(1),
-
-
-
-Neuman, et al. Standards Track [Page 127]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- -- mutual-required(2)
-
--- Unencrypted authenticator
-Authenticator ::= [APPLICATION 2] SEQUENCE {
- authenticator-vno [0] INTEGER (5),
- crealm [1] Realm,
- cname [2] PrincipalName,
- cksum [3] Checksum OPTIONAL,
- cusec [4] Microseconds,
- ctime [5] KerberosTime,
- subkey [6] EncryptionKey OPTIONAL,
- seq-number [7] UInt32 OPTIONAL,
- authorization-data [8] AuthorizationData OPTIONAL
-}
-
-AP-REP ::= [APPLICATION 15] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (15),
- enc-part [2] EncryptedData -- EncAPRepPart
-}
-
-EncAPRepPart ::= [APPLICATION 27] SEQUENCE {
- ctime [0] KerberosTime,
- cusec [1] Microseconds,
- subkey [2] EncryptionKey OPTIONAL,
- seq-number [3] UInt32 OPTIONAL
-}
-
-KRB-SAFE ::= [APPLICATION 20] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (20),
- safe-body [2] KRB-SAFE-BODY,
- cksum [3] Checksum
-}
-
-KRB-SAFE-BODY ::= SEQUENCE {
- user-data [0] OCTET STRING,
- timestamp [1] KerberosTime OPTIONAL,
- usec [2] Microseconds OPTIONAL,
- seq-number [3] UInt32 OPTIONAL,
- s-address [4] HostAddress,
- r-address [5] HostAddress OPTIONAL
-}
-
-KRB-PRIV ::= [APPLICATION 21] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (21),
- -- NOTE: there is no [2] tag
-
-
-
-Neuman, et al. Standards Track [Page 128]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- enc-part [3] EncryptedData -- EncKrbPrivPart
-}
-
-EncKrbPrivPart ::= [APPLICATION 28] SEQUENCE {
- user-data [0] OCTET STRING,
- timestamp [1] KerberosTime OPTIONAL,
- usec [2] Microseconds OPTIONAL,
- seq-number [3] UInt32 OPTIONAL,
- s-address [4] HostAddress -- sender's addr --,
- r-address [5] HostAddress OPTIONAL -- recip's addr
-}
-
-KRB-CRED ::= [APPLICATION 22] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (22),
- tickets [2] SEQUENCE OF Ticket,
- enc-part [3] EncryptedData -- EncKrbCredPart
-}
-
-EncKrbCredPart ::= [APPLICATION 29] SEQUENCE {
- ticket-info [0] SEQUENCE OF KrbCredInfo,
- nonce [1] UInt32 OPTIONAL,
- timestamp [2] KerberosTime OPTIONAL,
- usec [3] Microseconds OPTIONAL,
- s-address [4] HostAddress OPTIONAL,
- r-address [5] HostAddress OPTIONAL
-}
-
-KrbCredInfo ::= SEQUENCE {
- key [0] EncryptionKey,
- prealm [1] Realm OPTIONAL,
- pname [2] PrincipalName OPTIONAL,
- flags [3] TicketFlags OPTIONAL,
- authtime [4] KerberosTime OPTIONAL,
- starttime [5] KerberosTime OPTIONAL,
- endtime [6] KerberosTime OPTIONAL,
- renew-till [7] KerberosTime OPTIONAL,
- srealm [8] Realm OPTIONAL,
- sname [9] PrincipalName OPTIONAL,
- caddr [10] HostAddresses OPTIONAL
-}
-
-KRB-ERROR ::= [APPLICATION 30] SEQUENCE {
- pvno [0] INTEGER (5),
- msg-type [1] INTEGER (30),
- ctime [2] KerberosTime OPTIONAL,
- cusec [3] Microseconds OPTIONAL,
- stime [4] KerberosTime,
-
-
-
-Neuman, et al. Standards Track [Page 129]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- susec [5] Microseconds,
- error-code [6] Int32,
- crealm [7] Realm OPTIONAL,
- cname [8] PrincipalName OPTIONAL,
- realm [9] Realm -- service realm --,
- sname [10] PrincipalName -- service name --,
- e-text [11] KerberosString OPTIONAL,
- e-data [12] OCTET STRING OPTIONAL
-}
-
-METHOD-DATA ::= SEQUENCE OF PA-DATA
-
-TYPED-DATA ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
- data-type [0] Int32,
- data-value [1] OCTET STRING OPTIONAL
-}
-
--- preauth stuff follows
-
-PA-ENC-TIMESTAMP ::= EncryptedData -- PA-ENC-TS-ENC
-
-PA-ENC-TS-ENC ::= SEQUENCE {
- patimestamp [0] KerberosTime -- client's time --,
- pausec [1] Microseconds OPTIONAL
-}
-
-ETYPE-INFO-ENTRY ::= SEQUENCE {
- etype [0] Int32,
- salt [1] OCTET STRING OPTIONAL
-}
-
-ETYPE-INFO ::= SEQUENCE OF ETYPE-INFO-ENTRY
-
-ETYPE-INFO2-ENTRY ::= SEQUENCE {
- etype [0] Int32,
- salt [1] KerberosString OPTIONAL,
- s2kparams [2] OCTET STRING OPTIONAL
-}
-
-ETYPE-INFO2 ::= SEQUENCE SIZE (1..MAX) OF ETYPE-INFO2-ENTRY
-
-AD-IF-RELEVANT ::= AuthorizationData
-
-AD-KDCIssued ::= SEQUENCE {
- ad-checksum [0] Checksum,
- i-realm [1] Realm OPTIONAL,
- i-sname [2] PrincipalName OPTIONAL,
- elements [3] AuthorizationData
-
-
-
-Neuman, et al. Standards Track [Page 130]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-}
-
-AD-AND-OR ::= SEQUENCE {
- condition-count [0] Int32,
- elements [1] AuthorizationData
-}
-
-AD-MANDATORY-FOR-KDC ::= AuthorizationData
-
-END
-
-B. Changes since RFC 1510
-
- This document replaces RFC 1510 and clarifies specification of items
- that were not completely specified. Where changes to recommended
- implementation choices were made, or where new options were added,
- those changes are described within the document and listed in this
- section. More significantly, "Specification 2" in Section 8 changes
- the required encryption and checksum methods to bring them in line
- with the best current practices and to deprecate methods that are no
- longer considered sufficiently strong.
-
- Discussion was added to Section 1 regarding the ability to rely on
- the KDC to check the transited field, and on the inclusion of a flag
- in a ticket indicating that this check has occurred. This is a new
- capability not present in RFC 1510. Pre-existing implementations may
- ignore or not set this flag without negative security implications.
-
- The definition of the secret key says that in the case of a user the
- key may be derived from a password. In RFC 1510, it said that the
- key was derived from the password. This change was made to
- accommodate situations where the user key might be stored on a
- smart-card, or otherwise obtained independently of a password.
-
- The introduction mentions the use of public key cryptography for
- initial authentication in Kerberos by reference. RFC 1510 did not
- include such a reference.
-
- Section 1.3 was added to explain that while Kerberos provides
- authentication of a named principal, it is still the responsibility
- of the application to ensure that the authenticated name is the
- entity with which the application wishes to communicate.
-
- Discussion of extensibility has been added to the introduction.
-
- Discussion of how extensibility affects ticket flags and KDC options
- was added to the introduction of Section 2. No changes were made to
- existing options and flags specified in RFC 1510, though some of the
-
-
-
-Neuman, et al. Standards Track [Page 131]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- sections in the specification were renumbered, and text was revised
- to make the description and intent of existing options clearer,
- especially with respect to the ENC-TKT-IN-SKEY option (now section
- 2.9.2) which is used for user-to-user authentication. The new option
- and ticket flag transited policy checking (Section 2.7) was added.
-
- A warning regarding generation of session keys for application use
- was added to Section 3, urging the inclusion of key entropy from the
- KDC generated session key in the ticket. An example regarding use of
- the sub-session key was added to Section 3.2.6. Descriptions of the
- pa-etype-info, pa-etype-info2, and pa-pw-salt pre-authentication data
- items were added. The recommendation for use of pre-authentication
- was changed from "MAY" to "SHOULD" and a note was added regarding
- known plaintext attacks.
-
- In RFC 1510, Section 4 described the database in the KDC. This
- discussion was not necessary for interoperability and unnecessarily
- constrained implementation. The old Section 4 was removed.
-
- The current Section 4 was formerly Section 6 on encryption and
- checksum specifications. The major part of this section was brought
- up to date to support new encryption methods, and moved to a separate
- document. Those few remaining aspects of the encryption and checksum
- specification specific to Kerberos are now specified in Section 4.
-
- Significant changes were made to the layout of Section 5 to clarify
- the correct behavior for optional fields. Many of these changes were
- made necessary because of improper ASN.1 description in the original
- Kerberos specification which left the correct behavior
- underspecified. Additionally, the wording in this section was
- tightened wherever possible to ensure that implementations conforming
- to this specification will be extensible with the addition of new
- fields in future specifications.
-
- Text was added describing time_t=0 issues in the ASN.1. Text was
- also added, clarifying issues with implementations treating omitted
- optional integers as zero. Text was added clarifying behavior for
- optional SEQUENCE or SEQUENCE OF that may be empty. Discussion was
- added regarding sequence numbers and behavior of some
- implementations, including "zero" behavior and negative numbers. A
- compatibility note was added regarding the unconditional sending of
- EncTGSRepPart regardless of the enclosing reply type. Minor changes
- were made to the description of the HostAddresses type. Integer
- types were constrained. KerberosString was defined as a
- (significantly) constrained GeneralString. KerberosFlags was defined
- to reflect existing implementation behavior that departs from the
-
-
-
-
-
-Neuman, et al. Standards Track [Page 132]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- definition in RFC 1510. The transited-policy-checked(12) and the
- ok-as-delegate(13) ticket flags were added. The disable-transited-
- check(26) KDC option was added.
-
- Descriptions of commonly implemented PA-DATA were added to Section 5.
- The description of KRB-SAFE has been updated to note the existing
- implementation behavior of double-encoding.
-
- There were two definitions of METHOD-DATA in RFC 1510. The second
- one, intended for use with KRB_AP_ERR_METHOD was removed leaving the
- SEQUENCE OF PA-DATA definition.
-
- Section 7, naming constraints, from RFC 1510 was moved to Section 6.
-
- Words were added describing the convention that domain-based realm
- names for newly-created realms should be specified as uppercase.
- This recommendation does not make lowercase realm names illegal.
- Words were added highlighting that the slash-separated components in
- the X.500 style of realm names is consistent with existing RFC 1510
- based implementations, but that it conflicts with the general
- recommendation of X.500 name representation specified in RFC 2253.
-
- Section 8, network transport, constants and defined values, from RFC
- 1510 was moved to Section 7. Since RFC 1510, the definition of the
- TCP transport for Kerberos messages was added, and the encryption and
- checksum number assignments have been moved into a separate document.
-
- "Specification 2" in Section 8 of the current document changes the
- required encryption and checksum methods to bring them in line with
- the best current practices and to deprecate methods that are no
- longer considered sufficiently strong.
-
- Two new sections, on IANA considerations and security considerations
- were added.
-
- The pseudo-code has been removed from the appendix. The pseudo-code
- was sometimes misinterpreted to limit implementation choices and in
- RFC 1510, it was not always consistent with the words in the
- specification. Effort was made to clear up any ambiguities in the
- specification, rather than to rely on the pseudo-code.
-
- An appendix was added containing the complete ASN.1 module drawn from
- the discussion in Section 5 of the current document.
-
-END NOTES
-
- (*TM) Project Athena, Athena, and Kerberos are trademarks of the
- Massachusetts Institute of Technology (MIT).
-
-
-
-Neuman, et al. Standards Track [Page 133]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-Normative References
-
- [RFC3961] Raeburn, K., "Encryption and Checksum
- Specifications for Kerberos 5", RFC 3961, February
- 2005.
-
- [RFC3962] Raeburn, K., "Advanced Encryption Standard (AES)
- Encryption for Kerberos 5", RFC 3962, February
- 2005.
-
- [ISO-646/ECMA-6] International Organization for Standardization,
- "7-bit Coded Character Set for Information
- Interchange", ISO/IEC 646:1991.
-
- [ISO-2022/ECMA-35] International Organization for Standardization,
- "Character code structure and extension
- techniques", ISO/IEC 2022:1994.
-
- [RFC1035] Mockapetris, P., "Domain names - implementation
- and specification", STD 13, RFC 1035, November
- 1987.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to
- Indicate Requirement Levels", BCP 14, RFC 2119,
- March 1997.
-
- [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for
- Writing an IANA Considerations Section in RFCs",
- BCP 26, RFC 2434, October 1998.
-
- [RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS
- RR for specifying the location of services (DNS
- SRV)", RFC 2782, February 2000.
-
- [RFC2253] Wahl, M., Kille, S., and T. Howes, "Lightweight
- Directory Access Protocol (v3): UTF-8 String
- Representation of Distinguished Names", RFC 2253,
- December 1997.
-
- [RFC3513] Hinden, R. and S. Deering, "Internet Protocol
- Version 6 (IPv6) Addressing Architecture", RFC
- 3513, April 2003.
-
- [X680] Abstract Syntax Notation One (ASN.1):
- Specification of Basic Notation, ITU-T
- Recommendation X.680 (1997) | ISO/IEC
- International Standard 8824-1:1998.
-
-
-
-
-Neuman, et al. Standards Track [Page 134]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- [X690] ASN.1 encoding rules: Specification of Basic
- Encoding Rules (BER), Canonical Encoding Rules
- (CER) and Distinguished Encoding Rules (DER),
- ITU-T Recommendation X.690 (1997)| ISO/IEC
- International Standard 8825-1:1998.
-
-Informative References
-
- [ISO-8859] International Organization for Standardization,
- "8-bit Single-byte Coded Graphic Character Sets --
- Latin Alphabet", ISO/IEC 8859.
-
- [RFC1964] Linn, J., "The Kerberos Version 5 GSS-API
- Mechanism", RFC 1964, June 1996.
-
- [DGT96] Don Davis, Daniel Geer, and Theodore Ts'o,
- "Kerberos With Clocks Adrift: History, Protocols,
- and Implementation", USENIX Computing Systems 9:1,
- January 1996.
-
- [DS81] Dorothy E. Denning and Giovanni Maria Sacco,
- "Time-stamps in Key Distribution Protocols,"
- Communications of the ACM, Vol. 24 (8), p. 533-
- 536, August 1981.
-
- [KNT94] John T. Kohl, B. Clifford Neuman, and Theodore Y.
- Ts'o, "The Evolution of the Kerberos
- Authentication System". In Distributed Open
- Systems, pages 78-94. IEEE Computer Society Press,
- 1994.
-
- [MNSS87] S. P. Miller, B. C. Neuman, J. I. Schiller, and J.
- H. Saltzer, Section E.2.1: Kerberos Authentication
- and Authorization System, M.I.T. Project Athena,
- Cambridge, Massachusetts, December 21, 1987.
-
- [NS78] Roger M. Needham and Michael D. Schroeder, "Using
- Encryption for Authentication in Large Networks of
- Computers," Communications of the ACM, Vol. 21
- (12), pp. 993-999, December 1978.
-
- [Neu93] B. Clifford Neuman, "Proxy-Based Authorization and
- Accounting for Distributed Systems," in
- Proceedings of the 13th International Conference
- on Distributed Computing Systems, Pittsburgh, PA,
- May 1993.
-
-
-
-
-
-Neuman, et al. Standards Track [Page 135]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
- [NT94] B. Clifford Neuman and Theodore Y. Ts'o, "An
- Authentication Service for Computer Networks,"
- IEEE Communications Magazine, Vol. 32 (9), p. 33-
- 38, September 1994.
-
- [Pat92] J. Pato, Using Pre-Authentication to Avoid
- Password Guessing Attacks, Open Software
- Foundation DCE Request for Comments 26 (December
- 1992.
-
- [RFC1510] Kohl, J. and C. Neuman, "The Kerberos Network
- Authentication Service (V5)", RFC 1510, September
- 1993.
-
- [RFC4086] Eastlake, D., 3rd, Schiller, J., and S. Crocker,
- "Randomness Requirements for Security", BCP 106,
- RFC 4086, June 2005.
-
- [SNS88] J. G. Steiner, B. C. Neuman, and J. I. Schiller,
- "Kerberos: An Authentication Service for Open
- Network Systems," p. 191-202, Usenix Conference
- Proceedings, Dallas, Texas, February 1988.
-
- [RFC4121] Zhu, L., Jaganathan, K., and S. Hartman, "The
- Kerberos Version 5 Generic Security Service
- Application Program Interface (GSS-API) Mechanism:
- Version 2", RFC 4121, July 2005.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 136]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-Authors' Addresses
-
- Clifford Neuman
- Information Sciences Institute
- University of Southern California
- 4676 Admiralty Way
- Marina del Rey, CA 90292, USA
-
- EMail: bcn@isi.edu
-
-
- Tom Yu
- Massachusetts Institute of Technology
- 77 Massachusetts Avenue
- Cambridge, MA 02139, USA
-
- EMail: tlyu@mit.edu
-
-
- Sam Hartman
- Massachusetts Institute of Technology
- 77 Massachusetts Avenue
- Cambridge, MA 02139, USA
-
- EMail: hartmans-ietf@mit.edu
-
-
- Kenneth Raeburn
- Massachusetts Institute of Technology
- 77 Massachusetts Avenue
- Cambridge, MA 02139, USA
-
- EMail: raeburn@mit.edu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 137]
-\f
-RFC 4120 Kerberos V5 July 2005
-
-
-Full Copyright Statement
-
- Copyright (C) The Internet Society (2005).
-
- This document is subject to the rights, licenses and restrictions
- contained in BCP 78, and except as set forth therein, the authors
- retain all their rights.
-
- This document and the information contained herein are provided on an
- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
- ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
- INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
- WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Intellectual Property
-
- The IETF takes no position regarding the validity or scope of any
- Intellectual Property Rights or other rights that might be claimed to
- pertain to the implementation or use of the technology described in
- this document or the extent to which any license under such rights
- might or might not be available; nor does it represent that it has
- made any independent effort to identify any such rights. Information
- on the procedures with respect to rights in RFC documents can be
- found in BCP 78 and BCP 79.
-
- Copies of IPR disclosures made to the IETF Secretariat and any
- assurances of licenses to be made available, or the result of an
- attempt made to obtain a general license or permission for the use of
- such proprietary rights by implementers or users of this
- specification can be obtained from the IETF on-line IPR repository at
- http://www.ietf.org/ipr.
-
- The IETF invites any interested party to bring to its attention any
- copyrights, patents or patent applications, or other proprietary
- rights that may cover technology that may be required to implement
- this standard. Please address the information to the IETF at ietf-
- ipr@ietf.org.
-
-Acknowledgement
-
- Funding for the RFC Editor function is currently provided by the
- Internet Society.
-
-
-
-
-
-
-
-Neuman, et al. Standards Track [Page 138]
-\f