1 INTERNET-DRAFT Brian Tung
2 draft-ietf-cat-kerberos-pk-init-22.txt Clifford Neuman
3 expires May 15, 2005 USC/ISI
10 Public Key Cryptography for Initial Authentication in Kerberos
13 0. Status Of This Memo
15 By submitting this Internet-Draft, I certify that any applicable
16 patent or other IPR claims of which I am aware have been disclosed,
17 or will be disclosed, and any of which I become aware will be
18 disclosed, in accordance with RFC 3668.
20 Internet-Drafts are working documents of the Internet Engineering
21 Task Force (IETF), its areas, and its working groups. Note that
22 other groups may also distribute working documents as
25 Internet-Drafts are draft documents valid for a maximum of six
26 months and may be updated, replaced, or obsoleted by other documents
27 at any time. It is inappropriate to use Internet-Drafts as
28 reference material or to cite them other than as "work in progress."
30 The list of current Internet-Drafts can be accessed at
31 http://www.ietf.org/ietf/1id-abstracts.txt
33 The list of Internet-Draft Shadow Directories can be accessed at
34 http://www.ietf.org/shadow.html
36 The distribution of this memo is unlimited. It is filed as
37 draft-ietf-cat-kerberos-pk-init-22.txt and expires May 15, 2005.
38 Please send comments to the authors.
43 This document describes protocol extensions (hereafter called
44 PKINIT) to the Kerberos protocol specification [1]. These
45 extensions provide a method for integrating public key cryptography
46 into the initial authentication exchange, by passing digital
47 certificates and associated authenticators in preauthentication data
53 A client typically authenticates itself to a service in Kerberos
54 using three distinct though related exchanges. First, the client
55 requests a ticket-granting ticket (TGT) from the Kerberos
56 authentication server (AS). Then, it uses the TGT to request a
57 service ticket from the Kerberos ticket-granting server (TGS).
58 Usually, the AS and TGS are integrated in a single device known as
59 a Kerberos Key Distribution Center, or KDC. (In this document, we
60 will refer to both the AS and the TGS as the KDC.) Finally, the
61 client uses the service ticket to authenticate itself to the
64 The advantage afforded by the TGT is that the client need explicitly
65 request a ticket and expose his credentials only once. The TGT and
66 its associated session key can then be used for any subsequent
67 requests. One result of this is that all further authentication is
68 independent of the method by which the initial authentication was
69 performed. Consequently, initial authentication provides a
70 convenient place to integrate public-key cryptography into Kerberos
73 As defined, Kerberos authentication exchanges use symmetric-key
74 cryptography, in part for performance. One cost of using
75 symmetric-key cryptography is that the keys must be shared, so that
76 before a client can authenticate itself, he must already be
77 registered with the KDC.
79 Conversely, public-key cryptography (in conjunction with an
80 established Public Key Infrastructure) permits authentication
81 without prior registration with a KDC. Adding it to Kerberos allows
82 the widespread use of Kerberized applications by clients without
83 requiring them to register first with a KDC--a requirement that has
84 no inherent security benefit.
86 As noted above, a convenient and efficient place to introduce
87 public-key cryptography into Kerberos is in the initial
88 authentication exchange. This document describes the methods and
89 data formats for integrating public-key cryptography into Kerberos
90 initial authentication.
95 This section describes extensions to [1] for supporting the use of
96 public-key cryptography in the initial request for a ticket.
98 Briefly, this document defines the following extensions to [1]:
100 1. The client indicates the use of public-key authentication by
101 including a special preauthenticator in the initial request.
102 This preauthenticator contains the client's public-key data
105 2. The KDC tests the client's request against its policy and
106 trusted Certification Authorities (CAs).
108 3. If the request passes the verification tests, the KDC
109 replies as usual, but the reply is encrypted using either:
111 a. a symmetric encryption key, signed using the KDC's
112 signature key and encrypted using the client's encryption
115 b. a key generated through a Diffie-Hellman exchange with
116 the client, signed using the KDC's signature key.
118 Any keying material required by the client to obtain the
119 Encryption key is returned in a preauthentication field
120 accompanying the usual reply.
122 4. The client obtains the encryption key, decrypts the reply,
123 and then proceeds as usual.
125 Section 3.1 of this document defines the necessary message formats.
126 Section 3.2 describes their syntax and use in greater detail.
129 3.1. Definitions, Requirements, and Constants
132 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
133 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
134 document are to be interpreted as described in RFC 2119 [12].
137 3.1.1. Required Algorithms
139 All PKINIT implementations MUST support the following algorithms:
141 - Reply key (or DH-derived key): AES256-CTS-HMAC-SHA1-96 etype.
143 - Signature algorithm: SHA-1 digest and RSA.
145 - Reply key delivery method: ephemeral-ephemeral Diffie-Hellman
146 with a non-zero nonce.
148 - Unkeyed checksum type for the paChecksum member of
149 PKAuthenticator: SHA1 (unkeyed), Kerberos checksum type 14
153 3.1.2. Defined Message and Encryption Types
155 PKINIT makes use of the following new preauthentication types:
161 PKINIT also makes use of the following new authorization data type:
163 AD-INITIAL-VERIFIED-CAS TBD
165 PKINIT introduces the following new error codes:
167 KDC_ERR_CLIENT_NOT_TRUSTED 62
168 KDC_ERR_KDC_NOT_TRUSTED 63
169 KDC_ERR_INVALID_SIG 64
171 KDC_ERR_CERTIFICATE_MISMATCH 66
172 KDC_ERR_CANT_VERIFY_CERTIFICATE 70
173 KDC_ERR_INVALID_CERTIFICATE 71
174 KDC_ERR_REVOKED_CERTIFICATE 72
175 KDC_ERR_REVOCATION_STATUS_UNKNOWN 73
176 KDC_ERR_CLIENT_NAME_MISMATCH 75
178 PKINIT uses the following typed data types for errors:
181 TD-TRUSTED-CERTIFIERS 104
182 TD-CERTIFICATE-INDEX 105
183 TD-UNKEYED-CHECKSUM-INFO 109
185 PKINIT defines the following encryption types, for use in the AS-REQ
186 message (to indicate acceptance of the corresponding encryption OIDs
190 md5WithRSAEncryption-CmsOID 10
191 sha1WithRSAEncryption-CmsOID 11
193 rsaEncryption-EnvOID (PKCS1 v1.5) 13
194 rsaES-OAEP-EnvOID (PKCS1 v2.0) 14
195 des-ede3-cbc-EnvOID 15
197 The above encryption types are used by the client only within the
198 KDC-REQ-BODY to indicate which CMS [14] algorithms it supports. Their
199 use within Kerberos EncryptedData structures is not specified by this
202 The ASN.1 module for all structures defined in this document (plus
203 IMPORT statements for all imported structures) are given in Appendix
204 A. In the event of a discrepancy between Appendix A and the portions
205 of ASN.1 in the main text, the appendix is normative.
207 All structures defined in this document MUST be encoded using
208 Distinguished Encoding Rules (DER). All imported data structures
209 must be encoded according to the rules specified in Kerberos [1] or
210 CMS [2] as appropriate.
212 Interoperability note: Some implementations may not be able to
213 decode CMS objects encoded with BER but not DER; specifically, they
214 may not be able to decode infinite length encodings. To maximize
215 interoperability, implementers SHOULD encode CMS objects used in
219 3.1.3. Algorithm Identifiers
221 PKINIT does not define, but does make use of, the following
222 algorithm identifiers.
224 PKINIT uses the following algorithm identifier for Diffie-Hellman
229 PKINIT uses the following signature algorithm identifiers [8, 12]:
231 sha-1WithRSAEncryption (RSA with SHA1)
232 md5WithRSAEncryption (RSA with MD5)
233 id-dsa-with-sha1 (DSA with SHA1)
235 PKINIT uses the following encryption algorithm identifiers [5] for
236 encrypting the temporary key with a public key:
238 rsaEncryption (PKCS1 v1.5)
239 id-RSAES-OAEP (PKCS1 v2.0)
241 PKINIT uses the following algorithm identifiers [14, 8] for
242 encrypting the reply key with the temporary key:
244 des-ede3-cbc (three-key 3DES, CBC mode)
245 rc2-cbc (RC2, CBC mode)
246 id-aes256-CBC (AES-256, CBC mode)
249 3.2. PKINIT Preauthentication Syntax and Use
251 This section defines the syntax and use of the various
252 preauthentication fields employed by PKINIT.
255 3.2.1. Client Request
257 The initial authentication request (AS-REQ) is sent as per [1]; in
258 addition, a preauthentication field contains data signed by the
259 client's private signature key, as follows:
261 WrapContentInfo ::= OCTET STRING (CONSTRAINED BY {
262 -- Contains a BER encoding of
266 WrapIssuerAndSerial ::= OCTET STRING (CONSTRAINED BY {
267 -- Contains a BER encoding of
268 -- IssuerAndSerialNumber
271 PA-PK-AS-REQ ::= SEQUENCE {
272 signedAuthPack [0] IMPLICIT WrapContentInfo,
273 -- Type is SignedData.
274 -- Content is AuthPack
276 trustedCertifiers [1] SEQUENCE OF TrustedCA OPTIONAL,
277 -- A list of CAs, trusted by
278 -- the client, used to certify
280 kdcCert [2] IMPLICIT WrapIssuerAndSerial
282 -- Identifies a particular KDC
283 -- certificate, if the client
288 TrustedCA ::= CHOICE {
290 -- Fully qualified X.500 name
291 -- as defined in RFC 3280 [4].
292 issuerAndSerial [2] IMPLICIT WrapIssuerAndSerial,
293 -- Identifies a specific CA
298 AuthPack ::= SEQUENCE {
299 pkAuthenticator [0] PKAuthenticator,
300 clientPublicValue [1] SubjectPublicKeyInfo OPTIONAL,
301 -- Defined in RFC 3280 [4].
302 -- Present only if the client
303 -- is using ephemeral-ephemeral
305 supportedCMSTypes [2] SEQUENCE OF AlgorithmIdentifier
307 -- List of CMS encryption types
308 -- supported by client in order
309 -- of (decreasing) preference.
313 PKAuthenticator ::= SEQUENCE {
314 cusec [0] INTEGER (0..999999),
315 ctime [1] KerberosTime,
316 -- cusec and ctime are used as
317 -- in [1], for replay
319 nonce [2] INTEGER (0..4294967295),
320 -- Binds reply to request,
321 -- MUST be zero when client
322 -- will accept cached
323 -- Diffie-Hellman parameters
324 -- from KDC. MUST NOT be
326 paChecksum [3] OCTET STRING OPTIONAL,
328 -- Performed over KDC-REQ-BODY,
333 The ContentInfo in the signedAuthPack is filled out as follows:
335 1. The eContent field MUST contain data of type AuthPack.
336 The supportedCMSTypes field is filled with the algorithm
337 identifiers that the client supports, in order of
338 preference, with most preferred first.
340 2. The eContentType field MUST contain the OID value for
341 id-pkauthdata: { iso(1) org(3) dod(6) internet(1)
342 security(5) kerberosv5(2) pkinit(3) pkauthdata(1)}
344 3. The signerInfos field MUST contain the signature over the
347 4. The certificates field MUST contain at least a signature
348 verification certificate chain that the KDC can use to
349 verify the signature over the AuthPack. The certificate
350 chain(s) MUST NOT contain the root CA certificate.
352 5. If a Diffie-Hellman key is being used, the parameters MUST
353 be chosen from Oakley Group 2 or 14. Implementations MUST
354 support Group 2; they are RECOMMENDED to support Group 14.
355 (See RFC 2409 [10] and RFC 3526 [13].)
357 6. The KDC may wish to use cached Diffie-Hellman parameters.
358 To indicate acceptance of caching, the client sends zero in
359 the nonce field of the pkAuthenticator. Zero is not a valid
360 value for this field under any other circumstances. Since
361 zero is used to indicate acceptance of cached parameters,
362 message binding in this case is performed using only the
363 nonce in the main request.
366 3.2.2. Validation of Client Request
368 Upon receiving the client's request, the KDC validates it. This
369 section describes the steps that the KDC MUST (unless otherwise
370 noted) take in validating the request.
372 The KDC must look for a client certificate in the signedAuthPack.
373 If it cannot find one signed by a CA it trusts, it sends back an
374 error of type KDC_ERR_CANT_VERIFY_CERTIFICATE. The accompanying
375 e-data for this error is a TYPED-DATA (as defined in [1]). For this
376 error, the data-type is TD-TRUSTED-CERTIFIERS, and the data-value is
379 KDCTrustedCertifiers ::= SEQUENCE OF Name
381 If, while verifying the certificate chain, the KDC determines that
382 the signature on one of the certificates in the signedAuthPack is
383 invalid, it returns an error of type KDC_ERR_INVALID_CERTIFICATE.
384 The accompanying e-data for this error is a TYPED-DATA, whose
385 data-type is TD-CERTIFICATE-INDEX, and whose data-value is the DER
386 encoding of the index into the CertificateSet field, ordered as sent
389 CertificateIndex ::= IssuerAndSerialNumber
390 -- IssuerAndSerialNumber of
391 -- certificate with invalid signature
393 If more than one certificate signature is invalid, the KDC MAY send
394 one TYPED-DATA per invalid signature.
396 The KDC MAY also check whether any certificates in the client's
397 chain have been revoked. If any of them have been revoked, the KDC
398 MUST return an error of type KDC_ERR_REVOKED_CERTIFICATE; if the KDC
399 attempts to determine the revocation status but is unable to do so,
400 it SHOULD return an error of type KDC_ERR_REVOCATION_STATUS_UNKNOWN.
401 The certificate or certificates affected are identified exactly as
402 for an error of type KDC_ERR_INVALID_CERTIFICATE (see above).
404 In addition to validating the certificate chain, the KDC MUST also
405 check that the certificate properly maps to the client's principal name
406 as specified in the AS-REQ as follows:
408 1. If the KDC has its own mapping from the name in the
409 certificate to a Kerberos name, it uses that Kerberos
412 2. Otherwise, if the certificate contains a SubjectAltName
413 extension with a Kerberos name in the otherName field,
414 it uses that name. The otherName field (of type AnotherName)
415 in the SubjectAltName extension MUST contain the following:
419 krb5PrincipalName OBJECT IDENTIFIER ::= {
420 iso (1) org (3) dod (6) internet (1) security (5)
426 KRB5PrincipalName ::= SEQUENCE {
428 principalName [1] PrincipalName
431 If the KDC does not have its own mapping and there is no Kerberos
432 name present in the certificate, or if the name in the request does
433 not match the name in the certificate (including the realm name), or
434 if there is no name in the request, the KDC MUST return error code
435 KDC_ERR_CLIENT_NAME_MISMATCH. There is no accompanying e-data
438 Even if the chain is validated, and the names in the certificate and
439 the request match, the KDC may decide not to trust the client. For
440 example, the certificate may include an Extended Key Usage (EKU) OID
441 in the extensions field. As a matter of local policy, the KDC may
442 decide to reject requests on the basis of the absence or presence of
443 specific EKU OIDs. In this case, the KDC MUST return error code
444 KDC_ERR_CLIENT_NOT_TRUSTED. The PKINIT EKU OID is defined as:
446 { iso(1) org(3) dod(6) internet(1) security(5) kerberosv5(2)
447 pkinit(3) pkekuoid(4) }
449 If the client's signature on the signedAuthPack fails to verify, or
450 if there is no paChecksum field, the KDC MUST return error
451 KDC_ERR_INVALID_SIG. There is no accompanying e-data for this
454 The KDC MUST check the timestamp to ensure that the request is not
455 a replay, and that the time skew falls within acceptable limits.
456 The recommendations clock skew times in [1] apply here. If the
457 check fails, the KDC MUSTreturn error code KRB_AP_ERR_REPEAT or
458 KRB_AP_ERR_SKEW, respectively.
460 If the clientPublicValue is filled in, indicating that the client
461 wishes to use ephemeral-ephemeral Diffie-Hellman, the KDC checks to
462 see if the parameters satisfy its policy. If they do not, it MUST
463 return error code KDC_ERR_KEY_SIZE. The accompanying e-data is a
464 TYPED-DATA, whose data-type is TD-DH-PARAMETERS, and whose
465 data-value is the DER encoding of a DomainParameters (see [3]),
466 including appropriate Diffie-Hellman parameters with which to retry
469 The KDC MUST return error code KDC_ERR_CERTIFICATE_MISMATCH if the
470 client included a kdcCert field in the PA-PK-AS-REQ and the KDC does
471 not have the corresponding certificate.
473 The KDC MUST return error code KDC_ERR_KDC_NOT_TRUSTED if the client
474 did not include a kdcCert field, but did include a trustedCertifiers
475 field, and the KDC does not possesses a certificate issued by one of
476 the listed certifiers.
478 If there is a supportedCMSTypes field in the AuthPack, the KDC must
479 check to see if it supports any of the listed types. If it supports
480 more than one of the types, the KDC SHOULD use the one listed first.
481 If it does not support any of them, it MUST return an error of type
482 KRB5KDC_ERR_ETYPE_NOSUPP.
487 Assuming that the client's request has been properly validated, the
488 KDC proceeds as per [1], except as follows.
490 The KDC MUST set the initial flag and include an authorization data
491 of type AD-INITIAL-VERIFIED-CAS in the issued ticket. The value is
492 an OCTET STRING containing the DER encoding of InitialVerifiedCAs:
494 InitialVerifiedCAs ::= SEQUENCE OF SEQUENCE {
496 Validated [1] BOOLEAN,
500 The KDC MAY wrap any AD-INITIAL-VERIFIED-CAS data in AD-IF-RELEVANT
501 containers if the list of CAs satisfies the KDC's realm's policy.
502 (This corresponds to the TRANSITED-POLICY-CHECKED ticket flag.)
503 Furthermore, any TGS must copy such authorization data from tickets
504 used in a PA-TGS-REQ of the TGS-REQ to the resulting ticket,
505 including the AD-IF-RELEVANT container, if present.
507 Application servers that understand this authorization data type
508 SHOULD apply local policy to determine whether a given ticket
509 bearing such a type *not* contained within an AD-IF-RELEVANT
510 container is acceptable. (This corresponds to the AP server
511 checking the transited field when the TRANSITED-POLICY-CHECKED flag
512 has not been set.) If such a data type is contained within an
513 AD-IF-RELEVANT container, AP servers MAY apply local policy to
514 determine whether the authorization data is acceptable.
516 The AS-REP is otherwise unchanged from [1]. The KDC encrypts the
517 reply as usual, but not with the client's long-term key. Instead,
518 it encrypts it with either a generated encryption key, or a key
519 derived from a Diffie-Hellman exchange. The contents of the
520 PA-PK-AS-REP indicate the type of encryption key that was used:
522 PA-PK-AS-REP ::= CHOICE {
523 dhSignedData [0] IMPLICIT WrapContentInfo,
524 -- Type is SignedData.
525 -- Content is KDCDHKeyInfo
527 encKeyPack [1] IMPLICIT WrapContentInfo,
528 -- Type is EnvelopedData.
529 -- Encrypted using client's
530 -- public key certificate.
531 -- Content is SignedData over
532 -- ReplyKeyPack (defined below).
536 KDCDHKeyInfo ::= SEQUENCE {
537 subjectPublicKey [0] BIT STRING,
538 -- Equals public exponent
540 -- INTEGER encoded as payload
542 nonce [1] INTEGER (0..4294967295),
543 -- Binds reply to request.
544 -- Exception: A value of zero
545 -- indicates that the KDC is
546 -- using cached values.
547 dhKeyExpiration [2] KerberosTime OPTIONAL,
548 -- Expiration time for KDC's
553 The fields of the ContentInfo for dhSignedData are to be filled in
556 1. The eContent field contains data of type KDCDHKeyInfo.
558 2. The eContentType field contains the OID value for
559 id-pkdhkeydata: { iso(1) org(3) dod(6) internet(1)
560 security(5) kerberosv5(2) pkinit(3) pkdhkeydata(2) }
562 3. The signerInfos field contains a single signerInfo, which is
563 the signature of the KDCDHKeyInfo.
565 4. The certificates field contains a signature verification
566 certificate chain that the client will use to verify the
567 KDC's signature over the KDCDHKeyInfo. This field may only
568 be left empty if the client did include a kdcCert field in
569 the PA-PK-AS-REQ, indicating that it has the KDC's
570 certificate. The certificate chain MUST NOT contain the
573 5. If the client and KDC agree to use cached parameters, the
574 KDC MUST return a zero in the nonce field and include the
575 expiration time of the cached values in the dhKeyExpiration
576 field. If this time is exceeded, the client MUST NOT use
577 the reply. If the time is absent, the client MUST NOT use
578 the reply and MAY resubmit a request with a non-zero nonce,
579 thus indicating non-acceptance of the cached parameters.
581 The KDC reply key is derived as follows:
583 1. Both the KDC and the client calculate the shared secret
588 where a and b are the client's and KDC's private exponents,
589 respectively. DHKey, padded first with leading zeros as
590 needed to make it as long as the modulus p, is represented
591 as a string of octets in big-endian order (such that the
592 size of DHKey in octets is the size of the modulus p).
594 2. Let K be the key-generation seed length [6] of the reply key
595 whose enctype is selected according to [1].
597 3. Define the function octetstring2key() as follows:
599 octetstring2key(x) == random-to-key(K-truncate(
606 where x is an octet string; | is the concatenation operator;
607 0x00, 0x01, 0x02, etc. are each represented as a single
608 octet; random-to-key() is an operation that generates a
609 protocolkey from a bitstring of length K; and K-truncate
610 truncates its input to K bits. Both K and random-to-key()
611 are defined in the kcrypto profile [6] for the enctype of
614 4. When cached DH parameters are used, let n_c be the
615 clientDHNonce, and n_k be the serverDHNonce; otherwise, let
616 both n_c and n_k be empty octet strings. The reply key k is
618 k = octetstring2key(DHKey | n_c | n_k)
620 If the KDC and client are not using Diffie-Hellman, the KDC encrypts
621 the reply with an encryption key, packed in the encKeyPack, which
622 contains data of type ReplyKeyPack:
624 ReplyKeyPack ::= SEQUENCE {
625 replyKey [0] EncryptionKey,
627 -- Used to encrypt main reply.
628 -- MUST be at least as strong
629 -- as session key. (Using the
630 -- same enctype and a strong
631 -- prng should suffice, if no
632 -- stronger encryption system
634 nonce [1] INTEGER (0..4294967295),
635 -- Binds reply to request.
639 The fields of the ContentInfo for encKeyPack MUST be filled in as
642 1. The content is of type SignedData. The eContent for
643 the SignedData is of type ReplyKeyPack.
645 2. The eContentType for the SignedData contains the OID value
646 for id-pkrkeydata: { iso(1) org(3) dod(6) internet(1)
647 security(5) kerberosv5(2) pkinit(3) pkrkeydata(3) }
649 3. The signerInfos field contains a single signerInfo, which is
650 the signature of the ReplyKeyPack.
652 4. The certificates field contains a signature verification
653 certificate chain that the client will use to verify the
654 KDC's signature over the ReplyKeyPack. This field may only
655 be left empty if the client included a kdcCert field in the
656 PA-PK-AS-REQ, indicating that it has the KDC's certificate.
657 The certificate chain MUST NOT contain the root CA
660 5. The contentType for the EnvelopedData contains the OID value
661 for id-signedData: { iso (1) member-body (2) us (840) rsadsi
662 (113549) pkcs (1) pkcs7 (7) signedData (2) }
664 6. The enveloped data MUST contain one KeyTransRecipientInfo,
665 which is targeted to the client's certificate (obtained in
666 the initial request).
668 7. The unprotectedAttrs or originatorInfo fields MAY be
672 3.2.4. Validation of KDC Reply
674 Upon receipt of the KDC's reply, the client proceeds as follows. If
675 the PA-PK-AS-REP contains a dhSignedData, the client obtains and
676 verifies the Diffie-Hellman parameters, and obtains the shared key
677 as described above. Otherwise, the message contains an encKeyPack,
678 and the client decrypts and verifies the temporary encryption key.
680 In either case, the client MUST check to see if the included
681 certificate contains a subjectAltName extension of type dNSName or
682 iPAddress (if the KDC is specified by IP address instead of name).
683 If it does, it MUST check to see if that extension matches the KDC
684 it believes it is communicating with, with matching rules specified
685 in RFC 2459. Exception: If the client has some external information
686 as to the identity of the KDC, this check MAY be omitted.
688 The client also MUST check that the KDC's certificate contains an
689 extendedKeyUsage OID of id-pkkdcekuoid:
691 { iso(1) org(3) dod(6) internet(1) security(5) kerberosv5(2)
692 pkinit(3) pkkdcekuoid(5) }
694 If all applicable checks are satisfied, the client then decrypts the
695 main reply with the resulting key, and then proceeds as described in
699 3.2.5. Indicating PKINIT Support
701 A KDC that supports PKINIT SHOULD indicate support for PKINIT to
702 clients that did not include any or acceptable pre-authentication in
703 their AS requests. As per [1], KDCs respond to such requests with a
704 KRB-ERROR with KDC_ERR_PREAUTH_REQUIRED as the error code and with a
705 list of pre-authentication data in the KRB-ERROR's e-data field.
707 To indicate support for PKINIT, then, a KDC MUST include, in
708 KDC_ERR_PREAUTH_REQUIRED KRB-ERROR messages, a padata element of
709 type PA-PK-AS-ERR. The padata-value field of this padata element
710 MUST be set to the zero-length string; clients MUST ignore this and
713 A client that receives a KRB-ERROR message, bearing a PA-PK-AS-ERR
714 padata element, from a KDC in response to its AS-REQ should take the
715 message as an indication of support by the KDC for PKINIT. The
716 client MAY respond by attempting a new AS exchange using its
717 preferred pre-authentication mechanism for which the KDC has
718 indicated support in its error message and for which the client has
719 credentials, possibly including PKINIT.
721 Future extensions to PKINIT may provide for the use of the value of
722 PA-PK-AS-ERR padata elements to indicate such details as KDCs' PKI
723 trust anchors, negotiation preferences, etc.
726 4. Security Considerations
728 PKINIT raises certain security considerations beyond those that can
729 be regulated strictly in protocol definitions. We will address them
732 PKINIT extends the cross-realm model to the public-key
733 infrastructure. Users of PKINIT must understand security policies
734 and procedures appropriate to the use of Public Key Infrastructures.
736 Standard Kerberos allows the possibility of interactions between
737 cryptosystems of varying strengths; this document adds interactions
738 with public-key cryptosystems to Kerberos. Some administrative
739 policies may allow the use of relatively weak public keys. Using
740 such keys to wrap data encrypted under stronger conventional
741 cryptosystems may be inappropriate.
743 PKINIT requires keys for symmetric cryptosystems to be generated.
744 Some such systems contain "weak" keys. For recommendations regarding
745 these weak keys, see [1].
747 PKINIT allows the use of a zero nonce in the PKAuthenticator when
748 cached Diffie-Hellman keys are used. In this case, message binding
749 is performed using the nonce in the main request in the same way as
750 it is done for ordinary AS-REQs (without the PKINIT
751 pre-authenticator). The nonce field in the KDC request body is
752 signed through the checksum in the PKAuthenticator, which
753 cryptographically binds the PKINIT pre-authenticator to the main
754 body of the AS Request and also provides message integrity for the
757 However, when a PKINIT pre-authenticator in the AS-REP has a
758 zero-nonce, and an attacker has somehow recorded this
759 pre-authenticator and discovered the corresponding Diffie-Hellman
760 private key (e.g., with a brute-force attack), the attacker will be
761 able to fabricate his own AS-REP messages that impersonate the KDC
762 with this same pre-authenticator. This compromised pre-authenticator
763 will remain valid as long as its expiration time has not been reached
764 and it is therefore important for clients to check this expiration
765 time and for the expiration time to be reasonably short, which
766 depends on the size of the Diffie-Hellman group.
768 If a client also caches its Diffie-Hellman keys, then the session key
769 could remain the same during multiple AS-REQ/AS-REP exchanges and an
770 attacker which compromised the session key could fabricate his own
771 AS-REP messages with a pre-recorded pre-authenticator until the
772 client starts using a new Diffie-Hellman key pair and while the KDC
773 pre-authenticator has not yet expired. It is therefore not
774 recommended for KDC clients to also cache their Diffie-Hellman keys.
776 Care should be taken in how certificates are chosen for the purposes
777 of authentication using PKINIT. Some local policies may require
778 that key escrow be used for certain certificate types. Deployers of
779 PKINIT should be aware of the implications of using certificates that
780 have escrowed keys for the purposes of authentication.
782 PKINIT does not provide for a "return routability" test to prevent
783 attackers from mounting a denial-of-service attack on the KDC by
784 causing it to perform unnecessary and expensive public-key
785 operations. Strictly speaking, this is also true of standard
786 Kerberos, although the potential cost is not as great, because
787 standard Kerberos does not make use of public-key cryptography.
789 The syntax for the AD-INITIAL-VERIFIED-CAS authorization data does
790 permit empty SEQUENCEs to be encoded. Such empty sequences may only
791 be used if the KDC itself vouches for the user's certificate. [This
792 seems to reflect the consensus of the Kerberos working group.]
797 The following people have made significant contributions to this
798 draft: Ari Medvinsky, Matt Hur, John Wray, Jonathan Trostle, Nicolas
799 Williams, Tom Yu, Sam Hartman, and Jeff Hutzelman.
801 Some of the ideas on which this document is based arose during
802 discussions over several years between members of the SAAG, the IETF
803 CAT working group, and the PSRG, regarding integration of Kerberos
804 and SPX. Some ideas have also been drawn from the DASS system.
805 These changes are by no means endorsed by these groups. This is an
806 attempt to revive some of the goals of those groups, and this
807 document approaches those goals primarily from the Kerberos
808 perspective. Lastly, comments from groups working on similar ideas
809 in DCE have been invaluable.
814 This draft expires May 15, 2005.
819 [1] RFC-Editor: To be replaced by RFC number for
820 draft-ietf-krb-wg-kerberos-clarifications.
822 [2] R. Housley. Cryptographic Message Syntax. August 2002. Request
825 [3] W. Polk, R. Housley, and L. Bassham. Algorithms and Identifiers
826 for the Internet X.509 Public Key Infrastructure Certificate and
827 Certificate Revocation List (CRL) Profile, April 2002. Request For
830 [4] R. Housley, W. Polk, W. Ford, D. Solo. Internet X.509 Public
831 Key Infrastructure Certificate and Certificate Revocation List
832 (CRL) Profile, April 2002. Request for Comments 3280.
834 [5] B. Kaliski, J. Staddon. PKCS #1: RSA Cryptography
835 Specifications, October 1998. Request for Comments 2437.
837 [6] RFC-Editor: To be replaced by RFC number for
838 draft-ietf-krb-wg-crypto.
840 [7] S. Blake-Wilson, M. Nystrom, D. Hopwood, J. Mikkelsen, and
841 T. Wright. Transport Layer Security (TLS) Extensions, June 2003.
842 Request for Comments 3546.
844 [8] J. Schaad. Use of the Advanced Encryption Standard (AES)
845 Encryption Algorithm in Cryptographic Message Syntax (CMS). July
846 2003. Request for Comments 3565.
848 [9] NIST, Guidelines for Implementing and Using the NBS Encryption
849 Standard, April 1981. FIPS PUB 74.
851 [10] D. Harkins and D. Carrel. The Internet Key Exchange (IKE),
852 November 1998. Request for Comments 2409.
854 [11] K. Raeburn. Unkeyed SHA-1 Checksum Specification for Kerberos
855 5. Internet-Draft, draft-ietf-krb-wg-sha1-00.txt.
857 [12] S. Bradner. Key Words for Use in RFCs to Indicate Requirement
858 Levels. March 1997. Request for Comments 2119 (BCP 14).
860 [13] T. Kivinen, M. Kojo. More Modular Exponential (MODP) Diffie-
861 Hellman Groups for Internet Key Exchange (IKE). May 2003. Request
864 [14] R. Housley. Cryptographic Message Syntax (CMS) Algorithms.
865 August 2002. Request For Comments 3370.
872 USC Information Sciences Institute
873 4676 Admiralty Way Suite 1001
874 Marina del Rey CA 90292-6695
875 Phone: +1 310 822 1511
876 E-mail: {brian,bcn}@isi.edu
883 E-mail: smedvinsky@motorola.com
886 Appendix A. PKINIT ASN.1 Module
888 KerberosV5-PK-INIT-SPEC {
889 iso(1) identified-organization(3) dod(6) internet(1)
890 security(5) kerberosV5(2) modules(4) pkinit(TBD)
891 } DEFINITIONS EXPLICIT TAGS ::= BEGIN
894 SubjectPublicKeyInfo, AlgorithmIdentifier, Name
895 FROM PKIX1Explicit88 { iso (1) identified-organization (3)
896 dod (6) internet (1) security (5) mechanisms (5)
897 pkix (7) id-mod (0) id-pkix1-explicit (18) }
899 ContentInfo, IssuerAndSerialNumber
900 FROM CryptographicMessageSyntax { iso(1) member-body(2)
901 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16)
904 KerberosTime, Checksum, TYPED-DATA, PrincipalName, Realm, EncryptionKey
905 FROM KerberosV5Spec2 { iso(1) identified-organization(3)
906 dod(6) internet(1) security(5) kerberosV5(2) modules(4)
909 id-pkinit OBJECT IDENTIFIER ::=
910 { iso (1) org (3) dod (6) internet (1) security (5)
911 kerberosv5 (2) pkinit (3) }
913 id-pkdhkeydata OBJECT IDENTIFIER ::= { id-pkinit 1 }
914 id-pkdhkeydata OBJECT IDENTIFIER ::= { id-pkinit 2 }
915 id-pkrkeydata OBJECT IDENTIFIER ::= { id-pkinit 3 }
916 id-pkekuoid OBJECT IDENTIFIER ::= { id-pkinit 4 }
917 id-pkkdcekuoid OBJECT IDENTIFIER ::= { id-pkinit 5 }
919 pa-pk-as-req INTEGER ::= TBD
920 pa-pk-as-rep INTEGER ::= TBD
921 pa-pk-ocsp-req INTEGER ::= TBD
922 pa-pk-ocsp-rep INTEGER ::= TBD
924 ad-initial-verified-cas INTEGER ::= TBD
926 td-dh-parameters INTEGER ::= TBD
927 td-trusted-certifiers INTEGER ::= 104
928 td-certificate-index INTEGER ::= 105
930 WrapContentInfo ::= OCTET STRING (CONSTRAINED BY {
931 -- Contains a BER encoding of
935 WrapIssuerAndSerial ::= OCTET STRING (CONSTRAINED BY {
936 -- Contains a BER encoding of
937 -- IssuerAndSerialNumber
940 PA-PK-AS-REQ ::= SEQUENCE {
941 signedAuthPack [0] IMPLICIT WrapContentInfo,
942 trustedCertifiers [1] SEQUENCE OF TrustedCA OPTIONAL,
943 kdcCert [2] IMPLICIT WrapIssuerAndSerial
948 TrustedCA ::= CHOICE {
950 issuerAndSerial [2] IMPLICIT WrapIssuerAndSerial,
954 AuthPack ::= SEQUENCE {
955 pkAuthenticator [0] PKAuthenticator,
956 clientPublicValue [1] SubjectPublicKeyInfo OPTIONAL,
957 supportedCMSTypes [2] SEQUENCE OF AlgorithmIdentifier
962 PKAuthenticator ::= SEQUENCE {
963 cusec [0] INTEGER (0..999999),
964 ctime [1] KerberosTime,
965 nonce [2] INTEGER (0..4294967295),
966 paChecksum [3] OCTET STRING OPTIONAL,
970 KDCTrustedCertifiers ::= SEQUENCE OF Name
972 CertificateIndex ::= IssuerAndSerialNumber
974 KRB5PrincipalName ::= SEQUENCE {
976 principalName [1] PrincipalName
979 InitialVerifiedCAs ::= SEQUENCE OF SEQUENCE {
981 validated [1] BOOLEAN,
985 PA-PK-AS-REP ::= CHOICE {
986 dhSignedData [0] IMPLICIT WrapContentInfo,
987 encKeyPack [1] IMPLICIT WrapContentInfo,
991 KDCDHKeyInfo ::= SEQUENCE {
992 subjectPublicKey [0] BIT STRING,
993 nonce [1] INTEGER (0..4294967295),
994 dhKeyExpiration [2] KerberosTime OPTIONAL,
998 ReplyKeyPack ::= SEQUENCE {
999 replyKey [0] EncryptionKey,
1000 nonce [1] INTEGER (0..4294967295),
1006 Copyright (C) The Internet Society 2004. This document is subject
1007 to the rights, licenses and restrictions contained in BCP 78, and
1008 except as set forth therein, the authors retain all their rights.
1010 This document and the information contained herein are provided on
1011 an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE
1012 REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE
1013 INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR
1014 IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
1015 THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
1016 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.