1 CAT working group M. Swift
2 Internet Draft J. Brezak
3 Document: draft-brezak-win2k-krb-rc4-hmac-03.txt Microsoft
4 Category: Informational June 2000
7 The Windows 2000 RC4-HMAC Kerberos encryption type
12 This document is an Internet-Draft and is in full conformance with
13 all provisions of Section 10 of RFC2026 [1]. Internet-Drafts are
14 working documents of the Internet Engineering Task Force (IETF), its
15 areas, and its working groups. Note that other groups may also
16 distribute working documents as Internet-Drafts. Internet-Drafts are
17 draft documents valid for a maximum of six months and may be
18 updated, replaced, or obsoleted by other documents at any time. It
19 is inappropriate to use Internet- Drafts as reference material or to
20 cite them other than as "work in progress."
22 The list of current Internet-Drafts can be accessed at
23 http://www.ietf.org/ietf/1id-abstracts.txt
24 The list of Internet-Draft Shadow Directories can be accessed at
25 http://www.ietf.org/shadow.html.
29 The Windows 2000 implementation of Kerberos introduces a new
30 encryption type based on the RC4 encryption algorithm and using an
31 MD5 HMAC for checksum. This is offered as an alternative to using
32 the existing DES based encryption types.
34 The RC4-HMAC encryption types are used to ease upgrade of existing
35 Windows NT environments, provide strong crypto (128-bit key
36 lengths), and provide exportable (meet United States government
37 export restriction requirements) encryption.
39 The Windows 2000 implementation of Kerberos contains new encryption
40 and checksum types for two reasons: for export reasons early in the
41 development process, 56 bit DES encryption could not be exported,
42 and because upon upgrade from Windows NT 4.0 to Windows 2000,
43 accounts will not have the appropriate DES keying material to do the
44 standard DES encryption. Furthermore, 3DES is not available for
45 export, and there was a desire to use a single flavor of encryption
46 in the product for both US and international products.
48 As a result, there are two new encryption types and one new checksum
49 type introduced in Windows 2000.
52 2. Conventions used in this document
56 Swift Category - Informational 1
58 Windows 2000 RC4-HMAC Kerberos E-Type June 2000
61 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
62 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in
63 this document are to be interpreted as described in RFC-2119 [2].
67 On upgrade from existing Windows NT domains, the user accounts would
68 not have a DES based key available to enable the use of DES base
69 encryption types specified in RFC 1510. The key used for RC4-HMAC is
70 the same as the existing Windows NT key (NT Password Hash) for
71 compatibility reasons. Once the account password is changed, the DES
72 based keys are created and maintained. Once the DES keys are
73 available DES based encryption types can be used with Kerberos.
75 The RC4-HMAC String to key function is defined as follow:
79 K = MD4(UNICODE(password))
81 The RC4-HMAC keys are generated by using the Windows UNICODE version
82 of the password. Each Windows UNICODE character is encoded in
83 little-endian format of 2 octets each. Then performing an MD4 [6]
84 hash operation on just the UNICODE characters of the password (not
85 including the terminating zero octets).
87 For an account with a password of "foo", this String2Key("foo") will
90 0xac, 0x8e, 0x65, 0x7f, 0x83, 0xdf, 0x82, 0xbe,
91 0xea, 0x5d, 0x43, 0xbd, 0xaf, 0x78, 0x00, 0xcc
95 The MD5 HMAC function is defined in [3]. It is used in this
96 encryption type for checksum operations. Refer to [3] for details on
97 its operation. In this document this function is referred to as
98 HMAC(Key, Data) returning the checksum using the specified key on
101 The basic MD5 hash operation is used in this encryption type and
102 defined in [7]. In this document this function is referred to as
103 MD5(Data) returning the checksum of the data.
105 RC4 is a stream cipher licensed by RSA Data Security [RSADSI]. A
106 compatible cipher is described in [8]. In this document the function
107 is referred to as RC4(Key, Data) returning the encrypted data using
108 the specified key on the data.
110 These encryption types use key derivation as defined in [9] (RFC-
111 1510BIS) in Section titled "Key Derivation". With each message, the
112 message type (T) is used as a component of the keying material. This
113 summarizes the different key derivation values used in the various
115 Swift Category - Informational 2
117 Windows 2000 RC4-HMAC Kerberos E-Type June 2000
120 operations. Note that these differ from the key derivations used in
121 other Kerberos encryption types.
123 T = 1 for TS-ENC-TS in the AS-Request
124 T = 8 for the AS-Reply
125 T = 7 for the Authenticator in the TGS-Request
126 T = 8 for the TGS-Reply
127 T = 2 for the Server Ticket in the AP-Request
128 T = 11 for the Authenticator in the AP-Request
129 T = 12 for the Server returned AP-Reply
130 T = 15 in the generation of checksum for the MIC token
131 T = 0 in the generation of sequence number for the MIC token
132 T = 13 in the generation of checksum for the WRAP token
133 T = 0 in the generation of sequence number for the WRAP token
134 T = 0 in the generation of encrypted data for the WRAPPED token
136 All strings in this document are ASCII unless otherwise specified.
137 The lengths of ASCII encoded character strings include the trailing
138 terminator character (0).
140 The concat(a,b,c,...) function will return the logical concatenation
141 (left to right) of the values of the arguments.
143 The nonce(n) function returns a pseudo-random number of "n" octets.
147 There is one checksum type used in this encryption type. The
148 Kerberos constant for this type is:
149 #define KERB_CHECKSUM_HMAC_MD5 (-138)
151 The function is defined as follows:
154 T - the message type, encoded as a little-endian four byte integer
158 Ksign = HMAC(K, "signaturekey") //includes zero octet at end
159 tmp = MD5(concat(T, data))
160 CHKSUM = HMAC(Ksign, tmp)
165 There are two encryption types used in these encryption types. The
166 Kerberos constants for these types are:
167 #define KERB_ETYPE_RC4_HMAC 23
168 #define KERB_ETYPE_RC4_HMAC_EXP 24
170 The basic encryption function is defined as follow:
172 T = the message type, encoded as a little-endian four byte integer.
174 Swift Category - Informational 3
176 Windows 2000 RC4-HMAC Kerberos E-Type June 2000
180 BYTE L40[14] = "fortybits";
181 BYTE SK = "signaturekey";
183 ENCRYPT (K, fRC4_EXP, T, data, data_len, edata, edata_len)
186 *((DWORD *)(L40+10)) = T;
187 HMAC (K, L40, 10 + 4, K1);
192 if (fRC4_EXP) memset (K1+7, 0xAB, 9);
193 add_8_random_bytes(data, data_len, conf_plus_data);
194 HMAC (K2, conf_plus_data, 8 + data_len, checksum);
195 HMAC (K1, checksum, 16, K3);
196 RC4(K3, conf_plus_data, 8 + data_len, edata + 16);
197 memcpy (edata, checksum, 16);
198 edata_len = 16 + 8 + data_len;
201 DECRYPT (K, fRC4_EXP, T, edata, edata_len, data, data_len)
204 *((DWORD *)(L40+10)) = T;
205 HMAC (K, L40, 14, K1);
210 if (fRC4_EXP) memset (K1+7, 0xAB, 9);
211 HMAC (K1, edata, 16, K3); // checksum is at edata
212 RC4(K3, edata + 16, edata_len - 16, edata + 16);
213 data_len = edata_len - 16 - 8;
214 memcpy (data, edata + 16 + 8, data_len);
216 // verify generated and received checksums
217 HMAC (K2, edata + 16, edata_len - 16, checksum);
218 if (memcmp(edata, checksum, 16) != 0)
219 printf("CHECKSUM ERROR !!!!!!\n");
222 The header field on the encrypted data in KDC messages is:
224 typedef struct _RC4_MDx_HEADER {
227 } RC4_MDx_HEADER, *PRC4_MDx_HEADER;
229 The KDC message is encrypted using the ENCRYPT function not
230 including the Checksum in the RC4_MDx_HEADER.
233 Swift Category - Informational 4
235 Windows 2000 RC4-HMAC Kerberos E-Type June 2000
238 The character constant "fortybits" evolved from the time when a 40-
239 bit key length was all that was exportable from the United States.
240 It is now used to recognize that the key length is of "exportable"
241 length. In this description, the key size is actually 56-bits.
243 7. Key Strength Negotiation
245 A Kerberos client and server can negotiate over key length if they
246 are using mutual authentication. If the client is unable to perform
247 full strength encryption, it may propose a key in the "subkey" field
248 of the authenticator, using a weaker encryption type. The server
249 must then either return the same key or suggest its own key in the
250 subkey field of the AP reply message. The key used to encrypt data
251 is derived from the key returned by the server. If the client is
252 able to perform strong encryption but the server is not, it may
253 propose a subkey in the AP reply without first being sent a subkey
254 in the authenticator.
256 8. GSSAPI Kerberos V5 Mechanism Type
258 8.1 Mechanism Specific Changes
260 The GSSAPI per-message tokens also require new checksum and
261 encryption types. The GSS-API per-message tokens must be changed to
262 support these new encryption types (See [5] Section 1.2.2). The
263 sealing algorithm identifier (SEAL_ALG) for an RC4 based encryption
265 Byte 4..5 SEAL_ALG 0x10 0x00 - RC4
267 The signing algorithm identifier (SGN_ALG) for MD5 HMAC is:
268 Byte 2..3 SGN ALG 0x11 0x00 - HMAC
270 The only support quality of protection is:
271 #define GSS_KRB5_INTEG_C_QOP_DEFAULT 0x0
273 In addition, when using an RC4 based encryption type, the sequence
274 number is sent in big-endian rather than little-endian order.
276 The Windows 2000 implementation also defines new GSSAPI flags in the
277 initial token passed when initializing a security context. These
278 flags are passed in the checksum field of the authenticator (See [5]
281 GSS_C_DCE_STYLE - This flag was added for use with Microsoft’s
282 implementation of DCE RPC, which initially expected three legs of
283 authentication. Setting this flag causes an extra AP reply to be
284 sent from the client back to the server after receiving the server’s
285 AP reply. In addition, the context negotiation tokens do not have
286 GSSAPI framing - they are raw AP message and do not include object
288 #define GSS_C_DCE_STYLE 0x1000
292 Swift Category - Informational 5
294 Windows 2000 RC4-HMAC Kerberos E-Type June 2000
297 GSS_C_IDENTIFY_FLAG - This flag allows the client to indicate to the
298 server that it should only allow the server application to identify
299 the client by name and ID, but not to impersonate the client.
300 #define GSS_C_IDENTIFY_FLAG 0x2000
302 GSS_C_EXTENDED_ERROR_FLAG - Setting this flag indicates that the
303 client wants to be informed of extended error information. In
304 particular, Windows 2000 status codes may be returned in the data
305 field of a Kerberos error message. This allows the client to
306 understand a server failure more precisely. In addition, the server
307 may return errors to the client that are normally handled at the
308 application layer in the server, in order to let the client try to
309 recover. After receiving an error message, the client may attempt to
310 resubmit an AP request.
311 #define GSS_C_EXTENDED_ERROR_FLAG 0x4000
313 These flags are only used if a client is aware of these conventions
314 when using the SSPI on the Windows platform, they are not generally
317 When NetBIOS addresses are used in the GSSAPI, they are identified
318 by the GSS_C_AF_NETBIOS value. This value is defined as:
319 #define GSS_C_AF_NETBIOS 0x14
320 NetBios addresses are 16-octet addresses typically composed of 1 to
322 15 characters, trailing blank (ascii char 20) filled, with a 16
325 8.2 GSSAPI Checksum Type
327 The GSSAPI checksum type and algorithm is defined in Section 5. Only
328 the first 8 octets of the checksum are used. The resulting checksum
329 is stored in the SGN_CKSUM field (See [5] Section 1.2) for
330 GSS_GetMIC() and GSS_Wrap(conf_flag=FALSE).
332 MIC (K, fRC4_EXP, seq_num, MIC_hdr, msg, msg_len,
333 MIC_seq, MIC_checksum)
335 HMAC (K, SK, 13, K4);
337 memcpy (T_plus_hdr_plus_msg + 00, &T, 4);
338 memcpy (T_plus_hdr_plus_msg + 04, MIC_hdr, 8);
339 // 0101 1100 FFFFFFFF
340 memcpy (T_plus_hdr_plus_msg + 12, msg, msg_len);
341 MD5 (T_hdr_msg, 4 + 8 + msg_len, MD5_of_T_hdr_msg);
342 HMAC (K4, MD5_of_T_hdr_msg, CHKSUM);
343 memcpy (MIC_checksum, CHKSUM, 8); // use only first 8 bytes
347 *((DWORD *)(L40+10)) = T;
348 HMAC (K, L40, 14, K5);
352 Swift Category - Informational 6
354 Windows 2000 RC4-HMAC Kerberos E-Type June 2000
358 if (fRC4_EXP) memset(K5+7, 0xAB, 9);
359 HMAC(K5, MIT_checksum, 8, K6);
360 copy_seq_num_in_big_endian(seq_num, seq_plus_direction);
362 copy_direction_flag (direction_flag, seq_plus_direction +
363 4); //0x12345678FFFFFFFF
364 RC4(K6, seq_plus_direction, 8, MIC_seq);
367 8.3 GSSAPI Encryption Types
369 There are two encryption types for GSSAPI message tokens, one that
370 is 128 bits in strength, and one that is 56 bits in strength as
371 defined in Section 6.
373 All padding is rounded up to 1 byte. One byte is needed to say that
374 there is 1 byte of padding. The DES based mechanism type uses 8 byte
375 padding. See [5] Section 1.2.2.3.
377 The encryption mechanism used for GSS wrap based messages is as
381 WRAP (K, fRC4_EXP, seq_num, WRAP_hdr, msg, msg_len,
382 WRAP_seq, WRAP_checksum, edata, edata_len)
384 HMAC (K, SK, 13, K7);
387 memcpy (T_hdr_conf_msg_pad + 00, &T, 4);
388 memcpy (T_hdr_conf_msg_pad + 04, WRAP_hdr, 8); // 0101 1100
390 memcpy (T_hdr_conf_msg_pad + 12, msg, msg_len);
391 memcpy (T_hdr_conf_msg_pad + 12 + msg_len, &PAD, 1);
392 MD5 (T_hdr_conf_msg_pad,
393 4 + 8 + 8 + msg_len + 1,
394 MD5_of_T_hdr_conf_msg_pad);
395 HMAC (K7, MD5_of_T_hdr_conf_msg_pad, CHKSUM);
396 memcpy (WRAP_checksum, CHKSUM, 8); // use only first 8
401 *((DWORD *)(L40+10)) = T;
402 HMAC (K, L40, 14, K8);
406 if (fRC4_EXP) memset(K8+7, 0xAB, 9);
407 HMAC(K8, WRAP_checksum, 8, K9);
408 copy_seq_num_in_big_endian(seq_num, seq_plus_direction);
411 Swift Category - Informational 7
413 Windows 2000 RC4-HMAC Kerberos E-Type June 2000
416 copy_direction_flag (direction_flag, seq_plus_direction +
417 4); //0x12345678FFFFFFFF
418 RC4(K9, seq_plus_direction, 8, WRAP_seq);
420 for (i = 0; i < 16; i++) K10 [i] ^= 0xF0; // XOR each byte
424 *(DWORD *)(L40+10) = T;
425 HMAC(K10, L40, 14, K11);
426 memset(K11+7, 0xAB, 9);
428 HMAC(K10, &T, 4, K11);
430 HMAC(K11, seq_num, 4, K12);
431 RC4(K12, T_hdr_conf_msg_pad + 4 + 8, 8 + msg_len + 1,
432 edata); /* skip T & hdr */
433 edata_len = 8 + msg_len + 1; // conf + msg_len + pad
437 The character constant "fortybits" evolved from the time when a 40-
438 bit key length was all that was exportable from the United States.
439 It is now used to recognize that the key length is of "exportable"
440 length. In this description, the key size is actually 56-bits.
442 9. Security Considerations
444 Care must be taken in implementing this encryption type because it
445 uses a stream cipher. If a different IV isn’t used in each direction
446 when using a session key, the encryption is weak. By using the
447 sequence number as an IV, this is avoided.
451 We would like to thank Salil Dangi for the valuable input in
452 refining the descriptions of the functions and review input.
456 1 Bradner, S., "The Internet Standards Process -- Revision 3", BCP
457 9, RFC 2026, October 1996.
459 2 Bradner, S., "Key words for use in RFCs to Indicate Requirement
460 Levels", BCP 14, RFC 2119, March 1997
462 3 Krawczyk, H., Bellare, M., Canetti, R.,"HMAC: Keyed-Hashing for
463 Message Authentication", RFC 2104, February 1997
465 4 Kohl, J., Neuman, C., "The Kerberos Network Authentication
466 Service (V5)", RFC 1510, September 1993
470 Swift Category - Informational 8
472 Windows 2000 RC4-HMAC Kerberos E-Type June 2000
476 5 Linn, J., "The Kerberos Version 5 GSS-API Mechanism", RFC-1964,
479 6 R. Rivest, "The MD4 Message-Digest Algorithm", RFC-1320, April
482 7 R. Rivest, "The MD5 Message-Digest Algorithm", RFC-1321, April
485 8 Thayer, R. and K. Kaukonen, "A Stream Cipher Encryption
486 Algorithm", Work in Progress.
488 9 RC4 is a proprietary encryption algorithm available under license
489 from RSA Data Security Inc. For licensing information, contact:
491 RSA Data Security, Inc.
493 Redwood City, CA 94065-1031
495 10 Neuman, C., Kohl, J., Ts'o, T., "The Kerberos Network
496 Authentication Service (V5)", draft-ietf-cat-kerberos-revisions-
497 04.txt, June 25, 1999
500 12. Author's Addresses
503 Dept. of Computer Science
505 University of Washington
507 Email: mikesw@cs.washington.edu
513 Email: jbrezak@microsoft.com
529 Swift Category - Informational 9
531 Windows 2000 RC4-HMAC Kerberos E-Type October 1999
535 13. Full Copyright Statement
537 "Copyright (C) The Internet Society (2000). All Rights Reserved.
539 This document and translations of it may be copied and
540 furnished to others, and derivative works that comment on or
541 otherwise explain it or assist in its implementation may be
542 prepared, copied, published and distributed, in whole or in
543 part, without restriction of any kind, provided that the above
544 copyright notice and this paragraph are included on all such
545 copies and derivative works. However, this document itself may
546 not be modified in any way, such as by removing the copyright
547 notice or references to the Internet Society or other Internet
548 organizations, except as needed for the purpose of developing
549 Internet standards in which case the procedures for copyrights
550 defined in the Internet Standards process must be followed, or
551 as required to translate it into languages other than English.
553 The limited permissions granted above are perpetual and will
554 not be revoked by the Internet Society or its successors or
588 Swift Category - Informational 10