1 NETWORK WORKING GROUP L. Zhu
2 Internet-Draft Microsoft Corporation
3 Expires: June 2, 2006 B. Tung
4 USC Information Sciences Institute
8 Public Key Cryptography for Initial Authentication in Kerberos
9 draft-ietf-cat-kerberos-pk-init-30
13 By submitting this Internet-Draft, each author represents that any
14 applicable patent or other IPR claims of which he or she is aware
15 have been or will be disclosed, and any of which he or she becomes
16 aware will be disclosed, in accordance with Section 6 of BCP 79.
18 Internet-Drafts are working documents of the Internet Engineering
19 Task Force (IETF), its areas, and its working groups. Note that
20 other groups may also distribute working documents as Internet-
23 Internet-Drafts are draft documents valid for a maximum of six months
24 and may be updated, replaced, or obsoleted by other documents at any
25 time. It is inappropriate to use Internet-Drafts as reference
26 material or to cite them other than as "work in progress."
28 The list of current Internet-Drafts can be accessed at
29 http://www.ietf.org/ietf/1id-abstracts.txt.
31 The list of Internet-Draft Shadow Directories can be accessed at
32 http://www.ietf.org/shadow.html.
34 This Internet-Draft will expire on June 2, 2006.
38 Copyright (C) The Internet Society (2005).
42 This document describes protocol extensions (hereafter called PKINIT)
43 to the Kerberos protocol specification. These extensions provide a
44 method for integrating public key cryptography into the initial
45 authentication exchange, by using asymmetric-key signature and/or
46 encryption algorithms in pre-authentication data fields.
52 Zhu & Tung Expires June 2, 2006 [Page 1]
54 Internet-Draft PKINIT November 2005
59 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
60 2. Conventions Used in This Document . . . . . . . . . . . . . . 3
61 3. Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . 4
62 3.1. Definitions, Requirements, and Constants . . . . . . . . . 5
63 3.1.1. Required Algorithms . . . . . . . . . . . . . . . . . 5
64 3.1.2. Defined Message and Encryption Types . . . . . . . . . 5
65 3.1.3. Algorithm Identifiers . . . . . . . . . . . . . . . . 6
66 3.2. PKINIT Pre-authentication Syntax and Use . . . . . . . . . 7
67 3.2.1. Generation of Client Request . . . . . . . . . . . . . 7
68 3.2.2. Receipt of Client Request . . . . . . . . . . . . . . 12
69 3.2.3. Generation of KDC Reply . . . . . . . . . . . . . . . 16
70 3.2.4. Receipt of KDC Reply . . . . . . . . . . . . . . . . . 22
71 3.3. Interoperability Requirements . . . . . . . . . . . . . . 24
72 3.4. KDC Indication of PKINIT Support . . . . . . . . . . . . . 24
73 4. Security Considerations . . . . . . . . . . . . . . . . . . . 25
74 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 27
75 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27
76 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 28
77 7.1. Normative References . . . . . . . . . . . . . . . . . . . 28
78 7.2. Informative References . . . . . . . . . . . . . . . . . . 29
79 Appendix A. PKINIT ASN.1 Module . . . . . . . . . . . . . . . . . 29
80 Appendix B. Test Vectors . . . . . . . . . . . . . . . . . . . . 35
81 Appendix C. Miscellaneous Information about Microsoft Windows
82 PKINIT Implementations . . . . . . . . . . . . . . . 36
83 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 38
84 Intellectual Property and Copyright Statements . . . . . . . . . . 39
108 Zhu & Tung Expires June 2, 2006 [Page 2]
110 Internet-Draft PKINIT November 2005
115 A client typically authenticates itself to a service in Kerberos
116 using three distinct though related exchanges. First, the client
117 requests a ticket-granting ticket (TGT) from the Kerberos
118 authentication server (AS). Then, it uses the TGT to request a
119 service ticket from the Kerberos ticket-granting server (TGS).
120 Usually, the AS and TGS are integrated in a single device known as a
121 Kerberos Key Distribution Center, or KDC. Finally, the client uses
122 the service ticket to authenticate itself to the service.
124 The advantage afforded by the TGT is that the client exposes his
125 long-term secrets only once. The TGT and its associated session key
126 can then be used for any subsequent service ticket requests. One
127 result of this is that all further authentication is independent of
128 the method by which the initial authentication was performed.
129 Consequently, initial authentication provides a convenient place to
130 integrate public-key cryptography into Kerberos authentication.
132 As defined in [RFC4120], Kerberos authentication exchanges use
133 symmetric-key cryptography, in part for performance. One
134 disadvantage of using symmetric-key cryptography is that the keys
135 must be shared, so that before a client can authenticate itself, he
136 must already be registered with the KDC.
138 Conversely, public-key cryptography (in conjunction with an
139 established Public Key Infrastructure) permits authentication without
140 prior registration with a KDC. Adding it to Kerberos allows the
141 widespread use of Kerberized applications by clients without
142 requiring them to register first with a KDC--a requirement that has
143 no inherent security benefit.
145 As noted above, a convenient and efficient place to introduce public-
146 key cryptography into Kerberos is in the initial authentication
147 exchange. This document describes the methods and data formats for
148 integrating public-key cryptography into Kerberos initial
152 2. Conventions Used in This Document
154 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
155 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
156 document are to be interpreted as described in [RFC2119].
158 Both the AS and the TGS are referred to as the KDC.
160 In this document, the encryption key used to encrypt the enc-part
164 Zhu & Tung Expires June 2, 2006 [Page 3]
166 Internet-Draft PKINIT November 2005
169 field of the KDC-REP in the AS-REP [RFC4120] is referred to as the AS
172 In this document, an empty sequence in an optional field can be
173 either included or omitted: both encodings are permitted and
174 considered equivalent.
176 In this document, the term "Modular Exponential Diffie-Hellman" is
177 used to refer to the Diffie-Hellman key exchange as described in
178 [RFC2631], in order to differentiate it from other equivalent
179 representations of the same key agreement algorithm.
184 This section describes extensions to [RFC4120] for supporting the use
185 of public-key cryptography in the initial request for a ticket.
187 Briefly, this document defines the following extensions to [RFC4120]:
189 1. The client indicates the use of public-key authentication by
190 including a special preauthenticator in the initial request. This
191 preauthenticator contains the client's public-key data and a
194 2. The KDC tests the client's request against its authentication
195 policy and trusted Certification Authorities (CAs).
197 3. If the request passes the verification tests, the KDC replies as
198 usual, but the reply is encrypted using either:
200 a. a key generated through a Diffie-Hellman (DH) key exchange
201 [RFC2631] [IEEE1363] with the client, signed using the KDC's
204 b. a symmetric encryption key, signed using the KDC's signature
205 key and encrypted using the client's public key.
207 Any keying material required by the client to obtain the
208 encryption key for decrypting the KDC reply is returned in a pre-
209 authentication field accompanying the usual reply.
211 4. The client validates the KDC's signature, obtains the encryption
212 key, decrypts the reply, and then proceeds as usual.
214 Section 3.1 of this document enumerates the required algorithms and
215 necessary extension message types. Section 3.2 describes the
216 extension messages in greater detail.
220 Zhu & Tung Expires June 2, 2006 [Page 4]
222 Internet-Draft PKINIT November 2005
225 3.1. Definitions, Requirements, and Constants
227 3.1.1. Required Algorithms
229 All PKINIT implementations MUST support the following algorithms:
231 o AS reply key enctype: aes128-cts-hmac-sha1-96 and aes256-cts-hmac-
234 o Signature algorithm: sha-1WithRSAEncryption [RFC3279].
236 o AS reply key delivery method: Diffie-Hellman key exchange
239 In addition, implementations of this specification MUST be capable of
240 processing the Extended Key Usage (EKU) extension and the id-pkinit-
241 san (as defined in Section 3.2.2) otherName of the Subject
242 Alternative Name (SAN) extension in X.509 certificates [RFC3280], if
245 3.1.2. Defined Message and Encryption Types
247 PKINIT makes use of the following new pre-authentication types:
252 PKINIT also makes use of the following new authorization data type:
254 AD_INITIAL_VERIFIED_CAS 9
256 PKINIT introduces the following new error codes:
258 KDC_ERR_CLIENT_NOT_TRUSTED 62
259 KDC_ERR_INVALID_SIG 64
260 KDC_ERR_DH_KEY_PARAMETERS_NOT_ACCEPTED 65
261 KDC_ERR_CANT_VERIFY_CERTIFICATE 70
262 KDC_ERR_INVALID_CERTIFICATE 71
263 KDC_ERR_REVOKED_CERTIFICATE 72
264 KDC_ERR_REVOCATION_STATUS_UNKNOWN 73
265 KDC_ERR_CLIENT_NAME_MISMATCH 75
266 KDC_ERR_INCONSISTENT_KEY_PURPOSE 76
267 KDC_ERR_DIGEST_IN_CERT_NOT_ACCEPTED 77
268 KDC_ERR_HASH_IN_KDF_NOT_ACCEPTED 78
269 KDC_ERR_DIGEST_IN_SIGNED_DATA_NOT_ACCEPTED 79
271 PKINIT uses the following typed data types for errors:
276 Zhu & Tung Expires June 2, 2006 [Page 5]
278 Internet-Draft PKINIT November 2005
281 TD_TRUSTED_CERTIFIERS 104
282 TD_INVALID_CERTIFICATES 105
285 The ASN.1 module for all structures defined in this document (plus
286 IMPORT statements for all imported structures) is given in
289 All structures defined in or imported into this document MUST be
290 encoded using Distinguished Encoding Rules (DER) [X680] [X690]
291 (unless otherwise noted). All data structures carried in OCTET
292 STRINGs must be encoded according to the rules specified in
293 corresponding specifications.
295 Interoperability note: Some implementations may not be able to decode
296 wrapped CMS objects encoded with BER but not DER; specifically, they
297 may not be able to decode indefinite length encodings. To maximize
298 interoperability, implementers SHOULD encode CMS objects used in
301 3.1.3. Algorithm Identifiers
303 PKINIT does not define, but does make use of, the following algorithm
306 PKINIT uses the following algorithm identifier(s) for Modular
307 Exponential Diffie-Hellman key agreement [RFC2631] [RFC3279]:
309 dhpublicnumber (as described in [RFC3279])
311 PKINIT uses the following signature algorithm identifiers as defined
314 sha-1WithRSAEncryption (RSA with SHA1)
315 md5WithRSAEncryption (RSA with MD5)
316 id-dsa-with-sha1 (DSA with SHA1)
318 PKINIT uses the following encryption algorithm identifiers as defined
319 in [RFC3447] for encrypting the temporary key with a public key:
324 PKINIT uses the following algorithm identifiers [RFC3370] [RFC3565]
325 for encrypting the AS reply key with the temporary key:
327 des-ede3-cbc (three-key 3DES, CBC mode, as defined in [RFC3370])
328 rc2-cbc (RC2, CBC mode, as defined in [RFC3370])
332 Zhu & Tung Expires June 2, 2006 [Page 6]
334 Internet-Draft PKINIT November 2005
337 id-aes256-CBC (AES-256, CBC mode, as defined in [RFC3565])
339 PKINIT defines the following encryption types, for use in the etype
340 field of the AS-REQ [RFC4120] message to indicate acceptance of the
341 corresponding algorithms that can used by Cryptographic Message
342 Syntax (CMS) [RFC3852] messages in the reply:
344 id-dsa-with-sha1-CmsOID 9
345 -- Indicates that the client supports id-dsa-with-sha1.
346 md5WithRSAEncryption-CmsOID 10
347 -- Indicates that the client supports md5WithRSAEncryption.
348 sha-1WithRSAEncryption-CmsOID 11
349 -- Indicates that the client supports sha-1WithRSAEncryption.
351 -- Indicates that the client supports rc2-cbc.
352 rsaEncryption-EnvOID 13
353 -- Indicates that the client supports rsaEncryption.
354 id-RSAES-OAEP-EnvOID 14
355 -- Indicates that the client supports id-RSAES-OAEP.
356 des-ede3-cbc-EnvOID 15
357 -- Indicates that the client supports des-ede3-cbc.
359 3.2. PKINIT Pre-authentication Syntax and Use
361 This section defines the syntax and use of the various pre-
362 authentication fields employed by PKINIT.
364 3.2.1. Generation of Client Request
366 The initial authentication request (AS-REQ) is sent as per [RFC4120];
367 in addition, a pre-authentication data element, whose padata-type is
368 PA_PK_AS_REQ and whose padata-value contains the DER encoding of the
369 type PA-PK-AS-REQ, is included.
371 PA-PK-AS-REQ ::= SEQUENCE {
372 signedAuthPack [0] IMPLICIT OCTET STRING,
373 -- Contains a CMS type ContentInfo encoded
374 -- according to [RFC3852].
375 -- The contentType field of the type ContentInfo
376 -- is id-signedData (1.2.840.113549.1.7.2),
377 -- and the content field is a SignedData.
378 -- The eContentType field for the type SignedData is
379 -- id-pkinit-authData (1.3.6.1.5.2.3.1), and the
380 -- eContent field contains the DER encoding of the
382 -- AuthPack is defined below.
383 trustedCertifiers [1] SEQUENCE OF
384 ExternalPrincipalIdentifier OPTIONAL,
388 Zhu & Tung Expires June 2, 2006 [Page 7]
390 Internet-Draft PKINIT November 2005
393 -- Contains a list of CAs, trusted by the client,
394 -- that can be used to certify the KDC.
395 -- Each ExternalPrincipalIdentifier identifies a CA
396 -- or a CA certificate (thereby its public key).
397 -- The information contained in the
398 -- trustedCertifiers SHOULD be used by the KDC as
399 -- hints to guide its selection of an appropriate
400 -- certificate chain to return to the client.
401 kdcPkId [2] IMPLICIT OCTET STRING
403 -- Contains a CMS type SignerIdentifier encoded
404 -- according to [RFC3852].
405 -- Identifies, if present, a particular KDC
406 -- public key that the client already has.
410 DHNonce ::= OCTET STRING
412 ExternalPrincipalIdentifier ::= SEQUENCE {
413 subjectName [0] IMPLICIT OCTET STRING OPTIONAL,
414 -- Contains a PKIX type Name encoded according to
416 -- Identifies the certificate subject by the
417 -- distinguished subject name.
418 -- REQUIRED when there is a distinguished subject
419 -- name present in the certificate.
420 issuerAndSerialNumber [1] IMPLICIT OCTET STRING OPTIONAL,
421 -- Contains a CMS type IssuerAndSerialNumber encoded
422 -- according to [RFC3852].
423 -- Identifies a certificate of the subject.
424 -- REQUIRED for TD-INVALID-CERTIFICATES and
425 -- TD-TRUSTED-CERTIFIERS.
426 subjectKeyIdentifier [2] IMPLICIT OCTET STRING OPTIONAL,
427 -- Identifies the subject's public key by a key
428 -- identifier. When an X.509 certificate is
429 -- referenced, this key identifier matches the X.509
430 -- subjectKeyIdentifier extension value. When other
431 -- certificate formats are referenced, the documents
432 -- that specify the certificate format and their use
433 -- with the CMS must include details on matching the
434 -- key identifier to the appropriate certificate
436 -- RECOMMENDED for TD-TRUSTED-CERTIFIERS.
440 AuthPack ::= SEQUENCE {
444 Zhu & Tung Expires June 2, 2006 [Page 8]
446 Internet-Draft PKINIT November 2005
449 pkAuthenticator [0] PKAuthenticator,
450 clientPublicValue [1] SubjectPublicKeyInfo OPTIONAL,
451 -- Type SubjectPublicKeyInfo is defined in
453 -- Specifies Diffie-Hellman domain parameters
454 -- and the client's public key value [IEEE1363].
455 -- The DH public key value is encoded as a BIT
456 -- STRING according to [RFC3279].
457 -- This field is present only if the client wishes
458 -- to use the Diffie-Hellman key agreement method.
459 supportedCMSTypes [2] SEQUENCE OF AlgorithmIdentifier
461 -- Type AlgorithmIdentifier is defined in
463 -- List of CMS encryption types supported by the
464 -- client in order of (decreasing) preference.
465 clientDHNonce [3] DHNonce OPTIONAL,
466 -- Present only if the client indicates that it
467 -- wishes to reuse DH keys or to allow the KDC to
468 -- do so (see Section 3.2.3.1).
472 PKAuthenticator ::= SEQUENCE {
473 cusec [0] INTEGER (0..999999),
474 ctime [1] KerberosTime,
475 -- cusec and ctime are used as in [RFC4120], for
476 -- replay prevention.
477 nonce [2] INTEGER (0..4294967295),
478 -- Chosen randomly; This nonce does not need to
479 -- match with the nonce in the KDC-REQ-BODY.
480 paChecksum [3] OCTET STRING,
481 -- Contains the SHA1 checksum, performed over
486 The ContentInfo [RFC3852] structure contained in the signedAuthPack
487 field of the type PA-PK-AS-REQ is encoded according to [RFC3852] and
488 is filled out as follows:
490 1. The contentType field of the type ContentInfo is id-signedData
491 (as defined in [RFC3852]), and the content field is a SignedData
492 (as defined in [RFC3852]).
494 2. The eContentType field for the type SignedData is id-pkinit-
495 authData: { iso(1) org(3) dod(6) internet(1) security(5)
496 kerberosv5(2) pkinit(3) authData(1) }. Notes to CMS
500 Zhu & Tung Expires June 2, 2006 [Page 9]
502 Internet-Draft PKINIT November 2005
505 implementers: the signed attribute content-type MUST be present
506 in this SignedData instance and its value is id-pkinit-authData
507 according to [RFC3852].
509 3. The eContent field for the type SignedData contains the DER
510 encoding of the type AuthPack.
512 4. The signerInfos field of the type SignedData contains a single
513 signerInfo, which contains the signature over the type AuthPack.
515 5. The AuthPack structure contains a PKAuthenticator, the client
516 public key information, the CMS encryption types supported by the
517 client and a DHNonce. The pkAuthenticator field certifies to the
518 KDC that the client has recent knowledge of the signing key that
519 authenticates the client. The clientPublicValue field specifies
520 Diffie-Hellman domain parameters and the client's public key
521 value. The DH public key value is encoded as a BIT STRING
522 according to [RFC3279]. The clientPublicValue field is present
523 only if the client wishes to use the Diffie-Hellman key agreement
524 method. The supportedCMSTypes field specifies the list of CMS
525 encryption types supported by the client in order of (decreasing)
526 preference. The clientDHNonce field is described later in this
529 6. The ctime field in the PKAuthenticator structure contains the
530 current time on the client's host, and the cusec field contains
531 the microsecond part of the client's timestamp. The ctime and
532 cusec fields are used together to specify a reasonably accurate
533 timestamp [RFC4120]. The nonce field is chosen randomly. The
534 paChecksum field contains a SHA1 checksum that is performed over
535 the KDC-REQ-BODY [RFC4120].
537 7. The certificates field of the type SignedData contains
538 certificates intended to facilitate certification path
539 construction, so that the KDC can verify the signature over the
540 type AuthPack. For path validation, these certificates SHOULD be
541 sufficient to construct at least one certification path from the
542 client certificate to one trust anchor acceptable by the KDC
543 [RFC4158]. The client MUST be capable of including such a set of
544 certificates if configured to do so. The certificates field MUST
545 NOT contain "root" CA certificates.
547 8. The client's Diffie-Hellman public value (clientPublicValue) is
548 included if and only if the client wishes to use the Diffie-
549 Hellman key agreement method. The Diffie-Hellman domain
550 parameters [IEEE1363] for the client's public key are specified
551 in the algorithm field of the type SubjectPublicKeyInfo [RFC3279]
552 and the client's Diffie-Hellman public key value is mapped to a
556 Zhu & Tung Expires June 2, 2006 [Page 10]
558 Internet-Draft PKINIT November 2005
561 subjectPublicKey (a BIT STRING) according to [RFC3279]. When
562 using the Diffie-Hellman key agreement method, implementations
563 MUST support Oakley 1024-bit Modular Exponential (MODP) well-
564 known group 2 [RFC2412] and Oakley 2048-bit MODP well-known group
565 14 [RFC3526], and SHOULD support Oakley 4096-bit MODP well-known
568 The Diffie-Hellman field size should be chosen so as to provide
569 sufficient cryptographic security [RFC3766].
571 When MODP Diffie-Hellman is used, the exponents should have at
572 least twice as many bits as the symmetric keys that will be
573 derived from them [ODL99].
575 9. The client may wish to reuse DH keys or to allow the KDC to do so
576 (see Section 3.2.3.1). If so, then the client includes the
577 clientDHNonce field. This nonce string MUST be as long as the
578 longest key length of the symmetric key types that the client
579 supports. This nonce MUST be chosen randomly.
581 The ExternalPrincipalIdentifier structure is used in this document to
582 identify the subject's public key thereby the subject principal.
583 This structure is filled out as follows:
585 1. The subjectName field contains a PKIX type Name encoded according
586 to [RFC3280]. This field identifies the certificate subject by
587 the distinguished subject name. This field is REQUIRED when
588 there is a distinguished subject name present in the certificate
591 2. The issuerAndSerialNumber field contains a CMS type
592 IssuerAndSerialNumber encoded according to [RFC3852]. This field
593 identifies a certificate of the subject. This field is REQUIRED
594 for TD-INVALID-CERTIFICATES and TD-TRUSTED-CERTIFIERS (both
595 structures are defined in Section 3.2.2).
597 3. The subjectKeyIdentifier [RFC3852] field identifies the subject's
598 public key by a key identifier. When an X.509 certificate is
599 referenced, this key identifier matches the X.509
600 subjectKeyIdentifier extension value. When other certificate
601 formats are referenced, the documents that specify the
602 certificate format and their use with the CMS must include
603 details on matching the key identifier to the appropriate
604 certificate field. This field is RECOMMENDED for TD-TRUSTED-
605 CERTIFIERS (as defined in Section 3.2.2).
607 The trustedCertifiers field of the type PA-PK-AS-REQ contains a list
608 of CAs, trusted by the client, that can be used to certify the KDC.
612 Zhu & Tung Expires June 2, 2006 [Page 11]
614 Internet-Draft PKINIT November 2005
617 Each ExternalPrincipalIdentifier identifies a CA or a CA certificate
618 (thereby its public key).
620 The kdcPkId field of the type PA-PK-AS-REQ contains a CMS type
621 SignerIdentifier encoded according to [RFC3852]. This field
622 identifies, if present, a particular KDC public key that the client
625 3.2.2. Receipt of Client Request
627 Upon receiving the client's request, the KDC validates it. This
628 section describes the steps that the KDC MUST (unless otherwise
629 noted) take in validating the request.
631 The KDC verifies the client's signature in the signedAuthPack field
632 according to [RFC3852].
634 If, while validating the client's X.509 certificate [RFC3280], the
635 KDC cannot build a certification path to validate the client's
636 certificate, it sends back a KRB-ERROR [RFC4120] message with the
637 code KDC_ERR_CANT_VERIFY_CERTIFICATE. The accompanying e-data for
638 this error message is a TYPED-DATA (as defined in [RFC4120]) that
639 contains an element whose data-type is TD_TRUSTED_CERTIFIERS, and
640 whose data-value contains the DER encoding of the type TD-TRUSTED-
643 TD-TRUSTED-CERTIFIERS ::= SEQUENCE OF
644 ExternalPrincipalIdentifier
645 -- Identifies a list of CAs trusted by the KDC.
646 -- Each ExternalPrincipalIdentifier identifies a CA
647 -- or a CA certificate (thereby its public key).
649 Each ExternalPrincipalIdentifier (as defined in Section 3.2.1) in the
650 TD-TRUSTED-CERTIFIERS structure identifies a CA or a CA certificate
651 (thereby its public key) trusted by the KDC.
653 Upon receiving this error message, the client SHOULD retry only if it
654 has a different set of certificates (from those of the previous
655 requests) that form a certification path (or a partial path) from one
656 of the trust anchors acceptable by the KDC to its own certificate.
658 If, while processing the certification path, the KDC determines that
659 the signature on one of the certificates in the signedAuthPack field
660 is invalid, it returns a KRB-ERROR [RFC4120] message with the code
661 KDC_ERR_INVALID_CERTIFICATE. The accompanying e-data for this error
662 message is a TYPED-DATA that contains an element whose data-type is
663 TD_INVALID_CERTIFICATES, and whose data-value contains the DER
664 encoding of the type TD-INVALID-CERTIFICATES:
668 Zhu & Tung Expires June 2, 2006 [Page 12]
670 Internet-Draft PKINIT November 2005
673 TD-INVALID-CERTIFICATES ::= SEQUENCE OF
674 ExternalPrincipalIdentifier
675 -- Each ExternalPrincipalIdentifier identifies a
676 -- certificate (sent by the client) with an invalid
679 Each ExternalPrincipalIdentifier (as defined in Section 3.2.1) in the
680 TD-INVALID-CERTIFICATES structure identifies a certificate (that was
681 sent by the client) with an invalid signature.
683 If more than one X.509 certificate signature is invalid, the KDC MAY
684 include one IssuerAndSerialNumber per invalid signature within the
685 TD-INVALID-CERTIFICATES.
687 The client's X.509 certificate is validated according to [RFC3280].
689 Based on local policy, the KDC may also check whether any X.509
690 certificates in the certification path validating the client's
691 certificate have been revoked. If any of them have been revoked, the
692 KDC MUST return an error message with the code
693 KDC_ERR_REVOKED_CERTIFICATE; if the KDC attempts to determine the
694 revocation status but is unable to do so, it SHOULD return an error
695 message with the code KDC_ERR_REVOCATION_STATUS_UNKNOWN. The
696 certificate or certificates affected are identified exactly as for
697 the error code KDC_ERR_INVALID_CERTIFICATE (see above).
699 Note that the TD_INVALID_CERTIFICATES error data is only used to
700 identify invalid certificates sent by the client in the request.
702 The client's public key is then used to verify the signature. If the
703 signature fails to verify, the KDC MUST return an error message with
704 the code KDC_ERR_INVALID_SIG. There is no accompanying e-data for
707 In addition to validating the client's signature, the KDC MUST also
708 check that the client's public key used to verify the client's
709 signature is bound to the client's principal name as specified in the
712 1. If the KDC has its own binding between either the client's
713 signature-verification public key or the client's certificate and
714 the client's Kerberos principal name, it uses that binding.
716 2. Otherwise, if the client's X.509 certificate contains a Subject
717 Alternative Name (SAN) extension carrying a KRB5PrincipalName
718 (defined below) in the otherName field of the type GeneralName
719 [RFC3280], it binds the client's X.509 certificate to that name.
724 Zhu & Tung Expires June 2, 2006 [Page 13]
726 Internet-Draft PKINIT November 2005
729 The type of the otherName field is AnotherName. The type-id field
730 of the type AnotherName is id-pkinit-san:
732 id-pkinit-san OBJECT IDENTIFIER ::=
733 { iso(1) org(3) dod(6) internet(1) security(5) kerberosv5(2)
736 And the value field of the type AnotherName is a
739 KRB5PrincipalName ::= SEQUENCE {
741 principalName [1] PrincipalName
744 If the KDC does not have its own binding and there is no
745 KRB5PrincipalName name present in the client's X.509 certificate, or
746 if the Kerberos name in the request does not match the
747 KRB5PrincipalName in the client's X.509 certificate (including the
748 realm name), the KDC MUST return an error message with the code
749 KDC_ERR_CLIENT_NAME_MISMATCH. There is no accompanying e-data for
752 Even if the certification path is validated and the certificate is
753 mapped to the client's principal name, the KDC may decide not to
754 accept the client's certificate, depending on local policy.
756 The KDC MAY require the presence of an Extended Key Usage (EKU)
757 KeyPurposeId [RFC3280] id-pkinit-KPClientAuth in the extensions field
758 of the client's X.509 certificate:
760 id-pkinit-KPClientAuth OBJECT IDENTIFIER ::=
761 { iso(1) org(3) dod(6) internet(1) security(5) kerberosv5(2)
762 pkinit(3) keyPurposeClientAuth(4) }
763 -- PKINIT client authentication.
764 -- Key usage bits that MUST be consistent:
767 The digitalSignature key usage bit MUST be asserted when the intended
768 purpose of the client certificate is restricted with the id-pkinit-
771 If this EKU KeyPurposeId is required but it is not present or if the
772 client certificate is restricted not to be used for PKINIT client
773 authentication per Section 4.2.1.13 of [RFC3280], the KDC MUST return
774 an error message of the code KDC_ERR_INCONSISTENT_KEY_PURPOSE. There
775 is no accompanying e-data for this error message. KDCs implementing
776 this requirement SHOULD also accept the EKU KeyPurposeId id-ms-kp-sc-
780 Zhu & Tung Expires June 2, 2006 [Page 14]
782 Internet-Draft PKINIT November 2005
785 logon (1.3.6.1.4.1.311.20.2.2) as meeting the requirement, as there
786 are a large number of X.509 client certificates deployed for use with
787 PKINIT which have this EKU.
789 As a matter of local policy, the KDC MAY decide to reject requests on
790 the basis of the absence or presence of other specific EKU OID's.
792 If the digest algorithm used in generating the CA signature for the
793 public key in any certificate of the request is not acceptable by the
794 KDC, the KDC MUST return a KRB-ERROR [RFC4120] message with the code
795 KDC_ERR_DIGEST_IN_CERT_NOT_ACCEPTED. The accompanying e-data MUST be
796 encoded in TYPED-DATA although none is defined at this point.
798 If the client's public key is not accepted with reasons other than
799 what were specified above, the KDC returns a KRB-ERROR [RFC4120]
800 message with the code KDC_ERR_CLIENT_NOT_TRUSTED. There is no
801 accompanying e-data currently defined for this error message.
803 The KDC MUST check the timestamp to ensure that the request is not a
804 replay, and that the time skew falls within acceptable limits. The
805 recommendations for clock skew times in [RFC4120] apply here. If the
806 check fails, the KDC MUST return error code KRB_AP_ERR_REPEAT or
807 KRB_AP_ERR_SKEW, respectively.
809 If the clientPublicValue is filled in, indicating that the client
810 wishes to use the Diffie-Hellman key agreement method, the KDC SHOULD
811 check to see if the key parameters satisfy its policy. If they do
812 not, it MUST return an error message with the code
813 KDC_ERR_DH_KEY_PARAMETERS_NOT_ACCEPTED. The accompanying e-data is a
814 TYPED-DATA that contains an element whose data-type is
815 TD_DH_PARAMETERS, and whose data-value contains the DER encoding of
816 the type TD-DH-PARAMETERS:
818 TD-DH-PARAMETERS ::= SEQUENCE OF AlgorithmIdentifier
819 -- Each AlgorithmIdentifier specifies a set of
820 -- Diffie-Hellman domain parameters [IEEE1363].
821 -- This list is in decreasing preference order.
823 TD-DH-PARAMETERS contains a list of Diffie-Hellman domain parameters
824 that the KDC supports in decreasing preference order, from which the
825 client SHOULD pick one to retry the request.
827 The AlgorithmIdentifier structure is defined in [RFC3280] and is
828 filled in according to [RFC3279]. More specifically Section 2.3.3 of
829 [RFC3279] describes how to fill in the AlgorithmIdentifier structure
830 in the case where MODP Diffie-Hellman key exchange is used.
832 If the client included a kdcPkId field in the PA-PK-AS-REQ and the
836 Zhu & Tung Expires June 2, 2006 [Page 15]
838 Internet-Draft PKINIT November 2005
841 KDC does not possess the corresponding key, the KDC MUST ignore the
842 kdcPkId field as if the client did not include one.
844 If the digest algorithm used by the id-pkinit-authData is not
845 acceptable by the KDC, the KDC MUST return a KRB-ERROR [RFC4120]
846 message with the code KDC_ERR_DIGEST_IN_SIGNED_DATA_NOT_ACCEPTED.
847 The accompanying e-data MUST be encoded in TYPED-DATA although none
848 is defined at this point.
850 3.2.3. Generation of KDC Reply
852 Assuming that the client's request has been properly validated, the
853 KDC proceeds as per [RFC4120], except as follows.
855 The KDC MUST set the initial flag and include an authorization data
856 element of ad-type [RFC4120] AD_INITIAL_VERIFIED_CAS in the issued
857 ticket. The ad-data [RFC4120] field contains the DER encoding of the
858 type AD-INITIAL-VERIFIED-CAS:
860 AD-INITIAL-VERIFIED-CAS ::= SEQUENCE OF
861 ExternalPrincipalIdentifier
862 -- Identifies the certification path based on which
863 -- the client certificate was validated.
864 -- Each ExternalPrincipalIdentifier identifies a CA
865 -- or a CA certificate (thereby its public key).
867 The AD-INITIAL-VERIFIED-CAS structure identifies the certification
868 path based on which the client certificate was validated. Each
869 ExternalPrincipalIdentifier (as defined in Section 3.2.1) in the AD-
870 INITIAL-VERIFIED-CAS structure identifies a CA or a CA certificate
871 (thereby its public key).
873 The AS wraps any AD-INITIAL-VERIFIED-CAS data in AD-IF-RELEVANT
874 containers if the list of CAs satisfies the AS' realm's local policy
875 (this corresponds to the TRANSITED-POLICY-CHECKED ticket flag
876 [RFC4120]). Furthermore, any TGS MUST copy such authorization data
877 from tickets used within a PA-TGS-REQ of the TGS-REQ into the
878 resulting ticket. If the list of CAs satisfies the local KDC's
879 realm's policy, the TGS MAY wrap the data into the AD-IF-RELEVANT
880 container, otherwise it MAY unwrap the authorization data out of the
881 AD-IF-RELEVANT container.
883 Application servers that understand this authorization data type
884 SHOULD apply local policy to determine whether a given ticket bearing
885 such a type *not* contained within an AD-IF-RELEVANT container is
886 acceptable. (This corresponds to the AP server checking the
887 transited field when the TRANSITED-POLICY-CHECKED flag has not been
888 set [RFC4120].) If such a data type is contained within an AD-IF-
892 Zhu & Tung Expires June 2, 2006 [Page 16]
894 Internet-Draft PKINIT November 2005
897 RELEVANT container, AP servers MAY apply local policy to determine
898 whether the authorization data is acceptable.
900 A pre-authentication data element, whose padata-type is PA_PK_AS_REP
901 and whose padata-value contains the DER encoding of the type PA-PK-
902 AS-REP (defined below), is included in the AS-REP [RFC4120].
904 PA-PK-AS-REP ::= CHOICE {
905 dhInfo [0] DHRepInfo,
906 -- Selected when Diffie-Hellman key exchange is
908 encKeyPack [1] IMPLICIT OCTET STRING,
909 -- Selected when public key encryption is used.
910 -- Contains a CMS type ContentInfo encoded
911 -- according to [RFC3852].
912 -- The contentType field of the type ContentInfo is
913 -- id-envelopedData (1.2.840.113549.1.7.3).
914 -- The content field is an EnvelopedData.
915 -- The contentType field for the type EnvelopedData
916 -- is id-signedData (1.2.840.113549.1.7.2).
917 -- The eContentType field for the inner type
918 -- SignedData (when unencrypted) is
919 -- id-pkinit-rkeyData (1.3.6.1.5.2.3.3) and the
920 -- eContent field contains the DER encoding of the
921 -- type ReplyKeyPack.
922 -- ReplyKeyPack is defined in Section 3.2.3.2.
926 DHRepInfo ::= SEQUENCE {
927 dhSignedData [0] IMPLICIT OCTET STRING,
928 -- Contains a CMS type ContentInfo encoded according
930 -- The contentType field of the type ContentInfo is
931 -- id-signedData (1.2.840.113549.1.7.2), and the
932 -- content field is a SignedData.
933 -- The eContentType field for the type SignedData is
934 -- id-pkinit-DHKeyData (1.3.6.1.5.2.3.2), and the
935 -- eContent field contains the DER encoding of the
936 -- type KDCDHKeyInfo.
937 -- KDCDHKeyInfo is defined below.
938 serverDHNonce [1] DHNonce OPTIONAL
939 -- Present if and only if dhKeyExpiration is
940 -- present in the KDCDHKeyInfo.
943 KDCDHKeyInfo ::= SEQUENCE {
944 subjectPublicKey [0] BIT STRING,
948 Zhu & Tung Expires June 2, 2006 [Page 17]
950 Internet-Draft PKINIT November 2005
953 -- The KDC's DH public key.
954 -- The DH public key value is encoded as a BIT
955 -- STRING according to [RFC3279].
956 nonce [1] INTEGER (0..4294967295),
957 -- Contains the nonce in the pkAuthenticator field
958 -- in the request if the DH keys are NOT reused,
960 dhKeyExpiration [2] KerberosTime OPTIONAL,
961 -- Expiration time for KDC's key pair,
962 -- present if and only if the DH keys are reused.
963 -- If present, the KDC's DH public key MUST not be
964 -- used past the point of this expiration time.
965 -- If this field is omitted then the serverDHNonce
966 -- field MUST also be omitted.
970 The content of the AS-REP is otherwise unchanged from [RFC4120]. The
971 KDC encrypts the reply as usual, but not with the client's long-term
972 key. Instead, it encrypts it with either a shared key derived from a
973 Diffie-Hellman exchange, or a generated encryption key. The contents
974 of the PA-PK-AS-REP indicate which key delivery method is used.
976 In addition, the lifetime of the ticket returned by the KDC MUST NOT
977 exceed that of the client's public-private key pair. The ticket
978 lifetime, however, can be shorter than that of the client's public-
979 private key pair. For the implementations of this specification, the
980 lifetime of the client's public-private key pair is the validity
981 period in X.509 certificates [RFC3280], unless configured otherwise.
983 3.2.3.1. Using Diffie-Hellman Key Exchange
985 In this case, the PA-PK-AS-REP contains a DHRepInfo structure.
987 The ContentInfo [RFC3852] structure for the dhSignedData field is
988 filled in as follows:
990 1. The contentType field of the type ContentInfo is id-signedData
991 (as defined in [RFC3852]), and the content field is a SignedData
992 (as defined in [RFC3852]).
994 2. The eContentType field for the type SignedData is the OID value
995 for id-pkinit-DHKeyData: { iso(1) org(3) dod(6) internet(1)
996 security(5) kerberosv5(2) pkinit(3) DHKeyData(2) }. Notes to CMS
997 implementers: the signed attribute content-type MUST be present
998 in this SignedData instance and its value is id-pkinit-DHKeyData
999 according to [RFC3852].
1004 Zhu & Tung Expires June 2, 2006 [Page 18]
1006 Internet-Draft PKINIT November 2005
1009 3. The eContent field for the type SignedData contains the DER
1010 encoding of the type KDCDHKeyInfo.
1012 4. The KDCDHKeyInfo structure contains the KDC's public key, a nonce
1013 and optionally the expiration time of the KDC's DH key being
1014 reused. The subjectPublicKey field of the type KDCDHKeyInfo
1015 field identifies KDC's DH public key. This DH public key value
1016 is encoded as a BIT STRING according to [RFC3279]. The nonce
1017 field contains the nonce in the pkAuthenticator field in the
1018 request if the DH keys are NOT reused. The value of this nonce
1019 field is 0 if the DH keys are reused. The dhKeyExpiration field
1020 is present if and only if the DH keys are reused. If the
1021 dhKeyExpiration field is present, the KDC's public key in this
1022 KDCDHKeyInfo structure MUST NOT be used past the point of this
1023 expiration time. If this field is omitted then the serverDHNonce
1024 field MUST also be omitted.
1026 5. The signerInfos field of the type SignedData contains a single
1027 signerInfo, which contains the signature over the type
1030 6. The certificates field of the type SignedData contains
1031 certificates intended to facilitate certification path
1032 construction, so that the client can verify the KDC's signature
1033 over the type KDCDHKeyInfo. The information contained in the
1034 trustedCertifiers in the request SHOULD be used by the KDC as
1035 hints to guide its selection of an appropriate certificate chain
1036 to return to the client. This field may be left empty if the KDC
1037 public key specified by the kdcPkId field in the PA-PK-AS-REQ was
1038 used for signing. Otherwise, for path validation, these
1039 certificates SHOULD be sufficient to construct at least one
1040 certification path from the KDC certificate to one trust anchor
1041 acceptable by the client [RFC4158]. The KDC MUST be capable of
1042 including such a set of certificates if configured to do so. The
1043 certificates field MUST NOT contain "root" CA certificates.
1045 7. If the client included the clientDHNonce field, then the KDC may
1046 choose to reuse its DH keys (see Section 3.2.3.1). If the server
1047 reuses DH keys then it MUST include an expiration time in the
1048 dhKeyExpiration field. Past the point of the expiration time,
1049 the signature over the type DHRepInfo is considered expired/
1050 invalid. When the server reuses DH keys then it MUST include a
1051 serverDHNonce at least as long as the length of keys for the
1052 symmetric encryption system used to encrypt the AS reply. Note
1053 that including the serverDHNonce changes how the client and
1054 server calculate the key to use to encrypt the reply; see below
1055 for details. The KDC SHOULD NOT reuse DH keys unless the
1056 clientDHNonce field is present in the request.
1060 Zhu & Tung Expires June 2, 2006 [Page 19]
1062 Internet-Draft PKINIT November 2005
1065 The AS reply key is derived as follows:
1067 1. Both the KDC and the client calculate the shared secret value as
1070 a) When MODP Diffie-Hellman is used, let DHSharedSecret be the
1071 shared secret value. DHSharedSecret is the value ZZ as
1072 described in Section 2.1.1 of [RFC2631].
1074 DHSharedSecret is first padded with leading zeros such that the
1075 size of DHSharedSecret in octets is the same as that of the
1076 modulus, then represented as a string of octets in big-endian
1079 Implementation note: Both the client and the KDC can cache the
1080 triple (ya, yb, DHSharedSecret), where ya is the client's public
1081 key and yb is the KDC's public key. If both ya and yb are the
1082 same in a later exchange, the cached DHSharedSecret can be used.
1084 2. Let K be the key-generation seed length [RFC3961] of the AS reply
1085 key whose enctype is selected according to [RFC4120].
1087 3. Define the function octetstring2key() as follows:
1089 octetstring2key(x) == random-to-key(K-truncate(
1096 where x is an octet string; | is the concatenation operator; 0x00,
1097 0x01, 0x02, etc., are each represented as a single octet; random-
1098 to-key() is an operation that generates a protocol key from a
1099 bitstring of length K; and K-truncate truncates its input to the
1100 first K bits. Both K and random-to-key() are as defined in the
1101 kcrypto profile [RFC3961] for the enctype of the AS reply key.
1103 4. When DH keys are reused, let n_c be the clientDHNonce, and n_k be
1104 the serverDHNonce; otherwise, let both n_c and n_k be empty octet
1107 5. The AS reply key k is:
1109 k = octetstring2key(DHSharedSecret | n_c | n_k)
1111 If the hash algorithm used in the key derivation function (currently
1112 only octetstring2key() is defined) is not acceptable by the KDC, the
1116 Zhu & Tung Expires June 2, 2006 [Page 20]
1118 Internet-Draft PKINIT November 2005
1121 KDC MUST return a KRB-ERROR [RFC4120] message with the code
1122 KDC_ERR_HASH_IN_KDF_NOT_ACCEPTED. The accompanying e-data MUST be
1123 encoded in TYPED-DATA although none is defined at this point.
1125 3.2.3.2. Using Public Key Encryption
1127 In this case, the PA-PK-AS-REP contains an encKeyPack structure where
1128 the AS reply key is encrypted.
1130 The ContentInfo [RFC3852] structure for the encKeyPack field is
1131 filled in as follows:
1133 1. The contentType field of the type ContentInfo is id-envelopedData
1134 (as defined in [RFC3852]), and the content field is an
1135 EnvelopedData (as defined in [RFC3852]).
1137 2. The contentType field for the type EnvelopedData is id-
1138 signedData: { iso (1) member-body (2) us (840) rsadsi (113549)
1139 pkcs (1) pkcs7 (7) signedData (2) }.
1141 3. The eContentType field for the inner type SignedData (when
1142 decrypted from the encryptedContent field for the type
1143 EnvelopedData) is id-pkinit-rkeyData: { iso(1) org(3) dod(6)
1144 internet(1) security(5) kerberosv5(2) pkinit(3) rkeyData(3) }.
1145 Notes to CMS implementers: the signed attribute content-type MUST
1146 be present in this SignedData instance and its value is id-
1147 pkinit-rkeyData according to [RFC3852].
1149 4. The eContent field for the inner type SignedData contains the DER
1150 encoding of the type ReplyKeyPack (as described below).
1152 5. The signerInfos field of the inner type SignedData contains a
1153 single signerInfo, which contains the signature for the type
1156 6. The certificates field of the inner type SignedData contains
1157 certificates intended to facilitate certification path
1158 construction, so that the client can verify the KDC's signature
1159 for the type ReplyKeyPack. The information contained in the
1160 trustedCertifiers in the request SHOULD be used by the KDC as
1161 hints to guide its selection of an appropriate certificate chain
1162 to return to the client. This field may be left empty if the KDC
1163 public key specified by the kdcPkId field in the PA-PK-AS-REQ was
1164 used for signing. Otherwise, for path validation, these
1165 certificates SHOULD be sufficient to construct at least one
1166 certification path from the KDC certificate to one trust anchor
1167 acceptable by the client [RFC4158]. The KDC MUST be capable of
1168 including such a set of certificates if configured to do so. The
1172 Zhu & Tung Expires June 2, 2006 [Page 21]
1174 Internet-Draft PKINIT November 2005
1177 certificates field MUST NOT contain "root" CA certificates.
1179 7. The recipientInfos field of the type EnvelopedData is a SET which
1180 MUST contain exactly one member of type KeyTransRecipientInfo.
1181 The encryptedKey of this member contains the temporary key which
1182 is encrypted using the client's public key.
1184 8. The unprotectedAttrs or originatorInfo fields of the type
1185 EnvelopedData MAY be present.
1187 If there is a supportedCMSTypes field in the AuthPack, the KDC must
1188 check to see if it supports any of the listed types. If it supports
1189 more than one of the types, the KDC SHOULD use the one listed first.
1190 If it does not support any of them, it MUST return an error message
1191 with the code KDC_ERR_ETYPE_NOSUPP [RFC4120].
1193 Furthermore the KDC computes the checksum of the AS-REQ in the client
1194 request. This checksum is performed over the type AS-REQ and the
1195 protocol key [RFC3961] of the checksum operation is the replyKey and
1196 the key usage number is 6. If the replyKey's enctype is "newer"
1197 [RFC4120] [RFC4121], the checksum operation is the required checksum
1198 operation [RFC3961] of that enctype.
1200 ReplyKeyPack ::= SEQUENCE {
1201 replyKey [0] EncryptionKey,
1202 -- Contains the session key used to encrypt the
1203 -- enc-part field in the AS-REP, i.e. the
1205 asChecksum [1] Checksum,
1206 -- Contains the checksum of the AS-REQ
1207 -- corresponding to the containing AS-REP.
1208 -- The checksum is performed over the type AS-REQ.
1209 -- The protocol key [RFC3961] of the checksum is the
1210 -- replyKey and the key usage number is 6.
1211 -- If the replyKey's enctype is "newer" [RFC4120]
1212 -- [RFC4121], the checksum is the required
1213 -- checksum operation [RFC3961] for that enctype.
1214 -- The client MUST verify this checksum upon receipt
1219 Implementations of this RSA encryption key delivery method are
1220 RECOMMENDED to support RSA keys at least 2048 bits in size.
1222 3.2.4. Receipt of KDC Reply
1224 Upon receipt of the KDC's reply, the client proceeds as follows. If
1228 Zhu & Tung Expires June 2, 2006 [Page 22]
1230 Internet-Draft PKINIT November 2005
1233 the PA-PK-AS-REP contains the dhSignedData field, the client derives
1234 the AS reply key using the same procedure used by the KDC as defined
1235 in Section 3.2.3.1. Otherwise, the message contains the encKeyPack
1236 field, and the client decrypts and extracts the temporary key in the
1237 encryptedKey field of the member KeyTransRecipientInfo, and then uses
1238 that as the AS reply key.
1240 If the public key encryption method is used, the client MUST verify
1241 the asChecksum contained in the ReplyKeyPack.
1243 In either case, the client MUST verify the signature in the
1244 SignedData according to [RFC3852]. The KDC's X.509 certificate MUST
1245 be validated according to [RFC3280]. In addition, unless the client
1246 can otherwise verify that the public key used to verify the KDC's
1247 signature is bound to the KDC of the target realm, the KDC's X.509
1248 certificate MUST contain a Subject Alternative Name extension
1249 [RFC3280] carrying an AnotherName whose type-id is id-pkinit-san (as
1250 defined in Section 3.2.2) and whose value is a KRB5PrincipalName that
1251 matches the name of the TGS of the target realm (as defined in
1252 Section 7.3 of [RFC4120]).
1254 Unless the client knows by some other means that the KDC certificate
1255 is intended for a Kerberos KDC, the client MUST require that the KDC
1256 certificate contains the EKU KeyPurposeId [RFC3280] id-pkinit-KPKdc:
1258 id-pkinit-KPKdc OBJECT IDENTIFIER ::=
1259 { iso(1) org(3) dod(6) internet(1) security(5) kerberosv5(2)
1260 pkinit(3) keyPurposeKdc(5) }
1261 -- Signing KDC responses.
1262 -- Key usage bits that MUST be consistent:
1263 -- digitalSignature.
1265 The digitalSignature key usage bit MUST be asserted when the intended
1266 purpose of KDC certificate is restricted with the id-pkinit-KPKdc
1269 If the KDC certificate contains the Kerberos TGS name encoded as an
1270 id-pkinit-san SAN, this certificate is certified by the issuing CA as
1271 a KDC certificate, therefore the id-pkinit-KPKdc EKU is not required.
1273 If all applicable checks are satisfied, the client then decrypts the
1274 enc-part field of the KDC-REP in the AS-REP using the AS reply key,
1275 and then proceeds as described in [RFC4120].
1277 Implementation note: CAs issuing KDC certificates SHOULD place all
1278 "short" and "fully-qualified" Kerberos realm names of the KDC (one
1279 per GeneralName [RFC3280]) into the KDC certificate to allow maximum
1284 Zhu & Tung Expires June 2, 2006 [Page 23]
1286 Internet-Draft PKINIT November 2005
1289 3.3. Interoperability Requirements
1291 The client MUST be capable of sending a set of certificates
1292 sufficient to allow the KDC to construct a certification path for the
1293 client's certificate, if the correct set of certificates is provided
1294 through configuration or policy.
1296 If the client sends all the X.509 certificates on a certification
1297 path to a trust anchor acceptable by the KDC, and the KDC can not
1298 verify the client's public key otherwise, the KDC MUST be able to
1299 process path validation for the client's certificate based on the
1300 certificates in the request.
1302 The KDC MUST be capable of sending a set of certificates sufficient
1303 to allow the client to construct a certification path for the KDC's
1304 certificate, if the correct set of certificates is provided through
1305 configuration or policy.
1307 If the KDC sends all the X.509 certificates on a certification path
1308 to a trust anchor acceptable by the client, and the client can not
1309 verify the KDC's public key otherwise, the client MUST be able to
1310 process path validation for the KDC's certificate based on the
1311 certificates in the reply.
1313 3.4. KDC Indication of PKINIT Support
1315 If pre-authentication is required, but was not present in the
1316 request, per [RFC4120] an error message with the code
1317 KDC_ERR_PREAUTH_FAILED is returned and a METHOD-DATA object will be
1318 stored in the e-data field of the KRB-ERROR message to specify which
1319 pre-authentication mechanisms are acceptable. The KDC can then
1320 indicate the support of PKINIT by including an empty element whose
1321 padata-type is PA_PK_AS_REQ in that METHOD-DATA object.
1323 Otherwise if it is required by the KDC's local policy that the client
1324 must be pre-authenticated using the pre-authentication mechanism
1325 specified in this document, but no PKINIT pre-authentication was
1326 present in the request, an error message with the code
1327 KDC_ERR_PREAUTH_FAILED SHOULD be returned.
1329 KDCs MUST leave the padata-value field of the PA_PK_AS_REQ element in
1330 the KRB-ERROR's METHOD-DATA empty (i.e., send a zero-length OCTET
1331 STRING), and clients MUST ignore this and any other value. Future
1332 extensions to this protocol may specify other data to send instead of
1333 an empty OCTET STRING.
1340 Zhu & Tung Expires June 2, 2006 [Page 24]
1342 Internet-Draft PKINIT November 2005
1345 4. Security Considerations
1347 Kerberos error messages are not integrity protected, as a result, the
1348 domain parameters sent by the KDC as TD-DH-PARAMETERS can be tampered
1349 with by an attacker so that the set of domain parameters selected
1350 could be either weaker or not mutually preferred. Local policy can
1351 configure sets of domain parameters acceptable locally, or disallow
1352 the negotiation of DH domain parameters.
1354 The symmetric reply key size and Diffie-Hellman field size or RSA
1355 modulus size should be chosen so as to provide sufficient
1356 cryptographic security [RFC3766].
1358 When MODP Diffie-Hellman is used, the exponents should have at least
1359 twice as many bits as the symmetric keys that will be derived from
1362 PKINIT raises certain security considerations beyond those that can
1363 be regulated strictly in protocol definitions. We will address them
1366 PKINIT extends the cross-realm model to the public-key
1367 infrastructure. Users of PKINIT must understand security policies
1368 and procedures appropriate to the use of Public Key Infrastructures
1371 In order to trust a KDC certificate that is certified by a CA as a
1372 KDC certificate for a target realm (for example, by asserting the TGS
1373 name of that Kerberos realm as an id-pkinit-san SAN and/or
1374 restricting the certificate usage by using the id-pkinit-KPKdc EKU,
1375 as described in Section 3.2.4), the client MUST verify that the KDC
1376 certificate's issuing CA is authorized to issue KDC certificates for
1377 that target realm. Otherwise, the binding between the KDC
1378 certificate and the KDC of the target realm is not established.
1380 How to validate this authorization is a matter of local policy. A
1381 way to achieve this is the configuration of specific sets of
1382 intermediary CAs and trust anchors, one of which must be on the KDC
1383 certificate's certification path [RFC3280]; and for each CA or trust
1384 anchor the realms for which it is allowed to issue certificates.
1386 In addition, if any CA is trusted to issue KDC certificates can also
1387 issue other kinds of certificates, then local policy must be able to
1388 distinguish between them: for example, it could require that KDC
1389 certificates contain the id-pkinit-KPKdc EKU or that the realm be
1390 specified with the id-pkinit-san SAN.
1392 It is the responsibility of the PKI administrators for an
1396 Zhu & Tung Expires June 2, 2006 [Page 25]
1398 Internet-Draft PKINIT November 2005
1401 organization to ensure that KDC certificates are only issued to KDCs,
1402 and that clients can ascertain this using their local policy.
1404 Standard Kerberos allows the possibility of interactions between
1405 cryptosystems of varying strengths; this document adds interactions
1406 with public-key cryptosystems to Kerberos. Some administrative
1407 policies may allow the use of relatively weak public keys. Using
1408 such keys to wrap data encrypted under stronger conventional
1409 cryptosystems may be inappropriate.
1411 PKINIT requires keys for symmetric cryptosystems to be generated.
1412 Some such systems contain "weak" keys. For recommendations regarding
1413 these weak keys, see [RFC4120].
1415 PKINIT allows the use of the same RSA key pair for encryption and
1416 signing when doing RSA encryption based key delivery. This is not
1417 recommended usage of RSA keys [RFC3447], by using DH based key
1418 delivery this is avoided.
1420 Care should be taken in how certificates are chosen for the purposes
1421 of authentication using PKINIT. Some local policies may require that
1422 key escrow be used for certain certificate types. Deployers of
1423 PKINIT should be aware of the implications of using certificates that
1424 have escrowed keys for the purposes of authentication. Because
1425 signing only certificates are normally not escrowed, by using DH
1426 based key delivery this is avoided.
1428 PKINIT does not provide for a "return routability" test to prevent
1429 attackers from mounting a denial-of-service attack on the KDC by
1430 causing it to perform unnecessary and expensive public-key
1431 operations. Strictly speaking, this is also true of standard
1432 Kerberos, although the potential cost is not as great, because
1433 standard Kerberos does not make use of public-key cryptography. By
1434 using DH based key delivery and reusing DH keys, the necessary crypto
1435 processing cost per request can be minimized.
1437 The syntax for the AD-INITIAL-VERIFIED-CAS authorization data does
1438 permit empty SEQUENCEs to be encoded. Such empty sequences may only
1439 be used if the KDC itself vouches for the user's certificate.
1441 When the Diffie-Hellman key exchange method is used, additional pre-
1442 authentication data [RFC4120] (in addition to the PA_PK_AS_REQ as
1443 defined in this specification) is not bound to the AS_REQ by the
1444 mechanisms discussed in this specification (meaning it may be dropped
1445 or added by attackers without being detected by either the client or
1446 the KDC). Designers of additional pre-authentication data should
1447 take that into consideration if such additional pre-authentication
1448 data can be used in conjunction with the PA_PK_AS_REQ. The future
1452 Zhu & Tung Expires June 2, 2006 [Page 26]
1454 Internet-Draft PKINIT November 2005
1457 work of the Kerberos working group is expected to update the hash
1458 algorithms specified in this document and provide a generic mechanism
1459 to bind additional pre-authentication data with the accompanying
1465 The following people have made significant contributions to this
1466 draft: Paul Leach, Stefan Santesson, Sam Hartman, Love Hornquist
1467 Astrand, Ken Raeburn, Nicolas Williams, John Wray, Tom Yu, Jeffrey
1468 Hutzelman, David Cross, Dan Simon, Karthik Jaganathan, Chaskiel M
1469 Grundman and Jeffrey Altman.
1471 Andre Scedrov, Aaron D. Jaggard, Iliano Cervesato, Joe-Kai Tsay and
1472 Chris Walstad discovered a binding issue between the AS-REQ and AS-
1473 REP in draft -26, the asChecksum field was added as the result.
1475 Special thanks to Clifford Neuman, Matthew Hur, Sasha Medvinsky and
1476 Jonathan Trostle who wrote earlier versions of this document.
1478 The authors are indebted to the Kerberos working group chair Jeffrey
1479 Hutzelman who kept track of various issues and was enormously helpful
1480 during the creation of this document.
1482 Some of the ideas on which this document is based arose during
1483 discussions over several years between members of the SAAG, the IETF
1484 CAT working group, and the PSRG, regarding integration of Kerberos
1485 and SPX. Some ideas have also been drawn from the DASS system.
1486 These changes are by no means endorsed by these groups. This is an
1487 attempt to revive some of the goals of those groups, and this
1488 document approaches those goals primarily from the Kerberos
1491 Lastly, comments from groups working on similar ideas in DCE have
1495 6. IANA Considerations
1497 This document has no actions for IANA.
1508 Zhu & Tung Expires June 2, 2006 [Page 27]
1510 Internet-Draft PKINIT November 2005
1513 7.1. Normative References
1516 IEEE, "Standard Specifications for Public Key
1517 Cryptography", IEEE 1363, 2000.
1519 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
1520 Requirement Levels", BCP 14, RFC 2119, March 1997.
1522 [RFC2412] Orman, H., "The OAKLEY Key Determination Protocol",
1523 RFC 2412, November 1998.
1525 [RFC2631] Rescorla, E., "Diffie-Hellman Key Agreement Method",
1526 RFC 2631, June 1999.
1528 [RFC3279] Bassham, L., Polk, W., and R. Housley, "Algorithms and
1529 Identifiers for the Internet X.509 Public Key
1530 Infrastructure Certificate and Certificate Revocation List
1531 (CRL) Profile", RFC 3279, April 2002.
1533 [RFC3280] Housley, R., Polk, W., Ford, W., and D. Solo, "Internet
1534 X.509 Public Key Infrastructure Certificate and
1535 Certificate Revocation List (CRL) Profile", RFC 3280,
1538 [RFC3370] Housley, R., "Cryptographic Message Syntax (CMS)
1539 Algorithms", RFC 3370, August 2002.
1541 [RFC3447] Jonsson, J. and B. Kaliski, "Public-Key Cryptography
1542 Standards (PKCS) #1: RSA Cryptography Specifications
1543 Version 2.1", RFC 3447, February 2003.
1545 [RFC3526] Kivinen, T. and M. Kojo, "More Modular Exponential (MODP)
1546 Diffie-Hellman groups for Internet Key Exchange (IKE)",
1549 [RFC3565] Schaad, J., "Use of the Advanced Encryption Standard (AES)
1550 Encryption Algorithm in Cryptographic Message Syntax
1551 (CMS)", RFC 3565, July 2003.
1553 [RFC3766] Orman, H. and P. Hoffman, "Determining Strengths For
1554 Public Keys Used For Exchanging Symmetric Keys", BCP 86,
1555 RFC 3766, April 2004.
1557 [RFC3852] Housley, R., "Cryptographic Message Syntax (CMS)",
1558 RFC 3852, July 2004.
1560 [RFC3961] Raeburn, K., "Encryption and Checksum Specifications for
1564 Zhu & Tung Expires June 2, 2006 [Page 28]
1566 Internet-Draft PKINIT November 2005
1569 Kerberos 5", RFC 3961, February 2005.
1571 [RFC3962] Raeburn, K., "Advanced Encryption Standard (AES)
1572 Encryption for Kerberos 5", RFC 3962, February 2005.
1574 [RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The
1575 Kerberos Network Authentication Service (V5)", RFC 4120,
1578 [RFC4121] Zhu, L., Jaganathan, K., and S. Hartman, "The Kerberos
1579 Version 5 Generic Security Service Application Program
1580 Interface (GSS-API) Mechanism: Version 2", RFC 4121,
1583 [X680] ITU-T Recommendation X.680 (2002) | ISO/IEC 8824-1:2002,
1584 Information technology - Abstract Syntax Notation One
1585 (ASN.1): Specification of basic notation.
1587 [X690] ITU-T Recommendation X.690 (2002) | ISO/IEC 8825-1:2002,
1588 Information technology - ASN.1 encoding Rules: Specification
1589 of Basic Encoding Rules (BER), Canonical Encoding Rules
1590 (CER) and Distinguished Encoding Rules (DER).
1592 7.2. Informative References
1594 [LENSTRA] Lenstra, A. and E. Verheul, "Selecting Cryptographic Key
1595 Sizes", Journal of Cryptology 14 (2001) 255-293.
1597 [ODL99] Odlyzko, A., "Discrete logarithms: The past and the
1598 future, Designs, Codes, and Cryptography (1999)".
1601 Zhu & Tung Expires June 1, 2006 [Page 27]
1603 Internet-Draft PKINIT November 2005
1606 [RFC4158] Cooper, M., Dzambasow, Y., Hesse, P., Joseph, S., and R.
1607 Nicholas, "Internet X.509 Public Key Infrastructure:
1608 Certification Path Building", RFC 4158, September 2005.
1611 Appendix A. PKINIT ASN.1 Module
1613 KerberosV5-PK-INIT-SPEC {
1614 iso(1) identified-organization(3) dod(6) internet(1)
1615 security(5) kerberosV5(2) modules(4) pkinit(5)
1616 } DEFINITIONS EXPLICIT TAGS ::= BEGIN
1619 SubjectPublicKeyInfo, AlgorithmIdentifier
1623 Zhu & Tung Expires June 2, 2006 [Page 29]
1625 Internet-Draft PKINIT November 2005
1628 FROM PKIX1Explicit88 { iso (1)
1629 identified-organization (3) dod (6) internet (1)
1630 security (5) mechanisms (5) pkix (7) id-mod (0)
1631 id-pkix1-explicit (18) }
1632 -- As defined in RFC 3280.
1634 KerberosTime, PrincipalName, Realm, EncryptionKey
1635 FROM KerberosV5Spec2 { iso(1) identified-organization(3)
1636 dod(6) internet(1) security(5) kerberosV5(2)
1637 modules(4) krb5spec2(2) } ;
1639 id-pkinit OBJECT IDENTIFIER ::=
1640 { iso (1) org (3) dod (6) internet (1) security (5)
1641 kerberosv5 (2) pkinit (3) }
1643 id-pkinit-authData OBJECT IDENTIFIER ::= { id-pkinit 1 }
1644 id-pkinit-DHKeyData OBJECT IDENTIFIER ::= { id-pkinit 2 }
1645 id-pkinit-rkeyData OBJECT IDENTIFIER ::= { id-pkinit 3 }
1646 id-pkinit-KPClientAuth OBJECT IDENTIFIER ::= { id-pkinit 4 }
1647 id-pkinit-KPKdc OBJECT IDENTIFIER ::= { id-pkinit 5 }
1649 id-pkinit-san OBJECT IDENTIFIER ::=
1650 { iso(1) org(3) dod(6) internet(1) security(5) kerberosv5(2)
1653 pa-pk-as-req INTEGER ::= 16
1654 pa-pk-as-rep INTEGER ::= 17
1656 ad-initial-verified-cas INTEGER ::= 9
1658 td-trusted-certifiers INTEGER ::= 104
1659 td-invalid-certificates INTEGER ::= 105
1660 td-dh-parameters INTEGER ::= 109
1662 PA-PK-AS-REQ ::= SEQUENCE {
1663 signedAuthPack [0] IMPLICIT OCTET STRING,
1664 -- Contains a CMS type ContentInfo encoded
1665 -- according to [RFC3852].
1666 -- The contentType field of the type ContentInfo
1667 -- is id-signedData (1.2.840.113549.1.7.2),
1668 -- and the content field is a SignedData.
1669 -- The eContentType field for the type SignedData is
1670 -- id-pkinit-authData (1.3.6.1.5.2.3.1), and the
1671 -- eContent field contains the DER encoding of the
1673 -- AuthPack is defined below.
1674 trustedCertifiers [1] SEQUENCE OF
1675 ExternalPrincipalIdentifier OPTIONAL,
1679 Zhu & Tung Expires June 2, 2006 [Page 30]
1681 Internet-Draft PKINIT November 2005
1684 -- Contains a list of CAs, trusted by the client,
1685 -- that can be used to certify the KDC.
1686 -- Each ExternalPrincipalIdentifier identifies a CA
1687 -- or a CA certificate (thereby its public key).
1688 -- The information contained in the
1689 -- trustedCertifiers SHOULD be used by the KDC as
1690 -- hints to guide its selection of an appropriate
1691 -- certificate chain to return to the client.
1692 kdcPkId [2] IMPLICIT OCTET STRING
1694 -- Contains a CMS type SignerIdentifier encoded
1695 -- according to [RFC3852].
1696 -- Identifies, if present, a particular KDC
1697 -- public key that the client already has.
1701 DHNonce ::= OCTET STRING
1703 ExternalPrincipalIdentifier ::= SEQUENCE {
1704 subjectName [0] IMPLICIT OCTET STRING OPTIONAL,
1705 -- Contains a PKIX type Name encoded according to
1707 -- Identifies the certificate subject by the
1708 -- distinguished subject name.
1709 -- REQUIRED when there is a distinguished subject
1710 -- name present in the certificate.
1711 issuerAndSerialNumber [1] IMPLICIT OCTET STRING OPTIONAL,
1712 -- Contains a CMS type IssuerAndSerialNumber encoded
1713 -- according to [RFC3852].
1714 -- Identifies a certificate of the subject.
1715 -- REQUIRED for TD-INVALID-CERTIFICATES and
1716 -- TD-TRUSTED-CERTIFIERS.
1717 subjectKeyIdentifier [2] IMPLICIT OCTET STRING OPTIONAL,
1718 -- Identifies the subject's public key by a key
1719 -- identifier. When an X.509 certificate is
1720 -- referenced, this key identifier matches the X.509
1721 -- subjectKeyIdentifier extension value. When other
1722 -- certificate formats are referenced, the documents
1723 -- that specify the certificate format and their use
1724 -- with the CMS must include details on matching the
1725 -- key identifier to the appropriate certificate
1727 -- RECOMMENDED for TD-TRUSTED-CERTIFIERS.
1731 AuthPack ::= SEQUENCE {
1735 Zhu & Tung Expires June 2, 2006 [Page 31]
1737 Internet-Draft PKINIT November 2005
1740 pkAuthenticator [0] PKAuthenticator,
1741 clientPublicValue [1] SubjectPublicKeyInfo OPTIONAL,
1742 -- Type SubjectPublicKeyInfo is defined in
1744 -- Specifies Diffie-Hellman domain parameters
1745 -- and the client's public key value [IEEE1363].
1746 -- The DH public key value is encoded as a BIT
1747 -- STRING according to [RFC3279].
1748 -- This field is present only if the client wishes
1749 -- to use the Diffie-Hellman key agreement method.
1750 supportedCMSTypes [2] SEQUENCE OF AlgorithmIdentifier
1752 -- Type AlgorithmIdentifier is defined in
1754 -- List of CMS encryption types supported by the
1755 -- client in order of (decreasing) preference.
1756 clientDHNonce [3] DHNonce OPTIONAL,
1757 -- Present only if the client indicates that it
1758 -- wishes to reuse DH keys or to allow the KDC to
1763 PKAuthenticator ::= SEQUENCE {
1764 cusec [0] INTEGER (0..999999),
1765 ctime [1] KerberosTime,
1766 -- cusec and ctime are used as in [RFC4120], for
1767 -- replay prevention.
1768 nonce [2] INTEGER (0..4294967295),
1769 -- Chosen randomly; This nonce does not need to
1770 -- match with the nonce in the KDC-REQ-BODY.
1771 paChecksum [3] OCTET STRING,
1772 -- Contains the SHA1 checksum, performed over
1777 TD-TRUSTED-CERTIFIERS ::= SEQUENCE OF
1778 ExternalPrincipalIdentifier
1779 -- Identifies a list of CAs trusted by the KDC.
1780 -- Each ExternalPrincipalIdentifier identifies a CA
1781 -- or a CA certificate (thereby its public key).
1783 TD-INVALID-CERTIFICATES ::= SEQUENCE OF
1784 ExternalPrincipalIdentifier
1785 -- Each ExternalPrincipalIdentifier identifies a
1786 -- certificate (sent by the client) with an invalid
1791 Zhu & Tung Expires June 2, 2006 [Page 32]
1793 Internet-Draft PKINIT November 2005
1796 KRB5PrincipalName ::= SEQUENCE {
1798 principalName [1] PrincipalName
1801 AD-INITIAL-VERIFIED-CAS ::= SEQUENCE OF
1802 ExternalPrincipalIdentifier
1803 -- Identifies the certification path based on which
1804 -- the client certificate was validated.
1805 -- Each ExternalPrincipalIdentifier identifies a CA
1806 -- or a CA certificate (thereby its public key).
1808 PA-PK-AS-REP ::= CHOICE {
1809 dhInfo [0] DHRepInfo,
1810 -- Selected when Diffie-Hellman key exchange is
1812 encKeyPack [1] IMPLICIT OCTET STRING,
1813 -- Selected when public key encryption is used.
1814 -- Contains a CMS type ContentInfo encoded
1815 -- according to [RFC3852].
1816 -- The contentType field of the type ContentInfo is
1817 -- id-envelopedData (1.2.840.113549.1.7.3).
1818 -- The content field is an EnvelopedData.
1819 -- The contentType field for the type EnvelopedData
1820 -- is id-signedData (1.2.840.113549.1.7.2).
1821 -- The eContentType field for the inner type
1822 -- SignedData (when unencrypted) is
1823 -- id-pkinit-rkeyData (1.3.6.1.5.2.3.3) and the
1824 -- eContent field contains the DER encoding of the
1825 -- type ReplyKeyPack.
1826 -- ReplyKeyPack is defined below.
1830 DHRepInfo ::= SEQUENCE {
1831 dhSignedData [0] IMPLICIT OCTET STRING,
1832 -- Contains a CMS type ContentInfo encoded according
1834 -- The contentType field of the type ContentInfo is
1835 -- id-signedData (1.2.840.113549.1.7.2), and the
1836 -- content field is a SignedData.
1837 -- The eContentType field for the type SignedData is
1838 -- id-pkinit-DHKeyData (1.3.6.1.5.2.3.2), and the
1839 -- eContent field contains the DER encoding of the
1840 -- type KDCDHKeyInfo.
1841 -- KDCDHKeyInfo is defined below.
1842 serverDHNonce [1] DHNonce OPTIONAL
1843 -- Present if and only if dhKeyExpiration is
1847 Zhu & Tung Expires June 2, 2006 [Page 33]
1849 Internet-Draft PKINIT November 2005
1855 KDCDHKeyInfo ::= SEQUENCE {
1856 subjectPublicKey [0] BIT STRING,
1857 -- The KDC's DH public key.
1858 -- The DH public key value is encoded as a BIT
1859 -- STRING according to [RFC3279].
1860 nonce [1] INTEGER (0..4294967295),
1861 -- Contains the nonce in the pkAuthenticator field
1862 -- in the request if the DH keys are NOT reused,
1864 dhKeyExpiration [2] KerberosTime OPTIONAL,
1865 -- Expiration time for KDC's key pair,
1866 -- present if and only if the DH keys are reused.
1867 -- If present, the KDC's DH public key MUST not be
1868 -- used past the point of this expiration time.
1869 -- If this field is omitted then the serverDHNonce
1870 -- field MUST also be omitted.
1874 ReplyKeyPack ::= SEQUENCE {
1875 replyKey [0] EncryptionKey,
1876 -- Contains the session key used to encrypt the
1877 -- enc-part field in the AS-REP, i.e. the
1879 asChecksum [1] Checksum,
1880 -- Contains the checksum of the AS-REQ
1881 -- corresponding to the containing AS-REP.
1882 -- The checksum is performed over the type AS-REQ.
1883 -- The protocol key [RFC3961] of the checksum is the
1884 -- replyKey and the key usage number is 6.
1885 -- If the replyKey's enctype is "newer" [RFC4120]
1886 -- [RFC4121], the checksum is the required
1887 -- checksum operation [RFC3961] for that enctype.
1888 -- The client MUST verify this checksum upon receipt
1893 TD-DH-PARAMETERS ::= SEQUENCE OF AlgorithmIdentifier
1894 -- Each AlgorithmIdentifier specifies a set of
1895 -- Diffie-Hellman domain parameters [IEEE1363].
1896 -- This list is in decreasing preference order.
1903 Zhu & Tung Expires June 2, 2006 [Page 34]
1905 Internet-Draft PKINIT November 2005
1908 Appendix B. Test Vectors
1910 Function octetstring2key() is defined in Section 3.2.3.1. This
1911 section describes a few sets of test vectors that would be useful for
1912 implementers of octetstring2key().
1917 Input octet string x is:
1919 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1921 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1922 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1923 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1924 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1925 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1926 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1927 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1928 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1929 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1930 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1931 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1932 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1933 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1934 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1936 Output of K-truncate() when the key size is 32 octets:
1938 5e e5 0d 67 5c 80 9f e5 9e 4a 77 62 c5 4b 65 83
1939 75 47 ea fb 15 9b d8 cd c7 5f fc a5 91 1e 4c 41
1944 Input octet string x is:
1946 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1947 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1948 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1949 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1950 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1951 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1952 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1953 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1955 Output of K-truncate() when the key size is 32 octets:
1959 Zhu & Tung Expires June 2, 2006 [Page 35]
1961 Internet-Draft PKINIT November 2005
1964 ac f7 70 7c 08 97 3d df db 27 cd 36 14 42 cc fb
1965 a3 55 c8 88 4c b4 72 f3 7d a6 36 d0 7d 56 78 7e
1970 Input octet string x is:
1972 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
1973 10 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e
1974 0f 10 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d
1975 0e 0f 10 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
1976 0d 0e 0f 10 00 01 02 03 04 05 06 07 08 09 0a 0b
1977 0c 0d 0e 0f 10 00 01 02 03 04 05 06 07 08 09 0a
1978 0b 0c 0d 0e 0f 10 00 01 02 03 04 05 06 07 08 09
1979 0a 0b 0c 0d 0e 0f 10 00 01 02 03 04 05 06 07 08
1981 Output of K-truncate() when the key size is 32 octets:
1983 c4 42 da 58 5f cb 80 e4 3b 47 94 6f 25 40 93 e3
1984 73 29 d9 90 01 38 0d b7 83 71 db 3a cf 5c 79 7e
1989 Input octet string x is:
1991 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
1992 10 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e
1993 0f 10 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d
1994 0e 0f 10 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
1995 0d 0e 0f 10 00 01 02 03 04 05 06 07 08
1997 Output of K-truncate() when the key size is 32 octets:
1999 00 53 95 3b 84 c8 96 f4 eb 38 5c 3f 2e 75 1c 4a
2000 59 0e d6 ff ad ca 6f f6 4f 47 eb eb 8d 78 0f fc
2003 Appendix C. Miscellaneous Information about Microsoft Windows PKINIT
2006 Earlier revisions of the PKINIT I-D were implemented in various
2007 releases of Microsoft Windows and deployed in fairly large numbers.
2008 To enable the community to better interoperate with systems running
2009 those releases, the following information may be useful.
2011 KDC certificates issued by Windows 2000 Enterprise CAs contain a
2015 Zhu & Tung Expires June 2, 2006 [Page 36]
2017 Internet-Draft PKINIT November 2005
2020 dNSName SAN with the DNS name of the host running the KDC, and the
2021 id-kp-serverAuth EKU [RFC3280].
2023 KDC certificates issued by Windows 2003 Enterprise CAs contain a
2024 dNSName SAN with the DNS name of the host running the KDC, the id-kp-
2025 serverAuth EKU and the id-ms-kp-sc-logon EKU.
2027 It is anticipated that the next release of Windows is already too far
2028 along to allow it to support the issuing KDC certificates with id-
2029 pkinit-san SAN as specified in this RFC. Instead, they will have a
2030 dNSName SAN containing the domain name of the KDC and the intended
2031 purpose of these KDC certificates be restricted by the presence of
2032 the id-pkinit-KPKdc EKU and id-kp-serverAuth EKU.
2034 In addition to checking that the above are present in a KDC
2035 certificate, Windows clients verify that the issuer of the KDC
2036 certificate is one of a set of allowed issuers of such certificates,
2037 so those wishing to issue KDC certificates need to configure their
2038 Windows clients appropriately.
2040 Client certificates accepted by Windows 2000 and Windows 2003 Server
2041 KDCs must contain an id-ms-san-sc-logon-upn (1.3.6.1.4.1.311.20.2.3)
2042 SAN and the id-ms-kp-sc-logon EKU. The id-ms-san-sc-logon-upn SAN
2043 contains a UTF8 encoded string whose value is that of the Directory
2044 Service attribute UserPrincipalName of the client account object, and
2045 the purpose of including the id-ms-san-sc-logon-upn SAN in the client
2046 certificate is to validate the client mapping (in other words, the
2047 client's public key is bound to the account that has this
2048 UserPrincipalName value).
2050 It should be noted that all Microsoft Kerberos realm names are domain
2051 style realm names and strictly in upper case. In addition, the
2052 UserPrincipalName attribute is globally unique in Windows 2000 and
2071 Zhu & Tung Expires June 2, 2006 [Page 37]
2073 Internet-Draft PKINIT November 2005
2079 Microsoft Corporation
2084 Email: lzhu@microsoft.com
2088 USC Information Sciences Institute
2089 4676 Admiralty Way Suite 1001
2090 Marina del Rey, CA 90292
2093 Email: brian@isi.edu
2127 Zhu & Tung Expires June 2, 2006 [Page 38]
2129 Internet-Draft PKINIT November 2005
2132 Intellectual Property Statement
2134 The IETF takes no position regarding the validity or scope of any
2135 Intellectual Property Rights or other rights that might be claimed to
2136 pertain to the implementation or use of the technology described in
2137 this document or the extent to which any license under such rights
2138 might or might not be available; nor does it represent that it has
2139 made any independent effort to identify any such rights. Information
2140 on the procedures with respect to rights in RFC documents can be
2141 found in BCP 78 and BCP 79.
2143 Copies of IPR disclosures made to the IETF Secretariat and any
2144 assurances of licenses to be made available, or the result of an
2145 attempt made to obtain a general license or permission for the use of
2146 such proprietary rights by implementers or users of this
2147 specification can be obtained from the IETF on-line IPR repository at
2148 http://www.ietf.org/ipr.
2150 The IETF invites any interested party to bring to its attention any
2151 copyrights, patents or patent applications, or other proprietary
2152 rights that may cover technology that may be required to implement
2153 this standard. Please address the information to the IETF at
2157 Disclaimer of Validity
2159 This document and the information contained herein are provided on an
2160 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
2161 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
2162 ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
2163 INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
2164 INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
2165 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
2170 Copyright (C) The Internet Society (2005). This document is subject
2171 to the rights, licenses and restrictions contained in BCP 78, and
2172 except as set forth therein, the authors retain all their rights.
2177 Funding for the RFC Editor function is currently provided by the
2183 Zhu & Tung Expires June 2, 2006 [Page 39]