+++ /dev/null
-For inclusion into RFC 1510
----------------------------
-The assigned encryption type designating the use of triple DES is 5.
-
-The assigned checksum type designating the use of encrypting and MD5
-checksum with triple DES keys is 9.
-
-Triple DES is implemented using three DES keys. An Electronic CodeBook
-encryption (3-DES ECB) is done by doing a DES ECB encryption of an eight
-octet data block with the first DES key, performing a DES ECB decryption
-of the resulting data block with the second key and performing a DES ECB
-encryption of the result with the third key.
-
-The encryption of a data stream in Cipher Block Chaining mode is
-accomplished by eXclusive-ORing each eight-octet data block with the
-cipher computed from the previous data block, and then performing a
-3-DES ECB encryption. The first data block is eXclusive-ORed with an
-initial vector, which is commonly zero prior to performing the 3-DES
-ECB.
-
-The string-to-key algorithm that is used for converting a user's
-password into a 3-DES key is a one-way function, evenly distributing the
-user's input in the resulting key. The user's input is appended with
-the salt information (typically the realm name), and 168-folded to
-produce three DES keys sans parity. The 168 bits are then expanded to
-include odd parity, for use within the DES routines. If any of the keys
-are weak or semi-weak, they are strengthened by eXclusive-ORing the
-questionable key with the constant 00000000000000F0. The three DES keys
-are then used to encrypt themselves in 3-DES CBC mode with a zero
-initial vector. This result is once again encrypted using the same keys
-and key schedule and an initial vector of the last eight octets. The
-result is then parity adjusted. If the final result yields weak or
-semi-weak keys, they are also strengthened in the same manner as the
-input keys.
-
-The n-fold operation used by the string-to-key algorithm
-replicates the input bit array X until its length is the least common
-multiple of n bits and the length of X. Before each replication, the
-input is circularly rotated to the right by 13 bit positions. The
-successive n-bit chunks of the resulting bit array are then added
-together with end-around carry to yield a n-bit result. The first bit
-position in the arrays is treated as the most significant bit.
-
-
-
-Glossary
---------
-n-fold
- To n-fold a bit array X into n bits, replicate the input value to a length
- that is the least common multiple of n bits and the length of X. Before
- each successive repetition, circularly rotate the input X to the right by
- 13 bit positions. The successive n-bit chunks are added together (where
- the first bit is the most significant bit) with end-around carry (that is,
- adding the carry result from the most significant bits to the least
- significant bits) to yield a n-bit result.
-
-Triple-DES ECB mode:
-
- Three DES keys are used in turn to perform a DES ECB encryption of an
- eight-octet data block with the first key, followed by a DES ECB
- decryption of the resulting data block with the second key, followed
- by a DES ECB encryption of the resulting data block with the last key.
-
-Triple-DES CBC mode:
- An input data stream is padded on the right by zeroes to an eight-octet
- boundary. The first eight octet block is eXclusive-ORed with an initial
- vector eight-octet block. This result is triple-DES ECB encrypted with
- three DES keys. Subsequent eight-octet data blocks are eXclusive-ORed
- with the cipher text produced from the 3-DES ECB encryption of the previous
- block and then the data block is 3-DES ECB encrypted with the same DES keys.
-
-Triple-DES String to key computation:
- The input string (appended with any salt data) is 168-folded into a 21 octet
- (168 bit) string. Each successive set of 7 octets is treated as a DES key
- sans parity. The DES keys are then adjusted to include parity by computing
- a parity bit for each successive seven bits to form eight octets.
- The resulting DES keys including parity are then used to encrypt themselves
- using Triple-DES CBC encryption with a zero initial vector. The result
- is then adjusted for parity to produce three valid DES keys. Each key is
- checked for weakness, and if it is determined to be weak or semi-weak, the
- first octet of each weak key is eXclusive-ORed with the value 0xF0.
--- /dev/null
+
+
+
+Internet Engineering Task Force K. Jaganathan
+Internet-Draft L. Zhu
+Intended status: Informational J. Brezak
+Expires: January 31, 2007 Microsoft Corporation
+ July 30, 2006
+
+
+ The RC4-HMAC Kerberos Encryption Types Used by Microsoft Windows
+ draft-jaganathan-rc4-hmac-03.txt
+
+Status of this Memo
+
+ By submitting this Internet-Draft, each author represents that any
+ applicable patent or other IPR claims of which he or she is aware
+ have been or will be disclosed, and any of which he or she becomes
+ aware will be disclosed, in accordance with Section 6 of BCP 79.
+
+ Internet-Drafts are working documents of the Internet Engineering
+ Task Force (IETF), its areas, and its working groups. Note that
+ other groups may also distribute working documents as Internet-
+ Drafts.
+
+ Internet-Drafts are draft documents valid for a maximum of six months
+ and may be updated, replaced, or obsoleted by other documents at any
+ time. It is inappropriate to use Internet-Drafts as reference
+ material or to cite them other than as "work in progress."
+
+ The list of current Internet-Drafts can be accessed at
+ http://www.ietf.org/ietf/1id-abstracts.txt.
+
+ The list of Internet-Draft Shadow Directories can be accessed at
+ http://www.ietf.org/shadow.html.
+
+ This Internet-Draft will expire on January 31, 2007.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2006).
+
+Abstract
+
+ The Microsoft Windows 2000 implementation of Kerberos introduces a
+ new encryption type based on the RC4 encryption algorithm and using
+ an MD5 HMAC for checksum. This is offered as an alternative to using
+ the existing DES based encryption types.
+
+ The RC4-HMAC encryption types are used to ease upgrade of existing
+ Windows NT environments, provide strong crypto (128-bit key lengths),
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 1]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ and provide exportable (meet United States government export
+ restriction requirements) encryption. This document describes the
+ implementation of those encryption types.
+
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 2. Key Generation . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 3. Basic Operations . . . . . . . . . . . . . . . . . . . . . . . 4
+ 4. Checksum Types . . . . . . . . . . . . . . . . . . . . . . . . 6
+ 5. Encryption Types . . . . . . . . . . . . . . . . . . . . . . . 6
+ 6. Key Strength Negotiation . . . . . . . . . . . . . . . . . . . 8
+ 7. GSSAPI Kerberos V5 Mechanism Type . . . . . . . . . . . . . . 8
+ 7.1. Mechanism Specific Changes . . . . . . . . . . . . . . . . 8
+ 7.2. GSSAPI MIC Semantics . . . . . . . . . . . . . . . . . . . 10
+ 7.3. GSSAPI WRAP Semantics . . . . . . . . . . . . . . . . . . 12
+ 8. Security Considerations . . . . . . . . . . . . . . . . . . . 15
+ 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 15
+ 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16
+ 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 16
+ 11.1. Normative References . . . . . . . . . . . . . . . . . . . 16
+ 11.2. Informative References . . . . . . . . . . . . . . . . . . 16
+ Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 16
+ Intellectual Property and Copyright Statements . . . . . . . . . . 18
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 2]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+1. Introduction
+
+ The Microsoft Windows 2000 implementation of Kerberos contains new
+ encryption and checksum types for two reasons: for export reasons
+ early in the development process, 56 bit DES encryption could not be
+ exported, and because upon upgrade from Windows NT 4.0 to Windows
+ 2000, accounts will not have the appropriate DES keying material to
+ do the standard DES encryption. Furthermore, 3DES is not available
+ for export, and there was a desire to use a single flavor of
+ encryption in the product for both US and international products.
+
+ As a result, there are two new encryption types and one new checksum
+ type introduced in Microsoft Windows 2000.
+
+ Note that these cryptosystems aren't intended to be complete,
+ general-purpose Kerberos encryption or checksum systems as defined in
+ [RFC3961]: there is no one-one mapping between the operations in this
+ documents and the primitives described in [RFC3961].
+
+
+2. Key Generation
+
+ On upgrade from existing Windows NT domains, the user accounts would
+ not have a DES based key available to enable the use of DES base
+ encryption types specified in [RFC4120] [RFC3961]. The key used for
+ RC4-HMAC is the same as the existing Windows NT key (NT Password
+ Hash) for compatibility reasons. Once the account password is
+ changed, the DES based keys are created and maintained. Once the DES
+ keys are available DES based encryption types can be used with
+ Kerberos.
+
+ The RC4-HMAC String to key function is defined as follow:
+
+ String2Key(password)
+
+ K = MD4(UNICODE(password))
+
+ The RC4-HMAC keys are generated by using the Windows UNICODE version
+ of the password. Each Windows UNICODE character is encoded in
+ little-endian format of 2 octets each. Then performing an MD4
+ [RFC1320] hash operation on just the UNICODE characters of the
+ password (not including the terminating zero octets).
+
+ For an account with a password of "foo", this String2Key("foo") will
+ return:
+
+ 0xac, 0x8e, 0x65, 0x7f, 0x83, 0xdf, 0x82, 0xbe,
+ 0xea, 0x5d, 0x43, 0xbd, 0xaf, 0x78, 0x00, 0xcc
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 3]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+3. Basic Operations
+
+ The MD5 HMAC function is defined in [RFC2104]. It is used in this
+ encryption type for checksum operations. Refer to [RFC2104] for
+ details on its operation. In this document this function is referred
+ to as HMAC(Key, Data) returning the checksum using the specified key
+ on the data.
+
+ The basic MD5 hash operation is used in this encryption type and
+ defined in [RFC1321]. In this document this function is referred to
+ as MD5(Data) returning the checksum of the data.
+
+ RC4 is a stream cipher licensed by RSA Data Security . In this
+ document the function is referred to as RC4(Key, Data) returning the
+ encrypted data using the specified key on the data.
+
+ These encryption types use key derivation. With each message, the
+ message type (T) is used as a component of the keying material. This
+ table summarizes the different key derivation values used in the
+ various operations. Note that these differ from the key derivations
+ used in other Kerberos encryption types. T = the message type,
+ encoded as a little-endian four byte integer.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 4]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ 1. AS-REQ PA-ENC-TIMESTAMP padata timestamp, encrypted with
+ the client key (T=1)
+ 2. AS-REP Ticket and TGS-REP Ticket (includes TGS session key
+ or application session key), encrypted with the service key
+ (T=2)
+ 3. AS-REP encrypted part (includes TGS session key or
+ application session key), encrypted with the client key (T=8)
+ 4. TGS-REQ KDC-REQ-BODY AuthorizationData, encrypted with the
+ TGS session key (T=4)
+ 5. TGS-REQ KDC-REQ-BODY AuthorizationData, encrypted with the
+ TGS authenticator subkey (T=5)
+ 6. TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator cksum,
+ keyed with the TGS session key (T=6)
+ 7. TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator (includes
+ TGS authenticator subkey), encrypted with the TGS session key
+ T=7)
+ 8. TGS-REP encrypted part (includes application session key),
+ encrypted with the TGS session key (T=8)
+ 9. TGS-REP encrypted part (includes application session key),
+ encrypted with the TGS authenticator subkey (T=8)
+ 10. AP-REQ Authenticator cksum, keyed with the application
+ session key (T=10)
+ 11. AP-REQ Authenticator (includes application authenticator
+ subkey), encrypted with the application session key (T=11)
+ 12. AP-REP encrypted part (includes application session
+ subkey), encrypted with the application session key (T=12)
+ 13. KRB-PRIV encrypted part, encrypted with a key chosen by
+ the application. Also for data encrypted with GSS Wrap (T=13)
+ 14. KRB-CRED encrypted part, encrypted with a key chosen by
+ the application (T=14)
+ 15. KRB-SAFE cksum, keyed with a key chosen by the
+ application. Also for data signed in GSS MIC (T=15)
+
+ Relative to RFC-1964 key uses:
+
+ T = 0 in the generation of sequence number for the MIC token
+ T = 0 in the generation of sequence number for the WRAP token
+ T = 0 in the generation of encrypted data for the WRAPPED token
+
+ All strings in this document are ASCII unless otherwise specified.
+ The lengths of ASCII encoded character strings include the trailing
+ terminator character (0). The concat(a,b,c,...) function will return
+ the logical concatenation (left to right) of the values of the
+ arguments. The nonce(n) function returns a pseudo-random number of
+ "n" octets.
+
+
+
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 5]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+4. Checksum Types
+
+ There is one checksum type used in this encryption type. The
+ Kerberos constant for this type is:
+
+ #define KERB_CHECKSUM_HMAC_MD5 (-138)
+
+ The function is defined as follows:
+
+ K - is the Key
+ T - the message type, encoded as a little-endian four byte integer
+
+ CHKSUM(K, T, data)
+
+ Ksign = HMAC(K, "signaturekey") //includes zero octet at end
+ tmp = MD5(concat(T, data))
+ CHKSUM = HMAC(Ksign, tmp)
+
+
+5. Encryption Types
+
+ There are two encryption types used in these encryption types. The
+ Kerberos constants for these types are:
+
+ #define KERB_ETYPE_RC4_HMAC 23
+ #define KERB_ETYPE_RC4_HMAC_EXP 24
+
+ The basic encryption function is defined as follow:
+
+ T = the message type, encoded as a little-endian four byte integer.
+
+ OCTET L40[14] = "fortybits";
+
+ The header field on the encrypted data in KDC messages is:
+
+ typedef struct _RC4_MDx_HEADER {
+ OCTET Checksum[16];
+ OCTET Confounder[8];
+ } RC4_MDx_HEADER, *PRC4_MDx_HEADER;
+
+
+ ENCRYPT (K, export, T, data)
+ {
+ struct EDATA {
+ struct HEADER {
+ OCTET Checksum[16];
+ OCTET Confounder[8];
+ } Header;
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 6]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ OCTET Data[0];
+ } edata;
+
+ if (export){
+ *((DWORD *)(L40+10)) = T;
+ HMAC (K, L40, 10 + 4, K1);
+ }
+ else
+ {
+ HMAC (K, &T, 4, K1);
+ }
+ memcpy (K2, K1, 16);
+ if (export) memset (K1+7, 0xAB, 9);
+
+ nonce (edata.Confounder, 8);
+ memcpy (edata.Data, data);
+
+ edata.Checksum = HMAC (K2, edata);
+ K3 = HMAC (K1, edata.Checksum);
+
+ RC4 (K3, edata.Confounder);
+ RC4 (K3, data.Data);
+ }
+
+ DECRYPT (K, export, T, edata)
+ {
+ // edata looks like
+ struct EDATA {
+ struct HEADER {
+ OCTET Checksum[16];
+ OCTET Confounder[8];
+ } Header;
+ OCTET Data[0];
+ } edata;
+
+ if (export){
+ *((DWORD *)(L40+10)) = T;
+ HMAC (K, L40, 14, K1);
+ }
+ else
+ {
+ HMAC (K, &T, 4, K1);
+ }
+ memcpy (K2, K1, 16);
+ if (export) memset (K1+7, 0xAB, 9);
+
+ K3 = HMAC (K1, edata.Checksum);
+
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 7]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ RC4 (K3, edata.Confounder);
+ RC4 (K3, edata.Data);
+
+
+ // verify generated and received checksums
+ checksum = HMAC (K2, concat(edata.Confounder, edata.Data));
+ if (checksum != edata.Checksum)
+ printf("CHECKSUM ERROR !!!!!!\n");
+ }
+
+ The KDC message is encrypted using the ENCRYPT function not including
+ the Checksum in the RC4_MDx_HEADER.
+
+ The character constant "fortybits" evolved from the time when a 40-
+ bit key length was all that was exportable from the United States.
+ It is now used to recognize that the key length is of "exportable"
+ length. In this description, the key size is actually 56-bits.
+
+ The pseudo-random operation [RFC3961] for both enctypes above is
+ defined as follows:
+
+ pseudo-random(K, S) = HMAC-SHA1(K, S)
+
+ where K is the protocol key and S is the input octet string. HMAC-
+ SHA1 is defined in [RFC2104] and the output of HMAC-SHA1 is the 20-
+ octet digest.
+
+
+6. Key Strength Negotiation
+
+ A Kerberos client and server can negotiate over key length if they
+ are using mutual authentication. If the client is unable to perform
+ full strength encryption, it may propose a key in the "subkey" field
+ of the authenticator, using a weaker encryption type. The server
+ must then either return the same key or suggest its own key in the
+ subkey field of the AP reply message. The key used to encrypt data
+ is derived from the key returned by the server. If the client is
+ able to perform strong encryption but the server is not, it may
+ propose a subkey in the AP reply without first being sent a subkey in
+ the authenticator.
+
+
+7. GSSAPI Kerberos V5 Mechanism Type
+
+7.1. Mechanism Specific Changes
+
+ The GSSAPI per-message tokens also require new checksum and
+ encryption types. The GSS-API per-message tokens are adapted to
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 8]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ support these new encryption types. See [RFC1964] Section 1.2.2.
+
+ The only support quality of protection is:
+
+ #define GSS_KRB5_INTEG_C_QOP_DEFAULT 0x0
+
+ When using this RC4 based encryption type, the sequence number is
+ always sent in big-endian rather than little-endian order.
+
+ The Windows 2000 implementation also defines new GSSAPI flags in the
+ initial token passed when initializing a security context. These
+ flags are passed in the checksum field of the authenticator. See
+ [RFC1964] Section 1.1.1.
+
+ GSS_C_DCE_STYLE - This flag was added for use with Microsoft's
+ implementation of DCE RPC, which initially expected three legs of
+ authentication. Setting this flag causes an extra AP reply to be
+ sent from the client back to the server after receiving the server's
+ AP reply. In addition, the context negotiation tokens do not have
+ GSSAPI per message tokens - they are raw AP messages that do not
+ include object identifiers.
+
+ #define GSS_C_DCE_STYLE 0x1000
+
+ GSS_C_IDENTIFY_FLAG - This flag allows the client to indicate to the
+ server that it should only allow the server application to identify
+ the client by name and ID, but not to impersonate the client.
+
+ #define GSS_C_IDENTIFY_FLAG 0x2000
+
+ GSS_C_EXTENDED_ERROR_FLAG - Setting this flag indicates that the
+ client wants to be informed of extended error information. In
+ particular, Windows 2000 status codes may be returned in the data
+ field of a Kerberos error message. This allows the client to
+ understand a server failure more precisely. In addition, the server
+ may return errors to the client that are normally handled at the
+ application layer in the server, in order to let the client try to
+ recover. After receiving an error message, the client may attempt to
+ resubmit an AP request.
+
+ #define GSS_C_EXTENDED_ERROR_FLAG 0x4000
+
+ These flags are only used if a client is aware of these conventions
+ when using the SSPI on the Windows platform; they are not generally
+ used by default.
+
+ When NetBIOS addresses are used in the GSSAPI, they are identified by
+ the GSS_C_AF_NETBIOS value. This value is defined as:
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 9]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ #define GSS_C_AF_NETBIOS 0x14
+
+ NetBios addresses are 16-octet addresses typically composed of 1 to
+ 15 characters, trailing blank (ASCII char 20) filled, with a 16-th
+ octet of 0x0.
+
+7.2. GSSAPI MIC Semantics
+
+ The GSSAPI checksum type and algorithm is defined in Section 5. Only
+ the first 8 octets of the checksum are used. The resulting checksum
+ is stored in the SGN_CKSUM field . See [RFC1964] Section 1.2 for
+ GSS_GetMIC() and GSS_Wrap(conf_flag=FALSE).
+
+ The GSS_GetMIC token has the following format:
+
+ Byte no Name Description
+ 0..1 TOK_ID Identification field.
+ Tokens emitted by GSS_GetMIC() contain
+ the hex value 01 01 in this field.
+ 2..3 SGN_ALG Integrity algorithm indicator.
+ 11 00 - HMAC
+ 4..7 Filler Contains ff ff ff ff
+ 8..15 SND_SEQ Sequence number field.
+ 16..23 SGN_CKSUM Checksum of "to-be-signed data",
+ calculated according to algorithm
+ specified in SGN_ALG field.
+
+ The MIC mechanism used for GSS MIC based messages is as follow:
+
+ GetMIC(Kss, direction, export, seq_num, data)
+ {
+ struct Token {
+ struct Header {
+ OCTET TOK_ID[2];
+ OCTET SGN_ALG[2];
+ OCTET Filler[4];
+ };
+ OCTET SND_SEQ[8];
+ OCTET SGN_CKSUM[8];
+ } Token;
+
+
+ Token.TOK_ID = 01 01;
+ Token.SGN_SLG = 11 00;
+ Token.Filler = ff ff ff ff;
+
+ // Create the sequence number
+
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 10]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ if (direction == sender_is_initiator)
+ {
+ memset(Token.SEND_SEQ+4, 0xff, 4)
+ }
+ else if (direction == sender_is_acceptor)
+ {
+ memset(Token.SEND_SEQ+4, 0, 4)
+ }
+ Token.SEND_SEQ[0] = (seq_num & 0xff000000) >> 24;
+ Token.SEND_SEQ[1] = (seq_num & 0x00ff0000) >> 16;
+ Token.SEND_SEQ[2] = (seq_num & 0x0000ff00) >> 8;
+ Token.SEND_SEQ[3] = (seq_num & 0x000000ff);
+
+ // Derive signing key from session key
+
+ Ksign = HMAC(Kss, "signaturekey");
+ // length includes terminating null
+
+ // Generate checksum of message - SGN_CKSUM
+ // Key derivation salt = 15
+
+ Sgn_Cksum = MD5((int32)15, Token.Header, data);
+
+ // Save first 8 octets of HMAC Sgn_Cksum
+
+ Sgn_Cksum = HMAC(Ksign, Sgn_Cksum);
+ memcpy(Token.SGN_CKSUM, Sgn_Cksum, 8);
+
+ // Encrypt the sequence number
+
+ // Derive encryption key for the sequence number
+ // Key derivation salt = 0
+
+ if (exportable)
+ {
+ Kseq = HMAC(Kss, "fortybits", (int32)0);
+ // len includes terminating null
+ memset(Kseq+7, 0xab, 7)
+ }
+ else
+ {
+ Kseq = HMAC(Kss, (int32)0);
+ }
+ Kseq = HMAC(Kseq, Token.SGN_CKSUM);
+
+ // Encrypt the sequence number
+
+ RC4(Kseq, Token.SND_SEQ);
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 11]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ }
+
+7.3. GSSAPI WRAP Semantics
+
+ There are two encryption keys for GSSAPI message tokens, one that is
+ 128 bits in strength, and one that is 56 bits in strength as defined
+ in Section 6.
+
+ All padding is rounded up to 1 byte. One byte is needed to say that
+ there is 1 byte of padding. The DES based mechanism type uses 8 byte
+ padding. See [RFC1964] Section 1.2.2.3.
+
+ The RC4-HMAC GSS_Wrap() token has the following format:
+
+
+ Byte no Name Description
+ 0..1 TOK_ID Identification field.
+ Tokens emitted by GSS_Wrap() contain
+ the hex value 02 01 in this field.
+ 2..3 SGN_ALG Checksum algorithm indicator.
+ 11 00 - HMAC
+ 4..5 SEAL_ALG ff ff - none
+ 00 00 - DES-CBC
+ 10 00 - RC4
+ 6..7 Filler Contains ff ff
+ 8..15 SND_SEQ Encrypted sequence number field.
+ 16..23 SGN_CKSUM Checksum of plaintext padded data,
+ calculated according to algorithm
+ specified in SGN_ALG field.
+ 24..31 Confounder Random confounder
+ 32..last Data encrypted or plaintext padded data
+
+ The encryption mechanism used for GSS wrap based messages is as
+ follow:
+
+
+ WRAP(Kss, encrypt, direction, export, seq_num, data)
+ {
+ struct Token { // 32 octets
+ struct Header {
+ OCTET TOK_ID[2];
+ OCTET SGN_ALG[2];
+ OCTET SEAL_ALG[2];
+ OCTET Filler[2];
+ };
+ OCTET SND_SEQ[8];
+ OCTET SGN_CKSUM[8];
+ OCTET Confounder[8];
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 12]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ } Token;
+
+
+ Token.TOK_ID = 02 01;
+ Token.SGN_SLG = 11 00;
+ Token.SEAL_ALG = (no_encrypt)? ff ff : 10 00;
+ Token.Filler = ff ff;
+
+ // Create the sequence number
+
+ if (direction == sender_is_initiator)
+ {
+ memset(&Token.SEND_SEQ[4], 0xff, 4)
+ }
+ else if (direction == sender_is_acceptor)
+ {
+ memset(&Token.SEND_SEQ[4], 0, 4)
+ }
+ Token.SEND_SEQ[0] = (seq_num & 0xff000000) >> 24;
+ Token.SEND_SEQ[1] = (seq_num & 0x00ff0000) >> 16;
+ Token.SEND_SEQ[2] = (seq_num & 0x0000ff00) >> 8;
+ Token.SEND_SEQ[3] = (seq_num & 0x000000ff);
+
+ // Generate random confounder
+
+ nonce(&Token.Confounder, 8);
+
+ // Derive signing key from session key
+
+ Ksign = HMAC(Kss, "signaturekey");
+
+ // Generate checksum of message -
+ // SGN_CKSUM + Token.Confounder
+ // Key derivation salt = 15
+
+ Sgn_Cksum = MD5((int32)15, Token.Header,
+ Token.Confounder);
+
+ // Derive encryption key for data
+ // Key derivation salt = 0
+
+ for (i = 0; i < 16; i++) Klocal[i] = Kss[i] ^ 0xF0;
+ // XOR
+ if (exportable)
+ {
+ Kcrypt = HMAC(Klocal, "fortybits", (int32)0);
+ // len includes terminating null
+ memset(Kcrypt+7, 0xab, 7);
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 13]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ }
+ else
+ {
+ Kcrypt = HMAC(Klocal, (int32)0);
+ }
+
+ // new encryption key salted with seq
+
+ Kcrypt = HMAC(Kcrypt, (int32)seq);
+
+ // Encrypt confounder (if encrypting)
+
+ if (encrypt)
+ RC4(Kcrypt, Token.Confounder);
+
+ // Sum the data buffer
+
+ Sgn_Cksum += MD5(data); // Append to checksum
+
+ // Encrypt the data (if encrypting)
+
+ if (encrypt)
+ RC4(Kcrypt, data);
+
+ // Save first 8 octets of HMAC Sgn_Cksum
+
+ Sgn_Cksum = HMAC(Ksign, Sgn_Cksum);
+ memcpy(Token.SGN_CKSUM, Sgn_Cksum, 8);
+
+ // Derive encryption key for the sequence number
+ // Key derivation salt = 0
+
+ if (exportable)
+ {
+ Kseq = HMAC(Kss, "fortybits", (int32)0);
+ // len includes terminating null
+ memset(Kseq+7, 0xab, 7)
+ }
+ else
+ {
+ Kseq = HMAC(Kss, (int32)0);
+ }
+ Kseq = HMAC(Kseq, Token.SGN_CKSUM);
+
+ // Encrypt the sequence number
+
+ RC4(Kseq, Token.SND_SEQ);
+
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 14]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ // Encrypted message = Token + Data
+ }
+
+ The character constant "fortybits" evolved from the time when a 40-
+ bit key length was all that was exportable from the United States.
+ It is now used to recognize that the key length is of "exportable"
+ length. In this description, the key size is actually 56-bits.
+
+
+8. Security Considerations
+
+ Care must be taken in implementing these encryption types because
+ they use a stream cipher. If a different IV is not used in each
+ direction when using a session key, the encryption is weak. By using
+ the sequence number as an IV, this is avoided.
+
+ There are two classes of attack on RC4 described in [MIRONOV].
+ Strong distinguishers distinguish an RC4 keystream from randomness at
+ the start of the stream. Weak distinguishers can operate on any part
+ of the keystream, and the best ones, described in [FMcG] and
+ [MANTIN05], can exploit data from multiple, different keystreams. A
+ consequence of these is that encrypting the same data (for instance,
+ a password) sufficiently many times in separate RC4 keystreams can be
+ sufficient to leak information to an adversary. The encryption types
+ defined in this document defend against these by constructing a new
+ key stream for every message. However, it is RECOMMENDED not to use
+ the RC4 encryption types defined in this document for high-volume
+ connections.
+
+ Weaknesses in MD4 [BOER91] were demonstrated by Den Boer and
+ Bosselaers in 1991. In August 2004, Xiaoyun Wang et al reported MD4
+ collisions generated using hand calculation [WANG04].
+ Implementations based on Wang's algorithm can find collisions in real
+ time. However, the intended usage of MD4 described in this document
+ does not rely on the collision-resistant property of MD4.
+ Futhermore, MD4 is always used in the context of a keyed hash in this
+ document. Although no evidence has suggested keyed MD4 hashes are
+ vulnerable to collision-based attacks, no study has directly proved
+ that the HMAC-MD4 is secure: the existing study simply assumed that
+ the hash function used in HMAC is collision proof. It is thus
+ RECOMMENDED not to use the RC4 encryption types defined in this
+ document if alternative stronger encryption types, such as aes256-
+ cts-hmac-sha1-96 [RFC3962], are available.
+
+
+9. Acknowledgements
+
+ The authors wish to thank Sam Hartman, Ken Raeburn and Qunli Li for
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 15]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ their insightful comments.
+
+
+10. IANA Considerations
+
+ This document has no actions for IANA.
+
+
+11. References
+
+11.1. Normative References
+
+ [RFC1320] Rivest, R., "The MD4 Message-Digest Algorithm", RFC 1320,
+ April 1992.
+
+ [RFC1321] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321,
+ April 1992.
+
+ [RFC1964] Linn, J., "The Kerberos Version 5 GSS-API Mechanism",
+ RFC 1964, June 1996.
+
+ [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed-
+ Hashing for Message Authentication", RFC 2104,
+ February 1997.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [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.
+
+ [RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The
+ Kerberos Network Authentication Service (V5)", RFC 4120,
+ July 2005.
+
+11.2. Informative References
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 16]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+ [BOER91] Boer, D. and A. Bosselaers, "An Attack on the Last Two
+ Rounds of MD4",
+ http://citeseer.ist.psu.edu/denboer91attack.html, 1991.
+
+ [FMcG] Fluhrer, S. and D. McGrew, "Statistical Analysis of the
+ Alleged RC4 Keystream Generator", Fast Software
+ Encryption: 7th International Workshop, FSE 2000, April
+ 2000, <http://www.mindspring.com/~dmcgrew/rc4-03.pdf>.
+
+ [MANTIN01] Mantin, I., "Analysis of the Stream Cipher RC4", M.Sc.
+ Thesis, Weizmann Institute of Science, 2001, <http://
+ www.wisdom.weizmann.ac.il/~itsik/RC4/Papers/Mantin1.zip>.
+
+ [MIRONOV] Mironov, I., "(Not So) Random Shuffles of RC4", Advances
+ in Cryptology -- CRYPTO 2002: 22nd Annual International
+ Cryptology Conference, August 2002,
+ <http://eprint.iacr.org/2002/067.pdf>.
+
+ [MANTIN05] Mantin, I., "Predicting and Distinguishing Attacks on RC4
+ Keystream Generator", Advances in Cryptology -- EUROCRYPT
+ 2005: 24th Annual International Conference on the Theory
+ and Applications of Cryptographic Techniques, May 2005.
+
+ [WANG04] Wang, X., Lai, X., Feng, D., Chen H., and X. Yu,
+ "Cryptanalysis of Hash functions MD4 and RIPEMD",
+ http://www.infosec.sdu.edu.cn/paper/md4-ripemd-attck.pdf,
+ Augest, 2004.
+
+
+
+Authors' Addresses
+
+ Karthik Jaganathan
+ Microsoft Corporation
+ One Microsoft Way
+ Redmond, WA 98052
+ US
+
+ Email: karthikj@microsoft.com
+
+
+ Larry Zhu
+ Microsoft Corporation
+ One Microsoft Way
+ Redmond, WA 98052
+ US
+
+ Email: lzhu@microsoft.com
+
+
+ John Brezak
+ Microsoft Corporation
+ One Microsoft Way
+ Redmond, WA 98052
+ US
+
+ Email: jbrezak@microsoft.com
+
+
+
+
+
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 17]
+\f
+Internet-Draft RC4-HMAC July 2006
+
+
+Full Copyright Statement
+
+ Copyright (C) The Internet Society (2006).
+
+ 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.
+
+
+Acknowledgment
+
+ Funding for the RFC Editor function is provided by the IETF
+ Administrative Support Activity (IASA).
+
+
+
+
+
+Jaganathan, et al. Expires January 31, 2007 [Page 18]
+\f
+
+++ /dev/null
----rfc1510.eratta---as of Auguest 10, 1994---
-
-1. [19940312] The following lines describes corrections to pseudocode
- in rfc1510 as of March 12, 1994.
-
- A: Throughout the pseudocode (section A), flags.ALLOW-POSTDATE should be
- replaced by flags.MAY-POSTDATE. kdc-options.ALLOW-POSTDATE is
- correct, however.
-
-A.2: In the processing for the kdc-options.POSTDATE (imperitive), both
- the POSTDATED and the INVALID flag should be set. The setting of the
- POSTDATE flag was inadvertantly omitted.
-
- You should change:
-
- if (req.kdc-options.POSTDATED is set) then
- if (against_postdate_policy(req.from)) then
- error_out(KDC_ERR_POLICY);
- endif
- set new_tkt.flags.INVALID;
- new_tkt.starttime := req.from;
- else
- omit new_tkt.starttime; /* treated as authtime when
-
- To:
- if (req.kdc-options.POSTDATED is set) then
- if (against_postdate_policy(req.from)) then
- error_out(KDC_ERR_POLICY);
- endif
- set new_tkt.flags.POSTDATED; <****
- set new_tkt.flags.INVALID;
- new_tkt.starttime := req.from;
- else
- omit new_tkt.starttime; /* treated as authtime when
-
-A.6: In section A.6, all occursences of kdc-options.POSTDATE (imperitive)
- should be replaced by kdc-options.ALLOW-POSTDATE and tgt.flags.POSTDATE
- should be replaced by tgt.flags.MAY-POSTDATE.
-
- Note that instances of POSTDATED (adjective) are correct.
-
-
----
-2. [19940614] Processing of the etype filed, described in 3.1.3, and 5.4.1.
-
-If a there are multiple encryption keys registered for a client in the
-Kerberos database (or if the key registered supports multiple
-encryption types; e.g. DES-CBC-CRC and DES-CBC-MD5), then the etype
-field from the AS request is used by the KDC to select the encryption
-method to be used for encrypting the response to the client. If there
-is more than one supported, strong encryption type in the etype list,
-the first valid etype for which an encryption key is available is
-used. The encryption method used to respond to a TGS request is taken
-from the keytype of the session key found in the ticket granting
-ticket.
-
-When the etype field is present in a KDC request, whether an AS or TGS
-request, 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 together with
-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.
-
----
-3. [19940707] Case of realm names for DNS based realm names,
-
- The following should appear in section 7.1 before the description
- of the four classed of realm names (before "There are presently...")
-
- Kerberos realm names are case sensitive. Realm names that differ
- only in the case of the characters are not equivalent.
-
- The domain example should be changes from:
- domain: host.subdomain.domain (example)
-
- To:
-
- domain: ATHENA.MIT.EDU (example)
-
- The following should be append to the domain name paragraph of
- section 7.1 (following "nor slashes (/).")
-
- Domain names must be converted to upper case when used as realm names.
-
----
-4. [19940707] Official name of host is instance for NT-SRV-HST
-
- Append to paragraph 7.2.1:
-
- When a host has an official name and one or more aliases, the
- official name of the host must be used when constructing the name
- of the server principal.
-
----
-
-5. [19940722] The protocol is standards track
-
- In the 3rd paragraph of the overview delete:
-
- ", and are not being submitted for consideration as
- an Internet standard at this time"
-
- as it contradicts the first sentence of the RFC.
-
+++ /dev/null
-
-
-
-
-
-
-Network Working Group J. Kohl
-Request for Comments: 1510 Digital Equipment Corporation
- C. Neuman
- ISI
- September 1993
-
-
- The Kerberos Network Authentication Service (V5)
-
-Status of this Memo
-
- This RFC 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" for the standardization state and status
- of this protocol. Distribution of this memo is unlimited.
-
-Abstract
-
- This document gives an overview and specification of Version 5 of the
- protocol for the Kerberos network authentication system. Version 4,
- described elsewhere [1,2], is presently in production use at MIT's
- Project Athena, and at other Internet sites.
-
-Overview
-
- Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos,
- Moira, and Zephyr are trademarks of the Massachusetts Institute of
- Technology (MIT). No commercial use of these trademarks may be made
- without prior written permission of MIT.
-
- This RFC 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; for Version 4 they are fully
- described in the Kerberos portion of the Athena Technical Plan [1].
- The protocols are under review, and are not being submitted for
- consideration as an Internet standard at this time. Comments are
- encouraged. Requests for addition to an electronic mailing list for
- discussion of Kerberos, kerberos@MIT.EDU, may be addressed to
- kerberos-request@MIT.EDU. This mailing list is gatewayed onto the
- Usenet as the group comp.protocols.kerberos. Requests for further
- information, including documents and code availability, may be sent
- to info-kerberos@MIT.EDU.
-
-
-
-
-
-Kohl & Neuman [Page 1]
-\f
-RFC 1510 Kerberos September 1993
-
-
-Background
-
- The Kerberos model is based in part on Needham and Schroeder's
- trusted third-party authentication protocol [3] and on modifications
- suggested by Denning and Sacco [4]. 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 4 is publicly available, and has seen wide use across the
- Internet.
-
- Version 5 (described in this document) has evolved from Version 4
- based on new requirements and desires for features not available in
- Version 4. Details on the differences between Kerberos Versions 4
- and 5 can be found in [5].
-
-Table of Contents
-
- 1. Introduction ....................................... 5
- 1.1. Cross-Realm Operation ............................ 7
- 1.2. Environmental assumptions ........................ 8
- 1.3. Glossary of terms ................................ 9
- 2. Ticket flag uses and requests ...................... 12
- 2.1. Initial and pre-authenticated tickets ............ 12
- 2.2. Invalid tickets .................................. 12
- 2.3. Renewable tickets ................................ 12
- 2.4. Postdated tickets ................................ 13
- 2.5. Proxiable and proxy tickets ...................... 14
- 2.6. Forwardable tickets .............................. 15
- 2.7. Other KDC options ................................ 15
- 3. Message Exchanges .................................. 16
- 3.1. The Authentication Service Exchange .............. 16
- 3.1.1. Generation of KRB_AS_REQ message ............... 17
- 3.1.2. Receipt of KRB_AS_REQ message .................. 17
- 3.1.3. Generation of KRB_AS_REP message ............... 17
- 3.1.4. Generation of KRB_ERROR message ................ 19
- 3.1.5. Receipt of KRB_AS_REP message .................. 19
- 3.1.6. Receipt of KRB_ERROR message ................... 20
- 3.2. The Client/Server Authentication Exchange ........ 20
- 3.2.1. The KRB_AP_REQ message ......................... 20
- 3.2.2. Generation of a KRB_AP_REQ message ............. 20
- 3.2.3. Receipt of KRB_AP_REQ message .................. 21
- 3.2.4. Generation of a KRB_AP_REP message ............. 23
- 3.2.5. Receipt of KRB_AP_REP message .................. 23
-
-
-
-Kohl & Neuman [Page 2]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 3.2.6. Using the encryption key ....................... 24
- 3.3. The Ticket-Granting Service (TGS) Exchange ....... 24
- 3.3.1. Generation of KRB_TGS_REQ message .............. 25
- 3.3.2. Receipt of KRB_TGS_REQ message ................. 26
- 3.3.3. Generation of KRB_TGS_REP message .............. 27
- 3.3.3.1. Encoding the transited field ................. 29
- 3.3.4. Receipt of KRB_TGS_REP message ................. 31
- 3.4. The KRB_SAFE Exchange ............................ 31
- 3.4.1. Generation of a KRB_SAFE message ............... 31
- 3.4.2. Receipt of KRB_SAFE message .................... 32
- 3.5. The KRB_PRIV Exchange ............................ 33
- 3.5.1. Generation of a KRB_PRIV message ............... 33
- 3.5.2. Receipt of KRB_PRIV message .................... 33
- 3.6. The KRB_CRED Exchange ............................ 34
- 3.6.1. Generation of a KRB_CRED message ............... 34
- 3.6.2. Receipt of KRB_CRED message .................... 34
- 4. The Kerberos Database .............................. 35
- 4.1. Database contents ................................ 35
- 4.2. Additional fields ................................ 36
- 4.3. Frequently Changing Fields ....................... 37
- 4.4. Site Constants ................................... 37
- 5. Message Specifications ............................. 38
- 5.1. ASN.1 Distinguished Encoding Representation ...... 38
- 5.2. ASN.1 Base Definitions ........................... 38
- 5.3. Tickets and Authenticators ....................... 42
- 5.3.1. Tickets ........................................ 42
- 5.3.2. Authenticators ................................. 47
- 5.4. Specifications for the AS and TGS exchanges ...... 49
- 5.4.1. KRB_KDC_REQ definition ......................... 49
- 5.4.2. KRB_KDC_REP definition ......................... 56
- 5.5. Client/Server (CS) message specifications ........ 58
- 5.5.1. KRB_AP_REQ definition .......................... 58
- 5.5.2. KRB_AP_REP definition .......................... 60
- 5.5.3. Error message reply ............................ 61
- 5.6. KRB_SAFE message specification ................... 61
- 5.6.1. KRB_SAFE definition ............................ 61
- 5.7. KRB_PRIV message specification ................... 62
- 5.7.1. KRB_PRIV definition ............................ 62
- 5.8. KRB_CRED message specification ................... 63
- 5.8.1. KRB_CRED definition ............................ 63
- 5.9. Error message specification ...................... 65
- 5.9.1. KRB_ERROR definition ........................... 66
- 6. Encryption and Checksum Specifications ............. 67
- 6.1. Encryption Specifications ........................ 68
- 6.2. Encryption Keys .................................. 71
- 6.3. Encryption Systems ............................... 71
- 6.3.1. The NULL Encryption System (null) .............. 71
- 6.3.2. DES in CBC mode with a CRC-32 checksum (descbc-crc)71
-
-
-
-Kohl & Neuman [Page 3]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 6.3.3. DES in CBC mode with an MD4 checksum (descbc-md4) 72
- 6.3.4. DES in CBC mode with an MD5 checksum (descbc-md5) 72
- 6.4. Checksums ........................................ 74
- 6.4.1. The CRC-32 Checksum (crc32) .................... 74
- 6.4.2. The RSA MD4 Checksum (rsa-md4) ................. 75
- 6.4.3. RSA MD4 Cryptographic Checksum Using DES
- (rsa-md4-des) ......................................... 75
- 6.4.4. The RSA MD5 Checksum (rsa-md5) ................. 76
- 6.4.5. RSA MD5 Cryptographic Checksum Using DES
- (rsa-md5-des) ......................................... 76
- 6.4.6. DES cipher-block chained checksum (des-mac)
- 6.4.7. RSA MD4 Cryptographic Checksum Using DES
- alternative (rsa-md4-des-k) ........................... 77
- 6.4.8. DES cipher-block chained checksum alternative
- (des-mac-k) ........................................... 77
- 7. Naming Constraints ................................. 78
- 7.1. Realm Names ...................................... 77
- 7.2. Principal Names .................................. 79
- 7.2.1. Name of server principals ...................... 80
- 8. Constants and other defined values ................. 80
- 8.1. Host address types ............................... 80
- 8.2. KDC messages ..................................... 81
- 8.2.1. IP transport ................................... 81
- 8.2.2. OSI transport .................................. 82
- 8.2.3. Name of the TGS ................................ 82
- 8.3. Protocol constants and associated values ......... 82
- 9. Interoperability requirements ...................... 86
- 9.1. Specification 1 .................................. 86
- 9.2. Recommended KDC values ........................... 88
- 10. Acknowledgments ................................... 88
- 11. References ........................................ 89
- 12. Security Considerations ........................... 90
- 13. Authors' Addresses ................................ 90
- A. Pseudo-code for protocol processing ................ 91
- A.1. KRB_AS_REQ generation ............................ 91
- A.2. KRB_AS_REQ verification and KRB_AS_REP generation 92
- A.3. KRB_AS_REP verification .......................... 95
- A.4. KRB_AS_REP and KRB_TGS_REP common checks ......... 96
- A.5. KRB_TGS_REQ generation ........................... 97
- A.6. KRB_TGS_REQ verification and KRB_TGS_REP generation 98
- A.7. KRB_TGS_REP verification ......................... 104
- A.8. Authenticator generation ......................... 104
- A.9. KRB_AP_REQ generation ............................ 105
- A.10. KRB_AP_REQ verification ......................... 105
- A.11. KRB_AP_REP generation ........................... 106
- A.12. KRB_AP_REP verification ......................... 107
- A.13. KRB_SAFE generation ............................. 107
- A.14. KRB_SAFE verification ........................... 108
-
-
-
-Kohl & Neuman [Page 4]
-\f
-RFC 1510 Kerberos September 1993
-
-
- A.15. KRB_SAFE and KRB_PRIV common checks ............. 108
- A.16. KRB_PRIV generation ............................. 109
- A.17. KRB_PRIV verification ........................... 110
- A.18. KRB_CRED generation ............................. 110
- A.19. KRB_CRED verification ........................... 111
- A.20. KRB_ERROR generation ............................ 112
-
-1. Introduction
-
- 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
- authentication 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. (Note,
- however, that many applications use Kerberos' functions only upon the
- initiation of a stream-based network connection, and assume the
- absence of any "hijackers" who might subvert such a connection. Such
- use implicitly trusts the host addresses involved.) Kerberos
- performs authentication under these conditions as a trusted third-
- party authentication service by using conventional cryptography,
- i.e., shared secret key. (shared secret key - Secret and private are
- often used interchangeably in the literature. In our usage, it takes
- two (or more) to share a secret, thus a shared DES key is a secret
- key. Something is only private when no one but its owner knows it.
- Thus, in public key cryptosystems, one has a public and a private
- key.)
-
- The authentication process proceeds as follows: A client sends a
- request to the authentication server (AS) requesting "credentials"
- for a given server. The AS responds with these credentials,
- encrypted in the client's key. The credentials consist of 1) a
- "ticket" for the server and 2) 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.
-
- The implementation 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
-
-
-
-Kohl & Neuman [Page 5]
-\f
-RFC 1510 Kerberos September 1993
-
-
- transactions, a typical network application adds one or two calls to
- the Kerberos library, which results in the transmission of the
- necessary messages to achieve authentication.
-
- The Kerberos protocol consists of several sub-protocols (or
- exchanges). There are two 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 sends the TGT to
- the TGS in the same manner as if it were contacting any other
- application server which requires Kerberos credentials. The reply is
- encrypted in the session key from the TGT.
-
- 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 server. Since 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
- was originated by 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 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 using the session key passed in the ticket, and
- contained in the credentials.
-
- The authentication exchanges mentioned above require read-only access
- to the Kerberos database. Sometimes, however, the entries in the
-
-
-
-Kohl & Neuman [Page 6]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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). The administration protocol is not described in this
- document. There is also a protocol for maintaining multiple copies of
- the Kerberos database, but this can be considered an implementation
- detail and may vary to support different database technologies.
-
-1.1. 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 use its
- authentication remotely (Of course, with appropriate permission the
- client could 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). 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 ticket-granting ticket for the remote realm's ticket-
- granting service from its local realm. When that ticket-granting
- ticket is used, the remote ticket-granting service uses the inter-
- realm key (which usually differs from its own normal TGS key) to
- decrypt the ticket-granting ticket, and is thus certain that it 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.
-
- 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 are typically 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. If a hierarchical organization is not used, it may be
- necessary to consult some database in order to construct an
-
-
-
-Kohl & Neuman [Page 7]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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.
-
-1.2. Environmental assumptions
-
- Kerberos imposes a few assumptions on the environment in which it can
- properly function:
-
- + "Denial of service" attacks are not solved with Kerberos. There
- are places in these protocols where an intruder 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) is 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 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. 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
-
-
-
-Kohl & Neuman [Page 8]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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.3. 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.
-
-
- 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.
-
-
-
-
-
-
-Kohl & Neuman [Page 9]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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 successfully use that
- ticket in an authentication exchange.
-
-
- KDC Key Distribution Center, a network service
- that supplies tickets and temporary
- session keys; or an instance of that
- service or the 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 Aside from the 3-headed dog guarding
- Hades, the name given to Project
- Athena's authentication service, the
- protocol used by that service, or the
- code used to implement the authentication
- service.
-
-
- Plaintext The input to an encryption function or
- the output of a decryption function.
- Decryption transforms ciphertext into
- plaintext.
-
-
- Principal A uniquely named client or server
- instance that participates in a network
- communication.
-
-
-
-
-Kohl & Neuman [Page 10]
-\f
-RFC 1510 Kerberos September 1993
-
-
- Principal identifier The name used to uniquely identify each
- different principal.
-
-
- Seal To encipher a record containing several
- fields in such a way that the fields
- cannot be individually replaced without
- either 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 is derived
- from a password.
-
-
- Server A particular Principal which provides a
- resource to network clients.
-
-
- 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".
-
-
- 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.
-
-
- 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.
-
-
-
-Kohl & Neuman [Page 11]
-\f
-RFC 1510 Kerberos September 1993
-
-
-2. Ticket flag uses and requests
-
- Each Kerberos ticket contains a set of flags which are used to
- indicate various 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 gives
- examples of reasons to use such a flag.
-
-2.1. Initial and pre-authenticated tickets
-
- The INITIAL flag indicates that a ticket was issued using the AS
- protocol and not issued based on a ticket-granting ticket.
- Application servers that want to require the knowledge of a client's
- secret key (e.g., a passwordchanging program) can insist that this
- flag be set in any tickets they accept, and thus be assured that the
- client's key was recently presented to the application client.
-
- The PRE-AUTHENT and HW-AUTHENT flags provide addition 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 ticket-granting ticket (in which case the
- INITIAL flag is clear, but the PRE-AUTHENT and HW-AUTHENT flags are
- carried forward from the ticket-granting ticket).
-
-2.2. Invalid tickets
-
- The INVALID flag indicates that a ticket is invalid. Application
- servers must reject tickets which have this flag set. A postdated
- ticket will usually be issued in this form. Invalid tickets must be
- validated by the KDC before use, by presenting them 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 which have been stolen before
- their starttime can be rendered permanently invalid (through a hot-
- list mechanism).
-
-2.3. Renewable tickets
-
- Applications may desire to hold tickets which 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 shortlived 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
-
-
-
-Kohl & Neuman [Page 12]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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 if the ticket had been reported stolen since its last
- renewal; it will refuse to renew such 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 wish to 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 ticket-granting ticket in order to issue a
- postdated ticket based on the presented ticket. It is reset by
- default; it may be requested by a client by setting the ALLOW-
- POSTDATE option in the KRB_AS_REQ message. This flag does not allow
- a client to obtain a postdated ticket-granting ticket; postdated
- ticket-granting tickets can only by 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 ticket-
-
-
-
-Kohl & Neuman [Page 13]
-\f
-RFC 1510 Kerberos September 1993
-
-
- granting ticket 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 ticket-granting ticket. 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 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 take on the principal's identity for
- a particular purpose by granting it a proxy.
-
- 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 ticket-granting ticket) with a
- different network address based on this ticket. This flag is set by
- default.
-
- 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 usually valid from only those network addresses
- specifically included in the ticket (It is permissible to request or
- issue tickets with no network addresses specified, but we do not
- recommend it). For this reason, a client wishing to grant a proxy
- must request a new ticket valid for the network address of the
- service to be granted the proxy.
-
- The PROXY flag is set in a ticket by the TGS when it issues a
- proxy ticket. Application servers may check this flag and require
- additional authentication from the agent presenting the proxy in
- order to provide an audit trail.
-
-
-
-
-
-Kohl & Neuman [Page 14]
-\f
-RFC 1510 Kerberos September 1993
-
-
-2.6. Forwardable tickets
-
- Authentication forwarding is an instance of the proxy case where the
- service is granted complete use of the client's identity. An example
- where it might be used is when a user logs in to a remote system 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 ticket-granting tickets 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 ticket-granting
- ticket.
-
- 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 end result
- can still be achieved if the user engages in the AS exchange with 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 it be set 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 wish to process
- FORWARDED tickets differently than non-FORWARDED tickets.
-
-2.7. Other KDC options
-
- There are two additional options which may be set in a client's
- request of the KDC. 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 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.
-
- The ENC-TKT-IN-SKEY option is honored only by the ticket-granting
- service. It indicates that the to-be-issued ticket for the end
- server is to be encrypted in the session key from the additional
- ticket-granting ticket provided with the request. See section 3.3.3
- for specific details.
-
-
-
-
-
-Kohl & Neuman [Page 15]
-\f
-RFC 1510 Kerberos September 1993
-
-
-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 usually initiated by a client when
- it wishes to obtain authentication credentials for a given server but
- currently holds no credentials. 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) without requiring
- further use of the client's secret key. This exchange is also used
- to request credentials for services which must not be mediated
- through the Ticket-Granting Service, but rather require a principal's
- secret key, such as the password-changing service. (The password-
- changing request must not be honored unless the requester can provide
- the old password (the user's current secret key). Otherwise, it
- would be possible for someone to walk up to an unattended session and
- change another user's password.) This exchange does not by itself
- provide any assurance of the 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 the local server through successful completion of the
- Client/Server exchange.)
-
- The 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.
- 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 KRB_AS_REP message
- contains information which can be used to detect replays, and to
-
-
-
-Kohl & Neuman [Page 16]
-\f
-RFC 1510 Kerberos September 1993
-
-
- associate it with the message to which it replies. 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 also contains information which can
- be used to associate it with the message to which it replies. The
- lack of encryption in the KRB_ERROR message precludes the ability to
- detect replays or fabrications of such messages.
-
- In the normal case 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. 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 may be used for preauthentication if desired, but the
- mechanism is not currently specified.
-
-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 preauthentication 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 nonrenewable ticket (due to
- configuration constraints; see section 4). See section A.1 for
- pseudocode.
-
- 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.1. The
- contents of the ticket are determined as follows.
-
-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 required, 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 the server cannot accommodate
- the requested encryption type, an error message with code
-
-
-
-Kohl & Neuman [Page 17]
-\f
-RFC 1510 Kerberos September 1993
-
-
- KDC_ERR_ETYPE_NOSUPP is returned. Otherwise it generates a "random"
- session key ("Random" means that, among other things, it should be
- impossible to guess the next session key based on knowledge of past
- session keys. This can only be achieved in a pseudo-random number
- generator if it is based on cryptographic principles. It would be
- more desirable to use a truly random number generator, such as one
- based on measurements of random physical phenomena.).
-
- If the requested start time is absent or indicates a time in the
- past, then the start time of the ticket is set to the authentication
- server's current time. If it indicates a time in the future, but the
- POSTDATED option has not been specified, then the error
- KDC_ERR_CANNOT_POSTDATE is returned. Otherwise the requested start
- time is checked against the policy of the local realm (the
- administrator might decide to prohibit certain types or ranges of
- postdated tickets), and if acceptable, the ticket's start time 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 start time has been reached.
-
- The expiration time of the ticket will be set to the minimum of the
- following:
-
- +The expiration time (endtime) requested in the KRB_AS_REQ
- message.
-
- +The ticket's start time plus the maximum allowable lifetime
- associated with the client principal (the authentication
- server's database includes a maximum ticket lifetime field
- in each principal's record; see section 4).
-
- +The ticket's start time plus the maximum allowable lifetime
- associated with the server principal.
-
- +The ticket's start time plus the maximum lifetime set by
- the policy of the local realm.
-
- If the requested expiration time minus the start time (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"
- 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 is set to the
- minimum of:
-
-
-
-Kohl & Neuman [Page 18]
-\f
-RFC 1510 Kerberos September 1993
-
-
- +Its requested value.
-
- +The start time of the ticket plus the minimum of the two
- maximum renewable lifetimes associated with the principals'
- database entries.
-
- +The start time 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 start time is in the future), its
- INVALID flag will also be set.
-
- If all of the above succeed, the server 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 the requested encryption method, and sends it
- to the client. See section A.2 for pseudocode.
-
-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
- message. The client decrypts the encrypted part of the response
- using its secret key, 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, 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 key-expiration field from the
- encrypted part of the response may be checked to notify the user of
- impending key expiration (the client program could then suggest
- remedial action, such as a password change). See section A.3 for
- pseudocode.
-
- Proper decryption of the KRB_AS_REP message is not sufficient to
-
-
-
-Kohl & Neuman [Page 19]
-\f
-RFC 1510 Kerberos September 1993
-
-
- verify the identity of the user; the user and an attacker could
- cooperate to generate a KRB_AS_REP format message which 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 which can be verified using a securely-stored
- secret key. 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 to recover.
-
-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 which 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.), so 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 it. 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
-
-
-
-Kohl & Neuman [Page 20]
-\f
-RFC 1510 Kerberos September 1993
-
-
- TGS exchange) a ticket and session key for the desired service. The
- client may re-use any tickets it holds until they expire. The client
- then constructs a new Authenticator from the the system time, its
- name, and optionally 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 may not be re-used and will
- 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. In
- such cases, a new authenticator must be generated for each retry.).
- 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 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. See section A.9 for pseudocode.
-
-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 the ticket is encrypted in the session key from the
- server's ticket-granting ticket rather than its secret key (This is
- used for user-to-user authentication as described in [6]). Since 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
-
-
-
-Kohl & Neuman [Page 21]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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; see section 6), the
- 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 it to have 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 (they might not match, for example, if the wrong
- session key was used to encrypt the authenticator). 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. If the server name, along with
- the client name, time and microsecond fields from the Authenticator
- match any recently-seen such tuples, 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 be have their authenticators rejected if the time and microsecond
- fields happen to match some other client's authenticator.). The
- server must remember any authenticator presented within the allowable
- clock skew, so that a replay attempt is guaranteed to fail. If a
- server loses track of any authenticator presented within the
- allowable clock skew, it must reject all requests until the clock
- skew interval has passed. This assures that any lost or re-played
- authenticators will fall outside the allowable clock skew and can no
- longer be successfully replayed (If this is not done, an attacker
- could conceivably record the ticket and authenticator sent over the
- network to a server, then disable the client's host, pose as the
- disabled host, and replay the ticket and authenticator to subvert the
- authentication.). 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.
-
-
-
-
-Kohl & Neuman [Page 22]
-\f
-RFC 1510 Kerberos September 1993
-
-
- The server computes the age of the ticket: local (server) time minus
- the start time inside the Ticket. If the start time 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, the client has been authenticated to the server.
- See section A.10 for pseudocode.
-
-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 (not only authenticating 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). [Note: 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.] 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. See section A.11 for
- pseudocode.
-
-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 (Note that for
- encrypting the KRB_AP_REP message, the sub-session key is not used,
- even if present in the Authenticator.) 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. See section A.12 for
-
-
-
-Kohl & Neuman [Page 23]
-\f
-RFC 1510 Kerberos September 1993
-
-
- pseudocode.
-
-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 which can be used by the application.
- The "true session key" to be used for KRB_PRIV, KRB_SAFE, or other
- application-specific uses may be chosen by the application based on
- the subkeys in the KRB_AP_REP message and the authenticator
- (Implementations of the protocol may wish to provide routines to
- choose subkeys based on session keys and random numbers and to
- orchestrate a negotiated key to be returned in the KRB_AP_REP
- message.). 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 a several alternatives. We leave the protocol negotiations of
- how to use the key (e.g., selecting an encryption or checksum type)
- to the application programmer; the Kerberos protocol does not
- constrain the implementation options.
-
- 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 or KRB_ERROR responses
- from the server to 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 assure 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 Ticket-Granting
- Server is initiated by a client when it wishes to obtain
- authentication credentials for a given server (which might be
- registered in a remote realm), when it wishes to renew or validate an
- existing ticket, or when it wishes 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 ticket-granting
- ticket 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
-
-
-
-Kohl & Neuman [Page 24]
-\f
-RFC 1510 Kerberos September 1993
-
-
- exchange does not take place under the client's key. Instead, the
- session key from the ticket-granting ticket 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 ticket-granting ticket 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 ticket-granting
- ticket and proxy cases, the request may include one or more of: 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 ticket-granting ticket or
- renewable ticket, or if present, in the subsession 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 which can be used to detect replays, and to
- associate it with the message to which it replies. The KRB_ERROR
- message also contains information which can be used to associate it
- with the message to which it replies, but the lack of encryption in
- the KRB_ERROR message precludes the ability to detect replays or
- fabrications of such messages.
-
-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 registered
- [Note: This can be accomplished in several ways. It might be known
- beforehand (since the realm is part of the principal identifier), or
- it might be stored in a nameserver. Presently, however, this
- information is 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 which has
- been compromised, and would result in an attacker's ability to
- compromise the authentication of the application server to the
- client.]. If the client does not already possess a ticket-granting
- ticket for the appropriate realm, then one must be obtained. This is
- first attempted by requesting a ticket-granting ticket for the
- destination realm from the local Kerberos server (using the
-
-
-
-Kohl & Neuman [Page 25]
-\f
-RFC 1510 Kerberos September 1993
-
-
- KRB_TGS_REQ message recursively). The 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 which
- is "closer" to the desired realm (further along the standard
- hierarchical path), in which case this step must be repeated with a
- Kerberos server in the realm specified in the returned TGT. If
- neither are returned, then the request must be retried with a
- Kerberos server for a realm higher in the hierarchy. This request
- will itself require a ticket-granting ticket for the higher realm
- which must be obtained by recursively applying these directions.
-
- Once the client obtains a ticket-granting ticket for the appropriate
- realm, it determines which Kerberos servers serve that realm, and
- contacts one. The list might be obtained through a configuration file
- or network service; as long as the secret keys exchanged by realms
- are kept secret, only denial of service results from a false Kerberos
- server.
-
- As in the AS exchange, the client may specify a number of options in
- the KRB_TGS_REQ message. 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-authorization-
- 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 subsession key. One
- approach would be to generate a random number and XOR it with the
- session key from the ticket-granting ticket.). If the sub-session key
- is not specified, the session key from the ticket-granting ticket
- 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 in the
- session key from the ticket-granting ticket.
-
- Once prepared, the message is sent to a Kerberos server for the
- destination realm. See section A.5 for pseudocode.
-
-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
-
-
-
-Kohl & Neuman [Page 26]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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 the accompanying ticket is not a ticket granting
- ticket for the current realm, but is for an application server in the
- current realm, the RENEW, VALIDATE, or PROXY options are specified in
- the request, and 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 rejected if the checksums do not
- match (with an error code of KRB_AP_ERR_MODIFIED) or if the checksum
- is not keyed or 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.
-
- If any of the decryptions indicate failed integrity checks, the
- KRB_AP_ERR_BAD_INTEGRITY error is returned.
-
-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. The
- Kerberos database is queried to retrieve the record for the requested
- server (including the key with which the ticket will be encrypted).
- If the request is for a ticket granting ticket 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 from 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 ticket-granting ticket (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.
-
-
-
-
-Kohl & Neuman [Page 27]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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 (endtimestarttime) 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
- 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 ticket-granting tickets.
-
- If the requested start time is absent or indicates a time in the
- past, then the start time of the ticket is set to the authentication
- server's current time. If it indicates a time in the future, 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 ticket-granting ticket has the
- MAYPOSTDATE 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 start time 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 ticket-granting ticket.
-
- If the ENC-TKT-IN-SKEY option has been specified and an additional
- ticket has been included in the request, the KDC will decrypt the
- additional ticket using the key for the server to which the
- additional ticket was issued and verify that it is a ticket-granting
- ticket. 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 and if 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 (This allows easy implementation of user-to-
- user authentication [6], which uses ticket-granting ticket session
- keys in lieu of secret server keys in situations where such secret
-
-
-
-Kohl & Neuman [Page 28]
-\f
-RFC 1510 Kerberos September 1993
-
-
- keys could be easily compromised.).
-
- If 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 ticket-
- granting server itself, and the server is registered in the realm of
- the KDC, If the RENEW option is requested, then the KDC will verify
- that the RENEWABLE flag is set in the ticket and that the renew_till
- time is still in the future. If the VALIDATE option is rqeuested,
- the KDC will check that the starttime has passed and the INVALID flag
- is set. If the PROXY option is requested, then the KDC will check
- that the PROXIABLE flag is set in the ticket. If the tests succeed,
- the KDC will issue the appropriate new ticket.
-
- Whenever a request is made to the ticket-granting server, the
- presented ticket(s) is(are) checked against a hot-list of tickets
- which have been canceled. This hot-list might be implemented by
- storing a range of issue dates for "suspect tickets"; if a presented
- ticket had an authtime in that range, it would be rejected. In this
- way, a stolen ticket-granting ticket or renewable ticket cannot be
- used to gain additional tickets (renewals or otherwise) once the
- theft has been reported. Any normal ticket obtained before it was
- reported stolen will still be valid (because they require no
- interaction with the KDC), but only until their normal expiration
- time.
-
- 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 the session key key from the ticket-granting ticket. 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
- ticket-granting ticket. See section A.6 for pseudocode.
-
-3.3.3.1. 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 ticket-granting ticket. The name of the realm
- that issued the ticket-granting ticket will be added to the transited
- field of the ticket to be issued. This is accomplished by reading
- the transited field from the ticket-granting ticket (which is treated
- as an unordered set of realm names), adding the new realm to the set,
-
-
-
-Kohl & Neuman [Page 29]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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
- 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. Since the endpoints are not included, both local and
- single-hop inter-realm authentication result in a transited field
- that is empty.
-
- Because the name of each realm transited is added to this field,
- 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 ATHENA.MIT.EDU, or CS.WASHINGTON.EDU were endpoints,
- that 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 to be the null realm ("")). If
- it 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".
-
-
-
-Kohl & Neuman [Page 30]
-\f
-RFC 1510 Kerberos September 1993
-
-
- Like the example above, if /COM/HP/APOLLO and /COM/DEC are endpoints,
- they they would not be included in this field, and we would have:
-
- "/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 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 session key from the ticket-granting ticket
- rather than the client's secret key. See section A.7 for pseudocode.
-
-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 collisionproof 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 occured).
-
-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 some sort of
- keyed one-way hash function (such as the RSA-MD5-DES checksum
- algorithm specified in section 6.4.5, or the DES MAC), generated
- using the sub-session key if present, or the session key. Different
- algorithms may be selected by changing the checksum type in the
- message. Unkeyed or non-collision-proof checksums are not suitable
- for this use.
-
- The control information for the KRB_SAFE message includes both a
-
-
-
-Kohl & Neuman [Page 31]
-\f
-RFC 1510 Kerberos September 1993
-
-
- timestamp and a sequence number. The designer of an application
- 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 them being resent, the use of the timestamp is the
- appropriate replay detection mechanism. Using timestamps is also the
- appropriate mechanism for multi-cast protocols where 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
- collisionproof keyed checksum, and if it is not, a
- KRB_AP_ERR_INAPP_CKSUM error is generated. 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. 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 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 recently-seen such tuples, the KRB_AP_ERR_REPEAT error is
- generated. If an incorrect sequence number is included, or a
- sequence number is expected but not present, the KRB_AP_ERR_BADORDER
- error is generated. If neither a timestamp and usec or a sequence
- number is present, a KRB_AP_ERR_MODIFIED error is generated.
-
-
-
-Kohl & Neuman [Page 32]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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.
-
-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 occured). 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
- the resultant plaintext. If decryption shows the data to have been
- modified, a KRB_AP_ERR_BAD_INTEGRITY error is generated. 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. 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 they are present but not current, the
- KRB_AP_ERR_SKEW error is generated. If the server name, along with
-
-
-
-Kohl & Neuman [Page 33]
-\f
-RFC 1510 Kerberos September 1993
-
-
- the client name, time and microsecond fields from the Authenticator
- match any recently-seen such tuples, the KRB_AP_ERR_REPEAT error is
- generated. If an incorrect sequence number is included, or a
- sequence number is expected but not present, the KRB_AP_ERR_BADORDER
- error is generated. If neither a timestamp and usec or 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 able to see 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
- ticket in the key field of the corresponding KrbCredInfo sequence of
- the encrypted part of the 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 specifically required by the application the nonce, s-
- address, and raddress fields, are placed in the encrypted part of the
- KRB_CRED message which is then encrypted under an encryption key
- previosuly exchanged in the KRB_AP exchange (usually the last key
- negotiated via subkeys, or the session key if no negotiation has
- occured).
-
-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.
-
-
-
-Kohl & Neuman [Page 34]
-\f
-RFC 1510 Kerberos September 1993
-
-
- If present or required, the recipient verifies 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. A failed match for either
- case generates a KRB_AP_ERR_BADADDR error. The timestamp and usec
- fields (and the nonce field if required) are checked next. If the
- timestamp and usec are not present, or 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 ticket cache together with the session key and other
- information in the corresponding KrbCredInfo sequence from the
- encrypted part of the KRB_CRED message.
-
-4. The Kerberos Database
-
- The Kerberos server must have access to a database containing the
- principal identifiers and secret keys of principals to be
- authenticated (The implementation of the Kerberos server need not
- combine the database and the server on the same machine; it is
- feasible to store the principal database in, say, a network name
- service, as long as the entries stored therein are protected from
- disclosure to and modification by unauthorized parties. However, we
- recommend against such strategies, as they can make system management
- and threat analysis quite complex.).
-
-4.1. Database contents
-
- A database entry should contain at least the following fields:
-
- Field Value
-
- name Principal's identifier
- key Principal's secret key
- p_kvno Principal's key version
- max_life Maximum lifetime for Tickets
- max_renewable_life Maximum total lifetime for renewable
- Tickets
-
- The name field is an encoding of the principal's identifier. The key
- field contains an encryption key. This key is the principal's secret
- key. (The key can be encrypted before storage under a Kerberos
- "master key" to protect it in case the database is compromised but
- the master key is not. In that case, an extra field must be added to
- indicate the master key version used, see below.) The p_kvno field is
- the key version number of the principal's secret key. The max_life
- field contains the maximum allowable lifetime (endtime - starttime)
- for any Ticket issued for this principal. The max_renewable_life
-
-
-
-Kohl & Neuman [Page 35]
-\f
-RFC 1510 Kerberos September 1993
-
-
- field contains the maximum allowable total lifetime for any renewable
- Ticket issued for this principal. (See section 3.1 for a description
- of how these lifetimes are used in determining the lifetime of a
- given Ticket.)
-
- A server may provide KDC service to several realms, as long as the
- database representation provides a mechanism to distinguish between
- principal records with identifiers which differ only in the realm
- name.
-
- When an application server's key changes, if the change is routine
- (i.e., not the result of disclosure of the old key), the old key
- should be retained by the server until all tickets that had been
- issued using that key have expired. Because of this, it is possible
- for several keys to be active for a single principal. Ciphertext
- encrypted in a principal's key is always tagged with the version of
- the key that was used for encryption, to help the recipient find the
- proper key for decryption.
-
- When more than one key is active for a particular principal, the
- principal will have more than one record in the Kerberos database.
- The keys and key version numbers will differ between the records (the
- rest of the fields may or may not be the same). Whenever Kerberos
- issues a ticket, or responds to a request for initial authentication,
- the most recent key (known by the Kerberos server) will be used for
- encryption. This is the key with the highest key version number.
-
-4.2. Additional fields
-
- Project Athena's KDC implementation uses additional fields in its
- database:
-
- Field Value
-
- K_kvno Kerberos' key version
- expiration Expiration date for entry
- attributes Bit field of attributes
- mod_date Timestamp of last modification
- mod_name Modifying principal's identifier
-
- The K_kvno field indicates the key version of the Kerberos master key
- under which the principal's secret key is encrypted.
-
- After an entry's expiration date has passed, the KDC will return an
- error to any client attempting to gain tickets as or for the
- principal. (A database may want to maintain two expiration dates:
- one for the principal, and one for the principal's current key. This
- allows password aging to work independently of the principal's
-
-
-
-Kohl & Neuman [Page 36]
-\f
-RFC 1510 Kerberos September 1993
-
-
- expiration date. However, due to the limited space in the responses,
- the KDC must combine the key expiration and principal expiration date
- into a single value called "key_exp", which is used as a hint to the
- user to take administrative action.)
-
- The attributes field is a bitfield used to govern the operations
- involving the principal. This field might be useful in conjunction
- with user registration procedures, for site-specific policy
- implementations (Project Athena currently uses it for their user
- registration process controlled by the system-wide database service,
- Moira [7]), or to identify the "string to key" conversion algorithm
- used for a principal's key. (See the discussion of the padata field
- in section 5.4.2 for details on why this can be useful.) Other bits
- are used to indicate that certain ticket options should not be
- allowed in tickets encrypted under a principal's key (one bit each):
- Disallow issuing postdated tickets, disallow issuing forwardable
- tickets, disallow issuing tickets based on TGT authentication,
- disallow issuing renewable tickets, disallow issuing proxiable
- tickets, and disallow issuing tickets for which the principal is the
- server.
-
- The mod_date field contains the time of last modification of the
- entry, and the mod_name field contains the name of the principal
- which last modified the entry.
-
-4.3. Frequently Changing Fields
-
- Some KDC implementations may wish to maintain the last time that a
- request was made by a particular principal. Information that might
- be maintained includes the time of the last request, the time of the
- last request for a ticket-granting ticket, the time of the last use
- of a ticket-granting ticket, or other times. This information can
- then be returned to the user in the last-req field (see section 5.2).
-
- Other frequently changing information that can be maintained is the
- latest expiration time for any tickets that have been issued using
- each key. This field would be used to indicate how long old keys
- must remain valid to allow the continued use of outstanding tickets.
-
-4.4. Site Constants
-
- The KDC implementation should have the following configurable
- constants or options, to allow an administrator to make and enforce
- policy decisions:
-
- + The minimum supported lifetime (used to determine whether the
- KDC_ERR_NEVER_VALID error should be returned). This constant
- should reflect reasonable expectations of round-trip time to the
-
-
-
-Kohl & Neuman [Page 37]
-\f
-RFC 1510 Kerberos September 1993
-
-
- KDC, encryption/decryption time, and processing time by the client
- and target server, and it should allow for a minimum "useful"
- lifetime.
-
- + The maximum allowable total (renewable) lifetime of a ticket
- (renew_till - starttime).
-
- + The maximum allowable lifetime of a ticket (endtime - starttime).
-
- + Whether to allow the issue of tickets with empty address fields
- (including the ability to specify that such tickets may only be
- issued if the request specifies some authorization_data).
-
- + Whether proxiable, forwardable, renewable or post-datable tickets
- are to be issued.
-
-5. Message Specifications
-
- The following sections describe the exact contents and encoding of
- protocol messages and objects. The ASN.1 base definitions are
- presented in the first subsection. The remaining subsections specify
- the protocol objects (tickets and authenticators) and messages.
- Specification of encryption and checksum techniques, and the fields
- related to them, appear in section 6.
-
-5.1. ASN.1 Distinguished Encoding Representation
-
- All uses of ASN.1 in Kerberos shall use the Distinguished Encoding
- Representation of the data elements as described in the X.509
- specification, section 8.7 [8].
-
-5.2. ASN.1 Base Definitions
-
- The following ASN.1 base definitions are used in the rest of this
- section. Note that since the underscore character (_) is not
- permitted in ASN.1 names, the hyphen (-) is used in its place for the
- purposes of ASN.1 names.
-
- Realm ::= GeneralString
- PrincipalName ::= SEQUENCE {
- name-type[0] INTEGER,
- name-string[1] SEQUENCE OF GeneralString
- }
-
- Kerberos realms are encoded as GeneralStrings. Realms shall not
- contain a character with the code 0 (the 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
-
-
-
-Kohl & Neuman [Page 38]
-\f
-RFC 1510 Kerberos September 1993
-
-
- the style of X.500 names. Acceptable forms for realm names are
- specified in section 7. A PrincipalName is a typed sequence of
- components consisting of the following sub-fields:
-
- name-type This field specifies the type of name that follows.
- Pre-defined values for this field are
- specified in section 7.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).
- This constraint may be eliminated in the future.
-
- name-string This field encodes a sequence of components that
- form a name, each component encoded as a General
- String. Taken together, a PrincipalName and a Realm
- form a principal identifier. Most PrincipalNames
- will have only a few components (typically one or two).
-
- KerberosTime ::= GeneralizedTime
- -- Specifying UTC time zone (Z)
-
- The timestamps used in Kerberos are encoded as GeneralizedTimes. An
- encoding shall specify the UTC time zone (Z) and shall not include
- any fractional portions of the seconds. It further shall not include
- any separators. Example: The only valid format for UTC time 6
- minutes, 27 seconds after 9 pm on 6 November 1985 is 19851106210627Z.
-
- HostAddress ::= SEQUENCE {
- addr-type[0] INTEGER,
- address[1] OCTET STRING
- }
-
- HostAddresses ::= SEQUENCE OF SEQUENCE {
- addr-type[0] INTEGER,
- address[1] OCTET STRING
- }
-
-
- The host adddress encodings consists of two fields:
-
- addr-type This field specifies the type of address that
- follows. Pre-defined values for this field are
- specified in section 8.1.
-
-
- address This field encodes a single address of type addr-type.
-
- The two forms differ slightly. HostAddress contains exactly one
-
-
-
-Kohl & Neuman [Page 39]
-\f
-RFC 1510 Kerberos September 1993
-
-
- address; HostAddresses contains a sequence of possibly many
- addresses.
-
- AuthorizationData ::= SEQUENCE OF SEQUENCE {
- ad-type[0] INTEGER,
- 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.
-
- APOptions ::= BIT STRING {
- reserved(0),
- use-session-key(1),
- mutual-required(2)
- }
-
-
- TicketFlags ::= BIT STRING {
- 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)
- }
-
- KDCOptions ::= BIT STRING {
- reserved(0),
- forwardable(1),
- forwarded(2),
- proxiable(3),
- proxy(4),
- allow-postdate(5),
- postdated(6),
-
-
-
-Kohl & Neuman [Page 40]
-\f
-RFC 1510 Kerberos September 1993
-
-
- unused7(7),
- renewable(8),
- unused9(9),
- unused10(10),
- unused11(11),
- renewable-ok(27),
- enc-tkt-in-skey(28),
- renew(30),
- validate(31)
- }
-
-
- LastReq ::= SEQUENCE OF SEQUENCE {
- lr-type[0] INTEGER,
- lr-value[1] KerberosTime
- }
-
- 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
- ticket-granting ticket 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).
-
- 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.
-
- See section 6 for the definitions of Checksum, ChecksumType,
- EncryptedData, EncryptionKey, EncryptionType, and KeyType.
-
-
-
-
-
-
-
-
-Kohl & Neuman [Page 41]
-\f
-RFC 1510 Kerberos September 1993
-
-
-5.3. Tickets and Authenticators
-
- 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.
-
-5.3.1. Tickets
-
- 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,
- realm[1] Realm,
- sname[2] PrincipalName,
- enc-part[3] EncryptedData
-}
--- Encrypted part of ticket
-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] INTEGER, -- must be registered
- contents[1] OCTET STRING
-}
-
- The encoding of EncTicketPart is encrypted in the key shared by
- Kerberos and the end server (the server's secret key). See section 6
- for the format of the ciphertext.
-
- 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
-
-
-
-Kohl & Neuman [Page 42]
-\f
-RFC 1510 Kerberos September 1993
-
-
- always be identical.
-
- sname This field specifies the name part of the server's
- identity.
-
- enc-part This field holds the encrypted encoding of the
- EncTicketPart sequence.
-
- flags This field indicates which of various options were used or
- requested when the ticket was issued. It 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). Bit 0 is the most significant bit. The
- encoding of the bits is specified in section 5.2. The
- flags are described in more detail above in section 2. The
- meanings of the flags are:
-
- 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
- ticket- granting ticket 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 ticket-granting
- ticket.
-
- 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- ticket-granting tickets may be
- issued with different network
- addresses.
-
-
-
-
-Kohl & Neuman [Page 43]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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 ticket-granting server that
- a post- dated ticket may be issued
- based on this ticket-granting ticket.
-
- 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 wish to 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 ticket-granting
- ticket.
-
- 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 preauthentication 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
-
-
-
-Kohl & Neuman [Page 44]
-\f
-RFC 1510 Kerberos September 1993
-
-
- client. The hardware authentication
- method is selected by the KDC and the
- strength of the method is not
- indicated.
-
- 12-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. The field's encoding is
- described in section 6.2.
-
- 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.1 for details on how
- this field encodes the traversed realms.
-
- 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 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 since 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 it is absent from
- the ticket, its value should be treated as that of the
-
-
-
-Kohl & Neuman [Page 45]
-\f
-RFC 1510 Kerberos September 1993
-
-
- authtime field.
-
- 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 zero-
- address tickets is a policy decision and is left to the
- Kerberos and end-service administrators; they may refuse to
- issue or accept such tickets. The suggested and default
- policy, however, is that such tickets will only be issued
- or accepted when additional information that can be used to
- restrict the use of the ticket is included in the
- authorization_data field. Such a ticket is a capability.
-
- 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.
-
- It is important to 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 use them from a "safe"
- location.
-
-
-
-
-
-
-Kohl & Neuman [Page 46]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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. The data in this field are specific to the end
- service. It is expected that the field will contain the
- names of service specific objects, and the rights to those
- objects. The format for this field is described in section
- 5.2. 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.
-
- It is interesting to note that 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 [9] for some suggested
- uses of this field.
-
- The authorization-data field is optional and does not have
- to be included in a ticket.
-
-5.3.2. Authenticators
-
- An authenticator is a record sent with a ticket to a server to
- certify the client's knowledge of the encryption key in the ticket,
- to help the server detect replays, and to help choose a "true session
- key" to use with the particular session. The encoding is encrypted
- in the ticket's session key shared by the client and the server:
-
--- Unencrypted authenticator
-Authenticator ::= [APPLICATION 2] SEQUENCE {
- authenticator-vno[0] INTEGER,
- crealm[1] Realm,
- cname[2] PrincipalName,
- cksum[3] Checksum OPTIONAL,
- cusec[4] INTEGER,
- ctime[5] KerberosTime,
- subkey[6] EncryptionKey OPTIONAL,
- seq-number[7] INTEGER OPTIONAL,
-
-
-
-Kohl & Neuman [Page 47]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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.1.
-
- cksum This field contains a checksum of the the application data
- that accompanies the KRB_AP_REQ.
-
- 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.
-
- subkey This field contains the client's choice for an encryption
- key which is 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.
-
- For sequence numbers to adequately support the detection of
- replays 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.
-
-
-
-
-
-
-Kohl & Neuman [Page 48]
-\f
-RFC 1510 Kerberos September 1993
-
-
- authorization-data This field is the same as described for the ticket
- in section 5.3.1. 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.
-
-5.4. Specifications for the AS and TGS exchanges
-
- This section specifies the format of the messages used in 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 type of its own. Instead, its type is
- one of KRB_AS_REQ or KRB_TGS_REQ 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 Authentication Server to
- request credentials for a service.
-
-The message fields are:
-
-AS-REQ ::= [APPLICATION 10] KDC-REQ
-TGS-REQ ::= [APPLICATION 12] KDC-REQ
-
-KDC-REQ ::= SEQUENCE {
- pvno[1] INTEGER,
- msg-type[2] INTEGER,
- padata[3] SEQUENCE OF PA-DATA OPTIONAL,
- req-body[4] KDC-REQ-BODY
-}
-
-PA-DATA ::= SEQUENCE {
- padata-type[1] INTEGER,
- padata-value[2] OCTET STRING,
- -- might be encoded AP-REQ
-}
-
-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] INTEGER,
-
-
-
-Kohl & Neuman [Page 49]
-\f
-RFC 1510 Kerberos September 1993
-
-
- etype[8] SEQUENCE OF INTEGER, -- EncryptionType,
- -- in preference order
- addresses[9] HostAddresses OPTIONAL,
- enc-authorization-data[10] EncryptedData OPTIONAL,
- -- Encrypted AuthorizationData encoding
- additional-tickets[11] SEQUENCE OF Ticket OPTIONAL
-}
-
- The fields in this message are:
-
- 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 The padata (pre-authentication data) field contains a of
- authentication information which may be needed before
- credentials can be issued or decrypted. In the case of
- requests for additional tickets (KRB_TGS_REQ), this field
- will include an element with padata-type of PA-TGS-REQ and
- data of an authentication header (ticket-granting ticket
- and authenticator). The checksum in the authenticator
- (which must be collisionproof) is to be computed over the
- KDC-REQ-BODY encoding. In most requests for initial
- authentication (KRB_AS_REQ) and most replies (KDC-REP), the
- padata field will be left out.
-
- This field may also contain information needed by certain
- extensions to the Kerberos protocol. For example, it might
- be used to initially verify the identity of a client before
- any response is returned. This is accomplished with a
- padata field with padata-type equal to PA-ENC-TIMESTAMP and
- padata-value defined as follows:
-
- padata-type ::= PA-ENC-TIMESTAMP
- padata-value ::= EncryptedData -- PA-ENC-TS-ENC
-
- PA-ENC-TS-ENC ::= SEQUENCE {
- patimestamp[0] KerberosTime, -- client's time
- pausec[1] INTEGER OPTIONAL
- }
-
-
-
-
-Kohl & Neuman [Page 50]
-\f
-RFC 1510 Kerberos September 1993
-
-
- with patimestamp containing the client's time and pausec
- containing 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
- sequence, encrypted using the client's secret key.
-
- 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
- "smartcards" with Kerberos. The details of such extensions
- are beyond the scope of this specification. See [10] for
- additional uses of this field.
-
- padata-type The padata-type element of the padata field 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.
-
- 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 case, the bit in the
- options field will be the same as that in the flags field,
- this is not guaranteed, so it is not acceptable to simply
- copy the options field to the flags field. There are
- various checks that must be made before honoring an option
- 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:
-
-
-
-
-
-
-
-Kohl & Neuman [Page 51]
-\f
-RFC 1510 Kerberos September 1993
-
-
- Bit(s) 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 ticket-
- granting ticket 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
- ticket-granting ticket 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 in a
- subsequent request if the ticket-
- granting ticket 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 ticket-
- granting ticket in the request has its
- PROXIABLE bit set. The address(es) of
- the 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
-
-
-
-Kohl & Neuman [Page 52]
-\f
-RFC 1510 Kerberos September 1993
-
-
- the ticket-granting ticket 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 ticket-granting ticket
- 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 UNUSED 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 ticket-granting ticket 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-26 RESERVED Reserved for future use.
-
- 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. If a
- ticket with the requested life cannot
- be provided, then a renewable ticket
- may be issued with a renew-till equal
- to the 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
-
-
-
-Kohl & Neuman [Page 53]
-\f
-RFC 1510 Kerberos September 1993
-
-
- encrypted in the session key from the
- additional ticket-granting ticket
- 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 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 be
- otherwise 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.1. sname may only be absent when the
- ENC-TKT-IN-SKEY option is specified. If 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 ticket-granting
- ticket, both from the padata field in the KRB_AP_REQ.
-
-
-
-
-Kohl & Neuman [Page 54]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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 start time for the
- requested ticket.
-
- till This field contains the expiration date requested by the
- client in a ticket request.
-
- 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 it
- 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 re-used. Ideally, it should be gen erated
- randomly, but if the correct time is known, it may suffice
- (Note, however, that if the time is used as the nonce, one
- must make sure that the workstation time is monotonically
- increasing. If the time is ever reset backwards, there is
- a small, but finite, probability that a nonce will 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 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. If more than one option
- which 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).
-
-
-
-Kohl & Neuman [Page 55]
-\f
-RFC 1510 Kerberos September 1993
-
-
- The application code 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.
-
- It should be noted 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, or if absent, the session key
- from the ticket-granting ticket 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,
- msg-type[1] INTEGER,
- padata[2] SEQUENCE OF PA-DATA OPTIONAL,
- crealm[3] Realm,
- cname[4] PrincipalName,
- ticket[5] Ticket,
- enc-part[6] EncryptedData
- }
-
- EncASRepPart ::= [APPLICATION 25[25]] EncKDCRepPart
- EncTGSRepPart ::= [APPLICATION 26] EncKDCRepPart
-
- EncKDCRepPart ::= SEQUENCE {
- key[0] EncryptionKey,
- last-req[1] LastReq,
-
-
-
-Kohl & Neuman [Page 56]
-\f
-RFC 1510 Kerberos September 1993
-
-
- nonce[2] INTEGER,
- 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
- }
-
- NOTE: In EncASRepPart, the application code in the encrypted
- part of a message provides an additional check that
- the message was decrypted properly.
-
- 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 this field is to encode an alternate
- "mix-in" string to be used with a string-to-key algorithm
- (such as is described in section 6.3.2). This ability is
- useful to ease 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 mix-in 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.1.
-
- ticket The newly-issued ticket, from section 5.3.1.
-
- 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. The encrypted part
- is encoded as described in section 6.1.
-
- key This field is the same as described for the ticket in
- section 5.3.1.
-
- 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 ticket-granting ticket was made, or the
- last time that a request based on a ticket-granting ticket
-
-
-
-Kohl & Neuman [Page 57]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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 into timesharing systems.
-
- 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. 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 need 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
- expira tion 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.1),
- provided so the client may verify they match the intended
- request and 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 ticket granting ticket. 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 ticket-granting ticket.
-
-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".
-
- AP-REQ ::= [APPLICATION 14] SEQUENCE {
- pvno[0] INTEGER,
- msg-type[1] INTEGER,
-
-
-
-Kohl & Neuman [Page 58]
-\f
-RFC 1510 Kerberos September 1993
-
-
- ap-options[2] APOptions,
- ticket[3] Ticket,
- authenticator[4] EncryptedData
- }
-
- APOptions ::= BIT STRING {
- 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 being reset (0). The encoding of the bits is
- specified in section 5.2. The meanings of the options are:
-
- Bit(s) Name Description
-
- 0 RESERVED Reserved for future expansion of
- this field.
-
- 1 USE-SESSION-KEYThe 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
- ticket-granting ticket. When this
- option is not specified, the ticket is
- encrypted in the server's secret key.
-
- 2 MUTUAL-REQUIREDThe 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.
-
- authenticator This contains the authenticator, which includes the
- client's choice of a subkey. Its encoding is described in
- section 5.3.2.
-
-
-
-
-Kohl & Neuman [Page 59]
-\f
-RFC 1510 Kerberos September 1993
-
-
-5.5.2. KRB_AP_REP definition
-
- The KRB_AP_REP message contains the Kerberos protocol version number,
- the message type, and an encrypted timestamp. The message is sent in
- in response to an application request (KRB_AP_REQ) where the mutual
- authentication option has been selected in the ap-options field.
-
- AP-REP ::= [APPLICATION 15] SEQUENCE {
- pvno[0] INTEGER,
- msg-type[1] INTEGER,
- enc-part[2] EncryptedData
- }
-
- EncAPRepPart ::= [APPLICATION 27] SEQUENCE {
- ctime[0] KerberosTime,
- cusec[1] INTEGER,
- subkey[2] EncryptionKey OPTIONAL,
- seq-number[3] INTEGER OPTIONAL
- }
-
- NOTE: in EncAPRepPart, the application code in the encrypted part of
- a message provides an additional check that the message was decrypted
- properly.
-
- 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.
-
- 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 which 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 also left out, the session key from
- the ticket will be used.
-
-
-
-
-
-Kohl & Neuman [Page 60]
-\f
-RFC 1510 Kerberos September 1993
-
-
-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 session key. The message fields are:
-
- KRB-SAFE ::= [APPLICATION 20] SEQUENCE {
- pvno[0] INTEGER,
- msg-type[1] INTEGER,
- safe-body[2] KRB-SAFE-BODY,
- cksum[3] Checksum
- }
-
- KRB-SAFE-BODY ::= SEQUENCE {
- user-data[0] OCTET STRING,
- timestamp[1] KerberosTime OPTIONAL,
- usec[2] INTEGER OPTIONAL,
- seq-number[3] INTEGER 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.
-
- safe-body This field is a placeholder for the body of the KRB-SAFE
- message. It is to be encoded separately and then have the
- checksum computed over it, for use in the cksum field.
-
- cksum This field contains the checksum of the application data.
- Checksum details are described in section 6.4. The
-
-
-
-Kohl & Neuman [Page 61]
-\f
-RFC 1510 Kerberos September 1993
-
-
- checksum is computed over the encoding of the KRB-SAFE-BODY
- sequence.
-
- user-data This field is part of the KRB_SAFE and KRB_PRIV messages
- and contain 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 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 which have been incorrectly
- or maliciously delivered to the wrong recipient.
-
-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 securely and
- privately send a 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.7.1. KRB_PRIV definition
-
- The KRB_PRIV message contains user data encrypted in the Session Key.
- The message fields are:
-
- KRB-PRIV ::= [APPLICATION 21] SEQUENCE {
- pvno[0] INTEGER,
- msg-type[1] INTEGER,
- enc-part[3] EncryptedData
- }
-
-
-
-
-
-Kohl & Neuman [Page 62]
-\f
-RFC 1510 Kerberos September 1993
-
-
- EncKrbPrivPart ::= [APPLICATION 28] SEQUENCE {
- user-data[0] OCTET STRING,
- timestamp[1] KerberosTime OPTIONAL,
- usec[2] INTEGER OPTIONAL,
- seq-number[3] INTEGER OPTIONAL,
- s-address[4] HostAddress, -- sender's addr
- r-address[5] HostAddress OPTIONAL
- -- recip's addr
- }
-
- NOTE: In EncKrbPrivPart, the application code in the encrypted part
- of a message provides an additional check that the message was
- decrypted properly.
-
- 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 (If supported by the
- encryption method in use, an initialization vector may be
- passed to the encryption procedure, in order to achieve
- proper cipher chaining. The initialization vector might
- come from the last block of the ciphertext from the
- previous KRB_PRIV message, but it is the application's
- choice whether or not to use such an initialization vector.
- If left out, the default initialization vector for the
- encryption algorithm will be used.). This encrypted
- encoding is used for the enc-part field of the KRB-PRIV
- message. See section 6 for the format of the ciphertext.
-
- 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.
-
-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
-
-
-
-Kohl & Neuman [Page 63]
-\f
-RFC 1510 Kerberos September 1993
-
-
- each. The information needed to use the tickets is encryped under an
- encryption key previously exchanged. The message fields are:
-
- KRB-CRED ::= [APPLICATION 22] SEQUENCE {
- pvno[0] INTEGER,
- msg-type[1] INTEGER, -- KRB_CRED
- tickets[2] SEQUENCE OF Ticket,
- enc-part[3] EncryptedData
- }
-
- EncKrbCredPart ::= [APPLICATION 29] SEQUENCE {
- ticket-info[0] SEQUENCE OF KrbCredInfo,
- nonce[1] INTEGER OPTIONAL,
- timestamp[2] KerberosTime OPTIONAL,
- usec[3] INTEGER 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
- }
-
-
- 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 between the sender
- and the intended recipient. This encrypted encoding is
- used for the enc-part field of the KRB-CRED message. See
- section 6 for the format of the ciphertext.
-
-
-
-Kohl & Neuman [Page 64]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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 re-
- used; it should be generated randomly by the recipient of
- the message and provided to the sender of the mes sage in
- an application specific manner.
-
- 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 6.2.
-
- 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 value.
-
- 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 since the KRB_ERROR message is not protected by any
- encryption, it is quite possible for an intruder to synthesize or
-
-
-
-Kohl & Neuman [Page 65]
-\f
-RFC 1510 Kerberos September 1993
-
-
- modify such a message. 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,
- msg-type[1] INTEGER,
- ctime[2] KerberosTime OPTIONAL,
- cusec[3] INTEGER OPTIONAL,
- stime[4] KerberosTime,
- susec[5] INTEGER,
- error-code[6] INTEGER,
- crealm[7] Realm OPTIONAL,
- cname[8] PrincipalName OPTIONAL,
- realm[9] Realm, -- Correct realm
- sname[10] PrincipalName, -- Correct name
- e-text[11] GeneralString OPTIONAL,
- 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 This field is described above in section 5.4.1.
-
- cusec This field is described above in section 5.5.2.
-
- 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 999. 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 8.
- Implementations are encouraged to provide for national
- language support in the display of error messages.
-
- crealm, cname, srealm and sname These fields are described above in
-
-
-
-Kohl & Neuman [Page 66]
-\f
-RFC 1510 Kerberos September 1993
-
-
- section 5.3.1.
-
- 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).
-
- 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
-
- If the error-code is KRB_AP_ERR_METHOD, then the e-data field will
- contain an encoding of the following sequence:
-
- METHOD-DATA ::= SEQUENCE {
- method-type[0] INTEGER,
- method-data[1] OCTET STRING OPTIONAL
- }
-
- method-type will indicate the required alternate method; method-data
- will contain any required additional information.
-
-6. Encryption and Checksum Specifications
-
- The Kerberos protocols described in this document are designed to use
- stream encryption ciphers, which can be simulated using commonly
- available block encryption ciphers, such as the Data Encryption
- Standard [11], in conjunction with block chaining and checksum
- methods [12]. 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
- 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
-
-
-
-Kohl & Neuman [Page 67]
-\f
-RFC 1510 Kerberos September 1993
-
-
- extract the session key from the Ticket and prove its knowledge
- thereof in a response verifies the identity of the service.
-
- The Kerberos protocols generally assume that the encryption used is
- secure from cryptanalysis; however, in some cases, the order of
- fields in the encrypted portions of messages are arranged to minimize
- the effects of poorly chosen keys. It is still important to choose
- good keys. If keys are derived from user-typed passwords, those
- passwords need to be well chosen to make brute force attacks more
- difficult. Poorly chosen keys still make easy targets for intruders.
-
- The following sections specify the encryption and checksum mechanisms
- currently defined for Kerberos. The encodings, chaining, and padding
- requirements for each are described. For encryption methods, it is
- often desirable to place random information (often referred to as a
- confounder) at the start of the message. The requirements for a
- confounder are specified with each encryption mechanism.
-
- Some encryption systems use a block-chaining method to improve the
- the security characteristics of the ciphertext. However, these
- chaining methods often don't provide an integrity check upon
- decryption. Such systems (such as DES in CBC mode) must be augmented
- with a checksum of the plaintext which can be verified at decryption
- and used to detect any tampering or damage. Such checksums should be
- good at detecting burst errors in the input. If any damage is
- detected, the decryption routine is expected to return an error
- indicating the failure of an integrity check. Each encryption type is
- expected to provide and verify an appropriate checksum. The
- specification of each encryption method sets out its checksum
- requirements.
-
- Finally, where a key is to be derived from a user's password, an
- algorithm for converting the password to a key of the appropriate
- type is included. It is desirable for the string to key function to
- be one-way, and for the mapping to be different in different realms.
- This is important because users who are registered in more than one
- realm will often use the same password in each, and it is desirable
- that an attacker compromising the Kerberos server in one realm not
- obtain or derive the user's key in another.
-
- For a discussion of the integrity characteristics of the candidate
- encryption and checksum methods considered for Kerberos, the the
- reader is referred to [13].
-
-6.1. Encryption Specifications
-
- The following ASN.1 definition describes all encrypted messages. The
- enc-part field which appears in the unencrypted part of messages in
-
-
-
-Kohl & Neuman [Page 68]
-\f
-RFC 1510 Kerberos September 1993
-
-
- section 5 is a sequence consisting of an encryption type, an optional
- key version number, and the ciphertext.
-
- EncryptedData ::= SEQUENCE {
- etype[0] INTEGER, -- EncryptionType
- kvno[1] INTEGER OPTIONAL,
- cipher[2] OCTET STRING -- ciphertext
- }
-
- etype This field identifies which encryption algorithm was used
- to encipher the cipher. Detailed specifications for
- selected encryption types appear later in this section.
-
- 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.
-
- The cipher field is generated by applying the specified encryption
- algorithm to data composed of the message and algorithm-specific
- inputs. Encryption mechanisms defined for use with Kerberos must
- take sufficient measures to guarantee the integrity of the plaintext,
- and we recommend they also take measures to protect against
- precomputed dictionary attacks. If the encryption algorithm is not
- itself capable of doing so, the protections can often be enhanced by
- adding a checksum and a confounder.
-
- The suggested format for the data to be encrypted includes a
- confounder, a checksum, the encoded plaintext, and any necessary
- padding. The msg-seq field contains the part of the protocol message
- described in section 5 which is to be encrypted. The confounder,
- checksum, and padding are all untagged and untyped, and their length
- is exactly sufficient to hold the appropriate item. The type and
- length is implicit and specified by the particular encryption type
- being used (etype). The format for the data to be encrypted is
- described in the following diagram:
-
- +-----------+----------+-------------+-----+
- |confounder | check | msg-seq | pad |
- +-----------+----------+-------------+-----+
-
- The format cannot be described in ASN.1, but for those who prefer an
- ASN.1-like notation:
-
-
-
-
-
-Kohl & Neuman [Page 69]
-\f
-RFC 1510 Kerberos September 1993
-
-
-CipherText ::= ENCRYPTED SEQUENCE {
- confounder[0] UNTAGGED OCTET STRING(conf_length) OPTIONAL,
- check[1] UNTAGGED OCTET STRING(checksum_length) OPTIONAL,
- msg-seq[2] MsgSequence,
- pad UNTAGGED OCTET STRING(pad_length) OPTIONAL
-}
-
- In the above specification, UNTAGGED OCTET STRING(length) is the
- notation for an octet string with its tag and length removed. It is
- not a valid ASN.1 type. The tag bits and length must be removed from
- the confounder since the purpose of the confounder is so that the
- message starts with random data, but the tag and its length are
- fixed. For other fields, the length and tag would be redundant if
- they were included because they are specified by the encryption type.
-
- One generates a random confounder of the appropriate length, placing
- it in confounder; zeroes out check; calculates the appropriate
- checksum over confounder, check, and msg-seq, placing the result in
- check; adds the necessary padding; then encrypts using the specified
- encryption type and the appropriate key.
-
- Unless otherwise specified, a definition of an encryption algorithm
- that specifies a checksum, a length for the confounder field, or an
- octet boundary for padding uses this ciphertext format (The ordering
- of the fields in the CipherText is important. Additionally, messages
- encoded in this format must include a length as part of the msg-seq
- field. This allows the recipient to verify that the message has not
- been truncated. Without a length, an attacker could use a chosen
- plaintext attack to generate a message which could be truncated,
- while leaving the checksum intact. Note that if the msg-seq is an
- encoding of an ASN.1 SEQUENCE or OCTET STRING, then the length is
- part of that encoding.). Those fields which are not specified will be
- omitted.
-
- In the interest of allowing all implementations using a particular
- encryption type to communicate with all others using that type, the
- specification of an encryption type defines any checksum that is
- needed as part of the encryption process. If an alternative checksum
- is to be used, a new encryption type must be defined.
-
- Some cryptosystems require additional information beyond the key and
- the data to be encrypted. For example, DES, when used in cipher-
- block-chaining mode, requires an initialization vector. If required,
- the description for each encryption type must specify the source of
- such additional information.
-
-
-
-
-
-
-Kohl & Neuman [Page 70]
-\f
-RFC 1510 Kerberos September 1993
-
-
-6.2. Encryption Keys
-
- The sequence below shows the encoding of an encryption key:
-
- EncryptionKey ::= SEQUENCE {
- keytype[0] INTEGER,
- keyvalue[1] OCTET STRING
- }
-
- keytype This field specifies the type of encryption key that
- follows in the keyvalue field. It will almost always
- correspond to the encryption algorithm used to generate the
- EncryptedData, though more than one algorithm may use the
- same type of key (the mapping is many to one). This might
- happen, for example, if the encryption algorithm uses an
- alternate checksum algorithm for an integrity check, or a
- different chaining mechanism.
-
- keyvalue This field contains the key itself, encoded as an octet
- string.
-
- All negative values for the encryption key type are reserved for
- local use. All non-negative values are reserved for officially
- assigned type fields and interpretations.
-
-6.3. Encryption Systems
-
-6.3.1. The NULL Encryption System (null)
-
- If no encryption is in use, the encryption system is said to be the
- NULL encryption system. In the NULL encryption system there is no
- checksum, confounder or padding. The ciphertext is simply the
- plaintext. The NULL Key is used by the null encryption system and is
- zero octets in length, with keytype zero (0).
-
-6.3.2. DES in CBC mode with a CRC-32 checksum (des-cbc-crc)
-
- The des-cbc-crc encryption mode encrypts information under the Data
- Encryption Standard [11] using the cipher block chaining mode [12].
- A CRC-32 checksum (described in ISO 3309 [14]) is applied to the
- confounder and message sequence (msg-seq) and placed in the cksum
- field. DES blocks are 8 bytes. As a result, the data to be
- encrypted (the concatenation of confounder, checksum, and message)
- must be padded to an 8 byte boundary before encryption. The details
- of the encryption of this data are identical to those for the des-
- cbc-md5 encryption mode.
-
- Note that, since the CRC-32 checksum is not collisionproof, an
-
-
-
-Kohl & Neuman [Page 71]
-\f
-RFC 1510 Kerberos September 1993
-
-
- attacker could use a probabilistic chosenplaintext attack to generate
- a valid message even if a confounder is used [13]. The use of
- collision-proof checksums is recommended for environments where such
- attacks represent a significant threat. The use of the CRC-32 as the
- checksum for ticket or authenticator is no longer mandated as an
- interoperability requirement for Kerberos Version 5 Specification 1
- (See section 9.1 for specific details).
-
-6.3.3. DES in CBC mode with an MD4 checksum (des-cbc-md4)
-
- The des-cbc-md4 encryption mode encrypts information under the Data
- Encryption Standard [11] using the cipher block chaining mode [12].
- An MD4 checksum (described in [15]) is applied to the confounder and
- message sequence (msg-seq) and placed in the cksum field. DES blocks
- are 8 bytes. As a result, the data to be encrypted (the
- concatenation of confounder, checksum, and message) must be padded to
- an 8 byte boundary before encryption. The details of the encryption
- of this data are identical to those for the descbc-md5 encryption
- mode.
-
-6.3.4. DES in CBC mode with an MD5 checksum (des-cbc-md5)
-
- The des-cbc-md5 encryption mode encrypts information under the Data
- Encryption Standard [11] using the cipher block chaining mode [12].
- An MD5 checksum (described in [16]) is applied to the confounder and
- message sequence (msg-seq) and placed in the cksum field. DES blocks
- are 8 bytes. As a result, the data to be encrypted (the
- concatenation of confounder, checksum, and message) must be padded to
- an 8 byte boundary before encryption.
-
- Plaintext and DES ciphtertext are encoded as 8-octet blocks which are
- concatenated to make the 64-bit inputs for the DES algorithms. The
- first octet supplies the 8 most significant bits (with the octet's
- MSbit used as the DES input block's MSbit, etc.), the second octet
- the next 8 bits, ..., and the eighth octet supplies the 8 least
- significant bits.
-
- Encryption under DES using cipher block chaining requires an
- additional input in the form of an initialization vector. Unless
- otherwise specified, zero should be used as the initialization
- vector. Kerberos' use of DES requires an 8-octet confounder.
-
- The DES specifications identify some "weak" and "semiweak" keys;
- those keys shall not be used for encrypting messages for use in
- Kerberos. Additionally, because of the way that keys are derived for
- the encryption of checksums, keys shall not be used that yield "weak"
- or "semi-weak" keys when eXclusive-ORed with the constant
- F0F0F0F0F0F0F0F0.
-
-
-
-Kohl & Neuman [Page 72]
-\f
-RFC 1510 Kerberos September 1993
-
-
- A DES key is 8 octets of data, with keytype one (1). This consists
- of 56 bits of key, and 8 parity bits (one per octet). The key is
- encoded as a series of 8 octets written in MSB-first order. The bits
- within the key are also encoded in MSB order. For example, if the
- encryption key is:
- (B1,B2,...,B7,P1,B8,...,B14,P2,B15,...,B49,P7,B50,...,B56,P8) where
- B1,B2,...,B56 are the key bits in MSB order, and P1,P2,...,P8 are the
- parity bits, the first octet of the key would be B1,B2,...,B7,P1
- (with B1 as the MSbit). [See the FIPS 81 introduction for
- reference.]
-
- To generate a DES key from a text string (password), the text string
- normally must have the realm and each component of the principal's
- name appended(In some cases, it may be necessary to use a different
- "mix-in" string for compatibility reasons; see the discussion of
- padata in section 5.4.2.), then padded with ASCII nulls to an 8 byte
- boundary. This string is then fan-folded and eXclusive-ORed with
- itself to form an 8 byte DES key. The parity is corrected on the
- key, and it is used to generate a DES CBC checksum on the initial
- string (with the realm and name appended). Next, parity is corrected
- on the CBC checksum. If the result matches a "weak" or "semiweak"
- key as described in the DES specification, it is eXclusive-ORed with
- the constant 00000000000000F0. Finally, the result is returned as
- the key. Pseudocode follows:
-
- string_to_key(string,realm,name) {
- odd = 1;
- s = string + realm;
- for(each component in name) {
- s = s + component;
- }
- tempkey = NULL;
- pad(s); /* with nulls to 8 byte boundary */
- for(8byteblock in s) {
- if(odd == 0) {
- odd = 1;
- reverse(8byteblock)
- }
- else odd = 0;
- tempkey = tempkey XOR 8byteblock;
- }
- fixparity(tempkey);
- key = DES-CBC-check(s,tempkey);
- fixparity(key);
- if(is_weak_key_key(key))
- key = key XOR 0xF0;
- return(key);
- }
-
-
-
-Kohl & Neuman [Page 73]
-\f
-RFC 1510 Kerberos September 1993
-
-
-6.4. Checksums
-
- The following is the ASN.1 definition used for a checksum:
-
- Checksum ::= SEQUENCE {
- cksumtype[0] INTEGER,
- 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.
-
- Detailed specification of selected checksum types appear later in
- this section. Negative values for the checksum type are reserved for
- local use. All non-negative values are reserved for officially
- assigned type fields and interpretations.
-
- Checksums used by Kerberos can be classified by two properties:
- whether they are collision-proof, and whether they are keyed. It is
- infeasible to find two plaintexts which generate the same checksum
- value for a collision-proof checksum. A key is required to perturb
- or initialize the algorithm in a keyed checksum. To prevent
- message-stream modification by an active attacker, unkeyed checksums
- should only be used when the checksum and message will be
- subsequently encrypted (e.g., the checksums defined as part of the
- encryption algorithms covered earlier in this section). Collision-
- proof checksums can be made tamper-proof as well if the checksum
- value is encrypted before inclusion in a message. In such cases, the
- composition of the checksum and the encryption algorithm must be
- considered a separate checksum algorithm (e.g., RSA-MD5 encrypted
- using DES is a new checksum algorithm of type RSA-MD5-DES). For most
- keyed checksums, as well as for the encrypted forms of collisionproof
- checksums, Kerberos prepends a confounder before the checksum is
- calculated.
-
-6.4.1. The CRC-32 Checksum (crc32)
-
- The CRC-32 checksum calculates a checksum based on a cyclic
- redundancy check as described in ISO 3309 [14]. The resulting
- checksum is four (4) octets in length. The CRC-32 is neither keyed
- nor collision-proof. The use of this checksum is not recommended.
- An attacker using a probabilistic chosen-plaintext attack as
- described in [13] might be able to generate an alternative message
- that satisfies the checksum. The use of collision-proof checksums is
- recommended for environments where such attacks represent a
-
-
-
-Kohl & Neuman [Page 74]
-\f
-RFC 1510 Kerberos September 1993
-
-
- significant threat.
-
-6.4.2. The RSA MD4 Checksum (rsa-md4)
-
- The RSA-MD4 checksum calculates a checksum using the RSA MD4
- algorithm [15]. The algorithm takes as input an input message of
- arbitrary length and produces as output a 128-bit (16 octet)
- checksum. RSA-MD4 is believed to be collision-proof.
-
-6.4.3. RSA MD4 Cryptographic Checksum Using DES (rsa-md4des)
-
- The RSA-MD4-DES checksum calculates a keyed collisionproof checksum
- by prepending an 8 octet confounder before the text, applying the RSA
- MD4 checksum algorithm, and encrypting the confounder and the
- checksum using DES in cipher-block-chaining (CBC) mode using a
- variant of the key, where the variant is computed by eXclusive-ORing
- the key with the constant F0F0F0F0F0F0F0F0 (A variant of the key is
- used to limit the use of a key to a particular function, separating
- the functions of generating a checksum from other encryption
- performed using the session key. The constant F0F0F0F0F0F0F0F0 was
- chosen because it maintains key parity. The properties of DES
- precluded the use of the complement. The same constant is used for
- similar purpose in the Message Integrity Check in the Privacy
- Enhanced Mail standard.). The initialization vector should be zero.
- The resulting checksum is 24 octets long (8 octets of which are
- redundant). This checksum is tamper-proof and believed to be
- collision-proof.
-
- The DES specifications identify some "weak keys"; those keys shall
- not be used for generating RSA-MD4 checksums for use in Kerberos.
-
- The format for the checksum is described in the following diagram:
-
- +--+--+--+--+--+--+--+--
- | des-cbc(confounder
- +--+--+--+--+--+--+--+--
-
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- rsa-md4(confounder+msg),key=var(key),iv=0) |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-
- The format cannot be described in ASN.1, but for those who prefer an
- ASN.1-like notation:
-
- rsa-md4-des-checksum ::= ENCRYPTED UNTAGGED SEQUENCE {
- confounder[0] UNTAGGED OCTET STRING(8),
- check[1] UNTAGGED OCTET STRING(16)
- }
-
-
-
-Kohl & Neuman [Page 75]
-\f
-RFC 1510 Kerberos September 1993
-
-
-6.4.4. The RSA MD5 Checksum (rsa-md5)
-
- The RSA-MD5 checksum calculates a checksum using the RSA MD5
- algorithm [16]. The algorithm takes as input an input message of
- arbitrary length and produces as output a 128-bit (16 octet)
- checksum. RSA-MD5 is believed to be collision-proof.
-
-6.4.5. RSA MD5 Cryptographic Checksum Using DES (rsa-md5des)
-
- The RSA-MD5-DES checksum calculates a keyed collisionproof checksum
- by prepending an 8 octet confounder before the text, applying the RSA
- MD5 checksum algorithm, and encrypting the confounder and the
- checksum using DES in cipher-block-chaining (CBC) mode using a
- variant of the key, where the variant is computed by eXclusive-ORing
- the key with the constant F0F0F0F0F0F0F0F0. The initialization
- vector should be zero. The resulting checksum is 24 octets long (8
- octets of which are redundant). This checksum is tamper-proof and
- believed to be collision-proof.
-
- The DES specifications identify some "weak keys"; those keys shall
- not be used for encrypting RSA-MD5 checksums for use in Kerberos.
-
- The format for the checksum is described in the following diagram:
-
- +--+--+--+--+--+--+--+--
- | des-cbc(confounder
- +--+--+--+--+--+--+--+--
-
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- rsa-md5(confounder+msg),key=var(key),iv=0) |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-
- The format cannot be described in ASN.1, but for those who prefer an
- ASN.1-like notation:
-
- rsa-md5-des-checksum ::= ENCRYPTED UNTAGGED SEQUENCE {
- confounder[0] UNTAGGED OCTET STRING(8),
- check[1] UNTAGGED OCTET STRING(16)
- }
-
-6.4.6. DES cipher-block chained checksum (des-mac)
-
- The DES-MAC checksum is computed by prepending an 8 octet confounder
- to the plaintext, performing a DES CBC-mode encryption on the result
- using the key and an initialization vector of zero, taking the last
- block of the ciphertext, prepending the same confounder and
- encrypting the pair using DES in cipher-block-chaining (CBC) mode
- using a a variant of the key, where the variant is computed by
-
-
-
-Kohl & Neuman [Page 76]
-\f
-RFC 1510 Kerberos September 1993
-
-
- eXclusive-ORing the key with the constant F0F0F0F0F0F0F0F0. The
- initialization vector should be zero. The resulting checksum is 128
- bits (16 octets) long, 64 bits of which are redundant. This checksum
- is tamper-proof and collision-proof.
-
- The format for the checksum is described in the following diagram:
-
- +--+--+--+--+--+--+--+--
- | des-cbc(confounder
- +--+--+--+--+--+--+--+--
-
- +-----+-----+-----+-----+-----+-----+-----+-----+
- des-mac(conf+msg,iv=0,key),key=var(key),iv=0) |
- +-----+-----+-----+-----+-----+-----+-----+-----+
-
- The format cannot be described in ASN.1, but for those who prefer an
- ASN.1-like notation:
-
- des-mac-checksum ::= ENCRYPTED UNTAGGED SEQUENCE {
- confounder[0] UNTAGGED OCTET STRING(8),
- check[1] UNTAGGED OCTET STRING(8)
- }
-
- The DES specifications identify some "weak" and "semiweak" keys;
- those keys shall not be used for generating DES-MAC checksums for use
- in Kerberos, nor shall a key be used whose veriant is "weak" or
- "semi-weak".
-
-6.4.7. RSA MD4 Cryptographic Checksum Using DES alternative
- (rsa-md4-des-k)
-
- The RSA-MD4-DES-K checksum calculates a keyed collision-proof
- checksum by applying the RSA MD4 checksum algorithm and encrypting
- the results using DES in cipherblock-chaining (CBC) mode using a DES
- key as both key and initialization vector. The resulting checksum is
- 16 octets long. This checksum is tamper-proof and believed to be
- collision-proof. Note that this checksum type is the old method for
- encoding the RSA-MD4-DES checksum and it is no longer recommended.
-
-6.4.8. DES cipher-block chained checksum alternative (desmac-k)
-
- The DES-MAC-K checksum is computed by performing a DES CBC-mode
- encryption of the plaintext, and using the last block of the
- ciphertext as the checksum value. It is keyed with an encryption key
- and an initialization vector; any uses which do not specify an
- additional initialization vector will use the key as both key and
- initialization vector. The resulting checksum is 64 bits (8 octets)
- long. This checksum is tamper-proof and collision-proof. Note that
-
-
-
-Kohl & Neuman [Page 77]
-\f
-RFC 1510 Kerberos September 1993
-
-
- this checksum type is the old method for encoding the DESMAC checksum
- and it is no longer recommended.
-
- The DES specifications identify some "weak keys"; those keys shall
- not be used for generating DES-MAC checksums for use in Kerberos.
-
-7. Naming Constraints
-
-7.1. Realm Names
-
- Although realm names are encoded as GeneralStrings and although a
- realm can technically 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.
-
- There are presently four styles of realm names: domain, X500, other,
- and reserved. Examples of each style follow:
-
- domain: host.subdomain.domain (example)
- X500: C=US/O=OSF (example)
- other: NAMETYPE:rest/of.name=without-restrictions (example)
- reserved: reserved, but will not conflict with above
-
- Domain names must look like domain names: they consist of components
- separated by periods (.) and they contain neither colons (:) nor
- slashes (/).
-
- X.500 names contain an equal (=) and cannot contain a colon (:)
- before the equal. 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.
-
- Names that fall into the other category must begin with a prefix that
- contains no equal (=) or period (.) and the prefix must be followed
- by a colon (:) and the rest of the name. All prefixes must be
- assigned before they may be used. Presently none are assigned.
-
- The reserved category includes strings which 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
-
-
-
-Kohl & Neuman [Page 78]
-\f
-RFC 1510 Kerberos September 1993
-
-
- various name styles. The following additional constraints apply to
- the assignment of realm names in the domain and X.500 categories: the
- name of a realm for the domain or X.500 formats must either 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
- 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 there will not in the future exists a name identical to the
- realm name of the child unless it is assigned to the same entity as
- the realm name.
-
-7.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 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). This constraint may be eliminated in the future. 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
-
- 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).
-
-
-
-Kohl & Neuman [Page 79]
-\f
-RFC 1510 Kerberos September 1993
-
-
- 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 used. An
- example of this name type is the Kerberos ticket-granting ticket
- which has a first component of krbtgt and a second component
- identifying the realm for which the ticket is valid.
-
- If instance is a single component following the service name and the
- instance identifies 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 SRVXHST 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 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 8.2.3 for the
- form of such names.
-
-7.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 lower case. For services such as telnet and the
- Berkeley R commands which run with system privileges, the first
- component will be the string "host" instead of a service specific
- identifier.
-
-8. Constants and other defined values
-
-8.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
-
-
-
-Kohl & Neuman [Page 80]
-\f
-RFC 1510 Kerberos September 1993
-
-
- type fields and interpretations.
-
- The values of the types for the following addresses are chosen to
- match the defined address family constants in the Berkeley Standard
- Distributions of Unix. They can be found in <sys/socket.h> with
- symbolic names AF_xxx (where xxx is an abbreviation of the address
- family name).
-
-
- Internet addresses
-
- Internet addresses are 32-bit (4-octet) quantities, encoded in MSB
- order. The type of internet addresses is two (2).
-
- CHAOSnet addresses
-
- CHAOSnet addresses are 16-bit (2-octet) quantities, encoded in MSB
- order. The type of CHAOSnet addresses is five (5).
-
- ISO addresses
-
- ISO addresses are variable-length. The type of ISO addresses is
- seven (7).
-
- Xerox Network Services (XNS) addresses
-
- XNS addresses are 48-bit (6-octet) quantities, encoded in MSB
- order. The type of XNS addresses is six (6).
-
- AppleTalk Datagram Delivery Protocol (DDP) addresses
-
- AppleTalk DDP addresses consist of an 8-bit node number and a 16-
- bit network number. The first octet of the address is the node
- number; the remaining two octets encode the network number in MSB
- order. The type of AppleTalk DDP addresses is sixteen (16).
-
- 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).
-
-8.2. KDC messages
-
-8.2.1. IP transport
-
- When contacting a Kerberos server (KDC) for a KRB_KDC_REQ request
- using IP transport, the client shall send a UDP datagram containing
- only an encoding of the request to port 88 (decimal) at the KDC's IP
-
-
-
-Kohl & Neuman [Page 81]
-\f
-RFC 1510 Kerberos September 1993
-
-
- address; 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.
-
-8.2.2. OSI transport
-
- During authentication of an OSI client to and OSI server, the mutual
- authentication of an OSI server to an OSI client, the transfer of
- credentials from an OSI client to an OSI server, or during exchange
- of private or integrity checked messages, Kerberos protocol messages
- may be treated as opaque objects and the type of the authentication
- mechanism will be:
-
- OBJECT IDENTIFIER ::= {iso (1), org(3), dod(5),internet(1),
- security(5), kerberosv5(2)}
-
- Depending on the situation, the opaque object will be an
- authentication header (KRB_AP_REQ), an authentication reply
- (KRB_AP_REP), a safe message (KRB_SAFE), a private message
- (KRB_PRIV), or a credentials message (KRB_CRED). The opaque data
- contains an application code as specified in the ASN.1 description
- for each message. The application code may be used by Kerberos to
- determine the message type.
-
-8.2.3. Name of the TGS
-
- The principal identifier of the ticket-granting service shall be
- composed of three parts: (1) the realm of the KDC issuing the TGS
- ticket (2) a two-part name of type NT-SRVINST, with the first part
- "krbtgt" and the second part the name of the realm which will accept
- the ticket-granting ticket. For example, a ticket-granting ticket
- issued by the ATHENA.MIT.EDU realm to be used to get tickets from the
- ATHENA.MIT.EDU KDC has a principal identifier of "ATHENA.MIT.EDU"
- (realm), ("krbtgt", "ATHENA.MIT.EDU") (name). A ticket-granting
- ticket 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).
-
-8.3. Protocol constants and associated values
-
- The following tables list constants used in the protocol and defines
- their meanings.
-
-
-
-
-
-
-
-
-
-Kohl & Neuman [Page 82]
-\f
-RFC 1510 Kerberos September 1993
-
-
----------------+-----------+----------+----------------+---------------
-Encryption type|etype value|block size|minimum pad size|confounder size
----------------+-----------+----------+----------------+---------------
-NULL 0 1 0 0
-des-cbc-crc 1 8 4 8
-des-cbc-md4 2 8 0 8
-des-cbc-md5 3 8 0 8
-
--------------------------------+-------------------+-------------
-Checksum type |sumtype value |checksum size
--------------------------------+-------------------+-------------
-CRC32 1 4
-rsa-md4 2 16
-rsa-md4-des 3 24
-des-mac 4 16
-des-mac-k 5 8
-rsa-md4-des-k 6 16
-rsa-md5 7 16
-rsa-md5-des 8 24
-
--------------------------------+-----------------
-padata type |padata-type value
--------------------------------+-----------------
-PA-TGS-REQ 1
-PA-ENC-TIMESTAMP 2
-PA-PW-SALT 3
-
--------------------------------+-------------
-authorization data type |ad-type value
--------------------------------+-------------
-reserved values 0-63
-OSF-DCE 64
-SESAME 65
-
--------------------------------+-----------------
-alternate authentication type |method-type value
--------------------------------+-----------------
-reserved values 0-63
-ATT-CHALLENGE-RESPONSE 64
-
--------------------------------+-------------
-transited encoding type |tr-type value
--------------------------------+-------------
-DOMAIN-X500-COMPRESS 1
-reserved values all others
-
-
-
-
-
-
-Kohl & Neuman [Page 83]
-\f
-RFC 1510 Kerberos September 1993
-
-
---------------+-------+-----------------------------------------
-Label |Value |Meaning or MIT code
---------------+-------+-----------------------------------------
-
-pvno 5 current Kerberos protocol version number
-
-message types
-
-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_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
-
-name types
-
-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
-
-error codes
-
-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
-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
-
-
-
-Kohl & Neuman [Page 84]
-\f
-RFC 1510 Kerberos September 1993
-
-
-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 start time 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*
-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
-
-
-
-Kohl & Neuman [Page 85]
-\f
-RFC 1510 Kerberos September 1993
-
-
- message
-KRB_ERR_GENERIC 60 Generic error (description in e-text)
-KRB_ERR_FIELD_TOOLONG 61 Field is too long for this
- implementation
-
- *This error carries additional information in the e-data field. The
- contents of the e-data field for this message is described in section
- 5.9.1.
-
-9. 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, forwarding, postdating, and renewing tickets,
- the format of realm names, and the handling of authorization data.
-
- In order to ensure the interoperability of realms, it is necessary to
- define a minimal configuration which 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.
-
-9.1. Specification 1
-
- This section defines the first specification of these options.
- Implementations which are configured in this way can be said to
- support Kerberos Version 5 Specification 1 (5.1).
-
- Encryption and checksum methods
-
- The following encryption and checksum mechanisms must be supported.
- Implementations may support other mechanisms as well, but the
- additional mechanisms may only be used when communicating with
- principals known to also support them: Encryption: DES-CBC-MD5
- Checksums: CRC-32, DES-MAC, DES-MAC-K, and DES-MD5
-
- Realm Names
-
- All implementations must understand hierarchical realms in both the
- Internet Domain and the X.500 style. When a ticket granting ticket
- 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.
-
-
-
-
-Kohl & Neuman [Page 86]
-\f
-RFC 1510 Kerberos September 1993
-
-
- Transited field encoding
-
- DOMAIN-X500-COMPRESS (described in section 3.3.3.1) must be
- supported. Alternative encodings may be supported, but they may be
- used only when that encoding is supported by ALL intermediate realms.
-
- Pre-authentication methods
-
- The TGS-REQ method must be supported. The TGS-REQ method 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 not used in the initial request and the
- error KDC_ERR_PREAUTH_REQUIRED is returned specifying PA-ENCTIMESTAMP
- as an acceptable method, the client should retry the initial request
- using the PA-ENC-TIMESTAMP preauthentication method. Servers need not
- support the PAENC-TIMESTAMP method, but if not supported the server
- should ignore the presence of PA-ENC-TIMESTAMP pre-authentication in
- a request.
-
- Mutual authentication
-
- Mutual authentication (via the KRB_AP_REP message) must be supported.
-
- Ticket addresses and flags
-
- All KDC's must pass on tickets that carry no addresses (i.e., if a
- TGT contains no addresses, the KDC will return derivative tickets),
- but each realm may set its own policy for issuing such tickets, and
- each application server will set its own policy with respect to
- accepting them. By default, servers should not accept them.
-
- 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 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-TKTIN-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.
-
-
-
-Kohl & Neuman [Page 87]
-\f
-RFC 1510 Kerberos September 1993
-
-
- Authorization data
-
- Implementations must pass all authorization data subfields from
- ticket-granting tickets to any derivative tickets unless 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).
-
- 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.
-
-9.2. Recommended KDC values
-
- Following is a list of recommended values for a KDC implementation,
- based on the list of suggested configuration constants (see section
- 4.4).
-
- minimum lifetime 5 minutes
-
- maximum renewable lifetime 1 week
-
- maximum ticket lifetime 1 day
-
- empty addresses only when suitable restrictions appear
- in authorization data
-
- proxiable, etc. Allowed.
-
-10. Acknowledgments
-
- Early versions of this document, describing version 4 of the
- protocol, were written by Jennifer Steiner (formerly at Project
- Athena); these drafts provided an excellent starting point for this
- current version 5 specification. Many people in the Internet
- community have contributed ideas and suggested protocol changes for
- version 5. Notable contributions came from Ted Anderson, Steve
- Bellovin and Michael Merritt [17], Daniel Bernstein, Mike Burrows,
- Donald Davis, Ravi Ganesan, Morrie Gasser, Virgil Gligor, Bill
- Griffeth, Mark Lillibridge, Mark Lomas, Steve Lunt, Piers McMahon,
- Joe Pato, William Sommerfeld, Stuart Stubblebine, Ralph Swick, Ted
- T'so, and Stanley Zanarotti. Many others commented and helped shape
- this specification into its current form.
-
-
-
-
-
-
-
-Kohl & Neuman [Page 88]
-\f
-RFC 1510 Kerberos September 1993
-
-
-11. References
-
- [1] Miller, S., Neuman, C., Schiller, J., and J. Saltzer, "Section
- E.2.1: Kerberos Authentication and Authorization System",
- M.I.T. Project Athena, Cambridge, Massachusetts, December 21,
- 1987.
-
- [2] Steiner, J., Neuman, C., and J. Schiller, "Kerberos: An
- Authentication Service for Open Network Systems", pp. 191-202 in
- Usenix Conference Proceedings, Dallas, Texas, February, 1988.
-
- [3] Needham, R., and M. Schroeder, "Using Encryption for
- Authentication in Large Networks of Computers", Communications
- of the ACM, Vol. 21 (12), pp. 993-999, December 1978.
-
- [4] Denning, D., and G. Sacco, "Time stamps in Key Distribution
- Protocols", Communications of the ACM, Vol. 24 (8), pp. 533-536,
- August 1981.
-
- [5] Kohl, J., Neuman, C., and T. Ts'o, "The Evolution of the
- Kerberos Authentication Service", in an IEEE Computer Society
- Text soon to be published, June 1992.
-
- [6] Davis, D., and R. Swick, "Workstation Services and Kerberos
- Authentication at Project Athena", Technical Memorandum TM-424,
- MIT Laboratory for Computer Science, February 1990.
-
- [7] Levine, P., Gretzinger, M, Diaz, J., Sommerfeld, W., and K.
- Raeburn, "Section E.1: Service Management System, M.I.T.
- Project Athena, Cambridge, Mas sachusetts (1987).
-
- [8] CCITT, Recommendation X.509: The Directory Authentication
- Framework, December 1988.
-
- [9] Neuman, C., "Proxy-Based Authorization and Accounting for
- Distributed Systems," in Proceedings of the 13th International
- Conference on Distributed Computing Systems", Pittsburgh, PA,
- May 1993.
-
- [10] Pato, J., "Using Pre-Authentication to Avoid Password Guessing
- Attacks", Open Software Foundation DCE Request for Comments 26,
- December 1992.
-
- [11] National Bureau of Standards, U.S. Department of Commerce, "Data
- Encryption Standard", Federal Information Processing Standards
- Publication 46, Washington, DC (1977).
-
-
-
-
-
-Kohl & Neuman [Page 89]
-\f
-RFC 1510 Kerberos September 1993
-
-
- [12] National Bureau of Standards, U.S. Department of Commerce, "DES
- Modes of Operation", Federal Information Processing Standards
- Publication 81, Springfield, VA, December 1980.
-
- [13] Stubblebine S., and V. Gligor, "On Message Integrity in
- Cryptographic Protocols", in Proceedings of the IEEE Symposium
- on Research in Security and Privacy, Oakland, California, May
- 1992.
-
- [14] International Organization for Standardization, "ISO Information
- Processing Systems - Data Communication High-Level Data Link
- Control Procedure - Frame Structure", IS 3309, October 1984, 3rd
- Edition.
-
- [15] Rivest, R., "The MD4 Message Digest Algorithm", RFC 1320, MIT
- Laboratory for Computer Science, April 1992.
-
- [16] Rivest, R., "The MD5 Message Digest Algorithm", RFC 1321, MIT
- Laboratory for Computer Science, April 1992.
-
- [17] Bellovin S., and M. Merritt, "Limitations of the Kerberos
- Authentication System", Computer Communications Review, Vol.
- 20(5), pp. 119-132, October 1990.
-
-12. Security Considerations
-
- Security issues are discussed throughout this memo.
-
-13. Authors' Addresses
-
- John Kohl
- Digital Equipment Corporation
- 110 Spit Brook Road, M/S ZKO3-3/U14
- Nashua, NH 03062
-
- Phone: 603-881-2481
- EMail: jtkohl@zk3.dec.com
-
-
- B. Clifford Neuman
- USC/Information Sciences Institute
- 4676 Admiralty Way #1001
- Marina del Rey, CA 90292-6695
-
- Phone: 310-822-1511
- EMail: bcn@isi.edu
-
-
-
-
-
-Kohl & Neuman [Page 90]
-\f
-RFC 1510 Kerberos September 1993
-
-
-A. Pseudo-code for protocol processing
-
- This appendix provides pseudo-code describing how the messages are to
- be constructed and interpreted by clients and servers.
-
-A.1. KRB_AS_REQ generation
- request.pvno := protocol version; /* pvno = 5 */
- request.msg-type := message type; /* type = KRB_AS_REQ */
-
- if(pa_enc_timestamp_required) then
- request.padata.padata-type = PA-ENC-TIMESTAMP;
- get system_time;
- padata-body.patimestamp,pausec = system_time;
- encrypt padata-body into request.padata.padata-value
- using client.key; /* derived from password */
- endif
-
- body.kdc-options := users's preferences;
- body.cname := user's name;
- body.realm := user's realm;
- body.sname := service's name; /* usually "krbtgt",
- "localrealm" */
- if (body.kdc-options.POSTDATED is set) then
- body.from := requested starting time;
- else
- omit body.from;
- endif
- body.till := requested end time;
- if (body.kdc-options.RENEWABLE is set) then
- body.rtime := requested final renewal time;
- endif
- body.nonce := random_nonce();
- body.etype := requested etypes;
- if (user supplied addresses) then
- body.addresses := user's addresses;
- else
- omit body.addresses;
- endif
- omit body.enc-authorization-data;
- request.req-body := body;
-
- kerberos := lookup(name of local kerberos server (or servers));
- send(packet,kerberos);
-
- wait(for response);
- if (timed_out) then
- retry or use alternate server;
- endif
-
-
-
-Kohl & Neuman [Page 91]
-\f
-RFC 1510 Kerberos September 1993
-
-
-A.2. KRB_AS_REQ verification and KRB_AS_REP generation
- decode message into req;
-
- client := lookup(req.cname,req.realm);
- server := lookup(req.sname,req.realm);
- get system_time;
- kdc_time := system_time.seconds;
-
- if (!client) then
- /* no client in Database */
- error_out(KDC_ERR_C_PRINCIPAL_UNKNOWN);
- endif
- if (!server) then
- /* no server in Database */
- error_out(KDC_ERR_S_PRINCIPAL_UNKNOWN);
- endif
-
- if(client.pa_enc_timestamp_required and
- pa_enc_timestamp not present) then
- error_out(KDC_ERR_PREAUTH_REQUIRED(PA_ENC_TIMESTAMP));
- endif
-
- if(pa_enc_timestamp present) then
- decrypt req.padata-value into decrypted_enc_timestamp
- using client.key;
- using auth_hdr.authenticator.subkey;
- if (decrypt_error()) then
- error_out(KRB_AP_ERR_BAD_INTEGRITY);
- if(decrypted_enc_timestamp is not within allowable
- skew) then error_out(KDC_ERR_PREAUTH_FAILED);
- endif
- if(decrypted_enc_timestamp and usec is replay)
- error_out(KDC_ERR_PREAUTH_FAILED);
- endif
- add decrypted_enc_timestamp and usec to replay cache;
- endif
-
- use_etype := first supported etype in req.etypes;
-
- if (no support for req.etypes) then
- error_out(KDC_ERR_ETYPE_NOSUPP);
- endif
-
- new_tkt.vno := ticket version; /* = 5 */
- new_tkt.sname := req.sname;
- new_tkt.srealm := req.srealm;
- reset all flags in new_tkt.flags;
-
-
-
-
-Kohl & Neuman [Page 92]
-\f
-RFC 1510 Kerberos September 1993
-
-
- /* It should be noted that local policy may affect the */
- /* processing of any of these flags. For example, some */
- /* realms may refuse to issue renewable tickets */
-
- if (req.kdc-options.FORWARDABLE is set) then
- set new_tkt.flags.FORWARDABLE;
- endif
- if (req.kdc-options.PROXIABLE is set) then
- set new_tkt.flags.PROXIABLE;
- endif
- if (req.kdc-options.ALLOW-POSTDATE is set) then
- set new_tkt.flags.ALLOW-POSTDATE;
- endif
- if ((req.kdc-options.RENEW is set) or
- (req.kdc-options.VALIDATE is set) or
- (req.kdc-options.PROXY is set) or
- (req.kdc-options.FORWARDED is set) or
- (req.kdc-options.ENC-TKT-IN-SKEY is set)) then
- error_out(KDC_ERR_BADOPTION);
- endif
-
- new_tkt.session := random_session_key();
- new_tkt.cname := req.cname;
- new_tkt.crealm := req.crealm;
- new_tkt.transited := empty_transited_field();
-
- new_tkt.authtime := kdc_time;
-
- if (req.kdc-options.POSTDATED is set) then
- if (against_postdate_policy(req.from)) then
- error_out(KDC_ERR_POLICY);
- endif
- set new_tkt.flags.INVALID;
- new_tkt.starttime := req.from;
- else
- omit new_tkt.starttime; /* treated as authtime when
- omitted */
- endif
- if (req.till = 0) then
- till := infinity;
- else
- till := req.till;
- endif
-
- new_tkt.endtime := min(till,
- new_tkt.starttime+client.max_life,
- new_tkt.starttime+server.max_life,
- new_tkt.starttime+max_life_for_realm);
-
-
-
-Kohl & Neuman [Page 93]
-\f
-RFC 1510 Kerberos September 1993
-
-
- if ((req.kdc-options.RENEWABLE-OK is set) and
- (new_tkt.endtime < req.till)) then
- /* we set the RENEWABLE option for later processing */
- set req.kdc-options.RENEWABLE;
- req.rtime := req.till;
- endif
-
- if (req.rtime = 0) then
- rtime := infinity;
- else
- rtime := req.rtime;
- endif
-
- if (req.kdc-options.RENEWABLE is set) then
- set new_tkt.flags.RENEWABLE;
- new_tkt.renew-till := min(rtime,
- new_tkt.starttime+client.max_rlife,
- new_tkt.starttime+server.max_rlife,
- new_tkt.starttime+max_rlife_for_realm);
- else
- omit new_tkt.renew-till; /* only present if RENEWABLE */
- endif
-
- if (req.addresses) then
- new_tkt.caddr := req.addresses;
- else
- omit new_tkt.caddr;
- endif
-
- new_tkt.authorization_data := empty_authorization_data();
-
- encode to-be-encrypted part of ticket into OCTET STRING;
- new_tkt.enc-part := encrypt OCTET STRING
- using etype_for_key(server.key), server.key, server.p_kvno;
-
-
- /* Start processing the response */
-
- resp.pvno := 5;
- resp.msg-type := KRB_AS_REP;
- resp.cname := req.cname;
- resp.crealm := req.realm;
- resp.ticket := new_tkt;
-
- resp.key := new_tkt.session;
- resp.last-req := fetch_last_request_info(client);
- resp.nonce := req.nonce;
- resp.key-expiration := client.expiration;
-
-
-
-Kohl & Neuman [Page 94]
-\f
-RFC 1510 Kerberos September 1993
-
-
- resp.flags := new_tkt.flags;
-
- resp.authtime := new_tkt.authtime;
- resp.starttime := new_tkt.starttime;
- resp.endtime := new_tkt.endtime;
-
- if (new_tkt.flags.RENEWABLE) then
- resp.renew-till := new_tkt.renew-till;
- endif
-
- resp.realm := new_tkt.realm;
- resp.sname := new_tkt.sname;
-
- resp.caddr := new_tkt.caddr;
-
- encode body of reply into OCTET STRING;
-
- resp.enc-part := encrypt OCTET STRING
- using use_etype, client.key, client.p_kvno;
- send(resp);
-
-A.3. KRB_AS_REP verification
- decode response into resp;
-
- if (resp.msg-type = KRB_ERROR) then
- if(error = KDC_ERR_PREAUTH_REQUIRED(PA_ENC_TIMESTAMP))
- then set pa_enc_timestamp_required;
- goto KRB_AS_REQ;
- endif
- process_error(resp);
- return;
- endif
-
- /* On error, discard the response, and zero the session key */
- /* from the response immediately */
-
- key = get_decryption_key(resp.enc-part.kvno, resp.enc-part.etype,
- resp.padata);
- unencrypted part of resp := decode of decrypt of resp.enc-part
- using resp.enc-part.etype and key;
- zero(key);
-
- if (common_as_rep_tgs_rep_checks fail) then
- destroy resp.key;
- return error;
- endif
-
- if near(resp.princ_exp) then
-
-
-
-Kohl & Neuman [Page 95]
-\f
-RFC 1510 Kerberos September 1993
-
-
- print(warning message);
- endif
- save_for_later(ticket,session,client,server,times,flags);
-
-A.4. KRB_AS_REP and KRB_TGS_REP common checks
- if (decryption_error() or
- (req.cname != resp.cname) or
- (req.realm != resp.crealm) or
- (req.sname != resp.sname) or
- (req.realm != resp.realm) or
- (req.nonce != resp.nonce) or
- (req.addresses != resp.caddr)) then
- destroy resp.key;
- return KRB_AP_ERR_MODIFIED;
- endif
-
- /* make sure no flags are set that shouldn't be, and that */
- /* all that should be are set */
- if (!check_flags_for_compatability(req.kdc-options,resp.flags))
- then destroy resp.key;
- return KRB_AP_ERR_MODIFIED;
- endif
-
- if ((req.from = 0) and
- (resp.starttime is not within allowable skew)) then
- destroy resp.key;
- return KRB_AP_ERR_SKEW;
- endif
- if ((req.from != 0) and (req.from != resp.starttime)) then
- destroy resp.key;
- return KRB_AP_ERR_MODIFIED;
- endif
- if ((req.till != 0) and (resp.endtime > req.till)) then
- destroy resp.key;
- return KRB_AP_ERR_MODIFIED;
- endif
-
- if ((req.kdc-options.RENEWABLE is set) and
- (req.rtime != 0) and (resp.renew-till > req.rtime)) then
- destroy resp.key;
- return KRB_AP_ERR_MODIFIED;
- endif
- if ((req.kdc-options.RENEWABLE-OK is set) and
- (resp.flags.RENEWABLE) and
- (req.till != 0) and
- (resp.renew-till > req.till)) then
- destroy resp.key;
- return KRB_AP_ERR_MODIFIED;
-
-
-
-Kohl & Neuman [Page 96]
-\f
-RFC 1510 Kerberos September 1993
-
-
- endif
-
-A.5. KRB_TGS_REQ generation
- /* Note that make_application_request might have to */
- /* recursivly call this routine to get the appropriate */
- /* ticket-granting ticket */
-
- request.pvno := protocol version; /* pvno = 5 */
- request.msg-type := message type; /* type = KRB_TGS_REQ */
-
- body.kdc-options := users's preferences;
- /* If the TGT is not for the realm of the end-server */
- /* then the sname will be for a TGT for the end-realm */
- /* and the realm of the requested ticket (body.realm) */
- /* will be that of the TGS to which the TGT we are */
- /* sending applies */
- body.sname := service's name;
- body.realm := service's realm;
-
- if (body.kdc-options.POSTDATED is set) then
- body.from := requested starting time;
- else
- omit body.from;
- endif
- body.till := requested end time;
- if (body.kdc-options.RENEWABLE is set) then
- body.rtime := requested final renewal time;
- endif
- body.nonce := random_nonce();
- body.etype := requested etypes;
- if (user supplied addresses) then
- body.addresses := user's addresses;
- else
- omit body.addresses;
- endif
-
- body.enc-authorization-data := user-supplied data;
- if (body.kdc-options.ENC-TKT-IN-SKEY) then
- body.additional-tickets_ticket := second TGT;
- endif
-
- request.req-body := body;
- check := generate_checksum (req.body,checksumtype);
-
- request.padata[0].padata-type := PA-TGS-REQ;
- request.padata[0].padata-value := create a KRB_AP_REQ using
- the TGT and checksum
-
-
-
-
-Kohl & Neuman [Page 97]
-\f
-RFC 1510 Kerberos September 1993
-
-
- /* add in any other padata as required/supplied */
-
- kerberos := lookup(name of local kerberose server (or servers));
- send(packet,kerberos);
-
- wait(for response);
- if (timed_out) then
- retry or use alternate server;
- endif
-
-A.6. KRB_TGS_REQ verification and KRB_TGS_REP generation
- /* note that reading the application request requires first
- determining the server for which a ticket was issued, and
- choosing the correct key for decryption. The name of the
- server appears in the plaintext part of the ticket. */
-
- if (no KRB_AP_REQ in req.padata) then
- error_out(KDC_ERR_PADATA_TYPE_NOSUPP);
- endif
- verify KRB_AP_REQ in req.padata;
-
- /* Note that the realm in which the Kerberos server is
- operating is determined by the instance from the
- ticket-granting ticket. The realm in the ticket-granting
- ticket is the realm under which the ticket granting ticket was
- issued. It is possible for a single Kerberos server to
- support more than one realm. */
-
- auth_hdr := KRB_AP_REQ;
- tgt := auth_hdr.ticket;
-
- if (tgt.sname is not a TGT for local realm and is not
- req.sname) then error_out(KRB_AP_ERR_NOT_US);
-
- realm := realm_tgt_is_for(tgt);
-
- decode remainder of request;
-
- if (auth_hdr.authenticator.cksum is missing) then
- error_out(KRB_AP_ERR_INAPP_CKSUM);
- endif
- if (auth_hdr.authenticator.cksum type is not supported) then
- error_out(KDC_ERR_SUMTYPE_NOSUPP);
- endif
- if (auth_hdr.authenticator.cksum is not both collision-proof
- and keyed) then
- error_out(KRB_AP_ERR_INAPP_CKSUM);
- endif
-
-
-
-Kohl & Neuman [Page 98]
-\f
-RFC 1510 Kerberos September 1993
-
-
- set computed_checksum := checksum(req);
- if (computed_checksum != auth_hdr.authenticatory.cksum) then
- error_out(KRB_AP_ERR_MODIFIED);
- endif
-
- server := lookup(req.sname,realm);
-
- if (!server) then
- if (is_foreign_tgt_name(server)) then
- server := best_intermediate_tgs(server);
- else
- /* no server in Database */
- error_out(KDC_ERR_S_PRINCIPAL_UNKNOWN);
- endif
- endif
-
- session := generate_random_session_key();
-
-
- use_etype := first supported etype in req.etypes;
-
- if (no support for req.etypes) then
- error_out(KDC_ERR_ETYPE_NOSUPP);
- endif
-
- new_tkt.vno := ticket version; /* = 5 */
- new_tkt.sname := req.sname;
- new_tkt.srealm := realm;
- reset all flags in new_tkt.flags;
-
- /* It should be noted that local policy may affect the */
- /* processing of any of these flags. For example, some */
- /* realms may refuse to issue renewable tickets */
-
- new_tkt.caddr := tgt.caddr;
- resp.caddr := NULL; /* We only include this if they change */
- if (req.kdc-options.FORWARDABLE is set) then
- if (tgt.flags.FORWARDABLE is reset) then
- error_out(KDC_ERR_BADOPTION);
- endif
- set new_tkt.flags.FORWARDABLE;
- endif
- if (req.kdc-options.FORWARDED is set) then
- if (tgt.flags.FORWARDABLE is reset) then
- error_out(KDC_ERR_BADOPTION);
- endif
- set new_tkt.flags.FORWARDED;
- new_tkt.caddr := req.addresses;
-
-
-
-Kohl & Neuman [Page 99]
-\f
-RFC 1510 Kerberos September 1993
-
-
- resp.caddr := req.addresses;
- endif
- if (tgt.flags.FORWARDED is set) then
- set new_tkt.flags.FORWARDED;
- endif
-
- if (req.kdc-options.PROXIABLE is set) then
- if (tgt.flags.PROXIABLE is reset)
- error_out(KDC_ERR_BADOPTION);
- endif
- set new_tkt.flags.PROXIABLE;
- endif
- if (req.kdc-options.PROXY is set) then
- if (tgt.flags.PROXIABLE is reset) then
- error_out(KDC_ERR_BADOPTION);
- endif
- set new_tkt.flags.PROXY;
- new_tkt.caddr := req.addresses;
- resp.caddr := req.addresses;
- endif
-
- if (req.kdc-options.POSTDATE is set) then
- if (tgt.flags.POSTDATE is reset)
- error_out(KDC_ERR_BADOPTION);
- endif
- set new_tkt.flags.POSTDATE;
- endif
- if (req.kdc-options.POSTDATED is set) then
- if (tgt.flags.POSTDATE is reset) then
- error_out(KDC_ERR_BADOPTION);
- endif
- set new_tkt.flags.POSTDATED;
- set new_tkt.flags.INVALID;
- if (against_postdate_policy(req.from)) then
- error_out(KDC_ERR_POLICY);
- endif
- new_tkt.starttime := req.from;
- endif
-
-
- if (req.kdc-options.VALIDATE is set) then
- if (tgt.flags.INVALID is reset) then
- error_out(KDC_ERR_POLICY);
- endif
- if (tgt.starttime > kdc_time) then
- error_out(KRB_AP_ERR_NYV);
- endif
- if (check_hot_list(tgt)) then
-
-
-
-Kohl & Neuman [Page 100]
-\f
-RFC 1510 Kerberos September 1993
-
-
- error_out(KRB_AP_ERR_REPEAT);
- endif
- tkt := tgt;
- reset new_tkt.flags.INVALID;
- endif
-
- if (req.kdc-options.(any flag except ENC-TKT-IN-SKEY, RENEW,
- and those already processed) is set) then
- error_out(KDC_ERR_BADOPTION);
- endif
-
- new_tkt.authtime := tgt.authtime;
-
- if (req.kdc-options.RENEW is set) then
- /* Note that if the endtime has already passed, the ticket */
- /* would have been rejected in the initial authentication */
- /* stage, so there is no need to check again here */
- if (tgt.flags.RENEWABLE is reset) then
- error_out(KDC_ERR_BADOPTION);
- endif
- if (tgt.renew-till >= kdc_time) then
- error_out(KRB_AP_ERR_TKT_EXPIRED);
- endif
- tkt := tgt;
- new_tkt.starttime := kdc_time;
- old_life := tgt.endttime - tgt.starttime;
- new_tkt.endtime := min(tgt.renew-till,
- new_tkt.starttime + old_life);
- else
- new_tkt.starttime := kdc_time;
- if (req.till = 0) then
- till := infinity;
- else
- till := req.till;
- endif
- new_tkt.endtime := min(till,
- new_tkt.starttime+client.max_life,
- new_tkt.starttime+server.max_life,
- new_tkt.starttime+max_life_for_realm,
- tgt.endtime);
-
- if ((req.kdc-options.RENEWABLE-OK is set) and
- (new_tkt.endtime < req.till) and
- (tgt.flags.RENEWABLE is set) then
- /* we set the RENEWABLE option for later */
- /* processing */
- set req.kdc-options.RENEWABLE;
- req.rtime := min(req.till, tgt.renew-till);
-
-
-
-Kohl & Neuman [Page 101]
-\f
-RFC 1510 Kerberos September 1993
-
-
- endif
- endif
-
- if (req.rtime = 0) then
- rtime := infinity;
- else
- rtime := req.rtime;
- endif
-
- if ((req.kdc-options.RENEWABLE is set) and
- (tgt.flags.RENEWABLE is set)) then
- set new_tkt.flags.RENEWABLE;
- new_tkt.renew-till := min(rtime,
- new_tkt.starttime+client.max_rlife,
- new_tkt.starttime+server.max_rlife,
- new_tkt.starttime+max_rlife_for_realm,
- tgt.renew-till);
- else
- new_tkt.renew-till := OMIT;
- /* leave the renew-till field out */
- endif
- if (req.enc-authorization-data is present) then
- decrypt req.enc-authorization-data
- into decrypted_authorization_data
- using auth_hdr.authenticator.subkey;
- if (decrypt_error()) then
- error_out(KRB_AP_ERR_BAD_INTEGRITY);
- endif
- endif
- new_tkt.authorization_data :=
- req.auth_hdr.ticket.authorization_data +
- decrypted_authorization_data;
-
- new_tkt.key := session;
- new_tkt.crealm := tgt.crealm;
- new_tkt.cname := req.auth_hdr.ticket.cname;
-
- if (realm_tgt_is_for(tgt) := tgt.realm) then
- /* tgt issued by local realm */
- new_tkt.transited := tgt.transited;
- else
- /* was issued for this realm by some other realm */
- if (tgt.transited.tr-type not supported) then
- error_out(KDC_ERR_TRTYPE_NOSUPP);
- endif
- new_tkt.transited
- := compress_transited(tgt.transited + tgt.realm)
- endif
-
-
-
-Kohl & Neuman [Page 102]
-\f
-RFC 1510 Kerberos September 1993
-
-
- encode encrypted part of new_tkt into OCTET STRING;
- if (req.kdc-options.ENC-TKT-IN-SKEY is set) then
- if (server not specified) then
- server = req.second_ticket.client;
- endif
- if ((req.second_ticket is not a TGT) or
- (req.second_ticket.client != server)) then
- error_out(KDC_ERR_POLICY);
- endif
-
- new_tkt.enc-part := encrypt OCTET STRING using
- using etype_for_key(second-ticket.key),
- second-ticket.key;
- else
- new_tkt.enc-part := encrypt OCTET STRING
- using etype_for_key(server.key), server.key,
- server.p_kvno;
- endif
-
- resp.pvno := 5;
- resp.msg-type := KRB_TGS_REP;
- resp.crealm := tgt.crealm;
- resp.cname := tgt.cname;
- resp.ticket := new_tkt;
-
- resp.key := session;
- resp.nonce := req.nonce;
- resp.last-req := fetch_last_request_info(client);
- resp.flags := new_tkt.flags;
-
- resp.authtime := new_tkt.authtime;
- resp.starttime := new_tkt.starttime;
- resp.endtime := new_tkt.endtime;
-
- omit resp.key-expiration;
-
- resp.sname := new_tkt.sname;
- resp.realm := new_tkt.realm;
-
- if (new_tkt.flags.RENEWABLE) then
- resp.renew-till := new_tkt.renew-till;
- endif
-
-
- encode body of reply into OCTET STRING;
-
- if (req.padata.authenticator.subkey)
- resp.enc-part := encrypt OCTET STRING using use_etype,
-
-
-
-Kohl & Neuman [Page 103]
-\f
-RFC 1510 Kerberos September 1993
-
-
- req.padata.authenticator.subkey;
- else resp.enc-part := encrypt OCTET STRING
- using use_etype, tgt.key;
-
- send(resp);
-
-A.7. KRB_TGS_REP verification
- decode response into resp;
-
- if (resp.msg-type = KRB_ERROR) then
- process_error(resp);
- return;
- endif
-
- /* On error, discard the response, and zero the session key from
- the response immediately */
-
- if (req.padata.authenticator.subkey)
- unencrypted part of resp :=
- decode of decrypt of resp.enc-part
- using resp.enc-part.etype and subkey;
- else unencrypted part of resp :=
- decode of decrypt of resp.enc-part
- using resp.enc-part.etype and tgt's session key;
- if (common_as_rep_tgs_rep_checks fail) then
- destroy resp.key;
- return error;
- endif
-
- check authorization_data as necessary;
- save_for_later(ticket,session,client,server,times,flags);
-
-A.8. Authenticator generation
- body.authenticator-vno := authenticator vno; /* = 5 */
- body.cname, body.crealm := client name;
- if (supplying checksum) then
- body.cksum := checksum;
- endif
- get system_time;
- body.ctime, body.cusec := system_time;
- if (selecting sub-session key) then
- select sub-session key;
- body.subkey := sub-session key;
- endif
- if (using sequence numbers) then
- select initial sequence number;
- body.seq-number := initial sequence;
- endif
-
-
-
-Kohl & Neuman [Page 104]
-\f
-RFC 1510 Kerberos September 1993
-
-
-A.9. KRB_AP_REQ generation
- obtain ticket and session_key from cache;
-
- packet.pvno := protocol version; /* 5 */
- packet.msg-type := message type; /* KRB_AP_REQ */
-
- if (desired(MUTUAL_AUTHENTICATION)) then
- set packet.ap-options.MUTUAL-REQUIRED;
- else
- reset packet.ap-options.MUTUAL-REQUIRED;
- endif
- if (using session key for ticket) then
- set packet.ap-options.USE-SESSION-KEY;
- else
- reset packet.ap-options.USE-SESSION-KEY;
- endif
- packet.ticket := ticket; /* ticket */
- generate authenticator;
- encode authenticator into OCTET STRING;
- encrypt OCTET STRING into packet.authenticator
- using session_key;
-
-A.10. KRB_AP_REQ verification
- receive packet;
- if (packet.pvno != 5) then
- either process using other protocol spec
- or error_out(KRB_AP_ERR_BADVERSION);
- endif
- if (packet.msg-type != KRB_AP_REQ) then
- error_out(KRB_AP_ERR_MSG_TYPE);
- endif
- if (packet.ticket.tkt_vno != 5) then
- either process using other protocol spec
- or error_out(KRB_AP_ERR_BADVERSION);
- endif
- if (packet.ap_options.USE-SESSION-KEY is set) then
- retrieve session key from ticket-granting ticket for
- packet.ticket.{sname,srealm,enc-part.etype};
- else
- retrieve service key for
- packet.ticket.{sname,srealm,enc-part.etype,enc-part.skvno};
- endif
- if (no_key_available) then
- if (cannot_find_specified_skvno) then
- error_out(KRB_AP_ERR_BADKEYVER);
- else
- error_out(KRB_AP_ERR_NOKEY);
- endif
-
-
-
-Kohl & Neuman [Page 105]
-\f
-RFC 1510 Kerberos September 1993
-
-
- endif
- decrypt packet.ticket.enc-part into decr_ticket
- using retrieved key;
- if (decryption_error()) then
- error_out(KRB_AP_ERR_BAD_INTEGRITY);
- endif
- decrypt packet.authenticator into decr_authenticator
- using decr_ticket.key;
- if (decryption_error()) then
- error_out(KRB_AP_ERR_BAD_INTEGRITY);
- endif
- if (decr_authenticator.{cname,crealm} !=
- decr_ticket.{cname,crealm}) then
- error_out(KRB_AP_ERR_BADMATCH);
- endif
- if (decr_ticket.caddr is present) then
- if (sender_address(packet) is not in decr_ticket.caddr)
- then error_out(KRB_AP_ERR_BADADDR);
- endif
- elseif (application requires addresses) then
- error_out(KRB_AP_ERR_BADADDR);
- endif
- if (not in_clock_skew(decr_authenticator.ctime,
- decr_authenticator.cusec)) then
- error_out(KRB_AP_ERR_SKEW);
- endif
- if (repeated(decr_authenticator.{ctime,cusec,cname,crealm}))
- then error_out(KRB_AP_ERR_REPEAT);
- endif
- save_identifier(decr_authenticator.{ctime,cusec,cname,crealm});
- get system_time;
- if ((decr_ticket.starttime-system_time > CLOCK_SKEW) or
- (decr_ticket.flags.INVALID is set)) then
- /* it hasn't yet become valid */
- error_out(KRB_AP_ERR_TKT_NYV);
- endif
- if (system_time-decr_ticket.endtime > CLOCK_SKEW) then
- error_out(KRB_AP_ERR_TKT_EXPIRED);
- endif
- /* caller must check decr_ticket.flags for any pertinent */
- /* details */
- return(OK, decr_ticket, packet.ap_options.MUTUAL-REQUIRED);
-
-A.11. KRB_AP_REP generation
- packet.pvno := protocol version; /* 5 */
- packet.msg-type := message type; /* KRB_AP_REP */
- body.ctime := packet.ctime;
- body.cusec := packet.cusec;
-
-
-
-Kohl & Neuman [Page 106]
-\f
-RFC 1510 Kerberos September 1993
-
-
- if (selecting sub-session key) then
- select sub-session key;
- body.subkey := sub-session key;
- endif
- if (using sequence numbers) then
- select initial sequence number;
- body.seq-number := initial sequence;
- endif
-
- encode body into OCTET STRING;
-
- select encryption type;
- encrypt OCTET STRING into packet.enc-part;
-
-A.12. KRB_AP_REP verification
- receive packet;
- if (packet.pvno != 5) then
- either process using other protocol spec
- or error_out(KRB_AP_ERR_BADVERSION);
- endif
- if (packet.msg-type != KRB_AP_REP) then
- error_out(KRB_AP_ERR_MSG_TYPE);
- endif
- cleartext := decrypt(packet.enc-part)
- using ticket's session key;
- if (decryption_error()) then
- error_out(KRB_AP_ERR_BAD_INTEGRITY);
- endif
- if (cleartext.ctime != authenticator.ctime) then
- error_out(KRB_AP_ERR_MUT_FAIL);
- endif
- if (cleartext.cusec != authenticator.cusec) then
- error_out(KRB_AP_ERR_MUT_FAIL);
- endif
- if (cleartext.subkey is present) then
- save cleartext.subkey for future use;
- endif
- if (cleartext.seq-number is present) then
- save cleartext.seq-number for future verifications;
- endif
- return(AUTHENTICATION_SUCCEEDED);
-
-A.13. KRB_SAFE generation
- collect user data in buffer;
-
- /* assemble packet: */
- packet.pvno := protocol version; /* 5 */
- packet.msg-type := message type; /* KRB_SAFE */
-
-
-
-Kohl & Neuman [Page 107]
-\f
-RFC 1510 Kerberos September 1993
-
-
- body.user-data := buffer; /* DATA */
- if (using timestamp) then
- get system_time;
- body.timestamp, body.usec := system_time;
- endif
- if (using sequence numbers) then
- body.seq-number := sequence number;
- endif
- body.s-address := sender host addresses;
- if (only one recipient) then
- body.r-address := recipient host address;
- endif
- checksum.cksumtype := checksum type;
- compute checksum over body;
- checksum.checksum := checksum value; /* checksum.checksum */
- packet.cksum := checksum;
- packet.safe-body := body;
-
-A.14. KRB_SAFE verification
- receive packet;
- if (packet.pvno != 5) then
- either process using other protocol spec
- or error_out(KRB_AP_ERR_BADVERSION);
- endif
- if (packet.msg-type != KRB_SAFE) then
- error_out(KRB_AP_ERR_MSG_TYPE);
- endif
- if (packet.checksum.cksumtype is not both collision-proof
- and keyed) then
- error_out(KRB_AP_ERR_INAPP_CKSUM);
- endif
- if (safe_priv_common_checks_ok(packet)) then
- set computed_checksum := checksum(packet.body);
- if (computed_checksum != packet.checksum) then
- error_out(KRB_AP_ERR_MODIFIED);
- endif
- return (packet, PACKET_IS_GENUINE);
- else
- return common_checks_error;
- endif
-
-A.15. KRB_SAFE and KRB_PRIV common checks
- if (packet.s-address != O/S_sender(packet)) then
- /* O/S report of sender not who claims to have sent it */
- error_out(KRB_AP_ERR_BADADDR);
- endif
- if ((packet.r-address is present) and
- (packet.r-address != local_host_address)) then
-
-
-
-Kohl & Neuman [Page 108]
-\f
-RFC 1510 Kerberos September 1993
-
-
- /* was not sent to proper place */
- error_out(KRB_AP_ERR_BADADDR);
- endif
- if (((packet.timestamp is present) and
- (not in_clock_skew(packet.timestamp,packet.usec))) or
- (packet.timestamp is not present and timestamp expected))
- then error_out(KRB_AP_ERR_SKEW);
- endif
- if (repeated(packet.timestamp,packet.usec,packet.s-address))
- then error_out(KRB_AP_ERR_REPEAT);
- endif
- if (((packet.seq-number is present) and
- ((not in_sequence(packet.seq-number)))) or
- (packet.seq-number is not present and sequence expected))
- then error_out(KRB_AP_ERR_BADORDER);
- endif
- if (packet.timestamp not present and
- packet.seq-number not present) then
- error_out(KRB_AP_ERR_MODIFIED);
- endif
-
- save_identifier(packet.{timestamp,usec,s-address},
- sender_principal(packet));
-
- return PACKET_IS_OK;
-
-A.16. KRB_PRIV generation
- collect user data in buffer;
-
- /* assemble packet: */
- packet.pvno := protocol version; /* 5 */
- packet.msg-type := message type; /* KRB_PRIV */
-
- packet.enc-part.etype := encryption type;
-
- body.user-data := buffer;
- if (using timestamp) then
- get system_time;
- body.timestamp, body.usec := system_time;
- endif
- if (using sequence numbers) then
- body.seq-number := sequence number;
- endif
- body.s-address := sender host addresses;
- if (only one recipient) then
- body.r-address := recipient host address;
- endif
-
-
-
-
-Kohl & Neuman [Page 109]
-\f
-RFC 1510 Kerberos September 1993
-
-
- encode body into OCTET STRING;
-
- select encryption type;
- encrypt OCTET STRING into packet.enc-part.cipher;
-
-A.17. KRB_PRIV verification
- receive packet;
- if (packet.pvno != 5) then
- either process using other protocol spec
- or error_out(KRB_AP_ERR_BADVERSION);
- endif
- if (packet.msg-type != KRB_PRIV) then
- error_out(KRB_AP_ERR_MSG_TYPE);
- endif
-
- cleartext := decrypt(packet.enc-part) using negotiated key;
- if (decryption_error()) then
- error_out(KRB_AP_ERR_BAD_INTEGRITY);
- endif
-
- if (safe_priv_common_checks_ok(cleartext)) then
- return(cleartext.DATA, PACKET_IS_GENUINE_AND_UNMODIFIED);
- else
- return common_checks_error;
- endif
-
-A.18. KRB_CRED generation
- invoke KRB_TGS; /* obtain tickets to be provided to peer */
-
- /* assemble packet: */
- packet.pvno := protocol version; /* 5 */
- packet.msg-type := message type; /* KRB_CRED */
-
- for (tickets[n] in tickets to be forwarded) do
- packet.tickets[n] = tickets[n].ticket;
- done
-
- packet.enc-part.etype := encryption type;
-
- for (ticket[n] in tickets to be forwarded) do
- body.ticket-info[n].key = tickets[n].session;
- body.ticket-info[n].prealm = tickets[n].crealm;
- body.ticket-info[n].pname = tickets[n].cname;
- body.ticket-info[n].flags = tickets[n].flags;
- body.ticket-info[n].authtime = tickets[n].authtime;
- body.ticket-info[n].starttime = tickets[n].starttime;
- body.ticket-info[n].endtime = tickets[n].endtime;
- body.ticket-info[n].renew-till = tickets[n].renew-till;
-
-
-
-Kohl & Neuman [Page 110]
-\f
-RFC 1510 Kerberos September 1993
-
-
- body.ticket-info[n].srealm = tickets[n].srealm;
- body.ticket-info[n].sname = tickets[n].sname;
- body.ticket-info[n].caddr = tickets[n].caddr;
- done
-
- get system_time;
- body.timestamp, body.usec := system_time;
-
- if (using nonce) then
- body.nonce := nonce;
- endif
-
- if (using s-address) then
- body.s-address := sender host addresses;
- endif
- if (limited recipients) then
- body.r-address := recipient host address;
- endif
-
- encode body into OCTET STRING;
-
- select encryption type;
- encrypt OCTET STRING into packet.enc-part.cipher
- using negotiated encryption key;
-
-A.19. KRB_CRED verification
- receive packet;
- if (packet.pvno != 5) then
- either process using other protocol spec
- or error_out(KRB_AP_ERR_BADVERSION);
- endif
- if (packet.msg-type != KRB_CRED) then
- error_out(KRB_AP_ERR_MSG_TYPE);
- endif
-
- cleartext := decrypt(packet.enc-part) using negotiated key;
- if (decryption_error()) then
- error_out(KRB_AP_ERR_BAD_INTEGRITY);
- endif
- if ((packet.r-address is present or required) and
- (packet.s-address != O/S_sender(packet)) then
- /* O/S report of sender not who claims to have sent it */
- error_out(KRB_AP_ERR_BADADDR);
- endif
- if ((packet.r-address is present) and
- (packet.r-address != local_host_address)) then
- /* was not sent to proper place */
- error_out(KRB_AP_ERR_BADADDR);
-
-
-
-Kohl & Neuman [Page 111]
-\f
-RFC 1510 Kerberos September 1993
-
-
- endif
- if (not in_clock_skew(packet.timestamp,packet.usec)) then
- error_out(KRB_AP_ERR_SKEW);
- endif
- if (repeated(packet.timestamp,packet.usec,packet.s-address))
- then error_out(KRB_AP_ERR_REPEAT);
- endif
- if (packet.nonce is required or present) and
- (packet.nonce != expected-nonce) then
- error_out(KRB_AP_ERR_MODIFIED);
- endif
-
- for (ticket[n] in tickets that were forwarded) do
- save_for_later(ticket[n],key[n],principal[n],
- server[n],times[n],flags[n]);
- return
-
-A.20. KRB_ERROR generation
-
- /* assemble packet: */
- packet.pvno := protocol version; /* 5 */
- packet.msg-type := message type; /* KRB_ERROR */
-
- get system_time;
- packet.stime, packet.susec := system_time;
- packet.realm, packet.sname := server name;
-
- if (client time available) then
- packet.ctime, packet.cusec := client_time;
- endif
- packet.error-code := error code;
- if (client name available) then
- packet.cname, packet.crealm := client name;
- endif
- if (error text available) then
- packet.e-text := error text;
- endif
- if (error data available) then
- packet.e-data := error data;
- endif
-
-
-
-
-
-
-
-
-
-
-
-Kohl & Neuman [Page 112]
-\f
\ No newline at end of file
--- /dev/null
+
+
+
+
+
+
+Network Working Group K. Raeburn
+Request for Comments: 3961 MIT
+Category: Standards Track February 2005
+
+
+ Encryption and Checksum Specifications
+ for Kerberos 5
+
+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 describes a framework for defining encryption and
+ checksum mechanisms for use with the Kerberos protocol, defining an
+ abstraction layer between the Kerberos protocol and related
+ protocols, and the actual mechanisms themselves. The document also
+ defines several mechanisms. Some are taken from RFC 1510, modified
+ in form to fit this new framework and occasionally modified in
+ content when the old specification was incorrect. New mechanisms are
+ presented here as well. This document does NOT indicate which
+ mechanisms may be considered "required to implement".
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
+ 2. Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . 2
+ 3. Encryption Algorithm Profile . . . . . . . . . . . . . . . . 4
+ 4. Checksum Algorithm Profile . . . . . . . . . . . . . . . . . 9
+ 5. Simplified Profile for CBC Ciphers with Key Derivation . . . 10
+ 5.1. A Key Derivation Function . . . . . . . . . . . . . . . 10
+ 5.2. Simplified Profile Parameters . . . . . . . . . . . . . 12
+ 5.3. Cryptosystem Profile Based on Simplified Profile . . . 13
+ 5.4. Checksum Profiles Based on Simplified Profile . . . . . 16
+ 6. Profiles for Kerberos Encryption and Checksum Algorithms . . 16
+ 6.1. Unkeyed Checksums . . . . . . . . . . . . . . . . . . . 17
+ 6.2. DES-based Encryption and Checksum Types . . . . . . . . 18
+ 6.3. Triple-DES Based Encryption and Checksum Types . . . . 28
+ 7. Use of Kerberos Encryption Outside This Specification . . . . 30
+
+
+
+Raeburn Standards Track [Page 1]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ 8. Assigned Numbers . . . . . . . . . . . . . . . . . . . . . . 31
+ 9. Implementation Notes . . . . . . . . . . . . . . . . . . . . 32
+ 10. Security Considerations . . . . . . . . . . . . . . . . . . . 33
+ 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 35
+ 12. Acknowledgements. . . . . . . . . . . . . . . . . . . . . . . 36
+ A. Test vectors . . . . . . . . . . . . . . . . . . . . . . . . 38
+ A.1. n-fold . . . . . . . . . . . . . . . . . . . . . . . . 38
+ A.2. mit_des_string_to_key . . . . . . . . . . . . . . . . . 39
+ A.3. DES3 DR and DK . . . . . . . . . . . . . . . . . . . . 43
+ A.4. DES3string_to_key . . . . . . . . . . . . . . . . . . . 44
+ A.5. Modified CRC-32 . . . . . . . . . . . . . . . . . . . . 44
+ B. Significant Changes from RFC 1510 . . . . . . . . . . . . . . 45
+ Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
+ Normative References. . . . . . . . . . . . . . . . . . . . . . . 47
+ Informative References. . . . . . . . . . . . . . . . . . . . . . 48
+ Editor's Address. . . . . . . . . . . . . . . . . . . . . . . . . 49
+ Full Copyright Statement. . . . . . . . . . . . . . . . . . . . . 50
+
+1. Introduction
+
+ The Kerberos protocols [Kerb] are designed to encrypt messages of
+ arbitrary sizes, using block encryption ciphers or, less commonly,
+ stream encryption ciphers. Encryption is used to prove the
+ identities of the network entities participating in message
+ exchanges. However, nothing in the Kerberos protocol requires that
+ any specific encryption algorithm be used, as long as the algorithm
+ includes certain operations.
+
+ The following sections specify the encryption and checksum mechanisms
+ currently defined for Kerberos, as well as a framework for defining
+ future mechanisms. The encoding, chaining, padding, and other
+ requirements for each are described. Appendix A gives test vectors
+ for several functions.
+
+2. Concepts
+
+ Both encryption and checksum mechanisms are profiled in later
+ sections. Each profile specifies a collection of operations and
+ attributes that must be defined for a mechanism. A Kerberos
+ encryption or checksum mechanism specification is not complete if it
+ does not define all of these operations and attributes.
+
+ An encryption mechanism must provide for confidentiality and
+ integrity of the original plaintext. (Incorporating a checksum may
+ permit integrity checking, if the encryption mode does not provide an
+ integrity check itself.) It must also provide non-malleability
+
+
+
+
+
+Raeburn Standards Track [Page 2]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ [Bellare98] [Dolev91]. Use of a random confounder prepended to the
+ plaintext is recommended. It should not be possible to determine if
+ two ciphertexts correspond to the same plaintext without the key.
+
+ A checksum mechanism [1] must provide proof of the integrity of the
+ associated message and must preserve the confidentiality of the
+ message in case it is not sent in the clear. Finding two plaintexts
+ with the same checksum should be infeasible. It is NOT required that
+ an eavesdropper be unable to determine whether two checksums are for
+ the same message, as the messages themselves would presumably be
+ visible to any such eavesdropper.
+
+ Due to advances in cryptography, some cryptographers consider using
+ the same key for multiple purposes unwise. Since keys are used in
+ performing a number of different functions in Kerberos, it is
+ desirable to use different keys for each of these purposes, even
+ though we start with a single long-term or session key.
+
+ We do this by enumerating the different uses of keys within Kerberos
+ and by making the "usage number" an input to the encryption or
+ checksum mechanisms; such enumeration is outside the scope of this
+ document. Later sections define simplified profile templates for
+ encryption and checksum mechanisms that use a key derivation function
+ applied to a CBC mode (or similar) cipher and a checksum or hash
+ algorithm.
+
+ We distinguish the "base key" specified by other documents from the
+ "specific key" for a specific encryption or checksum operation. It
+ is expected but not required that the specific key be one or more
+ separate keys derived from the original protocol key and the key
+ usage number. The specific key should not be explicitly referenced
+ outside of this document. The typical language used in other
+ documents should be something like, "encrypt this octet string using
+ this key and this usage number"; generation of the specific key and
+ cipher state (described in the next section) are implicit. The
+ creation of a new cipher-state object, or the re-use of one from a
+ previous encryption operation, may also be explicit.
+
+ New protocols defined in terms of the Kerberos encryption and
+ checksum types should use their own key usage values. Key usages are
+ unsigned 32-bit integers; zero is not permitted.
+
+ All data is assumed to be in the form of strings of octets or eight-
+ bit bytes. Environments with other byte sizes will have to emulate
+ this behavior in order to get correct results.
+
+
+
+
+
+
+Raeburn Standards Track [Page 3]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ Each algorithm is assigned an encryption type (or "etype") or
+ checksum type number, for algorithm identification within the
+ Kerberos protocol. The full list of current type number assignments
+ is given in section 8.
+
+3. Encryption Algorithm Profile
+
+ An encryption mechanism profile must define the following attributes
+ and operations. The operations must be defined as functions in the
+ mathematical sense. No additional or implicit inputs (such as
+ Kerberos principal names or message sequence numbers) are permitted.
+
+ protocol key format
+ This describes which octet string values represent valid keys.
+ For encryption mechanisms that don't have perfectly dense key
+ spaces, this will describe the representation used for encoding
+ keys. It need not describe invalid specific values; all key
+ generation routines should avoid such values.
+
+ specific key structure
+ This is not a protocol format at all, but a description of the
+ keying material derived from the chosen key and used to encrypt or
+ decrypt data or compute or verify a checksum. It may, for
+ example, be a single key, a set of keys, or a combination of the
+ original key with additional data. The authors recommend using
+ one or more keys derived from the original key via one-way key
+ derivation functions.
+
+ required checksum mechanism
+ This indicates a checksum mechanism that must be available when
+ this encryption mechanism is used. Since Kerberos has no built in
+ mechanism for negotiating checksum mechanisms, once an encryption
+ mechanism is decided, the corresponding checksum mechanism can be
+ used.
+
+ key-generation seed length, K
+ This is the length of the random bitstring needed to generate a
+ key with the encryption scheme's random-to-key function (described
+ below). This must be a fixed value so that various techniques for
+ producing a random bitstring of a given length may be used with
+ key generation functions.
+
+ key generation functions
+ Keys must be generated in a number of cases, from different types
+ of inputs. All function specifications must indicate how to
+ generate keys in the proper wire format and must avoid generating
+ keys that significantly compromise the confidentiality of
+ encrypted data, if the cryptosystem has such. Entropy from each
+
+
+
+Raeburn Standards Track [Page 4]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ source should be preserved as much as possible. Many of the
+ inputs, although unknown, may be at least partly predictable
+ (e.g., a password string is likely to be entirely in the ASCII
+ subset and of fairly short length in many environments; a semi-
+ random string may include time stamps). The benefit of such
+ predictability to an attacker must be minimized.
+
+ string-to-key (UTF-8 string, UTF-8 string, opaque)->(protocol-key)
+ This function generates a key from two UTF-8 strings and an opaque
+ octet string. One of the strings is usually the principal's pass
+ phrase, but generally it is merely a secret string. The other
+ string is a "salt" string intended to produce different keys from
+ the same password for different users or realms. Although the
+ strings provided will use UTF-8 encoding, no specific version of
+ Unicode should be assumed; all valid UTF-8 strings should be
+ allowed. Strings provided in other encodings MUST first be
+ converted to UTF-8 before applying this function.
+
+ The third argument, the octet string, may be used to pass
+ mechanism-specific parameters into this function. Since doing so
+ implies knowledge of the specific encryption system, generating
+ non-default parameter values should be an uncommon operation, and
+ normal Kerberos applications should be able to treat this
+ parameter block as an opaque object supplied by the Key
+ Distribution Center or defaulted to some mechanism-specific
+ constant value.
+
+ The string-to-key function should be a one-way function so that
+ compromising a user's key in one realm does not compromise it in
+ another, even if the same password (but a different salt) is used.
+
+ random-to-key (bitstring[K])->(protocol-key)
+ This function generates a key from a random bitstring of a
+ specific size. All the bits of the input string are assumed to be
+ equally random, even though the entropy present in the random
+ source may be limited.
+
+ key-derivation (protocol-key, integer)->(specific-key)
+ In this function, the integer input is the key usage value, as
+ described above. An attacker is assumed to know the usage values.
+ The specific-key output value was described in section 2.
+
+ string-to-key parameter format
+ This describes the format of the block of data that can be passed
+ to the string-to-key function above to configure additional
+ parameters for that function. Along with the mechanism of
+ encoding parameter values, bounds on the allowed parameters should
+ also be described to avoid allowing a spoofed KDC to compromise
+
+
+
+Raeburn Standards Track [Page 5]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ the user's password. If practical it may be desirable to
+ construct the encoding so that values unacceptably weakening the
+ resulting key cannot be encoded.
+
+ Local security policy might permit tighter bounds to avoid excess
+ resource consumption. If so, the specification should recommended
+ defaults for these bounds. The description should also outline
+ possible weaknesses if bounds checks or other validations are not
+ applied to a parameter string received from the network.
+
+ As mentioned above, this should be considered opaque to most
+ normal applications.
+
+ default string-to-key parameters (octet string)
+ This default value for the "params" argument to the string-to-key
+ function should be used when the application protocol (Kerberos or
+ other) does not explicitly set the parameter value. As indicated
+ above, in most cases this parameter block should be treated as an
+ opaque object.
+
+ cipher state
+ This describes any information that can be carried over from one
+ encryption or decryption operation to the next, for use with a
+ given specific key. For example, a block cipher used in CBC mode
+ may put an initial vector of one block in the cipher state. Other
+ encryption modes may track nonces or other data.
+
+ This state must be non-empty and must influence encryption so that
+ messages are decrypted in the same order they were a encrypted, if
+ the cipher state is carried over from one encryption to the next.
+ Distinguishing out-of-order or missing messages from corrupted
+ messages is not required. If desired, this can be done at a
+ higher level by including sequence numbers and not "chaining" the
+ cipher state between encryption operations.
+
+ The cipher state may not be reused in multiple encryption or
+ decryption operations. These operations all generate a new cipher
+ state that may be used for following operations using the same key
+ and operation.
+
+ The contents of the cipher state must be treated as opaque outside
+ of encryption system specifications.
+
+ initial cipher state (specific-key, direction)->(state)
+ This describes the generation of the initial value for the cipher
+ state if it is not being carried over from a previous encryption
+ or decryption operation.
+
+
+
+
+Raeburn Standards Track [Page 6]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ This describes any initial state setup needed before encrypting
+ arbitrary amounts of data with a given specific key. The specific
+ key and the direction of operations to be performed (encrypt
+ versus decrypt) must be the only input needed for this
+ initialization.
+
+ This state should be treated as opaque in any uses outside of an
+ encryption algorithm definition.
+
+ IMPLEMENTATION NOTE: [Kerb1510] was vague on whether and to what
+ degree an application protocol could exercise control over the
+ initial vector used in DES CBC operations. Some existing
+ implementations permit setting the initial vector. This framework
+ does not provide for application control of the cipher state
+ (beyond "initialize" and "carry over from previous encryption"),
+ as the form and content of the initial cipher state can vary
+ between encryption systems and may not always be a single block of
+ random data.
+
+ New Kerberos application protocols should not assume control over
+ the initial vector, or that one even exists. However, a general-
+ purpose implementation may wish to provide the capability, in case
+ applications explicitly setting it are encountered.
+
+ encrypt (specific-key, state, octet string)->(state, octet string)
+ This function takes the specific key, cipher state, and a non-
+ empty plaintext string as input and generates ciphertext and a new
+ cipher state as outputs. If the basic encryption algorithm itself
+ does not provide for integrity protection (e.g., DES in CBC mode),
+ then some form of verifiable MAC or checksum must be included.
+ Some random factor such as a confounder should be included so that
+ an observer cannot know if two messages contain the same
+ plaintext, even if the cipher state and specific keys are the
+ same. The exact length of the plaintext need not be encoded, but
+ if it is not and if padding is required, the padding must be added
+ at the end of the string so that the decrypted version may be
+ parsed from the beginning.
+
+ The specification of the encryption function must indicate not
+ only the precise contents of the output octet string, but also the
+ output cipher state. The application protocol may carry the
+ output cipher state forward from one encryption with a given
+ specific key to another; the effect of this "chaining" must be
+ defined [2].
+
+ Assuming that values for the specific key and cipher state are
+ correctly-produced, no input octet string may result in an error
+ indication.
+
+
+
+Raeburn Standards Track [Page 7]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ decrypt (specific-key, state, octet string)->(state, octet string)
+ This function takes the specific key, cipher state, and ciphertext
+ as inputs and verifies the integrity of the supplied ciphertext.
+ If the ciphertext's integrity is intact, this function produces
+ the plaintext and a new cipher state as outputs; otherwise, an
+ error indication must be returned, and the data discarded.
+
+ The result of the decryption may be longer than the original
+ plaintext, as, for example, when the encryption mode adds padding
+ to reach a multiple of a block size. If this is the case, any
+ extra octets must come after the decoded plaintext. An
+ application protocol that needs to know the exact length of the
+ message must encode a length or recognizable "end of message"
+ marker within the plaintext [3].
+
+ As with the encryption function, a correct specification for this
+ function must indicate not only the contents of the output octet
+ string, but also the resulting cipher state.
+
+ pseudo-random (protocol-key, octet-string)->(octet-string)
+ This pseudo-random function should generate an octet string of
+ some size that is independent of the octet string input. The PRF
+ output string should be suitable for use in key generation, even
+ if the octet string input is public. It should not reveal the
+ input key, even if the output is made public.
+
+ These operations and attributes are all that is required to support
+ Kerberos and various proposed preauthentication schemes.
+
+ For convenience of certain application protocols that may wish to use
+ the encryption profile, we add the constraint that, for any given
+ plaintext input size, a message size must exist between that given
+ size and that size plus 65,535 such that the length of the decrypted
+ version of the ciphertext will never have extra octets at the end.
+
+ Expressed mathematically, for every message length L1, there exists a
+ message size L2 such that
+
+ L2 >= L1
+ L2 < L1 + 65,536
+ for every message M with |M| = L2, decrypt(encrypt(M)) = M
+
+ A document defining a new encryption type should also describe known
+ weaknesses or attacks, so that its security may be fairly assessed,
+ and should include test vectors or other validation procedures for
+ the operations defined. Specific references to information that is
+ readily available elsewhere are sufficient.
+
+
+
+
+Raeburn Standards Track [Page 8]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+4. Checksum Algorithm Profile
+
+ A checksum mechanism profile must define the following attributes and
+ operations:
+
+ associated encryption algorithm(s)
+ This indicates the types of encryption keys this checksum
+ mechanism can be used with.
+
+ A keyed checksum mechanism may have more than one associated
+ encryption algorithm if they share the same wire-key format,
+ string-to-key function, default string-to-key-parameters, and key
+ derivation function. (This combination means that, for example, a
+ checksum type, key usage value, and password are adequate to get
+ the specific key used to compute a checksum.)
+
+ An unkeyed checksum mechanism can be used with any encryption
+ type, as the key is ignored, but its use must be limited to cases
+ where the checksum itself is protected, to avoid trivial attacks.
+
+ get_mic function
+ This function generates a MIC token for a given specific key (see
+ section 3) and message (represented as an octet string) that may
+ be used to verify the integrity of the associated message. This
+ function is not required to return the same deterministic result
+ for each use; it need only generate a token that the verify_mic
+ routine can check.
+
+ The output of this function will also dictate the size of the
+ checksum. It must be no larger than 65,535 octets.
+
+ verify_mic function
+ Given a specific key, message, and MIC token, this function
+ ascertains whether the message integrity has been compromised.
+ For a deterministic get_mic routine, the corresponding verify_mic
+ may simply generate another checksum and compare the two.
+
+ The get_mic and verify_mic operations must allow inputs of arbitrary
+ length; if any padding is needed, the padding scheme must be
+ specified as part of these functions.
+
+ These operations and attributes are all that should be required to
+ support Kerberos and various proposed preauthentication schemes.
+
+ As with encryption mechanism definition documents, documents defining
+ new checksum mechanisms should indicate validation processes and
+ known weaknesses.
+
+
+
+
+Raeburn Standards Track [Page 9]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+5. Simplified Profile for CBC Ciphers with Key Derivation
+
+ The profile outlined in sections 3 and 4 describes a large number of
+ operations that must be defined for encryption and checksum
+ algorithms to be used with Kerberos. Here we describe a simpler
+ profile that can generate both encryption and checksum mechanism
+ definitions, filling in uses of key derivation in appropriate places,
+ providing integrity protection, and defining multiple operations for
+ the cryptosystem profile based on a smaller set of operations. Not
+ all of the existing cryptosystems for Kerberos fit into this
+ simplified profile, but we recommend that future cryptosystems use it
+ or something based on it [4].
+
+ Not all the operations in the complete profiles are defined through
+ this mechanism; several must still be defined for each new algorithm
+ pair.
+
+5.1. A Key Derivation Function
+
+ Rather than define some scheme by which a "protocol key" is composed
+ of a large number of encryption keys, we use keys derived from a base
+ key to perform cryptographic operations. The base key must be used
+ only for generating the derived keys, and this derivation must be
+ non-invertible and entropy preserving. Given these restrictions,
+ compromise of one derived key does not compromise others. Attack of
+ the base key is limited, as it is only used for derivation and is not
+ exposed to any user data.
+
+ To generate a derived key from a base key, we generate a pseudorandom
+ octet string by using an algorithm DR, described below, and generate
+ a key from that octet string by using a function dependent on the
+ encryption algorithm. The input length needed for that function,
+ which is also dependent on the encryption algorithm, dictates the
+ length of the string to be generated by the DR algorithm (the value
+ "k" below). These procedures are based on the key derivation in
+ [Blumenthal96].
+
+ Derived Key = DK(Base Key, Well-Known Constant)
+
+ DK(Key, Constant) = random-to-key(DR(Key, Constant))
+
+ DR(Key, Constant) = k-truncate(E(Key, Constant,
+ initial-cipher-state))
+
+ Here DR is the random-octet generation function described below, and
+ DK is the key-derivation function produced from it. In this
+ construction, E(Key, Plaintext, CipherState) is a cipher, Constant is
+ a well-known constant determined by the specific usage of this
+
+
+
+Raeburn Standards Track [Page 10]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ function, and k-truncate truncates its argument by taking the first k
+ bits. Here, k is the key generation seed length needed for the
+ encryption system.
+
+ The output of the DR function is a string of bits; the actual key is
+ produced by applying the cryptosystem's random-to-key operation on
+ this bitstring.
+
+ If the Constant is smaller than the cipher block size of E, then it
+ must be expanded with n-fold() so it can be encrypted. If the output
+ of E is shorter than k bits, it is fed back into the encryption as
+ many times as necessary. The construct is as follows (where |
+ indicates concatentation):
+
+ K1 = E(Key, n-fold(Constant), initial-cipher-state)
+ K2 = E(Key, K1, initial-cipher-state)
+ K3 = E(Key, K2, initial-cipher-state)
+ K4 = ...
+
+ DR(Key, Constant) = k-truncate(K1 | K2 | K3 | K4 ...)
+
+ n-fold is an algorithm that takes m input bits and "stretches" them
+ to form n output bits with equal contribution from each input bit to
+ the output, as described in [Blumenthal96]:
+
+ We first define a primitive called n-folding, which takes a
+ variable-length input block and produces a fixed-length output
+ sequence. The intent is to give each input bit approximately
+ equal weight in determining the value of each output bit. Note
+ that whenever we need to treat a string of octets as a number, the
+ assumed representation is Big-Endian -- Most Significant Byte
+ first.
+
+ To n-fold a number X, replicate the input value to a length that
+ is the least common multiple of n and the length of X. Before
+ each repetition, the input is rotated to the right by 13 bit
+ positions. The successive n-bit chunks are added together using
+ 1's-complement addition (that is, with end-around carry) to yield
+ a n-bit result....
+
+ Test vectors for n-fold are supplied in appendix A [5].
+
+ In this section, n-fold is always used to produce c bits of output,
+ where c is the cipher block size of E.
+
+ The size of the Constant must not be larger than c, because reducing
+ the length of the Constant by n-folding can cause collisions.
+
+
+
+
+Raeburn Standards Track [Page 11]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ If the size of the Constant is smaller than c, then the Constant must
+ be n-folded to length c. This string is used as input to E. If the
+ block size of E is less than the random-to-key input size, then the
+ output from E is taken as input to a second invocation of E. This
+ process is repeated until the number of bits accumulated is greater
+ than or equal to the random-to-key input size. When enough bits have
+ been computed, the first k are taken as the random data used to
+ create the key with the algorithm-dependent random-to-key function.
+
+ As the derived key is the result of one or more encryptions in the
+ base key, deriving the base key from the derived key is equivalent to
+ determining the key from a very small number of plaintext/ciphertext
+ pairs. Thus, this construction is as strong as the cryptosystem
+ itself.
+
+5.2. Simplified Profile Parameters
+
+ These are the operations and attributes that must be defined:
+
+ protocol key format
+ string-to-key function
+ default string-to-key parameters
+ key-generation seed length, k
+ random-to-key function
+ As above for the normal encryption mechanism profile.
+
+ unkeyed hash algorithm, H
+ This should be a collision-resistant hash algorithm with fixed-
+ size output, suitable for use in an HMAC [HMAC]. It must support
+ inputs of arbitrary length. Its output must be at least the
+ message block size (below).
+
+ HMAC output size, h
+ This indicates the size of the leading substring output by the
+ HMAC function that should be used in transmitted messages. It
+ should be at least half the output size of the hash function H,
+ and at least 80 bits; it need not match the output size.
+
+ message block size, m
+ This is the size of the smallest units the cipher can handle in
+ the mode in which it is being used. Messages will be padded to a
+ multiple of this size. If a block cipher is used in a mode that
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 12]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ can handle messages that are not multiples of the cipher block
+ size, such as CBC mode with cipher text stealing (CTS, see [RC5]),
+ this value would be one octet. For traditional CBC mode with
+ padding, it would be the underlying cipher's block size.
+
+ This value must be a multiple of eight bits (one octet).
+
+ encryption/decryption functions, E and D
+ These are basic encryption and decryption functions for messages
+ of sizes that are multiples of the message block size. No
+ integrity checking or confounder should be included here. For
+ inputs these functions take the IV or similar data, a protocol-
+ format key, and an octet string, returning a new IV and octet
+ string.
+
+ The encryption function is not required to use CBC mode but is
+ assumed to be using something with similar properties. In
+ particular, prepending a cipher block-size confounder to the
+ plaintext should alter the entire ciphertext (comparable to
+ choosing and including a random initial vector for CBC mode).
+
+ The result of encrypting one cipher block (of size c, above) must
+ be deterministic for the random octet generation function DR in
+ the previous section to work. For best security, it should also
+ be no larger than c.
+
+ cipher block size, c
+ This is the block size of the block cipher underlying the
+ encryption and decryption functions indicated above, used for key
+ derivation and for the size of the message confounder and initial
+ vector. (If a block cipher is not in use, some comparable
+ parameter should be determined.) It must be at least 5 octets.
+
+ This is not actually an independent parameter; rather, it is a
+ property of the functions E and D. It is listed here to clarify
+ the distinction between it and the message block size, m.
+
+ Although there are still a number of properties to specify, they are
+ fewer and simpler than in the full profile.
+
+5.3. Cryptosystem Profile Based on Simplified Profile
+
+ The above key derivation function is used to produce three
+ intermediate keys. One is used for computing checksums of
+ unencrypted data. The other two are used for encrypting and
+ checksumming plaintext to be sent encrypted.
+
+
+
+
+
+Raeburn Standards Track [Page 13]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ The ciphertext output is the concatenation of the output of the basic
+ encryption function E and a (possibly truncated) HMAC using the
+ specified hash function H, both applied to the plaintext with a
+ random confounder prefix and sufficient padding to bring it to a
+ multiple of the message block size. When the HMAC is computed, the
+ key is used in the protocol key form.
+
+ Decryption is performed by removing the (partial) HMAC, decrypting
+ the remainder, and verifying the HMAC. The cipher state is an
+ initial vector, initialized to zero.
+
+ The substring notation "[1..h]" in the following table should be read
+ as using 1-based indexing; leading substrings are used.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 14]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ Cryptosystem from Simplified Profile
+------------------------------------------------------------------------
+protocol key format As given.
+
+specific key structure Three protocol-format keys: { Kc, Ke, Ki }.
+
+key-generation seed As given.
+length
+
+required checksum As defined below in section 5.4.
+mechanism
+
+cipher state Initial vector (usually of length c)
+
+initial cipher state All bits zero
+
+encryption function conf = Random string of length c
+ pad = Shortest string to bring confounder
+ and plaintext to a length that's a
+ multiple of m.
+ (C1, newIV) = E(Ke, conf | plaintext | pad,
+ oldstate.ivec)
+ H1 = HMAC(Ki, conf | plaintext | pad)
+ ciphertext = C1 | H1[1..h]
+ newstate.ivec = newIV
+
+decryption function (C1,H1) = ciphertext
+ (P1, newIV) = D(Ke, C1, oldstate.ivec)
+ if (H1 != HMAC(Ki, P1)[1..h])
+ report error
+ newstate.ivec = newIV
+
+default string-to-key As given.
+params
+
+pseudo-random function tmp1 = H(octet-string)
+ tmp2 = truncate tmp1 to multiple of m
+ PRF = E(DK(protocol-key, prfconstant),
+ tmp2, initial-cipher-state)
+
+ The "prfconstant" used in the PRF operation is the three-octet string
+ "prf".
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 15]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ Cryptosystem from Simplified Profile
+------------------------------------------------------------------------
+key generation functions:
+
+string-to-key function As given.
+
+random-to-key function As given.
+
+key-derivation function The "well-known constant" used for the DK
+ function is the key usage number, expressed as
+ four octets in big-endian order, followed by
+ one octet indicated below.
+
+ Kc = DK(base-key, usage | 0x99);
+ Ke = DK(base-key, usage | 0xAA);
+ Ki = DK(base-key, usage | 0x55);
+
+5.4. Checksum Profiles Based on Simplified Profile
+
+ When an encryption system is defined with the simplified profile
+ given in section 5.2, a checksum algorithm may be defined for it as
+ follows:
+
+ Checksum Mechanism from Simplified Profile
+ --------------------------------------------------
+ associated cryptosystem As defined above.
+
+ get_mic HMAC(Kc, message)[1..h]
+
+ verify_mic get_mic and compare
+
+ The HMAC function and key Kc are as described in section 5.3.
+
+6. Profiles for Kerberos Encryption and Checksum Algorithms
+
+ These profiles describe the encryption and checksum systems defined
+ for Kerberos. The astute reader will notice that some of them do not
+ fulfill all the requirements outlined in previous sections. These
+ systems are defined for backward compatibility; newer implementations
+ should (whenever possible) attempt to utilize encryption systems that
+ satisfy all the profile requirements.
+
+ The full list of current encryption and checksum type number
+ assignments, including values currently reserved but not defined in
+ this document, is given in section 8.
+
+
+
+
+
+
+Raeburn Standards Track [Page 16]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+6.1. Unkeyed Checksums
+
+ These checksum types use no encryption keys and thus can be used in
+ combination with any encryption type, but they may only be used with
+ caution, in limited circumstances where the lack of a key does not
+ provide a window for an attack, preferably as part of an encrypted
+ message [6]. Keyed checksum algorithms are recommended.
+
+6.1.1. The RSA MD5 Checksum
+
+ The RSA-MD5 checksum calculates a checksum by using the RSA MD5
+ algorithm [MD5-92]. The algorithm takes as input an input message of
+ arbitrary length and produces as output a 128-bit (sixteen octet)
+ checksum.
+
+ rsa-md5
+ ----------------------------------------------
+ associated cryptosystem any
+
+ get_mic rsa-md5(msg)
+
+ verify_mic get_mic and compare
+
+ The rsa-md5 checksum algorithm is assigned a checksum type number of
+ seven (7).
+
+6.1.2. The RSA MD4 Checksum
+
+ The RSA-MD4 checksum calculates a checksum using the RSA MD4
+ algorithm [MD4-92]. The algorithm takes as input an input message of
+ arbitrary length and produces as output a 128-bit (sixteen octet)
+ checksum.
+
+ rsa-md4
+ ----------------------------------------------
+ associated cryptosystem any
+
+ get_mic md4(msg)
+
+ verify_mic get_mic and compare
+
+ The rsa-md4 checksum algorithm is assigned a checksum type number of
+ two (2).
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 17]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+6.1.3. CRC-32 Checksum
+
+ This CRC-32 checksum calculates a checksum based on a cyclic
+ redundancy check as described in ISO 3309 [CRC] but modified as
+ described below. The resulting checksum is four (4) octets in
+ length. The CRC-32 is neither keyed nor collision-proof; thus, the
+ use of this checksum is not recommended. An attacker using a
+ probabilistic chosen-plaintext attack as described in [SG92] might be
+ able to generate an alternative message that satisfies the checksum.
+
+ The CRC-32 checksum used in the des-cbc-crc encryption mode is
+ identical to the 32-bit FCS described in ISO 3309 with two
+ exceptions: The sum with the all-ones polynomial times x**k is
+ omitted, and the final remainder is not ones-complemented. ISO 3309
+ describes the FCS in terms of bits, whereas this document describes
+ the Kerberos protocol in terms of octets. To clarify the ISO 3309
+ definition for the purpose of computing the CRC-32 in the des-cbc-crc
+ encryption mode, the ordering of bits in each octet shall be assumed
+ to be LSB first. Given this assumed ordering of bits within an
+ octet, the mapping of bits to polynomial coefficients shall be
+ identical to that specified in ISO 3309.
+
+ Test values for this modified CRC function are included in appendix
+ A.5.
+
+ crc32
+ ----------------------------------------------
+ associated cryptosystem any
+
+ get_mic crc32(msg)
+
+ verify_mic get_mic and compare
+
+ The crc32 checksum algorithm is assigned a checksum type number of
+ one (1).
+
+6.2. DES-Based Encryption and Checksum Types
+
+ These encryption systems encrypt information under the Data
+ Encryption Standard [DES77] by using the cipher block chaining mode
+ [DESM80]. A checksum is computed as described below and placed in
+ the cksum field. DES blocks are eight bytes. As a result, the data
+ to be encrypted (the concatenation of confounder, checksum, and
+ message) must be padded to an eight byte boundary before encryption.
+ The values of the padding bytes are unspecified.
+
+
+
+
+
+
+Raeburn Standards Track [Page 18]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ Plaintext and DES ciphertext are encoded as blocks of eight octets,
+ which are concatenated to make the 64-bit inputs for the DES
+ algorithms. The first octet supplies the eight most significant bits
+ (with the octet's MSB used as the DES input block's MSB, etc.), the
+ second octet the next eight bits, and so on. The eighth octet
+ supplies the 8 least significant bits.
+
+ Encryption under DES using cipher block chaining requires an
+ additional input in the form of an initialization vector; this vector
+ is specified below for each encryption system.
+
+ The DES specifications [DESI81] identify four 'weak' and twelve
+ 'semi-weak' keys; these keys SHALL NOT be used for encrypting
+ messages for use in Kerberos. The "variant keys" generated for the
+ RSA-MD5-DES, RSA-MD4-DES, and DES-MAC checksum types by an
+ eXclusive-OR of a DES key with a constant are not checked for this
+ property.
+
+ A DES key is eight octets of data. This consists of 56 bits of
+ actual key data, and eight parity bits, one per octet. The key is
+ encoded as a series of eight octets written in MSB-first order. The
+ bits within the key are also encoded in MSB order. For example, if
+ the encryption key is
+ (B1,B2,...,B7,P1,B8,...,B14,P2,B15,...,B49,P7,B50,...,B56,P8), where
+ B1,B2,...,B56 are the key bits in MSB order, and P1,P2,...,P8 are the
+ parity bits, the first octet of the key would be B1,B2,...,B7,P1
+ (with B1 as the most significant bit). See the [DESM80] introduction
+ for reference.
+
+ Encryption Data Format
+
+ The format for the data to be encrypted includes a one-block
+ confounder, a checksum, the encoded plaintext, and any necessary
+ padding, as described in the following diagram. The msg-seq field
+ contains the part of the protocol message to be encrypted.
+
+ +-----------+----------+---------+-----+
+ |confounder | checksum | msg-seq | pad |
+ +-----------+----------+---------+-----+
+
+ One generates a random confounder of one block, placing it in
+ 'confounder'; zeros out the 'checksum' field (of length appropriate
+ to exactly hold the checksum to be computed); adds the necessary
+ padding; calculates the appropriate checksum over the whole sequence,
+ placing the result in 'checksum'; and then encrypts using the
+ specified encryption type and the appropriate key.
+
+
+
+
+
+Raeburn Standards Track [Page 19]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ String or Random-Data to Key Transformation
+
+ To generate a DES key from two UTF-8 text strings (password and
+ salt), the two strings are concatenated, password first, and the
+ result is then padded with zero-valued octets to a multiple of eight
+ octets.
+
+ The top bit of each octet (always zero if the password is plain
+ ASCII, as was assumed when the original specification was written) is
+ discarded, and the remaining seven bits of each octet form a
+ bitstring. This is then fan-folded and eXclusive-ORed with itself to
+ produce a 56-bit string. An eight-octet key is formed from this
+ string, each octet using seven bits from the bitstring, leaving the
+ least significant bit unassigned. The key is then "corrected" by
+ correcting the parity on the key, and if the key matches a 'weak' or
+ 'semi-weak' key as described in the DES specification, it is
+ eXclusive-ORed with the constant 0x00000000000000F0. This key is
+ then used to generate a DES CBC checksum on the initial string with
+ the salt appended. The result of the CBC checksum is then
+ "corrected" as described above to form the result, which is returned
+ as the key.
+
+ For purposes of the string-to-key function, the DES CBC checksum is
+ calculated by CBC encrypting a string using the key as IV and the
+ final eight byte block as the checksum.
+
+ Pseudocode follows:
+
+ removeMSBits(8byteblock) {
+ /* Treats a 64 bit block as 8 octets and removes the MSB in
+ each octet (in big endian mode) and concatenates the
+ result. E.g., the input octet string:
+ 01110000 01100001 11110011 01110011 11110111 01101111
+ 11110010 01100100
+ results in the output bitstring:
+ 1110000 1100001 1110011 1110011 1110111 1101111
+ 1110010 1100100 */
+ }
+
+ reverse(56bitblock) {
+ /* Treats a 56-bit block as a binary string and reverses it.
+ E.g., the input string:
+ 1000001 1010100 1001000 1000101 1001110 1000001
+ 0101110 1001101
+ results in the output string:
+ 1011001 0111010 1000001 0111001 1010001 0001001
+ 0010101 1000001 */
+ }
+
+
+
+Raeburn Standards Track [Page 20]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ add_parity_bits(56bitblock) {
+ /* Copies a 56-bit block into a 64-bit block, left shifts
+ content in each octet, and add DES parity bit.
+ E.g., the input string:
+ 1100000 0001111 0011100 0110100 1000101 1100100
+ 0110110 0010111
+ results in the output string:
+ 11000001 00011111 00111000 01101000 10001010 11001000
+ 01101101 00101111 */
+ }
+
+ key_correction(key) {
+ fixparity(key);
+ if (is_weak_key(key))
+ key = key XOR 0xF0;
+ return(key);
+ }
+
+ mit_des_string_to_key(string,salt) {
+ odd = 1;
+ s = string | salt;
+ tempstring = 0; /* 56-bit string */
+ pad(s); /* with nulls to 8 byte boundary */
+ for (8byteblock in s) {
+ 56bitstring = removeMSBits(8byteblock);
+ if (odd == 0) reverse(56bitstring);
+ odd = ! odd;
+ tempstring = tempstring XOR 56bitstring;
+ }
+ tempkey = key_correction(add_parity_bits(tempstring));
+ key = key_correction(DES-CBC-check(s,tempkey));
+ return(key);
+ }
+
+ des_string_to_key(string,salt,params) {
+ if (length(params) == 0)
+ type = 0;
+ else if (length(params) == 1)
+ type = params[0];
+ else
+ error("invalid params");
+ if (type == 0)
+ mit_des_string_to_key(string,salt);
+ else
+ error("invalid params");
+ }
+
+
+
+
+
+Raeburn Standards Track [Page 21]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ One common extension is to support the "AFS string-to-key" algorithm,
+ which is not defined here, if the type value above is one (1).
+
+ For generation of a key from a random bitstring, we start with a 56-
+ bit string and, as with the string-to-key operation above, insert
+ parity bits. If the result is a weak or semi-weak key, we modify it
+ by eXclusive-OR with the constant 0x00000000000000F0:
+
+ des_random_to_key(bitstring) {
+ return key_correction(add_parity_bits(bitstring));
+ }
+
+6.2.1. DES with MD5
+
+ The des-cbc-md5 encryption mode encrypts information under DES in CBC
+ mode with an all-zero initial vector and with an MD5 checksum
+ (described in [MD5-92]) computed and placed in the checksum field.
+
+ The encryption system parameters for des-cbc-md5 are as follows:
+
+ des-cbc-md5
+ --------------------------------------------------------------------
+ protocol key format 8 bytes, parity in low bit of each
+
+ specific key structure copy of original key
+
+ required checksum rsa-md5-des
+ mechanism
+
+ key-generation seed 8 bytes
+ length
+
+ cipher state 8 bytes (CBC initial vector)
+
+ initial cipher state all-zero
+
+ encryption function des-cbc(confounder | checksum | msg | pad,
+ ivec=oldstate)
+ where
+ checksum = md5(confounder | 0000...
+ | msg | pad)
+
+ newstate = last block of des-cbc output
+
+ decryption function decrypt encrypted text and verify checksum
+
+ newstate = last block of ciphertext
+
+
+
+
+Raeburn Standards Track [Page 22]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ des-cbc-md5
+ --------------------------------------------------------------------
+ default string-to-key empty string
+ params
+
+ pseudo-random function des-cbc(md5(input-string), ivec=0)
+
+ key generation functions:
+
+ string-to-key des_string_to_key
+
+ random-to-key des_random_to_key
+
+ key-derivation identity
+
+ The des-cbc-md5 encryption type is assigned the etype value three
+ (3).
+
+6.2.2. DES with MD4
+
+ The des-cbc-md4 encryption mode also encrypts information under DES
+ in CBC mode, with an all-zero initial vector. An MD4 checksum
+ (described in [MD4-92]) is computed and placed in the checksum field.
+
+ des-cbc-md4
+ --------------------------------------------------------------------
+ protocol key format 8 bytes, parity in low bit of each
+
+ specific key structure copy of original key
+
+ required checksum rsa-md4-des
+ mechanism
+
+ key-generation seed 8 bytes
+ length
+
+ cipher state 8 bytes (CBC initial vector)
+
+ initial cipher state all-zero
+
+ encryption function des-cbc(confounder | checksum | msg | pad,
+ ivec=oldstate)
+ where
+ checksum = md4(confounder | 0000...
+ | msg | pad)
+
+ newstate = last block of des-cbc output
+
+
+
+
+Raeburn Standards Track [Page 23]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ des-cbc-md4
+ --------------------------------------------------------------------
+
+ decryption function decrypt encrypted text and verify checksum
+
+ newstate = last block of ciphertext
+
+ default string-to-key empty string
+ params
+
+ pseudo-random function des-cbc(md5(input-string), ivec=0)
+
+ key generation functions:
+
+ string-to-key des_string_to_key
+
+ random-to-key copy input, then fix parity bits
+
+ key-derivation identity
+
+ Note that des-cbc-md4 uses md5, not md4, in the PRF definition.
+
+ The des-cbc-md4 encryption algorithm is assigned the etype value two
+ (2).
+
+6.2.3. DES with CRC
+
+ The des-cbc-crc encryption type uses DES in CBC mode with the key
+ used as the initialization vector, with a four-octet CRC-based
+ checksum computed as described in section 6.1.3. Note that this is
+ not a standard CRC-32 checksum, but a slightly modified one.
+
+ des-cbc-crc
+ --------------------------------------------------------------------
+ protocol key format 8 bytes, parity in low bit of each
+
+ specific key structure copy of original key
+
+ required checksum rsa-md5-des
+ mechanism
+
+ key-generation seed 8 bytes
+ length
+
+ cipher state 8 bytes (CBC initial vector)
+
+
+
+
+
+
+Raeburn Standards Track [Page 24]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ des-cbc-crc
+ --------------------------------------------------------------------
+ initial cipher state copy of original key
+
+ encryption function des-cbc(confounder | checksum | msg | pad,
+ ivec=oldstate)
+ where
+ checksum = crc(confounder | 00000000
+ | msg | pad)
+
+ newstate = last block of des-cbc output
+
+ decryption function decrypt encrypted text and verify checksum
+
+ newstate = last block of ciphertext
+
+ default string-to-key empty string
+ params
+
+ pseudo-random function des-cbc(md5(input-string), ivec=0)
+
+ key generation functions:
+
+ string-to-key des_string_to_key
+
+ random-to-key copy input, then fix parity bits
+
+ key-derivation identity
+
+ The des-cbc-crc encryption algorithm is assigned the etype value one
+ (1).
+
+6.2.4. RSA MD5 Cryptographic Checksum Using DES
+
+ The RSA-MD5-DES checksum calculates a keyed collision-proof checksum
+ by prepending an eight octet confounder before the text, applying the
+ RSA MD5 checksum algorithm, and encrypting the confounder and the
+ checksum by using DES in cipher-block-chaining (CBC) mode with a
+ variant of the key, where the variant is computed by eXclusive-ORing
+ the key with the hexadecimal constant 0xF0F0F0F0F0F0F0F0. The
+ initialization vector should be zero. The resulting checksum is 24
+ octets long.
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 25]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ rsa-md5-des
+ ----------------------------------------------------------------
+ associated cryptosystem des-cbc-md5, des-cbc-md4, des-cbc-crc
+
+ get_mic des-cbc(key XOR 0xF0F0F0F0F0F0F0F0,
+ conf | rsa-md5(conf | msg))
+
+ verify_mic decrypt and verify rsa-md5 checksum
+
+ The rsa-md5-des checksum algorithm is assigned a checksum type number
+ of eight (8).
+
+6.2.5. RSA MD4 Cryptographic Checksum Using DES
+
+ The RSA-MD4-DES checksum calculates a keyed collision-proof checksum
+ by prepending an eight octet confounder before the text, applying the
+ RSA MD4 checksum algorithm [MD4-92], and encrypting the confounder
+ and the checksum using DES in cipher-block-chaining (CBC) mode with a
+ variant of the key, where the variant is computed by eXclusive-ORing
+ the key with the constant 0xF0F0F0F0F0F0F0F0 [7]. The initialization
+ vector should be zero. The resulting checksum is 24 octets long.
+
+ rsa-md4-des
+ ----------------------------------------------------------------
+ associated cryptosystem des-cbc-md5, des-cbc-md4, des-cbc-crc
+
+ get_mic des-cbc(key XOR 0xF0F0F0F0F0F0F0F0,
+ conf | rsa-md4(conf | msg),
+ ivec=0)
+
+ verify_mic decrypt and verify rsa-md4 checksum
+
+ The rsa-md4-des checksum algorithm is assigned a checksum type number
+ of three (3).
+
+6.2.6. RSA MD4 Cryptographic Checksum Using DES Alternative
+
+ The RSA-MD4-DES-K checksum calculates a keyed collision-proof
+ checksum by applying the RSA MD4 checksum algorithm and encrypting
+ the results by using DES in cipher block chaining (CBC) mode with a
+ DES key as both key and initialization vector. The resulting
+ checksum is 16 octets long. This checksum is tamper-proof and
+ believed to be collision-proof. Note that this checksum type is the
+ old method for encoding the RSA-MD4-DES checksum; it is no longer
+ recommended.
+
+
+
+
+
+
+Raeburn Standards Track [Page 26]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ rsa-md4-des-k
+ ----------------------------------------------------------------
+ associated cryptosystem des-cbc-md5, des-cbc-md4, des-cbc-crc
+
+ get_mic des-cbc(key, md4(msg), ivec=key)
+
+ verify_mic decrypt, compute checksum and compare
+
+ The rsa-md4-des-k checksum algorithm is assigned a checksum type
+ number of six (6).
+
+6.2.7. DES CBC Checksum
+
+ The DES-MAC checksum is computed by prepending an eight octet
+ confounder to the plaintext, padding with zero-valued octets if
+ necessary to bring the length to a multiple of eight octets,
+ performing a DES CBC-mode encryption on the result by using the key
+ and an initialization vector of zero, taking the last block of the
+ ciphertext, prepending the same confounder, and encrypting the pair
+ by using DES in cipher-block-chaining (CBC) mode with a variant of
+ the key, where the variant is computed by eXclusive-ORing the key
+ with the constant 0xF0F0F0F0F0F0F0F0. The initialization vector
+ should be zero. The resulting checksum is 128 bits (sixteen octets)
+ long, 64 bits of which are redundant. This checksum is tamper-proof
+ and collision-proof.
+
+ des-mac
+ ---------------------------------------------------------------------
+ associated des-cbc-md5, des-cbc-md4, des-cbc-crc
+ cryptosystem
+
+ get_mic des-cbc(key XOR 0xF0F0F0F0F0F0F0F0,
+ conf | des-mac(key, conf | msg | pad, ivec=0),
+ ivec=0)
+
+ verify_mic decrypt, compute DES MAC using confounder, compare
+
+ The des-mac checksum algorithm is assigned a checksum type number of
+ four (4).
+
+6.2.8. DES CBC Checksum Alternative
+
+ The DES-MAC-K checksum is computed by performing a DES CBC-mode
+ encryption of the plaintext, with zero-valued padding bytes if
+ necessary to bring the length to a multiple of eight octets, and by
+ using the last block of the ciphertext as the checksum value. It is
+ keyed with an encryption key that is also used as the initialization
+ vector. The resulting checksum is 64 bits (eight octets) long. This
+
+
+
+Raeburn Standards Track [Page 27]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ checksum is tamper-proof and collision-proof. Note that this
+ checksum type is the old method for encoding the DESMAC checksum; it
+ is no longer recommended.
+
+ des-mac-k
+ ----------------------------------------------------------------
+ associated cryptosystem des-cbc-md5, des-cbc-md4, des-cbc-crc
+
+ get_mic des-mac(key, msg | pad, ivec=key)
+
+ verify_mic compute MAC and compare
+
+ The des-mac-k checksum algorithm is assigned a checksum type number
+ of five (5).
+
+6.3. Triple-DES Based Encryption and Checksum Types
+
+ This encryption and checksum type pair is based on the Triple DES
+ cryptosystem in Outer-CBC mode and on the HMAC-SHA1 message
+ authentication algorithm.
+
+ A Triple DES key is the concatenation of three DES keys as described
+ above for des-cbc-md5. A Triple DES key is generated from random
+ data by creating three DES keys from separate sequences of random
+ data.
+
+ Encrypted data using this type must be generated as described in
+ section 5.3. If the length of the input data is not a multiple of
+ the block size, zero-valued octets must be used to pad the plaintext
+ to the next eight-octet boundary. The confounder must be eight
+ random octets (one block).
+
+ The simplified profile for Triple DES, with key derivation as defined
+ in section 5, is as follows:
+
+ des3-cbc-hmac-sha1-kd, hmac-sha1-des3-kd
+ ------------------------------------------------
+ protocol key format 24 bytes, parity in low
+ bit of each
+
+ key-generation seed 21 bytes
+ length
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 28]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ des3-cbc-hmac-sha1-kd, hmac-sha1-des3-kd
+ ------------------------------------------------
+ hash function SHA-1
+
+ HMAC output size 160 bits
+
+ message block size 8 bytes
+
+ default string-to-key empty string
+ params
+
+ encryption and triple-DES encrypt and
+ decryption functions decrypt, in outer-CBC
+ mode (cipher block size
+ 8 octets)
+
+ key generation functions:
+
+ random-to-key DES3random-to-key (see
+ below)
+
+ string-to-key DES3string-to-key (see
+ below)
+
+ The des3-cbc-hmac-sha1-kd encryption type is assigned the value
+ sixteen (16). The hmac-sha1-des3-kd checksum algorithm is assigned a
+ checksum type number of twelve (12).
+
+6.3.1. Triple DES Key Production (random-to-key, string-to-key)
+
+ The 168 bits of random key data are converted to a protocol key value
+ as follows. First, the 168 bits are divided into three groups of 56
+ bits, which are expanded individually into 64 bits as follows:
+
+ DES3random-to-key:
+ 1 2 3 4 5 6 7 p
+ 9 10 11 12 13 14 15 p
+ 17 18 19 20 21 22 23 p
+ 25 26 27 28 29 30 31 p
+ 33 34 35 36 37 38 39 p
+ 41 42 43 44 45 46 47 p
+ 49 50 51 52 53 54 55 p
+ 56 48 40 32 24 16 8 p
+
+ The "p" bits are parity bits computed over the data bits. The output
+ of the three expansions, each corrected to avoid "weak" and "semi-
+ weak" keys as in section 6.2, are concatenated to form the protocol
+ key value.
+
+
+
+Raeburn Standards Track [Page 29]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ The string-to-key function is used to transform UTF-8 passwords into
+ DES3 keys. The DES3 string-to-key function relies on the "N-fold"
+ algorithm and DK function, described in section 5.
+
+ The n-fold algorithm is applied to the password string concatenated
+ with a salt value. For 3-key triple DES, the operation will involve
+ a 168-fold of the input password string, to generate an intermediate
+ key, from which the user's long-term key will be derived with the DK
+ function. The DES3 string-to-key function is shown here in
+ pseudocode:
+
+ DES3string-to-key(passwordString, salt, params)
+ if (params != emptyString)
+ error("invalid params");
+ s = passwordString + salt
+ tmpKey = random-to-key(168-fold(s))
+ key = DK (tmpKey, KerberosConstant)
+
+ Weak key checking is performed in the random-to-key and DK
+ operations. The KerberosConstant value is the byte string {0x6b 0x65
+ 0x72 0x62 0x65 0x72 0x6f 0x73}. These values correspond to the ASCII
+ encoding for the string "kerberos".
+
+7. Use of Kerberos Encryption Outside This Specification
+
+ Several Kerberos-based application protocols and preauthentication
+ systems have been designed and deployed that perform encryption and
+ message integrity checks in various ways. Although in some cases
+ there may be good reason for specifying these protocols in terms of
+ specific encryption or checksum algorithms, we anticipate that in
+ many cases this will not be true, and more generic approaches
+ independent of particular algorithms will be desirable. Rather than
+ have each protocol designer reinvent schemes for protecting data,
+ using multiple keys, etc., we have attempted to present in this
+ section a general framework that should be sufficient not only for
+ the Kerberos protocol itself but also for many preauthentication
+ systems and application protocols, while trying to avoid some of the
+ assumptions that can work their way into such protocol designs.
+
+ Some problematic assumptions we've seen (and sometimes made) include
+ the following: a random bitstring is always valid as a key (not true
+ for DES keys with parity); the basic block encryption chaining mode
+ provides no integrity checking, or can easily be separated from such
+ checking (not true for many modes in development that do both
+ simultaneously); a checksum for a message always results in the same
+ value (not true if a confounder is incorporated); an initial vector
+ is used (may not be true if a block cipher in CBC mode is not in
+ use).
+
+
+
+Raeburn Standards Track [Page 30]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ Although such assumptions the may hold for any given set of
+ encryption and checksum algorithms, they may not be true of the next
+ algorithms to be defined, leaving the application protocol unable to
+ make use of those algorithms without updates to its specification.
+
+ The Kerberos protocol uses only the attributes and operations
+ described in sections 3 and 4. Preauthentication systems and
+ application protocols making use of Kerberos are encouraged to use
+ them as well. The specific key and string-to-key parameters should
+ generally be treated as opaque. Although the string-to-key
+ parameters are manipulated as an octet string, the representation for
+ the specific key structure is implementation defined; it may not even
+ be a single object.
+
+ We don't recommend doing so, but some application protocols will
+ undoubtedly continue to use the key data directly, even if only in
+ some of the currently existing protocol specifications. An
+ implementation intended to support general Kerberos applications may
+ therefore need to make the key data available, as well as the
+ attributes and operations described in sections 3 and 4 [8].
+
+8. Assigned Numbers
+
+ The following encryption-type numbers are already assigned or
+ reserved for use in Kerberos and related protocols.
+
+ encryption type etype section or comment
+ -----------------------------------------------------------------
+ des-cbc-crc 1 6.2.3
+ des-cbc-md4 2 6.2.2
+ des-cbc-md5 3 6.2.1
+ [reserved] 4
+ des3-cbc-md5 5
+ [reserved] 6
+ des3-cbc-sha1 7
+ dsaWithSHA1-CmsOID 9 (pkinit)
+ md5WithRSAEncryption-CmsOID 10 (pkinit)
+ sha1WithRSAEncryption-CmsOID 11 (pkinit)
+ rc2CBC-EnvOID 12 (pkinit)
+ rsaEncryption-EnvOID 13 (pkinit from PKCS#1 v1.5)
+ rsaES-OAEP-ENV-OID 14 (pkinit from PKCS#1 v2.0)
+ des-ede3-cbc-Env-OID 15 (pkinit)
+ des3-cbc-sha1-kd 16 6.3
+ aes128-cts-hmac-sha1-96 17 [KRB5-AES]
+ aes256-cts-hmac-sha1-96 18 [KRB5-AES]
+ rc4-hmac 23 (Microsoft)
+ rc4-hmac-exp 24 (Microsoft)
+ subkey-keymaterial 65 (opaque; PacketCable)
+
+
+
+Raeburn Standards Track [Page 31]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ (The "des3-cbc-sha1" assignment is a deprecated version using no key
+ derivation. It should not be confused with des3-cbc-sha1-kd.)
+
+ Several numbers have been reserved for use in encryption systems not
+ defined here. Encryption-type numbers have unfortunately been
+ overloaded on occasion in Kerberos-related protocols, so some of the
+ reserved numbers do not and will not correspond to encryption systems
+ fitting the profile presented here.
+
+ The following checksum-type numbers are assigned or reserved. As
+ with encryption-type numbers, some overloading of checksum numbers
+ has occurred.
+
+ Checksum type sumtype checksum section or
+ value size reference
+ ---------------------------------------------------------------------
+ CRC32 1 4 6.1.3
+ rsa-md4 2 16 6.1.2
+ rsa-md4-des 3 24 6.2.5
+ des-mac 4 16 6.2.7
+ des-mac-k 5 8 6.2.8
+ rsa-md4-des-k 6 16 6.2.6
+ rsa-md5 7 16 6.1.1
+ rsa-md5-des 8 24 6.2.4
+ rsa-md5-des3 9 24 ??
+ sha1 (unkeyed) 10 20 ??
+ hmac-sha1-des3-kd 12 20 6.3
+ hmac-sha1-des3 13 20 ??
+ sha1 (unkeyed) 14 20 ??
+ hmac-sha1-96-aes128 15 20 [KRB5-AES]
+ hmac-sha1-96-aes256 16 20 [KRB5-AES]
+ [reserved] 0x8003 ? [GSS-KRB5]
+
+ Encryption and checksum-type numbers are signed 32-bit values. Zero
+ is invalid, and negative numbers are reserved for local use. All
+ standardized values must be positive.
+
+9. Implementation Notes
+
+ The "interface" described here is the minimal information that must
+ be defined to make a cryptosystem useful within Kerberos in an
+ interoperable fashion. The use of functional notation used in some
+ places is not an attempt to define an API for cryptographic
+ functionality within Kerberos. Actual implementations providing
+ clean APIs will probably make additional information available, that
+ could be derived from a specification written to the framework given
+ here. For example, an application designer may wish to determine the
+ largest number of bytes that can be encrypted without overflowing a
+
+
+
+Raeburn Standards Track [Page 32]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ certain size output buffer or conversely, the maximum number of bytes
+ that might be obtained by decrypting a ciphertext message of a given
+ size. (In fact, an implementation of the GSS-API Kerberos mechanism
+ [GSS-KRB5] will require some of these.)
+
+ The presence of a mechanism in this document should not be taken to
+ indicate that it must be implemented for compliance with any
+ specification; required mechanisms will be specified elsewhere.
+ Indeed, some of the mechanisms described here for backward
+ compatibility are now considered rather weak for protecting critical
+ data.
+
+10. Security Considerations
+
+ Recent years have brought so many advancements in large-scale attacks
+ capability against DES that it is no longer considered a strong
+ encryption mechanism. Triple-DES is generally preferred in its
+ place, despite its poorer performance. See [ESP-DES] for a summary
+ of some of the potential attacks and [EFF-DES] for a detailed
+ discussion of the implementation of particular attacks. However,
+ most Kerberos implementations still have DES as their primary
+ interoperable encryption type.
+
+ DES has four 'weak' keys and twelve 'semi-weak' keys, and the use of
+ single-DES here avoids them. However, DES also has 48 'possibly-
+ weak' keys [Schneier96] (note that the tables in many editions of the
+ reference contains errors) that are not avoided.
+
+ DES weak keys have the property that E1(E1(P)) = P (where E1 denotes
+ encryption of a single block with key 1). DES semi-weak keys, or
+ "dual" keys, are pairs of keys with the property that E1(P) = D2(P),
+ and thus E2(E1(P)) = P. Because of the use of CBC mode and the
+ leading random confounder, however, these properties are unlikely to
+ present a security problem.
+
+ Many of the choices concerning when to perform weak-key corrections
+ relate more to compatibility with existing implementations than to
+ any risk analysis.
+
+ Although checks are also done for the component DES keys in a
+ triple-DES key, the nature of the weak keys make it extremely
+ unlikely that they will weaken the triple-DES encryption. It is only
+ slightly more likely than having the middle of the three sub-keys
+ match one of the other two, which effectively converts the encryption
+ to single-DES - a case we make no effort to avoid.
+
+
+
+
+
+
+Raeburn Standards Track [Page 33]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ The true CRC-32 checksum is not collision-proof; an attacker could
+ use a probabilistic chosen-plaintext attack to generate a valid
+ message even if a confounder is used [SG92]. The use of collision-
+ proof checksums is of course recommended for environments where such
+ attacks represent a significant threat. The "simplifications" (read:
+ bugs) introduced when CRC-32 was implemented for Kerberos cause
+ leading zeros effectively to be ignored, so messages differing only
+ in leading zero bits will have the same checksum.
+
+ [HMAC] and [IPSEC-HMAC] discuss weaknesses of the HMAC algorithm.
+ Unlike [IPSEC-HMAC], the triple-DES specification here does not use
+ the suggested truncation of the HMAC output. As pointed out in
+ [IPSEC-HMAC], SHA-1 was not developed for use as a keyed hash
+ function, which is a criterion of HMAC. [HMAC-TEST] contains test
+ vectors for HMAC-SHA-1.
+
+ The mit_des_string_to_key function was originally constructed with
+ the assumption that all input would be ASCII; it ignores the top bit
+ of each input byte. Folding with XOR is also not an especially good
+ mixing mechanism for preserving randomness.
+
+ The n-fold function used in the string-to-key operation for des3-
+ cbc-hmac-sha1-kd was designed to cause each bit of input to
+ contribute equally to the output. It was not designed to maximize or
+ equally distribute randomness in the input, and conceivably
+ randomness may be lost in cases of partially structured input. This
+ should only be an issue for highly structured passwords, however.
+
+ [RFC1851] discusses the relative strength of triple-DES encryption.
+ The relatively slow speed of triple-DES encryption may also be an
+ issue for some applications.
+
+ [Bellovin91] suggests that analyses of encryption schemes include a
+ model of an attacker capable of submitting known plaintexts to be
+ encrypted with an unknown key, as well as be able to perform many
+ types of operations on known protocol messages. Recent experiences
+ with the chosen-plaintext attacks on Kerberos version 4 bear out the
+ value of this suggestion.
+
+ The use of unkeyed encrypted checksums, such as those used in the
+ single-DES cryptosystems specified in [Kerb1510], allows for cut-
+ and-paste attacks, especially if a confounder is not used. In
+ addition, unkeyed encrypted checksums are vulnerable to chosen-
+ plaintext attacks: An attacker with access to an encryption oracle
+ can easily encrypt the required unkeyed checksum along with the
+
+
+
+
+
+
+Raeburn Standards Track [Page 34]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ chosen plaintext. [Bellovin99] These weaknesses, combined with a
+ common implementation design choice described below, allow for a
+ cross-protocol attack from version 4 to version 5.
+
+ The use of a random confounder is an important means to prevent an
+ attacker from making effective use of protocol exchanges as an
+ encryption oracle. In Kerberos version 4, the encryption of constant
+ plaintext to constant ciphertext makes an effective encryption oracle
+ for an attacker. The use of random confounders in [Kerb1510]
+ frustrates this sort of chosen-plaintext attack.
+
+ Using the same key for multiple purposes can enable or increase the
+ scope of chosen-plaintext attacks. Some software that implements
+ both versions 4 and 5 of the Kerberos protocol uses the same keys for
+ both versions. This enables the encryption oracle of version 4 to be
+ used to attack version 5. Vulnerabilities to attacks such as this
+ cross-protocol attack make it unwise to use a key for multiple
+ purposes.
+
+ This document, like the Kerberos protocol, does not address limiting
+ the amount of data a key may be used with to a quantity based on the
+ robustness of the algorithm or size of the key. It is assumed that
+ any defined algorithms and key sizes will be strong enough to support
+ very large amounts of data, or they will be deprecated once
+ significant attacks are known.
+
+ This document also places no bounds on the amount of data that can be
+ handled in various operations. To avoid denial of service attacks,
+ implementations will probably seek to restrict message sizes at some
+ higher level.
+
+11. IANA Considerations
+
+ Two registries for numeric values have been created: Kerberos
+ Encryption Type Numbers and Kerberos Checksum Type Numbers. These
+ are signed values ranging from -2147483648 to 2147483647. Positive
+ values should be assigned only for algorithms specified in accordance
+ with this specification for use with Kerberos or related protocols.
+ Negative values are for private use; local and experimental
+ algorithms should use these values. Zero is reserved and may not be
+ assigned.
+
+ Positive encryption- and checksum-type numbers may be assigned
+ following either of two policies described in [BCP26].
+
+ Standards-track specifications may be assigned values under the
+ Standards Action policy.
+
+
+
+
+Raeburn Standards Track [Page 35]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ Specifications in non-standards track RFCs may be assigned values
+ after Expert Review. A non-IETF specification may be assigned values
+ by publishing an Informational or standards-track RFC referencing the
+ external specification; that specification must be public and
+ published in some permanent record, much like the IETF RFCs. It is
+ highly desirable, though not required, that the full specification be
+ published as an IETF RFC.
+
+ Smaller encryption type values should be used for IETF standards-
+ track mechanisms, and much higher values (16777216 and above) for
+ other mechanisms. (Rationale: In the Kerberos ASN.1 encoding,
+ smaller numbers encode to smaller octet sequences, so this favors
+ standards-track mechanisms with slightly smaller messages.) Aside
+ from that guideline, IANA may choose numbers as it sees fit.
+
+ Internet-Draft specifications should not include values for
+ encryption- and checksum-type numbers. Instead, they should indicate
+ that values would be assigned by IANA when the document is approved
+ as an RFC. For development and interoperability testing, values in
+ the private-use range (negative values) may be used but should not be
+ included in the draft specification.
+
+ Each registered value should have an associated unique reference
+ name. The lists given in section 8 were used to create the initial
+ registry; they include reservations for specifications in progress in
+ parallel with this document, and certain other values believed to
+ already be in use.
+
+12. Acknowledgements
+
+ This document is an extension of the encryption specification
+ included in [Kerb1510] by B. Clifford Neuman and John Kohl, and much
+ of the text of the background, concepts, and DES specifications is
+ drawn directly from that document.
+
+ The abstract framework presented in this document was put together by
+ Jeff Altman, Sam Hartman, Jeff Hutzelman, Cliff Neuman, Ken Raeburn,
+ and Tom Yu, and the details were refined several times based on
+ comments from John Brezak and others.
+
+ Marc Horowitz wrote the original specification of triple-DES and key
+ derivation in a pair of Internet-Drafts (under the names draft-
+ horowitz-key-derivation and draft-horowitz-kerb-key-derivation) that
+ were later folded into a draft revision of [Kerb1510], from which
+ this document was later split off.
+
+
+
+
+
+
+Raeburn Standards Track [Page 36]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ Tom Yu provided the text describing the modifications to the standard
+ CRC algorithm as Kerberos implementations actually use it, and some
+ of the text in the Security Considerations section.
+
+ Miroslav Jurisic provided information for one of the UTF-8 test cases
+ for the string-to-key functions.
+
+ Marcus Watts noticed some errors in earlier versions and pointed out
+ that the simplified profile could easily be modified to support
+ cipher text stealing modes.
+
+ Simon Josefsson contributed some clarifications to the DES "CBC
+ checksum" and string-to-key and weak key descriptions, and some test
+ vectors.
+
+ Simon Josefsson, Louis LeVay, and others also caught some errors in
+ earlier versions of this document.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 37]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+A. Test Vectors
+
+ This section provides test vectors for various functions defined or
+ described in this document. For convenience, most inputs are ASCII
+ strings, though some UTF-8 samples are provided for string-to-key
+ functions. Keys and other binary data are specified as hexadecimal
+ strings.
+
+A.1. n-fold
+
+ The n-fold function is defined in section 5.1. As noted there, the
+ sample vector in the original paper defining the algorithm appears to
+ be incorrect. Here are some test cases provided by Marc Horowitz and
+ Simon Josefsson:
+
+ 64-fold("012345") =
+ 64-fold(303132333435) = be072631276b1955
+
+ 56-fold("password") =
+ 56-fold(70617373776f7264) = 78a07b6caf85fa
+
+ 64-fold("Rough Consensus, and Running Code") =
+ 64-fold(526f75676820436f6e73656e7375732c20616e642052756e
+ 6e696e6720436f6465) = bb6ed30870b7f0e0
+
+ 168-fold("password") =
+ 168-fold(70617373776f7264) =
+ 59e4a8ca7c0385c3c37b3f6d2000247cb6e6bd5b3e
+
+ 192-fold("MASSACHVSETTS INSTITVTE OF TECHNOLOGY")
+ 192-fold(4d41535341434856534554545320494e5354495456544520
+ 4f4620544543484e4f4c4f4759) =
+ db3b0d8f0b061e603282b308a50841229ad798fab9540c1b
+
+ 168-fold("Q") =
+ 168-fold(51) =
+ 518a54a2 15a8452a 518a54a2 15a8452a
+ 518a54a2 15
+
+ 168-fold("ba") =
+ 168-fold(6261) =
+ fb25d531 ae897449 9f52fd92 ea9857c4
+ ba24cf29 7e
+
+ Here are some additional values corresponding to folded values of the
+ string "kerberos"; the 64-bit form is used in the des3 string-to-key
+ (section 6.3.1).
+
+
+
+
+Raeburn Standards Track [Page 38]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ 64-fold("kerberos") =
+ 6b657262 65726f73
+ 128-fold("kerberos") =
+ 6b657262 65726f73 7b9b5b2b 93132b93
+ 168-fold("kerberos") =
+ 8372c236 344e5f15 50cd0747 e15d62ca
+ 7a5a3bce a4
+ 256-fold("kerberos") =
+ 6b657262 65726f73 7b9b5b2b 93132b93
+ 5c9bdcda d95c9899 c4cae4de e6d6cae4
+
+ Note that the initial octets exactly match the input string when the
+ output length is a multiple of the input length.
+
+A.2. mit_des_string_to_key
+
+ The function mit_des_string_to_key is defined in section 6.2. We
+ present here several test values, with some of the intermediate
+ results. The fourth test demonstrates the use of UTF-8 with three
+ characters. The last two tests are specifically constructed so as to
+ trigger the weak-key fixups for the intermediate key produced by
+ fan-folding; we have no test cases that cause such fixups for the
+ final key.
+
+UTF-8 encodings used in test vector:
+eszett U+00DF C3 9F s-caron U+0161 C5 A1
+c-acute U+0107 C4 87 g-clef U+1011E F0 9D 84 9E
+
+Test vector:
+
+salt: "ATHENA.MIT.EDUraeburn"
+ 415448454e412e4d49542e4544557261656275726e
+password: "password" 70617373776f7264
+fan-fold result: c01e38688ac86c2e
+intermediate key: c11f38688ac86d2f
+DES key: cbc22fae235298e3
+
+salt: "WHITEHOUSE.GOVdanny"
+ 5748495445484f5553452e474f5664616e6e79
+password: "potatoe" 706f7461746f65
+fan-fold result: a028944ee63c0416
+intermediate key: a129944fe63d0416
+DES key: df3d32a74fd92a01
+
+salt: "EXAMPLE.COMpianist" 4558414D504C452E434F4D7069616E697374
+password: g-clef (U+1011E) f09d849e
+fan-fold result: 3c4a262c18fab090
+intermediate key: 3d4a262c19fbb091
+
+
+
+Raeburn Standards Track [Page 39]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+DES key: 4ffb26bab0cd9413
+
+salt: "ATHENA.MIT.EDUJuri" + s-caron(U+0161) + "i" + c-acute(U+0107)
+ 415448454e412e4d49542e4544554a757269c5a169c487
+password: eszett(U+00DF)
+ c39f
+fan-fold result:b8f6c40e305afc9e
+intermediate key: b9f7c40e315bfd9e
+DES key: 62c81a5232b5e69d
+
+salt: "AAAAAAAA" 4141414141414141
+password: "11119999" 3131313139393939
+fan-fold result: e0e0e0e0f0f0f0f0
+intermediate key: e0e0e0e0f1f1f101
+DES key: 984054d0f1a73e31
+
+salt: "FFFFAAAA" 4646464641414141
+password: "NNNN6666" 4e4e4e4e36363636
+fan-fold result: 1e1e1e1e0e0e0e0e
+intermediate key: 1f1f1f1f0e0e0efe
+DES key: c4bf6b25adf7a4f8
+
+ This trace provided by Simon Josefsson shows the intermediate
+ processing stages of one of the test inputs:
+
+ string_to_key (des-cbc-md5, string, salt)
+ ;; string:
+ ;; `password' (length 8 bytes)
+ ;; 70 61 73 73 77 6f 72 64
+ ;; salt:
+ ;; `ATHENA.MIT.EDUraeburn' (length 21 bytes)
+ ;; 41 54 48 45 4e 41 2e 4d 49 54 2e 45 44 55 72 61
+ ;; 65 62 75 72 6e
+ des_string_to_key (string, salt)
+ ;; String:
+ ;; `password' (length 8 bytes)
+ ;; 70 61 73 73 77 6f 72 64
+ ;; Salt:
+ ;; `ATHENA.MIT.EDUraeburn' (length 21 bytes)
+ ;; 41 54 48 45 4e 41 2e 4d 49 54 2e 45 44 55 72 61
+ ;; 65 62 75 72 6e
+ odd = 1;
+ s = string | salt;
+ tempstring = 0; /* 56-bit string */
+ pad(s); /* with nulls to 8 byte boundary */
+ ;; s = pad(string|salt):
+ ;; `passwordATHENA.MIT.EDUraeburn\x00\x00\x00'
+ ;; (length 32 bytes)
+
+
+
+Raeburn Standards Track [Page 40]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ ;; 70 61 73 73 77 6f 72 64 41 54 48 45 4e 41 2e 4d
+ ;; 49 54 2e 45 44 55 72 61 65 62 75 72 6e 00 00 00
+ for (8byteblock in s) {
+ ;; loop iteration 0
+ ;; 8byteblock:
+ ;; `password' (length 8 bytes)
+ ;; 70 61 73 73 77 6f 72 64
+ ;; 01110000 01100001 01110011 01110011 01110111 01101111
+ ;; 01110010 01100100
+ 56bitstring = removeMSBits(8byteblock);
+ ;; 56bitstring:
+ ;; 1110000 1100001 1110011 1110011 1110111 1101111
+ ;; 1110010 1100100
+ if (odd == 0) reverse(56bitstring); ;; odd=1
+ odd = ! odd
+ tempstring = tempstring XOR 56bitstring;
+ ;; tempstring
+ ;; 1110000 1100001 1110011 1110011 1110111 1101111
+ ;; 1110010 1100100
+
+ for (8byteblock in s) {
+ ;; loop iteration 1
+ ;; 8byteblock:
+ ;; `ATHENA.M' (length 8 bytes)
+ ;; 41 54 48 45 4e 41 2e 4d
+ ;; 01000001 01010100 01001000 01000101 01001110 01000001
+ ;; 00101110 01001101
+ 56bitstring = removeMSBits(8byteblock);
+ ;; 56bitstring:
+ ;; 1000001 1010100 1001000 1000101 1001110 1000001
+ ;; 0101110 1001101
+ if (odd == 0) reverse(56bitstring); ;; odd=0
+ reverse(56bitstring)
+ ;; 56bitstring after reverse
+ ;; 1011001 0111010 1000001 0111001 1010001 0001001
+ ;; 0010101 1000001
+ odd = ! odd
+ tempstring = tempstring XOR 56bitstring;
+ ;; tempstring
+ ;; 0101001 1011011 0110010 1001010 0100110 1100110
+ ;; 1100111 0100101
+
+ for (8byteblock in s) {
+ ;; loop iteration 2
+ ;; 8byteblock:
+ ;; `IT.EDUra' (length 8 bytes)
+ ;; 49 54 2e 45 44 55 72 61
+ ;; 01001001 01010100 00101110 01000101 01000100 01010101
+
+
+
+Raeburn Standards Track [Page 41]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ ;; 01110010 01100001
+ 56bitstring = removeMSBits(8byteblock);
+ ;; 56bitstring:
+ ;; 1001001 1010100 0101110 1000101 1000100 1010101
+ ;; 1110010 1100001
+ if (odd == 0) reverse(56bitstring); ;; odd=1
+ odd = ! odd
+ tempstring = tempstring XOR 56bitstring;
+ ;; tempstring
+ ;; 1100000 0001111 0011100 0001111 1100010 0110011
+ ;; 0010101 1000100
+
+ for (8byteblock in s) {
+ ;; loop iteration 3
+ ;; 8byteblock:
+ ;; `eburn\x00\x00\x00' (length 8 bytes)
+ ;; 65 62 75 72 6e 00 00 00
+ ;; 01100101 01100010 01110101 01110010 01101110 00000000
+ ;; 00000000 00000000
+ 56bitstring = removeMSBits(8byteblock);
+ ;; 56bitstring:
+ ;; 1100101 1100010 1110101 1110010 1101110 0000000
+ ;; 0000000 0000000
+ if (odd == 0) reverse(56bitstring); ;; odd=0
+ reverse(56bitstring)
+ ;; 56bitstring after reverse
+ ;; 0000000 0000000 0000000 0111011 0100111 1010111
+ ;; 0100011 1010011
+ odd = ! odd
+ tempstring = tempstring XOR 56bitstring;
+ ;; tempstring
+ ;; 1100000 0001111 0011100 0110100 1000101 1100100
+ ;; 0110110 0010111
+
+ for (8byteblock in s) {
+ }
+ ;; for loop terminated
+
+ tempkey = key_correction(add_parity_bits(tempstring));
+ ;; tempkey
+ ;; `\xc1\x1f8h\x8a\xc8m\x2f' (length 8 bytes)
+ ;; c1 1f 38 68 8a c8 6d 2f
+ ;; 11000001 00011111 00111000 01101000 10001010 11001000
+ ;; 01101101 00101111
+
+ key = key_correction(DES-CBC-check(s,tempkey));
+ ;; key
+ ;; `\xcb\xc2\x2f\xae\x23R\x98\xe3' (length 8 bytes)
+
+
+
+Raeburn Standards Track [Page 42]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ ;; cb c2 2f ae 23 52 98 e3
+ ;; 11001011 11000010 00101111 10101110 00100011 01010010
+ ;; 10011000 11100011
+
+ ;; string_to_key key:
+ ;; `\xcb\xc2\x2f\xae\x23R\x98\xe3' (length 8 bytes)
+ ;; cb c2 2f ae 23 52 98 e3
+
+A.3. DES3 DR and DK
+
+ These tests show the derived-random and derived-key values for the
+ des3-hmac-sha1-kd encryption scheme, using the DR and DK functions
+ defined in section 6.3.1. The input keys were randomly generated;
+ the usage values are from this specification.
+
+ key: dce06b1f64c857a11c3db57c51899b2cc1791008ce973b92
+ usage: 0000000155
+ DR: 935079d14490a75c3093c4a6e8c3b049c71e6ee705
+ DK: 925179d04591a79b5d3192c4a7e9c289b049c71f6ee604cd
+
+ key: 5e13d31c70ef765746578531cb51c15bf11ca82c97cee9f2
+ usage: 00000001aa
+ DR: 9f58e5a047d894101c469845d67ae3c5249ed812f2
+ DK: 9e58e5a146d9942a101c469845d67a20e3c4259ed913f207
+
+ key: 98e6fd8a04a4b6859b75a176540b9752bad3ecd610a252bc
+ usage: 0000000155
+ DR: 12fff90c773f956d13fc2ca0d0840349dbd39908eb
+ DK: 13fef80d763e94ec6d13fd2ca1d085070249dad39808eabf
+
+ key: 622aec25a2fe2cad7094680b7c64940280084c1a7cec92b5
+ usage: 00000001aa
+ DR: f8debf05b097e7dc0603686aca35d91fd9a5516a70
+ DK: f8dfbf04b097e6d9dc0702686bcb3489d91fd9a4516b703e
+
+ key: d3f8298ccb166438dcb9b93ee5a7629286a491f838f802fb
+ usage: 6b65726265726f73 ("kerberos")
+ DR: 2270db565d2a3d64cfbfdc5305d4f778a6de42d9da
+ DK: 2370da575d2a3da864cebfdc5204d56df779a7df43d9da43
+
+ key: c1081649ada74362e6a1459d01dfd30d67c2234c940704da
+ usage: 0000000155
+ DR: 348056ec98fcc517171d2b4d7a9493af482d999175
+ DK: 348057ec98fdc48016161c2a4c7a943e92ae492c989175f7
+
+ key: 5d154af238f46713155719d55e2f1f790dd661f279a7917c
+ usage: 00000001aa
+ DR: a8818bc367dadacbe9a6c84627fb60c294b01215e5
+
+
+
+Raeburn Standards Track [Page 43]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ DK: a8808ac267dada3dcbe9a7c84626fbc761c294b01315e5c1
+
+ key: 798562e049852f57dc8c343ba17f2ca1d97394efc8adc443
+ usage: 0000000155
+ DR: c813f88b3be2b2f75424ce9175fbc8483b88c8713a
+ DK: c813f88a3be3b334f75425ce9175fbe3c8493b89c8703b49
+
+ key: 26dce334b545292f2feab9a8701a89a4b99eb9942cecd016
+ usage: 00000001aa
+ DR: f58efc6f83f93e55e695fd252cf8fe59f7d5ba37ec
+ DK: f48ffd6e83f83e7354e694fd252cf83bfe58f7d5ba37ec5d
+
+A.4. DES3string_to_key
+
+ These are the keys generated for some of the above input strings for
+ triple-DES with key derivation as defined in section 6.3.1.
+
+ salt: "ATHENA.MIT.EDUraeburn"
+ passwd: "password"
+ key: 850bb51358548cd05e86768c313e3bfef7511937dcf72c3e
+
+ salt: "WHITEHOUSE.GOVdanny"
+ passwd: "potatoe"
+ key: dfcd233dd0a43204ea6dc437fb15e061b02979c1f74f377a
+
+ salt: "EXAMPLE.COMbuckaroo"
+ passwd: "penny"
+ key: 6d2fcdf2d6fbbc3ddcadb5da5710a23489b0d3b69d5d9d4a
+
+ salt: "ATHENA.MIT.EDUJuri" + s-caron(U+0161) + "i"
+ + c-acute(U+0107)
+ passwd: eszett(U+00DF)
+ key: 16d5a40e1ce3bacb61b9dce00470324c831973a7b952feb0
+
+ salt: "EXAMPLE.COMpianist"
+ passwd: g-clef(U+1011E)
+ key: 85763726585dbc1cce6ec43e1f751f07f1c4cbb098f40b19
+
+A.5. Modified CRC-32
+
+ Below are modified-CRC32 values for various ASCII and octet strings.
+ Only the printable ASCII characters are checksummed, without a C-
+ style trailing zero-valued octet. The 32-bit modified CRC and the
+ sequence of output bytes as used in Kerberos are shown. (The octet
+ values are separated here to emphasize that they are octet values and
+ not 32-bit numbers, which will be the most convenient form for
+ manipulation in some implementations. The bit and byte order used
+
+
+
+
+Raeburn Standards Track [Page 44]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ internally for such a number is irrelevant; the octet sequence
+ generated is what is important.)
+
+ mod-crc-32("foo") = 33 bc 32 73
+ mod-crc-32("test0123456789") = d6 88 3e b8
+ mod-crc-32("MASSACHVSETTS INSTITVTE OF TECHNOLOGY") = f7 80 41 e3
+ mod-crc-32(8000) = 4b 98 83 3b
+ mod-crc-32(0008) = 32 88 db 0e
+ mod-crc-32(0080) = 20 83 b8 ed
+ mod-crc-32(80) = 20 83 b8 ed
+ mod-crc-32(80000000) = 3b b6 59 ed
+ mod-crc-32(00000001) = 96 30 07 77
+
+B. Significant Changes from RFC 1510
+
+ The encryption and checksum mechanism profiles are new. The old
+ specification defined a few operations for various mechanisms but
+ didn't outline what abstract properties should be required of new
+ mechanisms, or how to ensure that a mechanism specification is
+ complete enough for interoperability between implementations. The
+ new profiles differ from the old specification in a few ways:
+
+ Some message definitions in [Kerb1510] could be read as permitting
+ the initial vector to be specified by the application; the text
+ was too vague. It is explicitly not permitted in this
+ specification. Some encryption algorithms may not use
+ initialization vectors, so relying on chosen, secret
+ initialization vectors for security is unwise. Also, the
+ prepended confounder in the existing algorithms is roughly
+ equivalent to a per-message initialization vector that is revealed
+ in encrypted form. However, carrying state across from one
+ encryption to another is explicitly permitted through the opaque
+ "cipher state" object.
+
+ The use of key derivation is new.
+
+ Several new methods are introduced, including generation of a key
+ in wire-protocol format from random input data.
+
+ The means for influencing the string-to-key algorithm are laid out
+ more clearly.
+
+ Triple-DES support is new.
+
+ The pseudo-random function is new.
+
+ The des-cbc-crc, DES string-to-key and CRC descriptions have been
+ updated to align them with existing implementations.
+
+
+
+Raeburn Standards Track [Page 45]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ [Kerb1510] did not indicate what character set or encoding might be
+ used for pass phrases and salts.
+
+ In [Kerb1510], key types, encryption algorithms, and checksum
+ algorithms were only loosely associated, and the association was not
+ well described. In this specification, key types and encryption
+ algorithms have a one-to-one correspondence, and associations between
+ encryption and checksum algorithms are described so that checksums
+ can be computed given negotiated keys, without requiring further
+ negotiation for checksum types.
+
+Notes
+
+ [1] Although Message Authentication Code (MAC) or Message Integrity
+ Check (MIC) would be more appropriate terms for many of the uses
+ in this document, we continue to use the term checksum for
+ historical reasons.
+
+ [2] Extending CBC mode across messages would be one obvious example
+ of this chaining. Another might be the use of counter mode, with
+ a counter randomly initialized and attached to the ciphertext; a
+ second message could continue incrementing the counter when
+ chaining the cipher state, thus avoiding having to transmit
+ another counter value. However, this chaining is only useful for
+ uninterrupted, ordered sequences of messages.
+
+ [3] In the case of Kerberos, the encrypted objects will generally be
+ ASN.1 DER encodings, which contain indications of their length in
+ the first few octets.
+
+ [4] As of the time of this writing, new modes of operation have been
+ proposed, some of which may permit encryption and integrity
+ protection simultaneously. After some of these proposals have
+ been subjected to adequate analysis, we may wish to formulate a
+ new simplified profile based on one of them.
+
+ [5] It should be noted that the sample vector in appendix B.2 of the
+ original paper appears to be incorrect. Two independent
+ implementations from the specification (one in C by Marc
+ Horowitz, and another in Scheme by Bill Sommerfeld) agree on a
+ value different from that in [Blumenthal96].
+
+ [6] For example, in MIT's implementation of [Kerb1510], the rsa-md5
+ unkeyed checksum of application data may be included in an
+ authenticator encrypted in a service's key.
+
+ [7] Using a variant of the key limits the use of a key to a
+ particular function, separating the functions of generating a
+
+
+
+Raeburn Standards Track [Page 46]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ checksum from other encryption performed using the session key.
+ The constant 0xF0F0F0F0F0F0F0F0 was chosen because it maintains
+ key parity. The properties of DES precluded the use of the
+ complement. The same constant is used for similar purpose in the
+ Message Integrity Check in the Privacy Enhanced Mail standard.
+
+ [8] Perhaps one of the more common reasons for directly performing
+ encryption is direct control over the negotiation and to select a
+ "sufficiently strong" encryption algorithm (whatever that means
+ in the context of a given application). Although Kerberos
+ directly provides no direct facility for negotiating encryption
+ types between the application client and server, there are other
+ means to accomplish similar goals (for example, requesting only
+ "strong" session key types from the KDC, and assuming that the
+ type actually returned by the KDC will be understood and
+ supported by the application server).
+
+Normative References
+
+ [BCP26] Narten, T. and H. Alvestrand, "Guidelines for Writing
+ an IANA Considerations Section in RFCs", BCP 26, RFC
+ 2434, October 1998.
+
+ [Bellare98] Bellare, M., Desai, A., Pointcheval, D., and P.
+ Rogaway, "Relations Among Notions of Security for
+ Public-Key Encryption Schemes". Extended abstract
+ published in Advances in Cryptology-Crypto 98
+ Proceedings, Lecture Notes in Computer Science Vol.
+ 1462, H. Krawcyzk ed., Springer-Verlag, 1998.
+
+ [Blumenthal96] Blumenthal, U. and S. Bellovin, "A Better Key Schedule
+ for DES-Like Ciphers", Proceedings of PRAGOCRYPT '96,
+ 1996.
+
+ [CRC] International Organization for Standardization, "ISO
+ Information Processing Systems - Data Communication -
+ High-Level Data Link Control Procedure - Frame
+ Structure," IS 3309, 3rd Edition, October 1984.
+
+ [DES77] National Bureau of Standards, U.S. Department of
+ Commerce, "Data Encryption Standard," Federal
+ Information Processing Standards Publication 46,
+ Washington, DC, 1977.
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 47]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ [DESI81] National Bureau of Standards, U.S. Department of
+ Commerce, "Guidelines for implementing and using NBS
+ Data Encryption Standard," Federal Information
+ Processing Standards Publication 74, Washington, DC,
+ 1981.
+
+ [DESM80] National Bureau of Standards, U.S. Department of
+ Commerce, "DES Modes of Operation," Federal
+ Information Processing Standards Publication 81,
+ Springfield, VA, December 1980.
+
+ [Dolev91] Dolev, D., Dwork, C., and M. Naor, "Non-malleable
+ cryptography", Proceedings of the 23rd Annual
+ Symposium on Theory of Computing, ACM, 1991.
+
+ [HMAC] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC:
+ Keyed-Hashing for Message Authentication", RFC 2104,
+ February 1997.
+
+ [KRB5-AES] Raeburn, K., "Advanced Encryption Standard (AES)
+ Encryption for Kerberos 5", RFC 3962, February 2005.
+
+ [MD4-92] Rivest, R., "The MD4 Message-Digest Algorithm", RFC
+ 1320, April 1992.
+
+ [MD5-92] Rivest, R., "The MD5 Message-Digest Algorithm ", RFC
+ 1321, April 1992.
+
+ [SG92] Stubblebine, S. and V. D. Gligor, "On Message
+ Integrity in Cryptographic Protocols," in Proceedings
+ of the IEEE Symposium on Research in Security and
+ Privacy, Oakland, California, May 1992.
+
+Informative References
+
+ [Bellovin91] Bellovin, S. M. and M. Merrit, "Limitations of the
+ Kerberos Authentication System", in Proceedings of the
+ Winter 1991 Usenix Security Conference, January, 1991.
+
+ [Bellovin99] Bellovin, S. M. and D. Atkins, private communications,
+ 1999.
+
+ [EFF-DES] Electronic Frontier Foundation, "Cracking DES: Secrets
+ of Encryption Research, Wiretap Politics, and Chip
+ Design", O'Reilly & Associates, Inc., May 1998.
+
+ [ESP-DES] Madson, C. and N. Doraswamy, "The ESP DES-CBC Cipher
+ Algorithm With Explicit IV", RFC 2405, November 1998.
+
+
+
+Raeburn Standards Track [Page 48]
+\f
+RFC 3961 Encryption and Checksum Specifications February 2005
+
+
+ [GSS-KRB5] Linn, J., "The Kerberos Version 5 GSS-API Mechanism",
+ RFC 1964, June 1996.
+
+ [HMAC-TEST] Cheng, P. and R. Glenn, "Test Cases for HMAC-MD5 and
+ HMAC-SHA-1", RFC 2202, September 1997.
+
+ [IPSEC-HMAC] Madson, C. and R. Glenn, "The Use of HMAC-SHA-1-96
+ within ESP and AH", RFC 2404, November 1998.
+
+ [Kerb] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The
+ Kerberos Network Authentication Service (V5)", Work in
+ Progress, September 2004.
+
+ [Kerb1510] Kohl, J. and C. Neuman, "The Kerberos Network
+ Authentication Service (V5)", RFC 1510, September
+ 1993.
+
+ [RC5] Baldwin, R. and R. Rivest, "The RC5, RC5-CBC, RC5-
+ CBC-Pad, and RC5-CTS Algorithms", RFC 2040, October
+ 1996.
+
+ [RFC1851] Karn, P., Metzger, P., and W. Simpson, "The ESP Triple
+ DES Transform", RFC 1851, September 1995.
+
+ [Schneier96] Schneier, B., "Applied Cryptography Second Edition",
+ John Wiley & Sons, New York, NY, 1996. ISBN 0-471-
+ 12845-7.
+
+Editor's Address
+
+ Kenneth Raeburn
+ Massachusetts Institute of Technology
+ 77 Massachusetts Avenue
+ Cambridge, MA 02139
+
+ EMail: raeburn@mit.edu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 49]
+\f
+RFC 3961 Encryption and Checksum Specifications February 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 IETF's procedures with respect to rights in IETF 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.
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 50]
+\f
--- /dev/null
+
+
+
+
+
+
+Network Working Group K. Raeburn
+Request for Comments: 3962 MIT
+Category: Standards Track February 2005
+
+
+ Advanced Encryption Standard (AES) Encryption for Kerberos 5
+
+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
+
+ The United States National Institute of Standards and Technology
+ (NIST) has chosen a new Advanced Encryption Standard (AES), which is
+ significantly faster and (it is believed) more secure than the old
+ Data Encryption Standard (DES) algorithm. This document is a
+ specification for the addition of this algorithm to the Kerberos
+ cryptosystem suite.
+
+1. Introduction
+
+ This document defines encryption key and checksum types for Kerberos
+ 5 using the AES algorithm recently chosen by NIST. These new types
+ support 128-bit block encryption and key sizes of 128 or 256 bits.
+
+ Using the "simplified profile" of [KCRYPTO], we can define a pair of
+ encryption and checksum schemes. AES is used with ciphertext
+ stealing to avoid message expansion, and SHA-1 [SHA1] is the
+ associated checksum function.
+
+2. Conventions used in this Document
+
+ 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 BCP 14, RFC 2119
+ [KEYWORDS].
+
+
+
+
+
+
+Raeburn Standards Track [Page 1]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+3. Protocol Key Representation
+
+ The profile in [KCRYPTO] treats keys and random octet strings as
+ conceptually different. But since the AES key space is dense, we can
+ use any bit string of appropriate length as a key. We use the byte
+ representation for the key described in [AES], where the first bit of
+ the bit string is the high bit of the first byte of the byte string
+ (octet string) representation.
+
+4. Key Generation from Pass Phrases or Random Data
+
+ Given the above format for keys, we can generate keys from the
+ appropriate amounts of random data (128 or 256 bits) by simply
+ copying the input string.
+
+ To generate an encryption key from a pass phrase and salt string, we
+ use the PBKDF2 function from PKCS #5 v2.0 ([PKCS5]), with parameters
+ indicated below, to generate an intermediate key (of the same length
+ as the desired final key), which is then passed into the DK function
+ with the 8-octet ASCII string "kerberos" as is done for des3-cbc-
+ hmac-sha1-kd in [KCRYPTO]. (In [KCRYPTO] terms, the PBKDF2 function
+ produces a "random octet string", hence the application of the
+ random-to-key function even though it's effectively a simple identity
+ operation.) The resulting key is the user's long-term key for use
+ with the encryption algorithm in question.
+
+ tkey = random2key(PBKDF2(passphrase, salt, iter_count, keylength))
+ key = DK(tkey, "kerberos")
+
+ The pseudorandom function used by PBKDF2 will be a SHA-1 HMAC of the
+ passphrase and salt, as described in Appendix B.1 to PKCS#5.
+
+ The number of iterations is specified by the string-to-key parameters
+ supplied. The parameter string is four octets indicating an unsigned
+ number in big-endian order. This is the number of iterations to be
+ performed. If the value is 00 00 00 00, the number of iterations to
+ be performed is 4,294,967,296 (2**32). (Thus the minimum expressible
+ iteration count is 1.)
+
+ For environments where slower hardware is the norm, implementations
+ of protocols such as Kerberos may wish to limit the number of
+ iterations to prevent a spoofed response supplied by an attacker from
+ consuming lots of client-side CPU time; if such a limit is
+ implemented, it SHOULD be no less than 50,000. Even for environments
+ with fast hardware, 4 billion iterations is likely to take a fairly
+ long time; much larger bounds might still be enforced, and it might
+ be wise for implementations to permit interruption of this operation
+ by the user if the environment allows for it.
+
+
+
+Raeburn Standards Track [Page 2]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+ If the string-to-key parameters are not supplied, the value used is
+ 00 00 10 00 (decimal 4,096, indicating 4,096 iterations).
+
+ Note that this is not a requirement, nor even a recommendation, for
+ this value to be used in "optimistic preauthentication" (e.g.,
+ attempting timestamp-based preauthentication using the user's long-
+ term key without having first communicated with the KDC) in the
+ absence of additional information, or as a default value for sites to
+ use for their principals' long-term keys in their Kerberos database.
+ It is simply the interpretation of the absence of the string-to-key
+ parameter field when the KDC has had an opportunity to provide it.
+
+ Sample test vectors are given in Appendix B.
+
+5. Ciphertext Stealing
+
+ Cipher block chaining is used to encrypt messages, with the initial
+ vector stored in the cipher state. Unlike previous Kerberos
+ cryptosystems, we use ciphertext stealing to handle the possibly
+ partial final block of the message.
+
+ Ciphertext stealing is described on pages 195-196 of [AC], and
+ section 8 of [RC5]; it has the advantage that no message expansion is
+ done during encryption of messages of arbitrary sizes as is typically
+ done in CBC mode with padding. Some errata for [RC5] are listed in
+ Appendix A and are considered part of the ciphertext stealing
+ technique as used here.
+
+ Ciphertext stealing, as defined in [RC5], assumes that more than one
+ block of plain text is available. If exactly one block is to be
+ encrypted, that block is simply encrypted with AES (also known as ECB
+ mode). Input smaller than one block is padded at the end to one
+ block; the values of the padding bits are unspecified.
+ (Implementations MAY use all-zero padding, but protocols MUST NOT
+ rely on the result being deterministic. Implementations MAY use
+ random padding, but protocols MUST NOT rely on the result not being
+ deterministic. Note that in most cases, the Kerberos encryption
+ profile will add a random confounder independent of this padding.)
+
+ For consistency, ciphertext stealing is always used for the last two
+ blocks of the data to be encrypted, as in [RC5]. If the data length
+ is a multiple of the block size, this is equivalent to plain CBC mode
+ with the last two ciphertext blocks swapped.
+
+ A test vector is given in Appendix B.
+
+
+
+
+
+
+Raeburn Standards Track [Page 3]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+ The initial vector carried out from one encryption for use in a
+ subsequent encryption is the next-to-last block of the encryption
+ output; this is the encrypted form of the last plaintext block. When
+ decrypting, the next-to-last block of the supplied ciphertext is
+ carried forward as the next initial vector. If only one ciphertext
+ block is available (decrypting one block, or encrypting one block or
+ less), then that one block is carried out instead.
+
+6. Kerberos Algorithm Profile Parameters
+
+ This is a summary of the parameters to be used with the simplified
+ algorithm profile described in [KCRYPTO]:
+
+ +--------------------------------------------------------------------+
+ | protocol key format 128- or 256-bit string |
+ | |
+ | string-to-key function PBKDF2+DK with variable |
+ | iteration count (see |
+ | above) |
+ | |
+ | default string-to-key parameters 00 00 10 00 |
+ | |
+ | key-generation seed length key size |
+ | |
+ | random-to-key function identity function |
+ | |
+ | hash function, H SHA-1 |
+ | |
+ | HMAC output size, h 12 octets (96 bits) |
+ | |
+ | message block size, m 1 octet |
+ | |
+ | encryption/decryption functions, AES in CBC-CTS mode |
+ | E and D (cipher block size 16 |
+ | octets), with next-to- |
+ | last block (last block |
+ | if only one) as CBC-style |
+ | ivec |
+ +--------------------------------------------------------------------+
+
+ Using this profile with each key size gives us two each of encryption
+ and checksum algorithm definitions.
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 4]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+7. Assigned Numbers
+
+ The following encryption type numbers are assigned:
+
+ +--------------------------------------------------------------------+
+ | encryption types |
+ +--------------------------------------------------------------------+
+ | type name etype value key size |
+ +--------------------------------------------------------------------+
+ | aes128-cts-hmac-sha1-96 17 128 |
+ | aes256-cts-hmac-sha1-96 18 256 |
+ +--------------------------------------------------------------------+
+
+ The following checksum type numbers are assigned:
+
+ +--------------------------------------------------------------------+
+ | checksum types |
+ +--------------------------------------------------------------------+
+ | type name sumtype value length |
+ +--------------------------------------------------------------------+
+ | hmac-sha1-96-aes128 15 96 |
+ | hmac-sha1-96-aes256 16 96 |
+ +--------------------------------------------------------------------+
+
+ These checksum types will be used with the corresponding encryption
+ types defined above.
+
+8. Security Considerations
+
+ This new algorithm has not been around long enough to receive the
+ decades of intense analysis that DES has received. It is possible
+ that some weakness exists that has not been found by the
+ cryptographers analyzing these algorithms before and during the AES
+ selection process.
+
+ The use of the HMAC function has drawbacks for certain pass phrase
+ lengths. For example, a pass phrase longer than the hash function
+ block size (64 bytes, for SHA-1) is hashed to a smaller size (20
+ bytes) before applying the main HMAC algorithm. However, entropy is
+ generally sparse in pass phrases, especially in long ones, so this
+ may not be a problem in the rare cases of users with long pass
+ phrases.
+
+ Also, generating a 256-bit key from a pass phrase of any length may
+ be deceptive, as the effective entropy in pass-phrase-derived key
+ cannot be nearly that large given the properties of the string-to-key
+ function described here.
+
+
+
+
+Raeburn Standards Track [Page 5]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+ The iteration count in PBKDF2 appears to be useful primarily as a
+ constant multiplier for the amount of work required for an attacker
+ using brute-force methods. Unfortunately, it also multiplies, by the
+ same amount, the work needed by a legitimate user with a valid
+ password. Thus the work factor imposed on an attacker (who may have
+ many powerful workstations at his disposal) must be balanced against
+ the work factor imposed on the legitimate user (who may have a PDA or
+ cell phone); the available computing power on either side increases
+ as time goes on, as well. A better way to deal with the brute-force
+ attack is through preauthentication mechanisms that provide better
+ protection of the user's long-term key. Use of such mechanisms is
+ out of the scope of this document.
+
+ If a site does wish to use this means of protection against a brute-
+ force attack, the iteration count should be chosen based on the
+ facilities available to both attacker and legitimate user, and the
+ amount of work the attacker should be required to perform to acquire
+ the key or password.
+
+ As an example:
+
+ The author's tests on a 2GHz Pentium 4 system indicated that in
+ one second, nearly 90,000 iterations could be done, producing a
+ 256-bit key. This was using the SHA-1 assembly implementation
+ from OpenSSL, and a pre-release version of the PBKDF2 code for
+ MIT's Kerberos package, on a single system. No attempt was made
+ to do multiple hashes in parallel, so we assume an attacker doing
+ so can probably do at least 100,000 iterations per second --
+ rounded up to 2**17, for ease of calculation. For simplicity, we
+ also assume the final AES encryption step costs nothing.
+
+ Paul Leach estimates [LEACH] that a password-cracking dictionary
+ may have on the order of 2**21 entries, with capitalization,
+ punctuation, and other variations contributing perhaps a factor of
+ 2**11, giving a ballpark estimate of 2**32.
+
+ Thus, for a known iteration count N and a known salt string, an
+ attacker with some number of computers comparable to the author's
+ would need roughly N*2**15 CPU seconds to convert the entire
+ dictionary plus variations into keys.
+
+ An attacker using a dozen such computers for a month would have
+ roughly 2**25 CPU seconds available. So using 2**12 (4,096)
+ iterations would mean an attacker with a dozen such computers
+ dedicated to a brute-force attack against a single key (actually,
+ any password-derived keys sharing the same salt and iteration
+
+
+
+
+
+Raeburn Standards Track [Page 6]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+ count) would process all the variations of the dictionary entries
+ in four months and, on average, would likely find the user's
+ password in two months.
+
+ Thus, if this form of attack is of concern, users should be
+ required to change their passwords every few months, and an
+ iteration count a few orders of magnitude higher should be chosen.
+ Perhaps several orders of magnitude, as many users will tend to
+ use the shorter and simpler passwords (to the extent they can,
+ given a site's password quality checks) that the attacker would
+ likely try first.
+
+ Since this estimate is based on currently available CPU power, the
+ iteration counts used for this mode of defense should be increased
+ over time, at perhaps 40%-60% each year or so.
+
+ Note that if the attacker has a large amount of storage available,
+ intermediate results could be cached, saving a lot of work for the
+ next attack with the same salt and a greater number of iterations
+ than had been run at the point where the intermediate results were
+ saved. Thus, it would be wise to generate a new random salt
+ string when passwords are changed. The default salt string,
+ derived from the principal name, only protects against the use of
+ one dictionary of keys against multiple users.
+
+ If the PBKDF2 iteration count can be spoofed by an intruder on the
+ network, and the limit on the accepted iteration count is very high,
+ the intruder may be able to introduce a form of denial of service
+ attack against the client by sending a very high iteration count,
+ causing the client to spend a great deal of CPU time computing an
+ incorrect key.
+
+ An intruder spoofing the KDC reply, providing a low iteration count
+ and reading the client's reply from the network, may be able to
+ reduce the work needed in the brute-force attack outlined above.
+ Thus, implementations may seek to enforce lower bounds on the number
+ of iterations that will be used.
+
+ Since threat models and typical end-user equipment will vary widely
+ from site to site, allowing site-specific configuration of such
+ bounds is recommended.
+
+ Any benefit against other attacks specific to the HMAC or SHA-1
+ algorithms is probably achieved with a fairly small number of
+ iterations.
+
+
+
+
+
+
+Raeburn Standards Track [Page 7]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+ In the "optimistic preauthentication" case mentioned in section 3,
+ the client may attempt to produce a key without first communicating
+ with the KDC. If the client has no additional information, it can
+ only guess as to the iteration count to be used. Even such
+ heuristics as "iteration count X was used to acquire tickets for the
+ same principal only N hours ago" can be wrong. Given the
+ recommendation above for increasing the iteration counts used over
+ time, it is impossible to recommend any specific default value for
+ this case; allowing site-local configuration is recommended. (If the
+ lower and upper bound checks described above are implemented, the
+ default count for optimistic preauthentication should be between
+ those bounds.)
+
+ Ciphertext stealing mode, as it requires no additional padding in
+ most cases, will reveal the exact length of each message being
+ encrypted rather than merely bounding it to a small range of possible
+ lengths as in CBC mode. Such obfuscation should not be relied upon
+ at higher levels in any case; if the length must be obscured from an
+ outside observer, this should be done by intentionally varying the
+ length of the message to be encrypted.
+
+9. IANA Considerations
+
+ Kerberos encryption and checksum type values used in section 7 were
+ previously reserved in [KCRYPTO] for the mechanisms defined in this
+ document. The registries have been updated to list this document as
+ the reference.
+
+10. Acknowledgements
+
+ Thanks to John Brezak, Gerardo Diaz Cuellar, Ken Hornstein, Paul
+ Leach, Marcus Watts, Larry Zhu, and others for feedback on earlier
+ versions of this document.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 8]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+A. Errata for RFC 2040 Section 8
+
+ (Copied from the RFC Editor's errata web site on July 8, 2004.)
+
+ Reported By: Bob Baldwin; baldwin@plusfive.com
+ Date: Fri, 26 Mar 2004 06:49:02 -0800
+
+ In Section 8, Description of RC5-CTS, of the encryption method,
+ it says:
+
+ 1. Exclusive-or Pn-1 with the previous ciphertext
+ block, Cn-2, to create Xn-1.
+
+ It should say:
+
+ 1. Exclusive-or Pn-1 with the previous ciphertext
+ block, Cn-2, to create Xn-1. For short messages where
+ Cn-2 does not exist, use IV.
+
+ Reported By: Bob Baldwin; baldwin@plusfive.com
+ Date: Mon, 22 Mar 2004 20:26:40 -0800
+
+ In Section 8, first paragraph, second sentence says:
+
+ This mode handles any length of plaintext and produces ciphertext
+ whose length matches the plaintext length.
+
+ In Section 8, first paragraph, second sentence should read:
+
+ This mode handles any length of plaintext longer than one
+ block and produces ciphertext whose length matches the
+ plaintext length.
+
+ In Section 8, step 6 of the decryption method says:
+
+ 6. Decrypt En to create Pn-1.
+
+ In Section 8, step 6 of the decryption method should read:
+
+ 6. Decrypt En and exclusive-or with Cn-2 to create Pn-1.
+ For short messages where Cn-2 does not exist, use the IV.
+
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 9]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+B. Sample Test Vectors
+
+ Sample values for the PBKDF2 HMAC-SHA1 string-to-key function are
+ included below.
+
+ Iteration count = 1
+ Pass phrase = "password"
+ Salt = "ATHENA.MIT.EDUraeburn"
+ 128-bit PBKDF2 output:
+ cd ed b5 28 1b b2 f8 01 56 5a 11 22 b2 56 35 15
+ 128-bit AES key:
+ 42 26 3c 6e 89 f4 fc 28 b8 df 68 ee 09 79 9f 15
+ 256-bit PBKDF2 output:
+ cd ed b5 28 1b b2 f8 01 56 5a 11 22 b2 56 35 15
+ 0a d1 f7 a0 4b b9 f3 a3 33 ec c0 e2 e1 f7 08 37
+ 256-bit AES key:
+ fe 69 7b 52 bc 0d 3c e1 44 32 ba 03 6a 92 e6 5b
+ bb 52 28 09 90 a2 fa 27 88 39 98 d7 2a f3 01 61
+
+ Iteration count = 2
+ Pass phrase = "password"
+ Salt="ATHENA.MIT.EDUraeburn"
+ 128-bit PBKDF2 output:
+ 01 db ee 7f 4a 9e 24 3e 98 8b 62 c7 3c da 93 5d
+ 128-bit AES key:
+ c6 51 bf 29 e2 30 0a c2 7f a4 69 d6 93 bd da 13
+ 256-bit PBKDF2 output:
+ 01 db ee 7f 4a 9e 24 3e 98 8b 62 c7 3c da 93 5d
+ a0 53 78 b9 32 44 ec 8f 48 a9 9e 61 ad 79 9d 86
+ 256-bit AES key:
+ a2 e1 6d 16 b3 60 69 c1 35 d5 e9 d2 e2 5f 89 61
+ 02 68 56 18 b9 59 14 b4 67 c6 76 22 22 58 24 ff
+
+ Iteration count = 1200
+ Pass phrase = "password"
+ Salt = "ATHENA.MIT.EDUraeburn"
+ 128-bit PBKDF2 output:
+ 5c 08 eb 61 fd f7 1e 4e 4e c3 cf 6b a1 f5 51 2b
+ 128-bit AES key:
+ 4c 01 cd 46 d6 32 d0 1e 6d be 23 0a 01 ed 64 2a
+ 256-bit PBKDF2 output:
+ 5c 08 eb 61 fd f7 1e 4e 4e c3 cf 6b a1 f5 51 2b
+ a7 e5 2d db c5 e5 14 2f 70 8a 31 e2 e6 2b 1e 13
+ 256-bit AES key:
+ 55 a6 ac 74 0a d1 7b 48 46 94 10 51 e1 e8 b0 a7
+ 54 8d 93 b0 ab 30 a8 bc 3f f1 62 80 38 2b 8c 2a
+
+
+
+
+
+Raeburn Standards Track [Page 10]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+ Iteration count = 5
+ Pass phrase = "password"
+ Salt=0x1234567878563412
+ 128-bit PBKDF2 output:
+ d1 da a7 86 15 f2 87 e6 a1 c8 b1 20 d7 06 2a 49
+ 128-bit AES key:
+ e9 b2 3d 52 27 37 47 dd 5c 35 cb 55 be 61 9d 8e
+ 256-bit PBKDF2 output:
+ d1 da a7 86 15 f2 87 e6 a1 c8 b1 20 d7 06 2a 49
+ 3f 98 d2 03 e6 be 49 a6 ad f4 fa 57 4b 6e 64 ee
+ 256-bit AES key:
+ 97 a4 e7 86 be 20 d8 1a 38 2d 5e bc 96 d5 90 9c
+ ab cd ad c8 7c a4 8f 57 45 04 15 9f 16 c3 6e 31
+ (This test is based on values given in [PECMS].)
+
+ Iteration count = 1200
+ Pass phrase = (64 characters)
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ Salt="pass phrase equals block size"
+ 128-bit PBKDF2 output:
+ 13 9c 30 c0 96 6b c3 2b a5 5f db f2 12 53 0a c9
+ 128-bit AES key:
+ 59 d1 bb 78 9a 82 8b 1a a5 4e f9 c2 88 3f 69 ed
+ 256-bit PBKDF2 output:
+ 13 9c 30 c0 96 6b c3 2b a5 5f db f2 12 53 0a c9
+ c5 ec 59 f1 a4 52 f5 cc 9a d9 40 fe a0 59 8e d1
+ 256-bit AES key:
+ 89 ad ee 36 08 db 8b c7 1f 1b fb fe 45 94 86 b0
+ 56 18 b7 0c ba e2 20 92 53 4e 56 c5 53 ba 4b 34
+
+ Iteration count = 1200
+ Pass phrase = (65 characters)
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ Salt = "pass phrase exceeds block size"
+ 128-bit PBKDF2 output:
+ 9c ca d6 d4 68 77 0c d5 1b 10 e6 a6 87 21 be 61
+ 128-bit AES key:
+ cb 80 05 dc 5f 90 17 9a 7f 02 10 4c 00 18 75 1d
+ 256-bit PBKDF2 output:
+ 9c ca d6 d4 68 77 0c d5 1b 10 e6 a6 87 21 be 61
+ 1a 8b 4d 28 26 01 db 3b 36 be 92 46 91 5e c8 2a
+ 256-bit AES key:
+ d7 8c 5c 9c b8 72 a8 c9 da d4 69 7f 0b b5 b2 d2
+ 14 96 c8 2b eb 2c ae da 21 12 fc ee a0 57 40 1b
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 11]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+ Iteration count = 50
+ Pass phrase = g-clef (0xf09d849e)
+ Salt = "EXAMPLE.COMpianist"
+ 128-bit PBKDF2 output:
+ 6b 9c f2 6d 45 45 5a 43 a5 b8 bb 27 6a 40 3b 39
+ 128-bit AES key:
+ f1 49 c1 f2 e1 54 a7 34 52 d4 3e 7f e6 2a 56 e5
+ 256-bit PBKDF2 output:
+ 6b 9c f2 6d 45 45 5a 43 a5 b8 bb 27 6a 40 3b 39
+ e7 fe 37 a0 c4 1e 02 c2 81 ff 30 69 e1 e9 4f 52
+ 256-bit AES key:
+ 4b 6d 98 39 f8 44 06 df 1f 09 cc 16 6d b4 b8 3c
+ 57 18 48 b7 84 a3 d6 bd c3 46 58 9a 3e 39 3f 9e
+
+ Some test vectors for CBC with ciphertext stealing, using an initial
+ vector of all-zero.
+
+ AES 128-bit key:
+ 0000: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
+
+ IV:
+ 0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ Input:
+ 0000: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65
+ 0010: 20
+ Output:
+ 0000: c6 35 35 68 f2 bf 8c b4 d8 a5 80 36 2d a7 ff 7f
+ 0010: 97
+ Next IV:
+ 0000: c6 35 35 68 f2 bf 8c b4 d8 a5 80 36 2d a7 ff 7f
+
+ IV:
+ 0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ Input:
+ 0000: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65
+ 0010: 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20
+ Output:
+ 0000: fc 00 78 3e 0e fd b2 c1 d4 45 d4 c8 ef f7 ed 22
+ 0010: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5
+ Next IV:
+ 0000: fc 00 78 3e 0e fd b2 c1 d4 45 d4 c8 ef f7 ed 22
+
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 12]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+ IV:
+ 0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ Input:
+ 0000: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65
+ 0010: 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43
+ Output:
+ 0000: 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8
+ 0010: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84
+ Next IV:
+ 0000: 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8
+
+ IV:
+ 0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ Input:
+ 0000: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65
+ 0010: 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43
+ 0020: 68 69 63 6b 65 6e 2c 20 70 6c 65 61 73 65 2c
+ Output:
+ 0000: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84
+ 0010: b3 ff fd 94 0c 16 a1 8c 1b 55 49 d2 f8 38 02 9e
+ 0020: 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5
+ Next IV:
+ 0000: b3 ff fd 94 0c 16 a1 8c 1b 55 49 d2 f8 38 02 9e
+
+ IV:
+ 0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ Input:
+ 0000: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65
+ 0010: 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43
+ 0020: 68 69 63 6b 65 6e 2c 20 70 6c 65 61 73 65 2c 20
+ Output:
+ 0000: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84
+ 0010: 9d ad 8b bb 96 c4 cd c0 3b c1 03 e1 a1 94 bb d8
+ 0020: 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8
+ Next IV:
+ 0000: 9d ad 8b bb 96 c4 cd c0 3b c1 03 e1 a1 94 bb d8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 13]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+ IV:
+ 0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ Input:
+ 0000: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65
+ 0010: 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43
+ 0020: 68 69 63 6b 65 6e 2c 20 70 6c 65 61 73 65 2c 20
+ 0030: 61 6e 64 20 77 6f 6e 74 6f 6e 20 73 6f 75 70 2e
+ Output:
+ 0000: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84
+ 0010: 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8
+ 0020: 48 07 ef e8 36 ee 89 a5 26 73 0d bc 2f 7b c8 40
+ 0030: 9d ad 8b bb 96 c4 cd c0 3b c1 03 e1 a1 94 bb d8
+ Next IV:
+ 0000: 48 07 ef e8 36 ee 89 a5 26 73 0d bc 2f 7b c8 40
+
+Normative References
+
+ [AC] Schneier, B., "Applied Cryptography", second edition, John
+ Wiley and Sons, New York, 1996.
+
+ [AES] National Institute of Standards and Technology, U.S.
+ Department of Commerce, "Advanced Encryption Standard",
+ Federal Information Processing Standards Publication 197,
+ Washington, DC, November 2001.
+
+ [KCRYPTO] Raeburn, K., "Encryption and Checksum Specifications for
+ Kerberos 5", RFC 3961, February 2005.
+
+ [KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [PKCS5] Kaliski, B., "PKCS #5: Password-Based Cryptography
+ Specification Version 2.0", RFC 2898, September 2000.
+
+ [RC5] Baldwin, R. and R. Rivest, "The RC5, RC5-CBC, RC5-CBC-Pad,
+ and RC5-CTS Algorithms", RFC 2040, October 1996.
+
+ [SHA1] National Institute of Standards and Technology, U.S.
+ Department of Commerce, "Secure Hash Standard", Federal
+ Information Processing Standards Publication 180-1,
+ Washington, DC, April 1995.
+
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 14]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 2005
+
+
+Informative References
+
+ [LEACH] Leach, P., email to IETF Kerberos working group mailing
+ list, 5 May 2003, ftp://ftp.ietf.org/ietf-mail-
+ archive/krb-wg/2003-05.mail.
+
+ [PECMS] Gutmann, P., "Password-based Encryption for CMS", RFC
+ 3211, December 2001.
+
+Author's Address
+
+ Kenneth Raeburn
+ Massachusetts Institute of Technology
+ 77 Massachusetts Avenue
+ Cambridge, MA 02139
+
+ EMail: raeburn@mit.edu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 15]
+\f
+RFC 3962 AES Encryption for Kerberos 5 February 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 IETF's procedures with respect to rights in IETF 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.
+
+
+
+
+
+
+
+Raeburn Standards Track [Page 16]
+\f
--- /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
--- /dev/null
+
+
+
+
+
+
+Network Working Group L. Zhu
+Request for Comments: 4121 K. Jaganathan
+Updates: 1964 Microsoft
+Category: Standards Track S. Hartman
+ MIT
+ July 2005
+
+
+ The Kerberos Version 5
+ Generic Security Service Application Program Interface (GSS-API)
+ Mechanism: Version 2
+
+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 defines protocols, procedures, and conventions to be
+ employed by peers implementing the Generic Security Service
+ Application Program Interface (GSS-API) when using the Kerberos
+ Version 5 mechanism.
+
+ RFC 1964 is updated and incremental changes are proposed in response
+ to recent developments such as the introduction of Kerberos
+ cryptosystem framework. These changes support the inclusion of new
+ cryptosystems, by defining new per-message tokens along with their
+ encryption and checksum algorithms based on the cryptosystem
+ profiles.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 1]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+Table of Contents
+
+ 1. Introduction ....................................................2
+ 2. Key Derivation for Per-Message Tokens ...........................4
+ 3. Quality of Protection ...........................................4
+ 4. Definitions and Token Formats ...................................5
+ 4.1. Context Establishment Tokens ...............................5
+ 4.1.1. Authenticator Checksum ..............................6
+ 4.2. Per-Message Tokens .........................................9
+ 4.2.1. Sequence Number .....................................9
+ 4.2.2. Flags Field .........................................9
+ 4.2.3. EC Field ...........................................10
+ 4.2.4. Encryption and Checksum Operations .................10
+ 4.2.5. RRC Field ..........................................11
+ 4.2.6. Message Layouts ....................................12
+ 4.3. Context Deletion Tokens ...................................13
+ 4.4. Token Identifier Assignment Considerations ................13
+ 5. Parameter Definitions ..........................................14
+ 5.1. Minor Status Codes ........................................14
+ 5.1.1. Non-Kerberos-specific Codes ........................14
+ 5.1.2. Kerberos-specific Codes ............................15
+ 5.2. Buffer Sizes ..............................................15
+ 6. Backwards Compatibility Considerations .........................15
+ 7. Security Considerations ........................................16
+ 8. Acknowledgements................................................17
+ 9. References .....................................................18
+ 9.1. Normative References ......................................18
+ 9.2. Informative References ....................................18
+
+1. Introduction
+
+ [RFC3961] defines a generic framework for describing encryption and
+ checksum types to be used with the Kerberos protocol and associated
+ protocols.
+
+ [RFC1964] describes the GSS-API mechanism for Kerberos Version 5. It
+ defines the format of context establishment, per-message and context
+ deletion tokens, and uses algorithm identifiers for each cryptosystem
+ in per-message and context deletion tokens.
+
+ The approach taken in this document obviates the need for algorithm
+ identifiers. This is accomplished by using the same encryption
+ algorithm, specified by the crypto profile [RFC3961] for the session
+ key or subkey that is created during context negotiation, and its
+ required checksum algorithm. Message layouts of the per-message
+ tokens are therefore revised to remove algorithm indicators and to
+ add extra information to support the generic crypto framework
+ [RFC3961].
+
+
+
+Zhu, et al. Standards Track [Page 2]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+ Tokens transferred between GSS-API peers for security context
+ establishment are also described in this document. The data elements
+ exchanged between a GSS-API endpoint implementation and the Kerberos
+ Key Distribution Center (KDC) [RFC4120] are not specific to GSS-API
+ usage and are therefore defined within [RFC4120] rather than this
+ specification.
+
+ The new token formats specified in this document MUST be used with
+ all "newer" encryption types [RFC4120] and MAY be used with
+ encryption types that are not "newer", provided that the initiator
+ and acceptor know from the context establishment that they can both
+ process these new token formats.
+
+ "Newer" encryption types are those which have been specified along
+ with or since the new Kerberos cryptosystem specification [RFC3961],
+ as defined in section 3.1.3 of [RFC4120]. The list of not-newer
+ encryption types is as follows [RFC3961]:
+
+ Encryption Type Assigned Number
+ ----------------------------------------------
+ des-cbc-crc 1
+ des-cbc-md4 2
+ des-cbc-md5 3
+ des3-cbc-md5 5
+ des3-cbc-sha1 7
+ dsaWithSHA1-CmsOID 9
+ md5WithRSAEncryption-CmsOID 10
+ sha1WithRSAEncryption-CmsOID 11
+ rc2CBC-EnvOID 12
+ rsaEncryption-EnvOID 13
+ rsaES-OAEP-ENV-OID 14
+ des-ede3-cbc-Env-OID 15
+ des3-cbc-sha1-kd 16
+ rc4-hmac 23
+
+ Conventions used in this document
+
+ 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].
+
+ The term "little-endian order" is used for brevity to refer to the
+ least-significant-octet-first encoding, while the term "big-endian
+ order" is for the most-significant-octet-first encoding.
+
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 3]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+2. Key Derivation for Per-Message Tokens
+
+ To limit the exposure of a given key, [RFC3961] adopted "one-way"
+ "entropy-preserving" derived keys, from a base key or protocol key,
+ for different purposes or key usages.
+
+ This document defines four key usage values below that are used to
+ derive a specific key for signing and sealing messages from the
+ session key or subkey [RFC4120] created during the context
+ establishment.
+
+ Name Value
+ -------------------------------------
+ KG-USAGE-ACCEPTOR-SEAL 22
+ KG-USAGE-ACCEPTOR-SIGN 23
+ KG-USAGE-INITIATOR-SEAL 24
+ KG-USAGE-INITIATOR-SIGN 25
+
+ When the sender is the context acceptor, KG-USAGE-ACCEPTOR-SIGN is
+ used as the usage number in the key derivation function for deriving
+ keys to be used in MIC tokens (as defined in section 4.2.6.1).
+ KG-USAGE-ACCEPTOR-SEAL is used for Wrap tokens (as defined in section
+ 4.2.6.2). Similarly, when the sender is the context initiator,
+ KG-USAGE-INITIATOR-SIGN is used as the usage number in the key
+ derivation function for MIC tokens, while KG-USAGE-INITIATOR-SEAL is
+ used for Wrap tokens. Even if the Wrap token does not provide for
+ confidentiality, the same usage values specified above are used.
+
+ During the context initiation and acceptance sequence, the acceptor
+ MAY assert a subkey in the AP-REP message. If the acceptor asserts a
+ subkey, the base key is the acceptor-asserted subkey and subsequent
+ per-message tokens MUST be flagged with "AcceptorSubkey", as
+ described in section 4.2.2. Otherwise, if the initiator asserts a
+ subkey in the AP-REQ message, the base key is this subkey; if the
+ initiator does not assert a subkey, the base key is the session key
+ in the service ticket.
+
+3. Quality of Protection
+
+ The GSS-API specification [RFC2743] provides Quality of Protection
+ (QOP) values that can be used by applications to request a certain
+ type of encryption or signing. A zero QOP value is used to indicate
+ the "default" protection; applications that do not use the default
+ QOP are not guaranteed to be portable across implementations, or even
+ to inter-operate with different deployment configurations of the same
+ implementation. Using a different algorithm than the one for which
+ the key is defined may not be appropriate. Therefore, when the new
+ method in this document is used, the QOP value is ignored.
+
+
+
+Zhu, et al. Standards Track [Page 4]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+ The encryption and checksum algorithms in per-message tokens are now
+ implicitly defined by the algorithms associated with the session key
+ or subkey. Therefore, algorithm identifiers as described in
+ [RFC1964] are no longer needed and are removed from the new token
+ headers.
+
+4. Definitions and Token Formats
+
+ This section provides terms and definitions, as well as descriptions
+ for tokens specific to the Kerberos Version 5 GSS-API mechanism.
+
+4.1. Context Establishment Tokens
+
+ All context establishment tokens emitted by the Kerberos Version 5
+ GSS-API mechanism SHALL have the framing described in section 3.1 of
+ [RFC2743], as illustrated by the following pseudo-ASN.1 structures:
+
+ GSS-API DEFINITIONS ::=
+
+ BEGIN
+
+ MechType ::= OBJECT IDENTIFIER
+ -- representing Kerberos V5 mechanism
+
+ GSSAPI-Token ::=
+ -- option indication (delegation, etc.) indicated within
+ -- mechanism-specific token
+ [APPLICATION 0] IMPLICIT SEQUENCE {
+ thisMech MechType,
+ innerToken ANY DEFINED BY thisMech
+ -- contents mechanism-specific
+ -- ASN.1 structure not required
+ }
+
+ END
+
+ The innerToken field starts with a two-octet token-identifier
+ (TOK_ID) expressed in big-endian order, followed by a Kerberos
+ message.
+
+ Following are the TOK_ID values used in the context establishment
+ tokens:
+
+ Token TOK_ID Value in Hex
+ -----------------------------------------
+ KRB_AP_REQ 01 00
+ KRB_AP_REP 02 00
+ KRB_ERROR 03 00
+
+
+
+Zhu, et al. Standards Track [Page 5]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+ Where Kerberos message KRB_AP_REQUEST, KRB_AP_REPLY, and KRB_ERROR
+ are defined in [RFC4120].
+
+ If an unknown token identifier (TOK_ID) is received in the initial
+ context establishment token, the receiver MUST return
+ GSS_S_CONTINUE_NEEDED major status, and the returned output token
+ MUST contain a KRB_ERROR message with the error code
+ KRB_AP_ERR_MSG_TYPE [RFC4120].
+
+4.1.1. Authenticator Checksum
+
+ The authenticator in the KRB_AP_REQ message MUST include the optional
+ sequence number and the checksum field. The checksum field is used
+ to convey service flags, channel bindings, and optional delegation
+ information.
+
+ The checksum type MUST be 0x8003. When delegation is used, a
+ ticket-granting ticket will be transferred in a KRB_CRED message.
+ This ticket SHOULD have its forwardable flag set. The EncryptedData
+ field of the KRB_CRED message [RFC4120] MUST be encrypted in the
+ session key of the ticket used to authenticate the context.
+
+ The authenticator checksum field SHALL have the following format:
+
+ Octet Name Description
+ -----------------------------------------------------------------
+ 0..3 Lgth Number of octets in Bnd field; Represented
+ in little-endian order; Currently contains
+ hex value 10 00 00 00 (16).
+ 4..19 Bnd Channel binding information, as described in
+ section 4.1.1.2.
+ 20..23 Flags Four-octet context-establishment flags in
+ little-endian order as described in section
+ 4.1.1.1.
+ 24..25 DlgOpt The delegation option identifier (=1) in
+ little-endian order [optional]. This field
+ and the next two fields are present if and
+ only if GSS_C_DELEG_FLAG is set as described
+ in section 4.1.1.1.
+ 26..27 Dlgth The length of the Deleg field in
+ little-endian order [optional].
+ 28..(n-1) Deleg A KRB_CRED message (n = Dlgth + 28)
+ [optional].
+ n..last Exts Extensions [optional].
+
+ The length of the checksum field MUST be at least 24 octets when
+ GSS_C_DELEG_FLAG is not set (as described in section 4.1.1.1), and at
+ least 28 octets plus Dlgth octets when GSS_C_DELEG_FLAG is set. When
+
+
+
+Zhu, et al. Standards Track [Page 6]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+ GSS_C_DELEG_FLAG is set, the DlgOpt, Dlgth, and Deleg fields of the
+ checksum data MUST immediately follow the Flags field. The optional
+ trailing octets (namely the "Exts" field) facilitate future
+ extensions to this mechanism. When delegation is not used, but the
+ Exts field is present, the Exts field starts at octet 24 (DlgOpt,
+ Dlgth and Deleg are absent).
+
+ Initiators that do not support the extensions MUST NOT include more
+ than 24 octets in the checksum field (when GSS_C_DELEG_FLAG is not
+ set) or more than 28 octets plus the KRB_CRED in the Deleg field
+ (when GSS_C_DELEG_FLAG is set). Acceptors that do not understand the
+
+ Extensions MUST ignore any octets past the Deleg field of the
+ checksum data (when GSS_C_DELEG_FLAG is set) or past the Flags field
+ of the checksum data (when GSS_C_DELEG_FLAG is not set).
+
+4.1.1.1. Checksum Flags Field
+
+ The checksum "Flags" field is used to convey service options or
+ extension negotiation information.
+
+ The following context establishment flags are defined in [RFC2744].
+
+ Flag Name Value
+ ---------------------------------
+ GSS_C_DELEG_FLAG 1
+ GSS_C_MUTUAL_FLAG 2
+ GSS_C_REPLAY_FLAG 4
+ GSS_C_SEQUENCE_FLAG 8
+ GSS_C_CONF_FLAG 16
+ GSS_C_INTEG_FLAG 32
+
+ Context establishment flags are exposed to the calling application.
+ If the calling application desires a particular service option, then
+ it requests that option via GSS_Init_sec_context() [RFC2743]. If the
+ corresponding return state values [RFC2743] indicate that any of the
+ above optional context level services will be active on the context,
+ the corresponding flag values in the table above MUST be set in the
+ checksum Flags field.
+
+ Flag values 4096..524288 (2^12, 2^13, ..., 2^19) are reserved for use
+ with legacy vendor-specific extensions to this mechanism.
+
+
+
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 7]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+ All other flag values not specified herein are reserved for future
+ use. Future revisions of this mechanism may use these reserved flags
+ and may rely on implementations of this version to not use such flags
+ in order to properly negotiate mechanism versions. Undefined flag
+ values MUST be cleared by the sender, and unknown flags MUST be
+ ignored by the receiver.
+
+4.1.1.2. Channel Binding Information
+
+ These tags are intended to be used to identify the particular
+ communications channel for which the GSS-API security context
+ establishment tokens are intended, thus limiting the scope within
+ which an intercepted context establishment token can be reused by an
+ attacker (see [RFC2743], section 1.1.6).
+
+ When using C language bindings, channel bindings are communicated to
+ the GSS-API using the following structure [RFC2744]:
+
+ typedef struct gss_channel_bindings_struct {
+ OM_uint32 initiator_addrtype;
+ gss_buffer_desc initiator_address;
+ OM_uint32 acceptor_addrtype;
+ gss_buffer_desc acceptor_address;
+ gss_buffer_desc application_data;
+ } *gss_channel_bindings_t;
+
+ The member fields and constants used for different address types are
+ defined in [RFC2744].
+
+ The "Bnd" field contains the MD5 hash of channel bindings, taken over
+ all non-null components of bindings, in order of declaration.
+ Integer fields within channel bindings are represented in little-
+ endian order for the purposes of the MD5 calculation.
+
+ In computing the contents of the Bnd field, the following detailed
+ points apply:
+
+ (1) For purposes of MD5 hash computation, each integer field and
+ input length field SHALL be formatted into four octets, using
+ little-endian octet ordering.
+
+ (2) All input length fields within gss_buffer_desc elements of a
+ gss_channel_bindings_struct even those which are zero-valued,
+ SHALL be included in the hash calculation. The value elements of
+ gss_buffer_desc elements SHALL be dereferenced, and the resulting
+ data SHALL be included within the hash computation, only for the
+ case of gss_buffer_desc elements having non-zero length
+ specifiers.
+
+
+
+Zhu, et al. Standards Track [Page 8]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+ (3) If the caller passes the value GSS_C_NO_BINDINGS instead of a
+ valid channel binding structure, the Bnd field SHALL be set to 16
+ zero-valued octets.
+
+ If the caller to GSS_Accept_sec_context [RFC2743] passes in
+ GSS_C_NO_CHANNEL_BINDINGS [RFC2744] as the channel bindings, then the
+ acceptor MAY ignore any channel bindings supplied by the initiator,
+ returning success even if the initiator did pass in channel bindings.
+
+ If the application supplies, in the channel bindings, a buffer with a
+ length field larger than 4294967295 (2^32 - 1), the implementation of
+ this mechanism MAY choose to reject the channel bindings altogether,
+ using major status GSS_S_BAD_BINDINGS [RFC2743]. In any case, the
+ size of channel-binding data buffers that can be used (interoperable,
+ without extensions) with this specification is limited to 4294967295
+ octets.
+
+4.2. Per-Message Tokens
+
+ Two classes of tokens are defined in this section: (1) "MIC" tokens,
+ emitted by calls to GSS_GetMIC() and consumed by calls to
+ GSS_VerifyMIC(), and (2) "Wrap" tokens, emitted by calls to
+ GSS_Wrap() and consumed by calls to GSS_Unwrap().
+
+ These new per-message tokens do not include the generic GSS-API token
+ framing used by the context establishment tokens. These new tokens
+ are designed to be used with newer crypto systems that can have
+ variable-size checksums.
+
+4.2.1. Sequence Number
+
+ To distinguish intentionally-repeated messages from maliciously-
+ replayed ones, per-message tokens contain a sequence number field,
+ which is a 64 bit integer expressed in big-endian order. After
+ sending a GSS_GetMIC() or GSS_Wrap() token, the sender's sequence
+ numbers SHALL be incremented by one.
+
+4.2.2. Flags Field
+
+ The "Flags" field is a one-octet integer used to indicate a set of
+ attributes for the protected message. For example, one flag is
+ allocated as the direction-indicator, thus preventing the acceptance
+ of the same message sent back in the reverse direction by an
+ adversary.
+
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 9]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+ The meanings of bits in this field (the least significant bit is bit
+ 0) are as follows:
+
+ Bit Name Description
+ --------------------------------------------------------------
+ 0 SentByAcceptor When set, this flag indicates the sender
+ is the context acceptor. When not set,
+ it indicates the sender is the context
+ initiator.
+ 1 Sealed When set in Wrap tokens, this flag
+ indicates confidentiality is provided
+ for. It SHALL NOT be set in MIC tokens.
+ 2 AcceptorSubkey A subkey asserted by the context acceptor
+ is used to protect the message.
+
+ The rest of available bits are reserved for future use and MUST be
+ cleared. The receiver MUST ignore unknown flags.
+
+4.2.3. EC Field
+
+ The "EC" (Extra Count) field is a two-octet integer field expressed
+ in big-endian order.
+
+ In Wrap tokens with confidentiality, the EC field SHALL be used to
+ encode the number of octets in the filler, as described in section
+ 4.2.4.
+
+ In Wrap tokens without confidentiality, the EC field SHALL be used to
+ encode the number of octets in the trailing checksum, as described in
+ section 4.2.4.
+
+4.2.4. Encryption and Checksum Operations
+
+ The encryption algorithms defined by the crypto profiles provide for
+ integrity protection [RFC3961]. Therefore, no separate checksum is
+ needed.
+
+ The result of decryption can be longer than the original plaintext
+ [RFC3961] and the extra trailing octets are called "crypto-system
+ residue" in this document. However, given the size of any plaintext
+ data, one can always find a (possibly larger) size, such that when
+ padding the to-be-encrypted text to that size, there will be no
+ crypto-system residue added [RFC3961].
+
+ In Wrap tokens that provide for confidentiality, the first 16 octets
+ of the Wrap token (the "header", as defined in section 4.2.6), SHALL
+ be appended to the plaintext data before encryption. Filler octets
+ MAY be inserted between the plaintext data and the "header." The
+
+
+
+Zhu, et al. Standards Track [Page 10]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+ values and size of the filler octets are chosen by implementations,
+ such that there SHALL be no crypto-system residue present after the
+ decryption. The resulting Wrap token is {"header" |
+ encrypt(plaintext-data | filler | "header")}, where encrypt() is the
+ encryption operation (which provides for integrity protection)
+ defined in the crypto profile [RFC3961], and the RRC field (as
+ defined in section 4.2.5) in the to-be-encrypted header contains the
+ hex value 00 00.
+
+ In Wrap tokens that do not provide for confidentiality, the checksum
+ SHALL be calculated first over the to-be-signed plaintext data, and
+ then over the first 16 octets of the Wrap token (the "header", as
+ defined in section 4.2.6). Both the EC field and the RRC field in
+ the token header SHALL be filled with zeroes for the purpose of
+ calculating the checksum. The resulting Wrap token is {"header" |
+ plaintext-data | get_mic(plaintext-data | "header")}, where get_mic()
+ is the checksum operation for the required checksum mechanism of the
+ chosen encryption mechanism defined in the crypto profile [RFC3961].
+
+ The parameters for the key and the cipher-state in the encrypt() and
+ get_mic() operations have been omitted for brevity.
+
+ For MIC tokens, the checksum SHALL be calculated as follows: the
+ checksum operation is calculated first over the to-be-signed
+ plaintext data, and then over the first 16 octets of the MIC token,
+ where the checksum mechanism is the required checksum mechanism of
+ the chosen encryption mechanism defined in the crypto profile
+ [RFC3961].
+
+ The resulting Wrap and MIC tokens bind the data to the token header,
+ including the sequence number and the direction indicator.
+
+4.2.5. RRC Field
+
+ The "RRC" (Right Rotation Count) field in Wrap tokens is added to
+ allow the data to be encrypted in-place by existing SSPI (Security
+ Service Provider Interface) [SSPI] applications that do not provide
+ an additional buffer for the trailer (the cipher text after the in-
+ place-encrypted data) in addition to the buffer for the header (the
+ cipher text before the in-place-encrypted data). Excluding the first
+ 16 octets of the token header, the resulting Wrap token in the
+ previous section is rotated to the right by "RRC" octets. The net
+ result is that "RRC" octets of trailing octets are moved toward the
+ header.
+
+ Consider the following as an example of this rotation operation:
+ Assume that the RRC value is 3 and the token before the rotation is
+ {"header" | aa | bb | cc | dd | ee | ff | gg | hh}. The token after
+
+
+
+Zhu, et al. Standards Track [Page 11]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+ rotation would be {"header" | ff | gg | hh | aa | bb | cc | dd | ee
+ }, where {aa | bb | cc |...| hh} would be used to indicate the octet
+ sequence.
+
+ The RRC field is expressed as a two-octet integer in big-endian
+ order.
+
+ The rotation count value is chosen by the sender based on
+ implementation details. The receiver MUST be able to interpret all
+ possible rotation count values, including rotation counts greater
+ than the length of the token.
+
+4.2.6. Message Layouts
+
+ Per-message tokens start with a two-octet token identifier (TOK_ID)
+ field, expressed in big-endian order. These tokens are defined
+ separately in the following sub-sections.
+
+4.2.6.1. MIC Tokens
+
+ Use of the GSS_GetMIC() call yields a token (referred as the MIC
+ token in this document), separate from the user data being protected,
+ which can be used to verify the integrity of that data as received.
+ The token has the following format:
+
+ Octet no Name Description
+ --------------------------------------------------------------
+ 0..1 TOK_ID Identification field. Tokens emitted by
+ GSS_GetMIC() contain the hex value 04 04
+ expressed in big-endian order in this
+ field.
+ 2 Flags Attributes field, as described in section
+ 4.2.2.
+ 3..7 Filler Contains five octets of hex value FF.
+ 8..15 SND_SEQ Sequence number field in clear text,
+ expressed in big-endian order.
+ 16..last SGN_CKSUM Checksum of the "to-be-signed" data and
+ octet 0..15, as described in section 4.2.4.
+
+ The Filler field is included in the checksum calculation for
+ simplicity.
+
+
+
+
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 12]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+4.2.6.2. Wrap Tokens
+
+ Use of the GSS_Wrap() call yields a token (referred as the Wrap token
+ in this document), which consists of a descriptive header, followed
+ by a body portion that contains either the input user data in
+ plaintext concatenated with the checksum, or the input user data
+ encrypted. The GSS_Wrap() token SHALL have the following format:
+
+ Octet no Name Description
+ --------------------------------------------------------------
+ 0..1 TOK_ID Identification field. Tokens emitted by
+ GSS_Wrap() contain the hex value 05 04
+ expressed in big-endian order in this
+ field.
+ 2 Flags Attributes field, as described in section
+ 4.2.2.
+ 3 Filler Contains the hex value FF.
+ 4..5 EC Contains the "extra count" field, in big-
+ endian order as described in section 4.2.3.
+ 6..7 RRC Contains the "right rotation count" in big-
+ endian order, as described in section
+ 4.2.5.
+ 8..15 SND_SEQ Sequence number field in clear text,
+ expressed in big-endian order.
+ 16..last Data Encrypted data for Wrap tokens with
+ confidentiality, or plaintext data followed
+ by the checksum for Wrap tokens without
+ confidentiality, as described in section
+ 4.2.4.
+
+4.3. Context Deletion Tokens
+
+ Context deletion tokens are empty in this mechanism. Both peers to a
+ security context invoke GSS_Delete_sec_context() [RFC2743]
+ independently, passing a null output_context_token buffer to indicate
+ that no context_token is required. Implementations of
+ GSS_Delete_sec_context() should delete relevant locally-stored
+ context information.
+
+4.4. Token Identifier Assignment Considerations
+
+ Token identifiers (TOK_ID) from 0x60 0x00 through 0x60 0xFF inclusive
+ are reserved and SHALL NOT be assigned. Thus, by examining the first
+ two octets of a token, one can tell unambiguously if it is wrapped
+ with the generic GSS-API token framing.
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 13]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+5. Parameter Definitions
+
+ This section defines parameter values used by the Kerberos V5 GSS-API
+ mechanism. It defines interface elements that support portability,
+ and assumes use of C language bindings per [RFC2744].
+
+5.1. Minor Status Codes
+
+ This section recommends common symbolic names for minor_status values
+ to be returned by the Kerberos V5 GSS-API mechanism. Use of these
+ definitions will enable independent implementers to enhance
+ application portability across different implementations of the
+ mechanism defined in this specification. (In all cases,
+ implementations of GSS_Display_status() will enable callers to
+ convert minor_status indicators to text representations.) Each
+ implementation should make available, through include files or other
+ means, a facility to translate these symbolic names into the concrete
+ values that a particular GSS-API implementation uses to represent the
+ minor_status values specified in this section.
+
+ This list may grow over time and the need for additional minor_status
+ codes, specific to particular implementations, may arise. However,
+ it is recommended that implementations should return a minor_status
+ value as defined on a mechanism-wide basis within this section when
+ that code accurately represents reportable status rather than using a
+ separate, implementation-defined code.
+
+5.1.1. Non-Kerberos-specific Codes
+
+ GSS_KRB5_S_G_BAD_SERVICE_NAME
+ /* "No @ in SERVICE-NAME name string" */
+ GSS_KRB5_S_G_BAD_STRING_UID
+ /* "STRING-UID-NAME contains nondigits" */
+ GSS_KRB5_S_G_NOUSER
+ /* "UID does not resolve to username" */
+ GSS_KRB5_S_G_VALIDATE_FAILED
+ /* "Validation error" */
+ GSS_KRB5_S_G_BUFFER_ALLOC
+ /* "Couldn't allocate gss_buffer_t data" */
+ GSS_KRB5_S_G_BAD_MSG_CTX
+ /* "Message context invalid" */
+ GSS_KRB5_S_G_WRONG_SIZE
+ /* "Buffer is the wrong size" */
+ GSS_KRB5_S_G_BAD_USAGE
+ /* "Credential usage type is unknown" */
+ GSS_KRB5_S_G_UNKNOWN_QOP
+ /* "Unknown quality of protection specified" */
+
+
+
+
+Zhu, et al. Standards Track [Page 14]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+5.1.2. Kerberos-specific Codes
+
+ GSS_KRB5_S_KG_CCACHE_NOMATCH
+ /* "Client principal in credentials does not match
+ specified name" */
+ GSS_KRB5_S_KG_KEYTAB_NOMATCH
+ /* "No key available for specified service
+ principal" */
+ GSS_KRB5_S_KG_TGT_MISSING
+ /* "No Kerberos ticket-granting ticket available" */
+ GSS_KRB5_S_KG_NO_SUBKEY
+ /* "Authenticator has no subkey" */
+ GSS_KRB5_S_KG_CONTEXT_ESTABLISHED
+ /* "Context is already fully established" */
+ GSS_KRB5_S_KG_BAD_SIGN_TYPE
+ /* "Unknown signature type in token" */
+ GSS_KRB5_S_KG_BAD_LENGTH
+ /* "Invalid field length in token" */
+ GSS_KRB5_S_KG_CTX_INCOMPLETE
+ /* "Attempt to use incomplete security context" */
+
+5.2. Buffer Sizes
+
+ All implementations of this specification MUST be capable of
+ accepting buffers of at least 16K octets as input to GSS_GetMIC(),
+ GSS_VerifyMIC(), and GSS_Wrap(). They MUST also be capable of
+ accepting the output_token generated by GSS_Wrap() for a 16K octet
+ input buffer as input to GSS_Unwrap(). Implementations SHOULD
+ support 64K octet input buffers, and MAY support even larger input
+ buffer sizes.
+
+6. Backwards Compatibility Considerations
+
+ The new token formats defined in this document will only be
+ recognized by new implementations. To address this, implementations
+ can always use the explicit sign or seal algorithm in [RFC1964] when
+ the key type corresponds to not "newer" enctypes. As an alternative,
+ one might retry sending the message with the sign or seal algorithm
+ explicitly defined as in [RFC1964]. However, this would require
+ either the use of a mechanism such as [RFC2478] to securely negotiate
+ the method, or the use of an out-of-band mechanism to choose the
+ appropriate mechanism. For this reason, it is RECOMMENDED that the
+ new token formats defined in this document SHOULD be used only if
+ both peers are known to support the new mechanism during context
+ negotiation because of, for example, the use of "new" enctypes.
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 15]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+ GSS_Unwrap() or GSS_VerifyMIC() can process a message token as
+ follows: it can look at the first octet of the token header, and if
+ it is 0x60, then the token must carry the generic GSS-API pseudo
+ ASN.1 framing. Otherwise, the first two octets of the token contain
+ the TOK_ID that uniquely identify the token message format.
+
+7. Security Considerations
+
+ Channel bindings are validated by the acceptor. The acceptor can
+ ignore the channel bindings restriction supplied by the initiator and
+ carried in the authenticator checksum, if (1) channel bindings are
+ not used by GSS_Accept_sec_context [RFC2743], and (2) the acceptor
+ does not prove to the initiator that it has the same channel bindings
+ as the initiator (even if the client requested mutual
+ authentication). This limitation should be considered by designers
+ of applications that would use channel bindings, whether to limit the
+ use of GSS-API contexts to nodes with specific network addresses, to
+ authenticate other established, secure channels using Kerberos
+ Version 5, or for any other purpose.
+
+ Session key types are selected by the KDC. Under the current
+ mechanism, no negotiation of algorithm types occurs, so server-side
+ (acceptor) implementations cannot request that clients not use
+ algorithm types not understood by the server. However,
+ administrators can control what enctypes can be used for session keys
+ for this mechanism by controlling the set of the ticket session key
+ enctypes which the KDC is willing to use in tickets for a given
+ acceptor principal. Therefore, the KDC could be given the task of
+ limiting session keys for a given service to types actually supported
+ by the Kerberos and GSSAPI software on the server. This has a
+ drawback for cases in which a service principal name is used for both
+ GSSAPI-based and non-GSSAPI-based communication (most notably the
+ "host" service key), if the GSSAPI implementation does not understand
+ (for example) AES [RFC3962], but the Kerberos implementation does.
+ This means that AES session keys cannot be issued for that service
+ principal, which keeps the protection of non-GSSAPI services weaker
+ than necessary. KDC administrators desiring to limit the session key
+ types to support interoperability with such GSSAPI implementations
+ should carefully weigh the reduction in protection offered by such
+ mechanisms against the benefits of interoperability.
+
+
+
+
+
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 16]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+8. Acknowledgements
+
+ Ken Raeburn and Nicolas Williams corrected many of our errors in the
+ use of generic profiles and were instrumental in the creation of this
+ document.
+
+ The text for security considerations was contributed by Nicolas
+ Williams and Ken Raeburn.
+
+ Sam Hartman and Ken Raeburn suggested the "floating trailer" idea,
+ namely the encoding of the RRC field.
+
+ Sam Hartman and Nicolas Williams recommended the replacing our
+ earlier key derivation function for directional keys with different
+ key usage numbers for each direction as well as retaining the
+ directional bit for maximum compatibility.
+
+ Paul Leach provided numerous suggestions and comments.
+
+ Scott Field, Richard Ward, Dan Simon, Kevin Damour, and Simon
+ Josefsson also provided valuable inputs on this document.
+
+ Jeffrey Hutzelman provided comments and clarifications for the text
+ related to the channel bindings.
+
+ Jeffrey Hutzelman and Russ Housley suggested many editorial changes.
+
+ Luke Howard provided implementations of this document for the Heimdal
+ code base, and helped inter-operability testing with the Microsoft
+ code base, together with Love Hornquist Astrand. These experiments
+ formed the basis of this document.
+
+ Martin Rex provided suggestions of TOK_ID assignment recommendations,
+ thus the token tagging in this document is unambiguous if the token
+ is wrapped with the pseudo ASN.1 header.
+
+ John Linn wrote the original Kerberos Version 5 mechanism
+ specification [RFC1964], of which some text has been retained.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 17]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+9. References
+
+9.1. Normative References
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [RFC2743] Linn, J., "Generic Security Service Application Program
+ Interface Version 2, Update 1", RFC 2743, January 2000.
+
+ [RFC2744] Wray, J., "Generic Security Service API Version 2:
+ C-bindings", RFC 2744, January 2000.
+
+ [RFC1964] Linn, J., "The Kerberos Version 5 GSS-API Mechanism", RFC
+ 1964, June 1996.
+
+ [RFC3961] Raeburn, K., "Encryption and Checksum Specifications for
+ Kerberos 5", RFC 3961, February 2005.
+
+ [RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The
+ Kerberos Network Authentication Service (V5)", RFC 4120,
+ July 2005.
+
+9.2. Informative References
+
+ [SSPI] Leach, P., "Security Service Provider Interface",
+ Microsoft Developer Network (MSDN), April 2003.
+
+ [RFC3962] Raeburn, K., "Advanced Encryption Standard (AES)
+ Encryption for Kerberos 5", RFC 3962, February 2005.
+
+ [RFC2478] Baize, E. and D. Pinkas, "The Simple and Protected GSS-API
+ Negotiation Mechanism", RFC 2478, December 1998.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 18]
+\f
+RFC 4121 Kerberos Version 5 GSS-API July 2005
+
+
+Authors' Addresses
+
+ Larry Zhu
+ One Microsoft Way
+ Redmond, WA 98052 - USA
+
+ EMail: LZhu@microsoft.com
+
+
+ Karthik Jaganathan
+ One Microsoft Way
+ Redmond, WA 98052 - USA
+
+ EMail: karthikj@microsoft.com
+
+
+ Sam Hartman
+ Massachusetts Institute of Technology
+ 77 Massachusetts Avenue
+ Cambridge, MA 02139 - USA
+
+ EMail: hartmans-ietf@mit.edu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 19]
+\f
+RFC 4121 Kerberos Version 5 GSS-API 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.
+
+
+
+
+
+
+
+Zhu, et al. Standards Track [Page 20]
+\f