upgrade
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@7969 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -1,589 +0,0 @@ | ||||
|  | ||||
| INTERNET-DRAFT                                         Clifford Neuman | ||||
| draft-ietf-cat-kerberos-pk-init-03.txt                      Brian Tung | ||||
| Updates: RFC 1510                                                  ISI | ||||
| expires September 30, 1997                                   John Wray | ||||
|                                          Digital Equipment Corporation | ||||
|                                                          Ari Medvinsky | ||||
|                                                            Matthew Hur | ||||
|                                                  CyberSafe Corporation | ||||
|                                                       Jonathan Trostle | ||||
|                                                                 Novell | ||||
|  | ||||
|  | ||||
|     Public Key Cryptography for Initial Authentication in Kerberos | ||||
|  | ||||
|  | ||||
| 0.  Status Of this Memo | ||||
|  | ||||
|     This document is an Internet-Draft.  Internet-Drafts are working | ||||
|     documents of the Internet Engineering Task Force (IETF), its | ||||
|     areas, and its working groups.  Note that other groups may also | ||||
|     distribute working documents as Internet-Drafts. | ||||
|  | ||||
|     Internet-Drafts are draft documents valid for a maximum of six | ||||
|     months and may be updated, replaced, or obsoleted by other | ||||
|     documents at any time.  It is inappropriate to use Internet-Drafts | ||||
|     as reference material or to cite them other than as "work in | ||||
|     progress." | ||||
|  | ||||
|     To learn the current status of any Internet-Draft, please check | ||||
|     the "1id-abstracts.txt" listing contained in the Internet-Drafts | ||||
|     Shadow Directories on ds.internic.net (US East Coast), | ||||
|     nic.nordu.net (Europe), ftp.isi.edu (US West Coast), or | ||||
|     munnari.oz.au (Pacific Rim). | ||||
|  | ||||
|     The distribution of this memo is unlimited.  It is filed as | ||||
|     draft-ietf-cat-kerberos-pk-init-03.txt, and expires September 30, | ||||
|     1997.  Please send comments to the authors. | ||||
|  | ||||
|  | ||||
| 1.  Abstract | ||||
|  | ||||
|     This document defines extensions (PKINIT) to the Kerberos protocol | ||||
|     specification (RFC 1510 [1]) to provide a method for using public | ||||
|     key cryptography during initial authentication.  The methods | ||||
|     defined specify the ways in which preauthentication data fields and | ||||
|     error data fields in Kerberos messages are to be used to transport | ||||
|     public key data. | ||||
|  | ||||
|  | ||||
| 2.  Introduction | ||||
|  | ||||
|     The popularity of public key cryptography has produced a desire for | ||||
|     its support in Kerberos [2].  The advantages provided by public key | ||||
|     cryptography include simplified key management (from the Kerberos | ||||
|     perspective) and the ability to leverage existing and developing | ||||
|     public key certification infrastructures. | ||||
|  | ||||
|     Public key cryptography can be integrated into Kerberos in a number | ||||
|     of ways.  One is to to associate a key pair with each realm, which | ||||
|     can then be used to facilitate cross-realm authentication; this is | ||||
|     the topic of another draft proposal.  Another way is to allow users | ||||
|     with public key certificates to use them in initial authentication. | ||||
|     This is the concern of the current document. | ||||
|  | ||||
|     One of the guiding principles in the design of PKINIT is that | ||||
|     changes should be as minimal as possible.  As a result, the basic | ||||
|     mechanism of PKINIT is as follows:  The user sends a request to the | ||||
|     KDC as before, except that if that user is to use public key | ||||
|     cryptography in the initial authentication step, his certificate | ||||
|     accompanies the initial request, in the preauthentication fields. | ||||
|  | ||||
|     Upon receipt of this request, the KDC verifies the certificate and | ||||
|     issues a ticket granting ticket (TGT) as before, except that instead | ||||
|     of being encrypted in the user's long-term key (which is derived | ||||
|     from a password), it is encrypted in a randomly-generated key.  This | ||||
|     random key is in turn encrypted using the public key certificate | ||||
|     that came with the request and signed using the KDC's signature key, | ||||
|     and accompanies the reply, in the preauthentication fields. | ||||
|  | ||||
|     PKINIT also allows for users with only digital signature keys to | ||||
|     authenticate using those keys, and for users to store and retrieve | ||||
|     private keys on the KDC. | ||||
|  | ||||
|     The PKINIT specification may also be used for direct peer to peer | ||||
|     authentication without contacting a central KDC. This application | ||||
|     of PKINIT is described in PKTAPP [4] and is based on concepts | ||||
|     introduced in [5, 6]. For direct client-to-server authentication, | ||||
|     the client uses PKINIT to authenticate to the end server (instead | ||||
|     of a central KDC), which then issues a ticket for itself.  This | ||||
|     approach has an advantage over SSL [7] in that the server does not | ||||
|     need to save state (cache session keys).  Furthermore, an | ||||
|     additional benefit is that Kerberos tickets can facilitate | ||||
|     delegation (see [8]). | ||||
|  | ||||
|  | ||||
| 3.  Proposed Extensions | ||||
|  | ||||
|     This section describes extensions to RFC 1510 for supporting the | ||||
|     use of public key cryptography in the initial request for a ticket | ||||
|     granting ticket (TGT). | ||||
|  | ||||
|     In summary, the following changes to RFC 1510 are proposed: | ||||
|  | ||||
|         --> Users may authenticate using either a public key pair or a | ||||
|             conventional (symmetric) key.  If public key cryptography is | ||||
|             used, public key data is transported in preauthentication | ||||
|             data fields to help establish identity. | ||||
|         --> Users may store private keys on the KDC for retrieval during | ||||
|             Kerberos initial authentication. | ||||
|  | ||||
|     This proposal addresses two ways that users may use public key | ||||
|     cryptography for initial authentication.  Users may present public | ||||
|     key certificates, or they may generate their own session key, | ||||
|     signed by their digital signature key.  In either case, the end | ||||
|     result is that the user obtains an ordinary TGT that may be used for | ||||
|     subsequent authentication, with such authentication using only | ||||
|     conventional cryptography. | ||||
|  | ||||
|     Section 3.1 provides definitions to help specify message formats. | ||||
|     Section 3.2 and 3.3 describe the extensions for the two initial | ||||
|     authentication methods.  Section 3.3 describes a way for the user to | ||||
|     store and retrieve his private key on the KDC. | ||||
|  | ||||
|  | ||||
| 3.1.  Definitions | ||||
|  | ||||
|     Hash and encryption types will be specified using ENCTYPE tags; we | ||||
|     propose the addition of the following types: | ||||
|  | ||||
|         #define ENCTYPE_SIGN_DSA_GENERATE   0x0011 | ||||
|         #define ENCTYPE_SIGN_DSA_VERIFY     0x0012 | ||||
|         #define ENCTYPE_ENCRYPT_RSA_PRIV    0x0021 | ||||
|         #define ENCTYPE_ENCRYPT_RSA_PUB     0x0022 | ||||
|  | ||||
|     allowing further signature types to be defined in the range 0x0011 | ||||
|     through 0x001f, and further encryption types to be defined in the | ||||
|     range 0x0021 through 0x002f. | ||||
|  | ||||
|     The extensions involve new preauthentication fields.  The | ||||
|     preauthentication data types are in the range 17 through 21. | ||||
|     These values are also specified along with their corresponding | ||||
|     ASN.1 definition. | ||||
|  | ||||
|         #define PA-PK-AS-REQ                17 | ||||
|         #define PA-PK-AS-REP                18 | ||||
|         #define PA-PK-AS-SIGN               19 | ||||
|         #define PA-PK-KEY-REQ               20 | ||||
|         #define PA-PK-KEY-REP               21 | ||||
|  | ||||
|     The extensions also involve new error types.  The new error types | ||||
|     are in the range 227 through 229.  They are: | ||||
|  | ||||
|         #define KDC_ERROR_CLIENT_NOT_TRUSTED    227 | ||||
|         #define KDC_ERROR_KDC_NOT_TRUSTED       228 | ||||
|         #define KDC_ERROR_INVALID_SIG           229 | ||||
|  | ||||
|     In the exposition below, we use the following terms: encryption key, | ||||
|     decryption key, signature key, verification key.  It should be | ||||
|     understood that encryption and verification keys are essentially | ||||
|     public keys, and decryption and signature keys are essentially | ||||
|     private keys.  The fact that they are logically distinct does | ||||
|     not preclude the assignment of bitwise identical keys. | ||||
|  | ||||
|  | ||||
| 3.2.  Standard Public Key Authentication | ||||
|  | ||||
|     Implementation of the changes in this section is REQUIRED for | ||||
|     compliance with pk-init. | ||||
|  | ||||
|     It is assumed that all public keys are signed by some certification | ||||
|     authority (CA).  The initial authentication request is sent as per | ||||
|     RFC 1510, except that a preauthentication field containing data | ||||
|     signed by the user's signature key accompanies the request: | ||||
|  | ||||
|     PA-PK-AS-REQ ::- SEQUENCE { | ||||
|                                 -- PA TYPE 17 | ||||
|         signedPKAuth            [0] SignedPKAuthenticator, | ||||
|         userCert                [1] SEQUENCE OF Certificate OPTIONAL, | ||||
|                                     -- the user's certificate | ||||
|                                     -- optionally followed by that | ||||
|                                     -- certificate's certifier chain | ||||
|         trustedCertifiers       [2] SEQUENCE OF PrincipalName OPTIONAL | ||||
|                                     -- CAs that the client trusts | ||||
|     } | ||||
|  | ||||
|     SignedPKAuthenticator ::= SEQUENCE { | ||||
|         pkAuth                  [0] PKAuthenticator, | ||||
|         pkAuthSig               [1] Signature, | ||||
|                                     -- of pkAuth | ||||
|                                     -- using user's signature key | ||||
|     } | ||||
|  | ||||
|     PKAuthenticator ::= SEQUENCE { | ||||
|         cusec                   [0] INTEGER, | ||||
|                                     -- for replay prevention | ||||
|         ctime                   [1] KerberosTime, | ||||
|                                     -- for replay prevention | ||||
|         nonce                   [2] INTEGER, | ||||
|                                     -- binds response to this request | ||||
|         kdcName                 [3] PrincipalName, | ||||
|         clientPubValue          [4] SubjectPublicKeyInfo OPTIONAL, | ||||
|                                     -- for Diffie-Hellman algorithm | ||||
|     } | ||||
|  | ||||
|     Signature ::= SEQUENCE { | ||||
|         signedHash              [0] EncryptedData | ||||
|                                     -- of type Checksum | ||||
|                                     -- encrypted under signature key | ||||
|     } | ||||
|  | ||||
|     Checksum ::=   SEQUENCE { | ||||
|         cksumtype               [0] INTEGER, | ||||
|         checksum                [1] OCTET STRING | ||||
|     }   -- as specified by RFC 1510 | ||||
|  | ||||
|     SubjectPublicKeyInfo ::= SEQUENCE { | ||||
|         algorithm               [0] algorithmIdentifier, | ||||
|         subjectPublicKey        [1] BIT STRING | ||||
|     }   -- as specified by the X.509 recommendation [9] | ||||
|  | ||||
|     Certificate ::= SEQUENCE { | ||||
|         CertType                [0] INTEGER, | ||||
|                                     -- type of certificate | ||||
|                                     -- 1 = X.509v3 (DER encoding) | ||||
|                                     -- 2 = PGP (per PGP draft) | ||||
|         CertData                [1] OCTET STRING | ||||
|                                     -- actual certificate | ||||
|                                     -- type determined by CertType | ||||
|     } | ||||
|  | ||||
|     Note: If the signature uses RSA keys, then it is to be performed | ||||
|     as per PKCS #1. | ||||
|  | ||||
|     The PKAuthenticator carries information to foil replay attacks, | ||||
|     to bind the request and response, and to optionally pass the | ||||
|     client's Diffie-Hellman public value (i.e. for using DSA in | ||||
|     combination with Diffie-Hellman).  The PKAuthenticator is signed | ||||
|     with the private key corresponding to the public key in the | ||||
|     certificate found in userCert (or cached by the KDC). | ||||
|  | ||||
|     In the PKAuthenticator, the client may specify the KDC name in one | ||||
|     of two ways: 1) a Kerberos principal name, or 2) the name in the | ||||
|     KDC's certificate (e.g., an X.500 name, or a PGP name).  Note that | ||||
|     case #1 requires that the certificate name and the Kerberos principal | ||||
|     name be bound together (e.g., via an X.509v3 extension). | ||||
|  | ||||
|     The userCert field is a sequence of certificates, the first of which | ||||
|     must be the user's public key certificate. Any subsequent | ||||
|     certificates will be certificates of the certifiers of the user's | ||||
|     certificate.  These cerificates may be used by the KDC to verify the | ||||
|     user's public key.  This field is empty if the KDC already has the | ||||
|     user's certifcate. | ||||
|  | ||||
|     The trustedCertifiers field contains a list of certification | ||||
|     authorities trusted by the client, in the case that the client does | ||||
|     not possess the KDC's public key certificate. | ||||
|  | ||||
|     Upon receipt of the AS_REQ with PA-PK-AS-REQ pre-authentication | ||||
|     type, the KDC attempts to verify the user's certificate chain | ||||
|     (userCert), if one is provided in the request.  This is done by | ||||
|     verifying the certification path against the KDC's policy of | ||||
|     legitimate certifiers.  This may be based on a certification | ||||
|     hierarchy, or it may be simply a list of recognized certifiers in a | ||||
|     system like PGP.  If the certification path does not match one of | ||||
|     the KDC's trusted certifiers, the KDC sends back an error message of | ||||
|     type KDC_ERROR_CLIENT_NOT_TRUSTED, and it includes in the error data | ||||
|     field a list of its own trusted certifiers, upon which the client | ||||
|     resends the request. | ||||
|  | ||||
|     If  trustedCertifiers is provided in the PA-PK-AS-REQ, the KDC | ||||
|     verifies that it has a certificate issued by one of the certifiers | ||||
|     trusted by the client.  If it does not have a suitable certificate, | ||||
|     the KDC returns an error message of type KDC_ERROR_KDC_NOT_TRUSTED | ||||
|     to the client.  | ||||
|  | ||||
|     If a trust relationship exists, the KDC then verifies the client's | ||||
|     signature on PKAuthenticator.  If that fails, the KDC returns an | ||||
|     error message of type KDC_ERROR_INVALID_SIG.  Otherwise, the KDC | ||||
|     uses the timestamp in the PKAuthenticator to assure that the request | ||||
|     is not a replay.   The KDC also verifies that its name is specified | ||||
|     in PKAuthenticator. | ||||
|  | ||||
|     Assuming no errors, the KDC replies as per RFC 1510, except that it | ||||
|     encrypts the reply not with the user's key, but with a random key | ||||
|     generated only for this particular response.  This random key | ||||
|     is sealed in the preauthentication field: | ||||
|  | ||||
|     PA-PK-AS-REP ::= SEQUENCE { | ||||
|                                -- PA TYPE 18 | ||||
|         kdcCert                 [0] SEQUENCE OF Certificate OPTIONAL, | ||||
|                                     -- the KDC's certificate | ||||
|                                     -- optionally followed by that | ||||
|                                     -- certificate's certifier chain | ||||
|         encPaReply              [1] EncryptedData, | ||||
|                                     -- of type PaReply | ||||
|                                     -- using either the client public | ||||
|                                     -- key or the Diffie-Hellman key | ||||
|                                     -- specified by SignedDHPublicValue | ||||
|         signedDHPublicValue     [2] SignedDHPublicValue OPTIONAL | ||||
|     } | ||||
|  | ||||
|  | ||||
|     PaReply ::= SEQUENCE { | ||||
|         replyEncKeyPack         [0] ReplyEncKeyPack, | ||||
|         replyEncKeyPackSig      [1] Signature, | ||||
|                                     -- of replyEncKeyPack | ||||
|                                     -- using KDC's signature key | ||||
|     } | ||||
|  | ||||
|     ReplyEncKeyPack ::= SEQUENCE { | ||||
|         replyEncKey             [0] EncryptionKey, | ||||
|                                     -- used to encrypt main reply | ||||
|         nonce                   [1] INTEGER | ||||
|                                     -- binds response to the request | ||||
|                                     -- passed in the PKAuthenticator | ||||
|     } | ||||
|  | ||||
|     SignedDHPublicValue ::= SEQUENCE { | ||||
|         dhPublicValue           [0] SubjectPublicKeyInfo, | ||||
|         dhPublicValueSig        [1] Signature | ||||
|                                     -- of dhPublicValue | ||||
|                                     -- using KDC's signature key | ||||
|     } | ||||
|  | ||||
|     The kdcCert field is a sequence of certificates, the first of which | ||||
|     must have as its root certifier one of the certifiers sent to the | ||||
|     KDC in the PA-PK-AS-REQ. Any subsequent certificates will be  | ||||
|     certificates of the certifiers of the KDC's certificate.  These | ||||
|     cerificates may be used by the client to verify the KDC's public | ||||
|     key.  This field is empty if the client did not send to the KDC a | ||||
|     list of trusted certifiers (the trustedCertifiers field was empty). | ||||
|      | ||||
|     Since each certifier in the certification path of a user's | ||||
|     certificate is essentially a separate realm, the name of each | ||||
|     certifier shall be added to the transited field of the ticket.  The | ||||
|     format of these realm names shall follow the naming constraints set | ||||
|     forth in RFC 1510 (sections 7.1 and 3.3.3.1).  Note that this will | ||||
|     require new nametypes to be defined for PGP certifiers and other | ||||
|     types of realms as they arise. | ||||
|  | ||||
|     The KDC's certificate must bind the public key to a name derivable | ||||
|     from the name of the realm for that KDC.  The client then extracts | ||||
|     the random key used to encrypt the main reply.  This random key (in | ||||
|     encPaReply) is encrypted with either the client's public key or | ||||
|     with a key derived from the DH values exchanged between the client | ||||
|     and the KDC. | ||||
|  | ||||
|  | ||||
| 3.3.  Digital Signature | ||||
|  | ||||
|     Implementation of the changes in this section are OPTIONAL for | ||||
|     compliance with pk-init. | ||||
|  | ||||
|     We offer this option with the warning that it requires the client to | ||||
|     generate a random key; the client may not be able to guarantee the | ||||
|     same level of randomness as the KDC. | ||||
|  | ||||
|     If the user registered a digital signature key with the KDC instead | ||||
|     of an encryption key, then a separate exchange must be used.  The | ||||
|     client sends a request for a TGT as usual, except that it (rather | ||||
|     than the KDC) generates the random key that will be used to encrypt | ||||
|     the KDC response.  This key is sent to the KDC along with the | ||||
|     request in a preauthentication field: | ||||
|  | ||||
|     PA-PK-AS-SIGN ::= SEQUENCE { | ||||
|                                 -- PA TYPE 19 | ||||
|         encSignedKeyPack        [0] EncryptedData | ||||
|                                     -- of SignedKeyPack | ||||
|                                     -- using the KDC's public key | ||||
|     } | ||||
|  | ||||
|     SignedKeyPack ::= SEQUENCE { | ||||
|         signedKey               [0] KeyPack, | ||||
|         signedKeyAuth           [1] PKAuthenticator, | ||||
|         signedKeySig            [2] Signature | ||||
|                                     -- of signedKey.signedKeyAuth | ||||
|                                     -- using user's signature key | ||||
|     } | ||||
|  | ||||
|     KeyPack ::= SEQUENCE { | ||||
|         randomKey               [0] EncryptionKey, | ||||
|                                     -- will be used to encrypt reply | ||||
|         nonce                   [1] INTEGER | ||||
|     } | ||||
|  | ||||
|     where the nonce is copied from the request. | ||||
|  | ||||
|     Upon receipt of the PA-PK-AS-SIGN, the KDC decrypts then verifies | ||||
|     the randomKey.  It then replies as per RFC 1510, except that the | ||||
|     reply is encrypted not with a password-derived user key, but with | ||||
|     the randomKey sent in the request.  Since the client already knows | ||||
|     this key, there is no need to accompany the reply with an extra | ||||
|     preauthentication field.  The transited field of the ticket should | ||||
|     specify the certification path as described in Section 3.2. | ||||
|  | ||||
|  | ||||
| 3.4.  Retrieving the Private Key From the KDC | ||||
|  | ||||
|     Implementation of the changes in this section is RECOMMENDED for | ||||
|     compliance with pk-init. | ||||
|  | ||||
|     When the user's private key is not stored local to the user, he may | ||||
|     choose to store the private key (normally encrypted using a | ||||
|     password-derived key) on the KDC.  We provide this option to present | ||||
|     the user with an alternative to storing the private key on local | ||||
|     disk at each machine where he expects to authenticate himself using | ||||
|     pk-init.  It should be noted that it replaces the added risk of | ||||
|     long-term storage of the private key on possibly many workstations | ||||
|     with the added risk of storing the private key on the KDC in a | ||||
|     form vulnerable to brute-force attack. | ||||
|  | ||||
|     In order to obtain a private key, the client includes a | ||||
|     preauthentication field with the AS-REQ message: | ||||
|  | ||||
|     PA-PK-KEY-REQ ::= SEQUENCE { | ||||
|                                 -- PA TYPE 20 | ||||
|         patimestamp             [0] KerberosTime OPTIONAL,  | ||||
|                                     -- used to address replay attacks. | ||||
|         pausec                  [1] INTEGER OPTIONAL, | ||||
|                                     -- used to address replay attacks. | ||||
|         nonce                   [2] INTEGER, | ||||
|                                     -- binds the reply to this request | ||||
|         privkeyID               [3] SEQUENCE OF KeyID OPTIONAL | ||||
|                                     -- constructed as a hash of | ||||
|                                     -- public key corresponding to | ||||
|                                     -- desired private key | ||||
|     } | ||||
|  | ||||
|     KeyID ::= SEQUENCE { | ||||
|         KeyIdentifier           [0] OCTET STRING | ||||
|     } | ||||
|  | ||||
|     The client may request a specific private key by sending the | ||||
|     corresponding ID.  If this field is left empty, then all | ||||
|     private keys are returned. | ||||
|  | ||||
|     If all checks out, the KDC responds as described in the above | ||||
|     sections, except that an additional preauthentication field, | ||||
|     containing the user's private key, accompanies the reply: | ||||
|  | ||||
|     PA-PK-KEY-REP ::= SEQUENCE { | ||||
|                                 -- PA TYPE 21 | ||||
|         nonce                   [0] INTEGER, | ||||
|                                     -- binds the reply to the request | ||||
|         KeyData                 [1] SEQUENCE OF KeyPair | ||||
|     } | ||||
|  | ||||
|     KeyPair ::= SEQUENCE { | ||||
|         privKeyID               [0] OCTET STRING, | ||||
|                                     -- corresponding to encPrivKey | ||||
|         encPrivKey              [1] OCTET STRING | ||||
|     } | ||||
|  | ||||
|  | ||||
| 3.4.1.  Additional Protection of Retrieved Private Keys | ||||
|  | ||||
|     We solicit discussion on the following proposal: that the client may | ||||
|     optionally include in its request additional data to encrypt the | ||||
|     private key, which is currently only protected by the user's | ||||
|     password.  One possibility is that the client might generate a | ||||
|     random string of bits, encrypt it with the public key of the KDC (as | ||||
|     in the SignedKeyPack, but with an ordinary OCTET STRING in place of | ||||
|     an EncryptionKey), and include this with the request.  The KDC then | ||||
|     XORs each returned key with this random bit string.  (If the bit | ||||
|     string is too short, the KDC could either return an error, or XOR | ||||
|     the returned key with a repetition of the bit string.) | ||||
|  | ||||
|     In order to make this work, additional means of preauthentication | ||||
|     need to be devised in order to prevent attackers from simply | ||||
|     inserting their own bit string.  One way to do this is to store | ||||
|     a hash of the password-derived key (the one used to encrypt the | ||||
|     private key).  This hash is then used in turn to derive a second | ||||
|     key (called the hash-key); the hash-key is used to encrypt an ASN.1 | ||||
|     structure containing the generated bit string and a nonce value | ||||
|     that binds it to the request. | ||||
|  | ||||
|     Since the KDC possesses the hash, it can generate the hash-key and | ||||
|     verify this (weaker) preauthentication, and yet cannot reproduce | ||||
|     the private key itself, since the hash is a one-way function. | ||||
|  | ||||
|  | ||||
| 4.  Logistics and Policy Issues | ||||
|  | ||||
|     We solicit discussion on how clients and KDCs should be configured | ||||
|     in order to determine which of the options described above (if any) | ||||
|     should be used.  One possibility is to set the user's database | ||||
|     record to indicate that authentication is to use public key | ||||
|     cryptography; this will not work, however, in the event that the | ||||
|     client needs to know before making the initial request. | ||||
|  | ||||
| 5.  Compatibility with One-Time Passcodes | ||||
|  | ||||
|     We solicit discussion on how the protocol changes proposed in this | ||||
|     draft will interact with the proposed use of one-time passcodes | ||||
|     discussed in draft-ietf-cat-kerberos-passwords-00.txt. | ||||
|  | ||||
|  | ||||
| 6.  Strength of Cryptographic Schemes | ||||
|  | ||||
|     In light of recent findings on the strength of MD5 and DES, | ||||
|     we solicit discussion on which encryption types to incorporate | ||||
|     into the protocol changes. | ||||
|  | ||||
|  | ||||
| 7.  Bibliography | ||||
|  | ||||
|     [1] J. Kohl, C. Neuman.  The Kerberos Network Authentication | ||||
|     Service (V5).  Request for Comments: 1510 | ||||
|  | ||||
|     [2] B.C. Neuman, Theodore Ts'o. Kerberos: An Authentication Service | ||||
|     for Computer Networks, IEEE Communications, 32(9):33-38. | ||||
|     September 1994. | ||||
|  | ||||
|     [3] A. Medvinsky, M. Hur.  Addition of Kerberos Cipher Suites to | ||||
|     Transport Layer Security (TLS). | ||||
|     draft-ietf-tls-kerb-cipher-suites-00.txt | ||||
|  | ||||
|     [4] A. Medvinsky, M. Hur, B. Clifford Neuman.  Public Key Utilizing | ||||
|     Tickets for Application Servers (PKTAPP). | ||||
|     draft-ietf-cat-pktapp-00.txt | ||||
|  | ||||
|     [5] M. Sirbu, J. Chuang.  Distributed Authentication in Kerberos Using  | ||||
|     Public Key Cryptography.  Symposium On Network and Distributed System  | ||||
|     Security, 1997. | ||||
|  | ||||
|     [6] B. Cox, J.D. Tygar, M. Sirbu.  NetBill Security and Transaction  | ||||
|     Protocol.  In Proceedings of the USENIX Workshop on Electronic Commerce, | ||||
|     July 1995. | ||||
|  | ||||
|     [7] Alan O. Freier, Philip Karlton and Paul C. Kocher. | ||||
|     The SSL Protocol, Version 3.0 - IETF Draft.  | ||||
|  | ||||
|     [8] B.C. Neuman, Proxy-Based Authorization and Accounting for  | ||||
|     Distributed Systems.  In Proceedings of the 13th International  | ||||
|     Conference on Distributed Computing Systems, May 1993 | ||||
|  | ||||
|     [9] ITU-T (formerly CCITT) | ||||
|     Information technology - Open Systems Interconnection - | ||||
|     The Directory: Authentication Framework Recommendation X.509 | ||||
|     ISO/IEC 9594-8 | ||||
|  | ||||
|  | ||||
| 8.  Acknowledgements | ||||
|  | ||||
|     Some of the ideas on which this proposal is based arose during | ||||
|     discussions over several years between members of the SAAG, the IETF | ||||
|     CAT working group, and the PSRG, regarding integration of Kerberos | ||||
|     and SPX.  Some ideas have also been drawn from the DASS system. | ||||
|     These changes are by no means endorsed by these groups.  This is an | ||||
|     attempt to revive some of the goals of those groups, and this | ||||
|     proposal approaches those goals primarily from the Kerberos | ||||
|     perspective.  Lastly, comments from groups working on similar ideas | ||||
|     in DCE have been invaluable. | ||||
|  | ||||
|  | ||||
| 9.  Expiration Date | ||||
|  | ||||
|     This draft expires September 30, 1997. | ||||
|  | ||||
|  | ||||
| 10.  Authors | ||||
|  | ||||
|     Clifford Neuman | ||||
|     Brian Tung | ||||
|     USC Information Sciences Institute | ||||
|     4676 Admiralty Way Suite 1001 | ||||
|     Marina del Rey CA 90292-6695 | ||||
|     Phone: +1 310 822 1511 | ||||
|     E-mail: {bcn, brian}@isi.edu | ||||
|  | ||||
|     John Wray | ||||
|     Digital Equipment Corporation | ||||
|     550 King Street, LKG2-2/Z7 | ||||
|     Littleton, MA 01460 | ||||
|     Phone: +1 508 486 5210 | ||||
|     E-mail: wray@tuxedo.enet.dec.com | ||||
|  | ||||
|     Ari Medvinsky | ||||
|     Matthew Hur | ||||
|     CyberSafe Corporation | ||||
|     1605 NW Sammamish Road Suite 310 | ||||
|     Issaquah WA 98027-5378 | ||||
|     Phone: +1 206 391 6000 | ||||
|     E-mail: {ari.medvinsky, matt.hur}@cybersafe.com | ||||
|  | ||||
|     Jonathan Trostle | ||||
|     Novell | ||||
|     E-mail: jonathan.trostle@novell.com | ||||
							
								
								
									
										958
									
								
								doc/standardisation/draft-ietf-cat-kerberos-pk-init-10.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										958
									
								
								doc/standardisation/draft-ietf-cat-kerberos-pk-init-10.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,958 @@ | ||||
| INTERNET-DRAFT                                                Brian Tung | ||||
| draft-ietf-cat-kerberos-pk-init-10.txt                   Clifford Neuman | ||||
| Updates: RFC 1510                                                    ISI | ||||
| expires April 30, 2000                                       Matthew Hur | ||||
|                                                    CyberSafe Corporation | ||||
|                                                            Ari Medvinsky | ||||
|                                                                   Excite | ||||
|                                                          Sasha Medvinsky | ||||
|                                                       General Instrument | ||||
|                                                                John Wray | ||||
|                                                    Iris Associates, Inc. | ||||
|                                                         Jonathan Trostle | ||||
|                                                                    Cisco | ||||
|  | ||||
|     Public Key Cryptography for Initial Authentication in Kerberos | ||||
|  | ||||
| 0.  Status Of This Memo | ||||
|  | ||||
|     This document is an Internet-Draft and is in full conformance with | ||||
|     all provisions of Section 10 of RFC 2026.  Internet-Drafts are | ||||
|     working documents of the Internet Engineering Task Force (IETF), | ||||
|     its areas, and its working groups.  Note that other groups may also | ||||
|     distribute working documents as Internet-Drafts. | ||||
|  | ||||
|     Internet-Drafts are draft documents valid for a maximum of six | ||||
|     months and may be updated, replaced, or obsoleted by other | ||||
|     documents at any time.  It is inappropriate to use Internet-Drafts | ||||
|     as reference material or to cite them other than as "work in | ||||
|     progress." | ||||
|  | ||||
|     The list of current Internet-Drafts can be accessed at | ||||
|     http://www.ietf.org/ietf/1id-abstracts.txt | ||||
|  | ||||
|     The list of Internet-Draft Shadow Directories can be accessed at | ||||
|     http://www.ietf.org/shadow.html. | ||||
|  | ||||
|     To learn the current status of any Internet-Draft, please check | ||||
|     the "1id-abstracts.txt" listing contained in the Internet-Drafts | ||||
|     Shadow Directories on ftp.ietf.org (US East Coast), | ||||
|     nic.nordu.net (Europe), ftp.isi.edu (US West Coast), or | ||||
|     munnari.oz.au (Pacific Rim). | ||||
|  | ||||
|     The distribution of this memo is unlimited.  It is filed as | ||||
|     draft-ietf-cat-kerberos-pk-init-10.txt, and expires April 30, | ||||
|     2000.  Please send comments to the authors. | ||||
|  | ||||
| 1.  Abstract | ||||
|  | ||||
|     This document defines extensions (PKINIT) to the Kerberos protocol | ||||
|     specification (RFC 1510 [1]) to provide a method for using public | ||||
|     key cryptography during initial authentication.  The methods | ||||
|     defined specify the ways in which preauthentication data fields and | ||||
|     error data fields in Kerberos messages are to be used to transport | ||||
|     public key data. | ||||
|  | ||||
| 2.  Introduction | ||||
|  | ||||
|     The popularity of public key cryptography has produced a desire for | ||||
|     its support in Kerberos [2].  The advantages provided by public key | ||||
|     cryptography include simplified key management (from the Kerberos | ||||
|     perspective) and the ability to leverage existing and developing | ||||
|     public key certification infrastructures. | ||||
|  | ||||
|     Public key cryptography can be integrated into Kerberos in a number | ||||
|     of ways.  One is to associate a key pair with each realm, which can | ||||
|     then be used to facilitate cross-realm authentication; this is the | ||||
|     topic of another draft proposal.  Another way is to allow users with | ||||
|     public key certificates to use them in initial authentication.  This | ||||
|     is the concern of the current document. | ||||
|  | ||||
|     PKINIT utilizes ephemeral-ephemeral Diffie-Hellman keys in | ||||
|     combination with digital signature keys as the primary, required | ||||
|     mechanism.  It also allows for the use of RSA keys and/or (static) | ||||
|     Diffie-Hellman certificates.  Note in particular that PKINIT supports | ||||
|     the use of separate signature and encryption keys. | ||||
|  | ||||
|     PKINIT enables access to Kerberos-secured services based on initial | ||||
|     authentication utilizing public key cryptography.  PKINIT utilizes | ||||
|     standard public key signature and encryption data formats within the | ||||
|     standard Kerberos messages.  The basic mechanism is as follows:  The | ||||
|     user sends an AS-REQ message to the KDC as before, except that if that | ||||
|     user is to use public key cryptography in the initial authentication | ||||
|     step, his certificate and a signature accompany the initial request | ||||
|     in the preauthentication fields.  Upon receipt of this request, the | ||||
|     KDC verifies the certificate and issues a ticket granting ticket | ||||
|     (TGT) as before, except that the encPart from the AS-REP message | ||||
|     carrying the TGT is now encrypted utilizing either a Diffie-Hellman | ||||
|     derived key or the user's public key.  This message is authenticated | ||||
|     utilizing the public key signature of the KDC. | ||||
|  | ||||
|     Note that PKINIT does not require the use of certificates.  A KDC | ||||
|     may store the public key of a principal as part of that principal's | ||||
|     record.  In this scenario, the KDC is the trusted party that vouches | ||||
|     for the principal (as in a standard, non-cross realm, Kerberos | ||||
|     environment).  Thus, for any principal, the KDC may maintain a | ||||
|     secret key, a public key, or both. | ||||
|  | ||||
|     The PKINIT specification may also be used as a building block for | ||||
|     other specifications.  PKCROSS [3] utilizes PKINIT for establishing | ||||
|     the inter-realm key and associated inter-realm policy to be applied | ||||
|     in issuing cross realm service tickets.  As specified in [4], | ||||
|     anonymous Kerberos tickets can be issued by applying a NULL | ||||
|     signature in combination with Diffie-Hellman in the PKINIT exchange. | ||||
|     Additionally, the PKINIT specification may be used for direct peer | ||||
|     to peer authentication without contacting a central KDC. This | ||||
|     application of PKINIT is described in PKTAPP [5] and is based on | ||||
|     concepts introduced in [6, 7]. For direct client-to-server | ||||
|     authentication, the client uses PKINIT to authenticate to the end | ||||
|     server (instead of a central KDC), which then issues a ticket for | ||||
|     itself.  This approach has an advantage over TLS [8] in that the | ||||
|     server does not need to save state (cache session keys). | ||||
|     Furthermore, an additional benefit is that Kerberos tickets can | ||||
|     facilitate delegation (see [9]). | ||||
|  | ||||
| 3.  Proposed Extensions | ||||
|  | ||||
|     This section describes extensions to RFC 1510 for supporting the | ||||
|     use of public key cryptography in the initial request for a ticket | ||||
|     granting ticket (TGT). | ||||
|  | ||||
|     In summary, the following change to RFC 1510 is proposed: | ||||
|  | ||||
|         * Users may authenticate using either a public key pair or a | ||||
|           conventional (symmetric) key.  If public key cryptography is | ||||
|           used, public key data is transported in preauthentication | ||||
|           data fields to help establish identity.  The user presents | ||||
|           a public key certificate and obtains an ordinary TGT that may | ||||
|           be used for subsequent authentication, with such | ||||
|           authentication using only conventional cryptography. | ||||
|  | ||||
|     Section 3.1 provides definitions to help specify message formats. | ||||
|     Section 3.2 describes the extensions for the initial authentication | ||||
|     method. | ||||
|  | ||||
| 3.1.  Definitions | ||||
|  | ||||
|     The extensions involve new preauthentication fields; we introduce | ||||
|     the following preauthentication types: | ||||
|  | ||||
|         PA-PK-AS-REQ                            14 | ||||
|         PA-PK-AS-REP                            15 | ||||
|  | ||||
|     The extensions also involve new error types; we introduce the | ||||
|     following types: | ||||
|  | ||||
|         KDC_ERR_CLIENT_NOT_TRUSTED              62 | ||||
|         KDC_ERR_KDC_NOT_TRUSTED                 63 | ||||
|         KDC_ERR_INVALID_SIG                     64 | ||||
|         KDC_ERR_KEY_TOO_WEAK                    65 | ||||
|         KDC_ERR_CERTIFICATE_MISMATCH            66 | ||||
|         KDC_ERR_CANT_VERIFY_CERTIFICATE         70 | ||||
|         KDC_ERR_INVALID_CERTIFICATE             71 | ||||
|         KDC_ERR_REVOKED_CERTIFICATE             72 | ||||
|         KDC_ERR_REVOCATION_STATUS_UNKNOWN       73 | ||||
|         KDC_ERR_REVOCATION_STATUS_UNAVAILABLE   74 | ||||
|         KDC_ERR_CLIENT_NAME_MISMATCH            75 | ||||
|         KDC_ERR_KDC_NAME_MISMATCH               76 | ||||
|  | ||||
|     We utilize the following typed data for errors: | ||||
|  | ||||
|         TD-PKINIT-CMS-CERTIFICATES             101 | ||||
|         TD-KRB-PRINCIPAL                       102 | ||||
|         TD-KRB-REALM                           103 | ||||
|         TD-TRUSTED-CERTIFIERS                  104 | ||||
|         TD-CERTIFICATE-INDEX                   105 | ||||
|  | ||||
|     We utilize the following encryption types (which map directly to | ||||
|     OIDs): | ||||
|  | ||||
|         dsaWithSHA1-CmsOID                       9 | ||||
|         md5WithRSAEncryption-CmsOID             10 | ||||
|         sha1WithRSAEncryption-CmsOID            11 | ||||
|         rc2CBC-EnvOID                           12 | ||||
|         rsaEncryption-EnvOID (PKCS#1 v1.5)      13 | ||||
|         rsaES-OAEP-ENV-OID   (PKCS#1 v2.0)      14 | ||||
|         des-ede3-cbc-Env-OID                    15 | ||||
|  | ||||
|     These mappings are provided so that a client may send the | ||||
|     appropriate enctypes in the AS-REQ message in order to indicate | ||||
|     support for the corresponding OIDs (for performing PKINIT). | ||||
|  | ||||
|     In many cases, PKINIT requires the encoding of the X.500 name of a | ||||
|     certificate authority as a Realm.  When such a name appears as | ||||
|     a ream it will be represented using the "other" form of the realm | ||||
|     name as specified in the naming constraints section of RFC1510. | ||||
|     For a realm derived from an X.500 name, NAMETYPE will have the value | ||||
|     X500-RFC2253.  The full realm name will appear as follows: | ||||
|  | ||||
|         <nametype> + ":" + <string> | ||||
|  | ||||
|     where nametype is "X500-RFC2253" and string is the result of doing | ||||
|     an RFC2253 encoding of the distinguished name, i.e. | ||||
|  | ||||
|         "X500-RFC2253:" + RFC2253Encode(DistinguishedName) | ||||
|  | ||||
|     where DistinguishedName is an X.500 name, and RFC2253Encode is a | ||||
|     function returing a readable UTF encoding of an X.500 name, as | ||||
|     defined by RFC 2253 [14] (part of LDAPv3 [18]). | ||||
|  | ||||
|     To ensure that this encoding is unique, we add the following rule | ||||
|     to those specified by RFC 2253: | ||||
|  | ||||
|         The order in which the attributes appear in the RFC 2253 | ||||
|         encoding must be the reverse of the order in the ASN.1 | ||||
|         encoding of the X.500 name that appears in the public key | ||||
|         certificate. The order of the relative distinguished names | ||||
|         (RDNs), as well as the order of the AttributeTypeAndValues | ||||
|         within each RDN, will be reversed. (This is despite the fact | ||||
|         that an RDN is defined as a SET of AttributeTypeAndValues, where | ||||
|         an order is normally not important.) | ||||
|  | ||||
|     Similarly, in cases where the KDC does not provide a specific | ||||
|     policy based mapping from the X.500 name or X.509 Version 3 | ||||
|     SubjectAltName extension in the user's certificate to a Kerberos | ||||
|     principal name, PKINIT requires the direct encoding of the X.500 | ||||
|     name as a PrincipalName.  In this case, the name-type of the | ||||
|     principal name shall be set to KRB_NT-X500-PRINCIPAL.  This new | ||||
|     name type is defined in RFC 1510 as: | ||||
|  | ||||
|         KRB_NT_X500_PRINCIPAL    6 | ||||
|  | ||||
|     The name-string shall be set as follows: | ||||
|  | ||||
|         RFC2253Encode(DistinguishedName) | ||||
|  | ||||
|     as described above.  When this name type is used, the principal's | ||||
|     realm shall be set to the certificate authority's distinguished | ||||
|     name using the X500-RFC2253 realm name format described earlier in | ||||
|     this section | ||||
|  | ||||
|     RFC 1510 specifies the ASN.1 structure for PrincipalName as follows: | ||||
|  | ||||
|         PrincipalName ::=   SEQUENCE { | ||||
|                         name-type[0]     INTEGER, | ||||
|                         name-string[1]   SEQUENCE OF GeneralString | ||||
|         } | ||||
|  | ||||
|     For the purposes of encoding an X.500 name within this structure, | ||||
|     the name-string shall be encoded as a single GeneralString. | ||||
|  | ||||
|     Note that name mapping may be required or optional based on | ||||
|     policy.  All names must conform to validity requirements as given | ||||
|     in RFC 1510. | ||||
|  | ||||
| 3.1.1.  Encryption and Key Formats | ||||
|  | ||||
|     In the exposition below, we use the terms public key and private | ||||
|     key generically.  It should be understood that the term "public | ||||
|     key" may be used to refer to either a public encryption key or a | ||||
|     signature verification key, and that the term "private key" may be | ||||
|     used to refer to either a private decryption key or a signature | ||||
|     generation key.  The fact that these are logically distinct does | ||||
|     not preclude the assignment of bitwise identical keys for RSA | ||||
|     keys. | ||||
|  | ||||
|     In the case of Diffie-Hellman, the key shall be produced from the | ||||
|     agreed bit string as follows: | ||||
|  | ||||
|         * Truncate the bit string to the appropriate length. | ||||
|         * Rectify parity in each byte (if necessary) to obtain the key. | ||||
|  | ||||
|     For instance, in the case of a DES key, we take the first eight | ||||
|     bytes of the bit stream, and then adjust the least significant bit | ||||
|     of each byte to ensure that each byte has odd parity. | ||||
|  | ||||
| 3.1.2. Algorithm Identifiers | ||||
|  | ||||
|     PKINIT does not define, but does permit, the algorithm identifiers | ||||
|     listed below. | ||||
|  | ||||
| 3.1.2.1. Signature Algorithm Identifiers | ||||
|  | ||||
|     The following signature algorithm identifiers specified in [11] and | ||||
|     in [15] shall be used with PKINIT: | ||||
|  | ||||
|     id-dsa-with-sha1       (DSA with SHA1) | ||||
|     md5WithRSAEncryption   (RSA with MD5) | ||||
|     sha-1WithRSAEncryption (RSA with SHA1) | ||||
|  | ||||
| 3.1.2.2 Diffie-Hellman Key Agreement Algorithm Identifier | ||||
|  | ||||
|     The following algorithm identifier shall be used within the | ||||
|     SubjectPublicKeyInfo data structure: dhpublicnumber | ||||
|  | ||||
|     This identifier and the associated algorithm parameters are | ||||
|     specified in RFC 2459 [15]. | ||||
|  | ||||
| 3.1.2.3. Algorithm Identifiers for RSA Encryption | ||||
|  | ||||
|     These algorithm identifiers are used inside the EnvelopedData data | ||||
|     structure, for encrypting the temporary key with a public key: | ||||
|  | ||||
|         rsaEncryption (RSA encryption, PKCS#1 v1.5) | ||||
|         id-RSAES-OAEP (RSA encryption, PKCS#1 v2.0) | ||||
|  | ||||
|     Both of the above RSA encryption schemes are specified in [16]. | ||||
|     Currently, only PKCS#1 v1.5 is specified by CMS [11], although the | ||||
|     CMS specification says that it will likely include PKCS#1 v2.0 in | ||||
|     the future.  (PKCS#1 v2.0 addresses adaptive chosen ciphertext | ||||
|     vulnerability discovered in PKCS#1 v1.5.) | ||||
|  | ||||
| 3.1.2.4. Algorithm Identifiers for Encryption with Secret Keys | ||||
|  | ||||
|     These algorithm identifiers are used inside the EnvelopedData data | ||||
|     structure in the PKINIT Reply, for encrypting the reply key with the | ||||
|     temporary key: | ||||
|         des-ede3-cbc (3-key 3-DES, CBC mode) | ||||
|         rc2-cbc      (RC2, CBC mode) | ||||
|  | ||||
|     The full definition of the above algorithm identifiers and their | ||||
|     corresponding parameters (an IV for block chaining) is provided in | ||||
|     the CMS specification [11]. | ||||
|  | ||||
| 3.2.  Public Key Authentication | ||||
|  | ||||
|     Implementation of the changes in this section is REQUIRED for | ||||
|     compliance with PKINIT. | ||||
|  | ||||
| 3.2.1.  Client Request | ||||
|  | ||||
|     Public keys may be signed by some certification authority (CA), or | ||||
|     they may be maintained by the KDC in which case the KDC is the | ||||
|     trusted authority.  Note that the latter mode does not require the | ||||
|     use of certificates. | ||||
|  | ||||
|     The initial authentication request is sent as per RFC 1510, except | ||||
|     that a preauthentication field containing data signed by the user's | ||||
|     private key accompanies the request: | ||||
|  | ||||
|     PA-PK-AS-REQ ::= SEQUENCE { | ||||
|                                 -- PA TYPE 14 | ||||
|         signedAuthPack          [0] SignedData | ||||
|                                     -- defined in CMS [11] | ||||
|                                     -- AuthPack (below) defines the data | ||||
|                                     -- that is signed | ||||
|         trustedCertifiers       [1] SEQUENCE OF TrustedCas OPTIONAL, | ||||
|                                     -- CAs that the client trusts | ||||
|         kdcCert                 [2] IssuerAndSerialNumber OPTIONAL | ||||
|                                     -- as defined in CMS [11] | ||||
|                                     -- specifies a particular KDC | ||||
|                                     -- certificate if the client | ||||
|                                     -- already has it; | ||||
|         encryptionCert          [3] IssuerAndSerialNumber OPTIONAL | ||||
|                                     -- For example, this may be the | ||||
|                                     -- client's Diffie-Hellman | ||||
|                                     -- certificate, or it may be the | ||||
|                                     -- client's RSA encryption | ||||
|                                     -- certificate. | ||||
|     } | ||||
|  | ||||
|     TrustedCas ::= CHOICE { | ||||
|         principalName         [0] KerberosName, | ||||
|                                   -- as defined below | ||||
|         caName                [1] Name | ||||
|                                   -- fully qualified X.500 name | ||||
|                                   -- as defined by X.509 | ||||
|         issuerAndSerial       [2] IssuerAndSerialNumber | ||||
|                                   -- Since a CA may have a number of | ||||
|                                   -- certificates, only one of which | ||||
|                                   -- a client trusts | ||||
|     } | ||||
|  | ||||
|     Usage of SignedData: | ||||
|     The SignedData data type is specified in the Cryptographic | ||||
|     Message Syntax, a product of the S/MIME working group of the IETF. | ||||
|     - The encapContentInfo field must contain the PKAuthenticator | ||||
|       and, optionally, the client's Diffie Hellman public value. | ||||
|       - The eContentType field shall contain the OID value for | ||||
|         id-data: iso(1) member-body(2) us(840) rsadsi(113549) | ||||
|         pkcs(1) pkcs7(7) data(1) | ||||
|       - The eContent field is data of the type AuthPack (below). | ||||
|     - The signerInfos field contains the signature of AuthPack. | ||||
|     - The Certificates field, when non-empty, contains the client's | ||||
|       certificate chain.  If present, the KDC uses the public key from | ||||
|       the client's certificate to verify the signature in the request. | ||||
|       Note that the client may pass different certificates that are used | ||||
|       for signing or for encrypting.  Thus, the KDC may utilize a | ||||
|       different client certificate for signature verification than the | ||||
|       one it uses to encrypt the reply to the client.  For example, the | ||||
|       client may place a Diffie-Hellman certificate in this field in | ||||
|       order to convey its static Diffie Hellman certificate to the KDC to | ||||
|       enable static-ephemeral Diffie-Hellman mode for the reply; in this | ||||
|       case, the client does NOT place its public value in the AuthPack | ||||
|       (defined below).  As another example, the client may place an RSA | ||||
|       encryption certificate in this field.  However, there must always | ||||
|       be (at least) a signature certificate. | ||||
|  | ||||
|     AuthPack ::= SEQUENCE { | ||||
|         pkAuthenticator         [0] PKAuthenticator, | ||||
|         clientPublicValue       [1] SubjectPublicKeyInfo OPTIONAL | ||||
|                                     -- if client is using Diffie-Hellman | ||||
|                                     -- (ephemeral-ephemeral only) | ||||
|     } | ||||
|  | ||||
|     PKAuthenticator ::= SEQUENCE { | ||||
|         kdcName                 [0] PrincipalName, | ||||
|         kdcRealm                [1] Realm, | ||||
|         cusec                   [2] INTEGER, | ||||
|                                     -- for replay prevention as in RFC1510 | ||||
|         ctime                   [3] KerberosTime, | ||||
|                                     -- for replay prevention as in RFC1510 | ||||
|         nonce                   [4] INTEGER | ||||
|     } | ||||
|  | ||||
|     SubjectPublicKeyInfo ::= SEQUENCE { | ||||
|         algorithm                   AlgorithmIdentifier, | ||||
|                                     -- dhKeyAgreement | ||||
|         subjectPublicKey            BIT STRING | ||||
|                                     -- for DH, equals | ||||
|                                     -- public exponent (INTEGER encoded | ||||
|                                     -- as payload of BIT STRING) | ||||
|     }   -- as specified by the X.509 recommendation [10] | ||||
|  | ||||
|     AlgorithmIdentifier ::= SEQUENCE { | ||||
|         algorithm                   ALGORITHM.&id, | ||||
|         parameters                  ALGORITHM.&type | ||||
|     }   -- as specified by the X.509 recommendation [10] | ||||
|  | ||||
|     If the client passes an issuer and serial number in the request, | ||||
|     the KDC is requested to use the referred-to certificate.  If none | ||||
|     exists, then the KDC returns an error of type | ||||
|     KDC_ERR_CERTIFICATE_MISMATCH.  It also returns this error if, on the | ||||
|     other hand, the client does not pass any trustedCertifiers, | ||||
|     believing that it has the KDC's certificate, but the KDC has more | ||||
|     than one certificate.  The KDC should include information in the | ||||
|     KRB-ERROR message that indicates the KDC certificate(s) that a | ||||
|     client may utilize.  This data is specified in the e-data, which | ||||
|     is defined in RFC 1510 revisions as a SEQUENCE of TypedData: | ||||
|  | ||||
|     TypedData ::=  SEQUENCE { | ||||
|                     data-type      [0] INTEGER, | ||||
|                     data-value     [1] OCTET STRING, | ||||
|     } -- per Kerberos RFC 1510 revisions | ||||
|  | ||||
|     where: | ||||
|     data-type = TD-PKINIT-CMS-CERTIFICATES = 101 | ||||
|     data-value = CertificateSet // as specified by CMS [11] | ||||
|  | ||||
|     The PKAuthenticator carries information to foil replay attacks, and | ||||
|     to bind the request and response.  The PKAuthenticator is signed | ||||
|     with the client's signature key. | ||||
|  | ||||
| 3.2.2.  KDC Response | ||||
|  | ||||
|     Upon receipt of the AS_REQ with PA-PK-AS-REQ pre-authentication | ||||
|     type, the KDC attempts to verify the user's certificate chain | ||||
|     (userCert), if one is provided in the request.  This is done by | ||||
|     verifying the certification path against the KDC's policy of | ||||
|     legitimate certifiers.  This may be based on a certification | ||||
|     hierarchy, or it may be simply a list of recognized certifiers in a | ||||
|     system like PGP. | ||||
|  | ||||
|     If the client's certificate chain contains no certificate signed by | ||||
|     a CA trusted by the KDC, then the KDC sends back an error message | ||||
|     of type KDC_ERR_CANT_VERIFY_CERTIFICATE.  The accompanying e-data | ||||
|     is a SEQUENCE of one TypedData (with type TD-TRUSTED-CERTIFIERS=104) | ||||
|     whose data-value is an OCTET STRING which is the DER encoding of | ||||
|  | ||||
|         TrustedCertifiers ::= SEQUENCE OF PrincipalName | ||||
|                               -- X.500 name encoded as a principal name | ||||
|                               -- see Section 3.1 | ||||
|  | ||||
|     If while verifying a certificate chain the KDC determines that the | ||||
|     signature on one of the certificates in the CertificateSet from | ||||
|     the signedAuthPack fails verification, then the KDC returns an | ||||
|     error of type KDC_ERR_INVALID_CERTIFICATE.  The accompanying | ||||
|     e-data is a SEQUENCE of one TypedData (with type | ||||
|     TD-CERTIFICATE-INDEX=105) whose data-value is an OCTET STRING | ||||
|     which is the DER encoding of the index into the CertificateSet | ||||
|     ordered as sent by the client. | ||||
|  | ||||
|         CertificateIndex  ::= INTEGER | ||||
|                               -- 0 = 1st certificate, | ||||
|                               --     (in order of encoding) | ||||
|                               -- 1 = 2nd certificate, etc | ||||
|  | ||||
|     The KDC may also check whether any of the certificates in the | ||||
|     client's chain has been revoked.  If one of the certificates has | ||||
|     been revoked, then the KDC returns an error of type | ||||
|     KDC_ERR_REVOKED_CERTIFICATE; if such a query reveals that | ||||
|     the certificate's revocation status is unknown or not | ||||
|     available, then if required by policy, the KDC returns the | ||||
|     appropriate error of type KDC_ERR_REVOCATION_STATUS_UNKNOWN or | ||||
|     KDC_ERR_REVOCATION_STATUS_UNAVAILABLE.  In any of these three | ||||
|     cases, the affected certificate is identified by the accompanying | ||||
|     e-data, which contains a CertificateIndex as described for | ||||
|     KDC_ERR_INVALID_CERTIFICATE. | ||||
|  | ||||
|     If the certificate chain can be verified, but the name of the | ||||
|     client in the certificate does not match the client's name in the | ||||
|     request, then the KDC returns an error of type | ||||
|     KDC_ERR_CLIENT_NAME_MISMATCH.  There is no accompanying e-data | ||||
|     field in this case. | ||||
|  | ||||
|     Finally, if the certificate chain is verified, but the KDC's name | ||||
|     or realm as given in the PKAuthenticator does not match the KDC's | ||||
|     actual principal name, then the KDC returns an error of type | ||||
|     KDC_ERR_KDC_NAME_MISMATCH.  The accompanying e-data field is again | ||||
|     a SEQUENCE of one TypedData (with type TD-KRB-PRINCIPAL=102 or | ||||
|     TD-KRB-REALM=103 as appropriate) whose data-value is an OCTET | ||||
|     STRING whose data-value is the DER encoding of a PrincipalName or | ||||
|     Realm as defined in RFC 1510 revisions. | ||||
|  | ||||
|     Even if all succeeds, the KDC may--for policy reasons--decide not | ||||
|     to trust the client.  In this case, the KDC returns an error message | ||||
|     of type KDC_ERR_CLIENT_NOT_TRUSTED. | ||||
|  | ||||
|     If a trust relationship exists, the KDC then verifies the client's | ||||
|     signature on AuthPack.  If that fails, the KDC returns an error | ||||
|     message of type KDC_ERR_INVALID_SIG.  Otherwise, the KDC uses the | ||||
|     timestamp (ctime and cusec) in the PKAuthenticator to assure that | ||||
|     the request is not a replay.  The KDC also verifies that its name | ||||
|     is specified in the PKAuthenticator. | ||||
|  | ||||
|     If the clientPublicValue field is filled in, indicating that the | ||||
|     client wishes to use Diffie-Hellman key agreement, then the KDC | ||||
|     checks to see that the parameters satisfy its policy.  If they do | ||||
|     not (e.g., the prime size is insufficient for the expected | ||||
|     encryption type), then the KDC sends back an error message of type | ||||
|     KDC_ERR_KEY_TOO_WEAK.  Otherwise, it generates its own public and | ||||
|     private values for the response. | ||||
|  | ||||
|     The KDC also checks that the timestamp in the PKAuthenticator is | ||||
|     within the allowable window and that the principal name and realm | ||||
|     are correct.  If the local (server) time and the client time in the | ||||
|     authenticator differ by more than the allowable clock skew, then the | ||||
|     KDC returns an error message of type KRB_AP_ERR_SKEW as defined in 1510. | ||||
|  | ||||
|     Assuming no errors, the KDC replies as per RFC 1510, except as | ||||
|     follows.  The user's name in the ticket is determined by the | ||||
|     following decision algorithm: | ||||
|  | ||||
|         1.  If the KDC has a mapping from the name in the certificate | ||||
|             to a Kerberos name, then use that name. | ||||
|             Else | ||||
|         2.  If the certificate contains the SubjectAltName extention | ||||
|             and the local KDC policy defines a mapping from the | ||||
|             SubjectAltName to a Kerberos name, then use that name. | ||||
|             Else | ||||
|         3.  Use the name as represented in the certificate, mapping | ||||
|             mapping as necessary (e.g., as per RFC 2253 for X.500 | ||||
|             names).  In this case the realm in the ticket shall be the | ||||
|             name of the certifier that issued the user's certificate. | ||||
|  | ||||
|     Note that a principal name may be carried in the subject alt name | ||||
|     field of a certificate. This name may be mapped to a principal | ||||
|     record in a security database based on local policy, for example | ||||
|     the subject alt name may be kerberos/principal@realm format.  In | ||||
|     this case the realm name is not that of the CA but that of the | ||||
|     local realm doing the mapping (or some realm name chosen by that | ||||
|     realm). | ||||
|  | ||||
|     If a non-KDC X.509 certificate contains the principal name within | ||||
|     the subjectAltName version 3 extension , that name may utilize | ||||
|     KerberosName as defined below, or, in the case of an S/MIME | ||||
|     certificate [17], may utilize the email address.  If the KDC | ||||
|     is presented with as S/MIME certificate, then the email address | ||||
|     within subjectAltName will be interpreted as a principal and realm | ||||
|     separated by the "@" sign, or as a name that needs to be | ||||
|     canonicalized.  If the resulting name does not correspond to a | ||||
|     registered principal name, then the principal name is formed as | ||||
|     defined in section 3.1. | ||||
|  | ||||
|     The trustedCertifiers field contains a list of certification | ||||
|     authorities trusted by the client, in the case that the client does | ||||
|     not possess the KDC's public key certificate.  If the KDC has no | ||||
|     certificate signed by any of the trustedCertifiers, then it returns | ||||
|     an error of type KDC_ERR_KDC_NOT_TRUSTED. | ||||
|  | ||||
|     KDCs should try to (in order of preference): | ||||
|     1. Use the KDC certificate identified by the serialNumber included | ||||
|        in the client's request. | ||||
|     2. Use a certificate issued to the KDC by the client's CA (if in the | ||||
|        middle of a CA key roll-over, use the KDC cert issued under same | ||||
|        CA key as user cert used to verify request). | ||||
|     3. Use a certificate issued to the KDC by one of the client's | ||||
|        trustedCertifier(s); | ||||
|     If the KDC is unable to comply with any of these options, then the | ||||
|     KDC returns an error message of type KDC_ERR_KDC_NOT_TRUSTED to the | ||||
|     client. | ||||
|  | ||||
|     The KDC encrypts the reply not with the user's long-term key, but | ||||
|     with the Diffie Hellman derived key or a random key generated | ||||
|     for this particular response which is carried in the padata field of | ||||
|     the TGS-REP message. | ||||
|  | ||||
|     PA-PK-AS-REP ::= CHOICE { | ||||
|                             -- PA TYPE 15 | ||||
|         dhSignedData       [0] SignedData, | ||||
|                             -- Defined in CMS and used only with | ||||
|                             -- Diffie-Hellman key exchange (if the | ||||
|                             -- client public value was present in the | ||||
|                             -- request). | ||||
|                             -- This choice MUST be supported | ||||
|                             -- by compliant implementations. | ||||
|         encKeyPack         [1] EnvelopedData, | ||||
|                             -- Defined in CMS | ||||
|                             -- The temporary key is encrypted | ||||
|                             -- using the client public key | ||||
|                             -- key | ||||
|                             -- SignedReplyKeyPack, encrypted | ||||
|                             -- with the temporary key, is also | ||||
|                             -- included. | ||||
|     } | ||||
|  | ||||
|     Usage of SignedData: | ||||
|     If the Diffie-Hellman option is used, dhSignedData in PA-PK-AS-REP | ||||
|     provides authenticated Diffie-Hellman parameters of the KDC.  The | ||||
|     reply key used to encrypt part of the KDC reply message is derived | ||||
|     from the Diffie-Hellman exchange: | ||||
|     - Both the KDC and the client calculate a secret value (g^ab mod p), | ||||
|       where a is the client's private exponent and b is the KDC's | ||||
|       private exponent. | ||||
|     - Both the KDC and the client take the first N bits of this secret | ||||
|       value and convert it into a reply key.  N depends on the reply key | ||||
|       type. | ||||
|     - If the reply key is DES, N=64 bits, where some of the bits are | ||||
|       replaced with parity bits, according to FIPS PUB 74. | ||||
|     - If the reply key is (3-key) 3-DES, N=192 bits, where some of the | ||||
|       bits are replaced with parity bits, according to FIPS PUB 74. | ||||
|     - The encapContentInfo field must contain the KdcDHKeyInfo as | ||||
|       defined below. | ||||
|       - The eContentType field shall contain the OID value for | ||||
|         id-data: iso(1) member-body(2) us(840) rsadsi(113549) | ||||
|         pkcs(1) pkcs7(7) data(1) | ||||
|     - The certificates field must contain the certificates necessary | ||||
|       for the client to establish trust in the KDC's certificate | ||||
|       based on the list of trusted certifiers sent by the client in | ||||
|       the PA-PK-AS-REQ.  This field may be empty if the client did | ||||
|       not send to the KDC a list of trusted certifiers (the | ||||
|       trustedCertifiers field was empty, meaning that the client | ||||
|       already possesses the KDC's certificate). | ||||
|     - The signerInfos field is a SET that must contain at least one | ||||
|       member, since it contains the actual signature. | ||||
|  | ||||
|     KdcDHKeyInfo ::= SEQUENCE { | ||||
|                               -- used only when utilizing Diffie-Hellman | ||||
|       nonce                 [0] INTEGER, | ||||
|                                 -- binds responce to the request | ||||
|       subjectPublicKey      [2] BIT STRING | ||||
|                                 -- Equals public exponent (g^a mod p) | ||||
|                                 -- INTEGER encoded as payload of | ||||
|                                 -- BIT STRING | ||||
|     } | ||||
|  | ||||
|     Usage of EnvelopedData: | ||||
|     The EnvelopedData data type is specified in the Cryptographic | ||||
|     Message Syntax, a product of the S/MIME working group of the IETF. | ||||
|     It contains an temporary key encrypted with the PKINIT | ||||
|     client's public key.  It also contains a signed and encrypted | ||||
|     reply key. | ||||
|     - The originatorInfo field is not required, since that information | ||||
|       may be presented in the signedData structure that is encrypted | ||||
|       within the encryptedContentInfo field. | ||||
|     - The optional unprotectedAttrs field is not required for PKINIT. | ||||
|     - The recipientInfos field is a SET which must contain exactly one | ||||
|       member of the KeyTransRecipientInfo type for encryption | ||||
|       with an RSA public key. | ||||
|          - The encryptedKey field (in KeyTransRecipientInfo) contains | ||||
|            the temporary key which is encrypted with the PKINIT client's | ||||
|            public key. | ||||
|     - The encryptedContentInfo field contains the signed and encrypted | ||||
|       reply key. | ||||
|       - The contentType field shall contain the OID value for | ||||
|         id-signedData: iso(1) member-body(2) us(840) rsadsi(113549) | ||||
|         pkcs(1) pkcs7(7) signedData(2) | ||||
|       - The encryptedContent field is encrypted data of the CMS type | ||||
|         signedData as specified below. | ||||
|         - The encapContentInfo field must contains the ReplyKeyPack. | ||||
|           - The eContentType field shall contain the OID value for | ||||
|             id-data: iso(1) member-body(2) us(840) rsadsi(113549) | ||||
|             pkcs(1) pkcs7(7) data(1) | ||||
|           - The eContent field is data of the type ReplyKeyPack (below). | ||||
|         - The certificates field must contain the certificates necessary | ||||
|           for the client to establish trust in the KDC's certificate | ||||
|           based on the list of trusted certifiers sent by the client in | ||||
|           the PA-PK-AS-REQ.  This field may be empty if the client did | ||||
|           not send to the KDC a list of trusted certifiers (the | ||||
|           trustedCertifiers field was empty, meaning that the client | ||||
|           already possesses the KDC's certificate). | ||||
|         - The signerInfos field is a SET that must contain at least one | ||||
|           member, since it contains the actual signature. | ||||
|  | ||||
|     ReplyKeyPack ::= SEQUENCE { | ||||
|                               -- not used for Diffie-Hellman | ||||
|         replyKey             [0] EncryptionKey, | ||||
|                                  -- used to encrypt main reply | ||||
|                                  -- ENCTYPE is at least as strong as | ||||
|                                  -- ENCTYPE of session key | ||||
|         nonce                [1] INTEGER, | ||||
|                                  -- binds response to the request | ||||
|                                  -- must be same as the nonce | ||||
|                                  -- passed in the PKAuthenticator | ||||
|     } | ||||
|  | ||||
|     Since each certifier in the certification path of a user's | ||||
|     certificate is equivalent to a separate Kerberos realm, the name | ||||
|     of each certifier in the certificate chain must be added to the | ||||
|     transited field of the ticket.  The format of these realm names is | ||||
|     defined in Section 3.1 of this document.  If applicable, the | ||||
|     transit-policy-checked flag should be set in the issued ticket. | ||||
|  | ||||
|     The KDC's certificate(s) must bind the public key(s) of the KDC to | ||||
|     a name derivable from the name of the realm for that KDC.  X.509 | ||||
|     certificates shall contain the principal name of the KDC | ||||
|     (defined in section 8.2 of RFC 1510) as the SubjectAltName version | ||||
|     3 extension. Below is the definition of this version 3 extension, | ||||
|     as specified by the X.509 standard: | ||||
|  | ||||
|         subjectAltName EXTENSION ::= { | ||||
|             SYNTAX GeneralNames | ||||
|             IDENTIFIED BY id-ce-subjectAltName | ||||
|         } | ||||
|  | ||||
|         GeneralNames ::= SEQUENCE SIZE(1..MAX) OF GeneralName | ||||
|  | ||||
|         GeneralName ::= CHOICE { | ||||
|             otherName       [0] INSTANCE OF OTHER-NAME, | ||||
|             ... | ||||
|         } | ||||
|  | ||||
|         OTHER-NAME ::= TYPE-IDENTIFIER | ||||
|  | ||||
|     In this definition, otherName is a name of any form defined as an | ||||
|     instance of the OTHER-NAME information object class. For the purpose | ||||
|     of specifying a Kerberos principal name, INSTANCE OF OTHER-NAME will | ||||
|     be chosen and replaced by the type KerberosName: | ||||
|  | ||||
|         KerberosName ::= SEQUENCE { | ||||
|           realm           [0] Realm, | ||||
|                               -- as defined in RFC 1510 | ||||
|           principalName   [1] PrincipalName, | ||||
|                               -- as defined in RFC 1510 | ||||
|         } | ||||
|  | ||||
|     This specific syntax is identified within subjectAltName by setting | ||||
|     the OID id-ce-subjectAltName to krb5PrincipalName, where (from the | ||||
|     Kerberos specification) we have | ||||
|  | ||||
|         krb5 OBJECT IDENTIFIER ::= { iso (1) | ||||
|                                      org (3) | ||||
|                                      dod (6) | ||||
|                                      internet (1) | ||||
|                                      security (5) | ||||
|                                      kerberosv5 (2) } | ||||
|  | ||||
|         krb5PrincipalName OBJECT IDENTIFIER ::= { krb5 2 } | ||||
|  | ||||
|     (This specification may also be used to specify a Kerberos name | ||||
|     within the user's certificate.)  The KDC's certificate may be signed | ||||
|     directly by a CA, or there may be intermediaries if the server resides | ||||
|     within a large organization, or it may be unsigned if the client | ||||
|     indicates possession (and trust) of the KDC's certificate. | ||||
|  | ||||
|     The client then extracts the random key used to encrypt the main | ||||
|     reply.  This random key (in encPaReply) is encrypted with either the | ||||
|     client's public key or with a key derived from the DH values | ||||
|     exchanged between the client and the KDC.  The client uses this | ||||
|     random key to decrypt the main reply, and subsequently proceeds as | ||||
|     described in RFC 1510. | ||||
|  | ||||
| 3.2.3. Required Algorithms | ||||
|  | ||||
|     Not all of the algorithms in the PKINIT protocol specification have | ||||
|     to be implemented in order to comply with the proposed standard. | ||||
|     Below is a list of the required algorithms: | ||||
|  | ||||
|     - Diffie-Hellman public/private key pairs | ||||
|       - utilizing Diffie-Hellman ephemeral-ephemeral mode | ||||
|     - SHA1 digest and DSA for signatures | ||||
|     - 3-key triple DES keys derived from the Diffie-Hellman Exchange | ||||
|     - 3-key triple DES Temporary and Reply keys | ||||
|  | ||||
| 4.  Logistics and Policy | ||||
|  | ||||
|     This section describes a way to define the policy on the use of | ||||
|     PKINIT for each principal and request. | ||||
|  | ||||
|     The KDC is not required to contain a database record for users | ||||
|     who use public key authentication.  However, if these users are | ||||
|     registered with the KDC, it is recommended that the database record | ||||
|     for these users be modified to an additional flag in the attributes | ||||
|     field to indicate that the user should authenticate using PKINIT. | ||||
|     If this flag is set and a request message does not contain the | ||||
|     PKINIT preauthentication field, then the KDC sends back as error of | ||||
|     type KDC_ERR_PREAUTH_REQUIRED indicating that a preauthentication | ||||
|     field of type PA-PK-AS-REQ must be included in the request. | ||||
|  | ||||
| 5.  Security Considerations | ||||
|  | ||||
|     PKINIT raises a few security considerations, which we will address | ||||
|     in this section. | ||||
|  | ||||
|     First of all, PKINIT introduces a new trust model, where KDCs do not | ||||
|     (necessarily) certify the identity of those for whom they issue | ||||
|     tickets.  PKINIT does allow KDCs to act as their own CAs, in order | ||||
|     to simplify key management, but one of the additional benefits is to | ||||
|     align Kerberos authentication with a global public key | ||||
|     infrastructure.  Anyone using PKINIT in this way must be aware of | ||||
|     how the certification infrastructure they are linking to works. | ||||
|  | ||||
|     Secondly, PKINIT also introduces the possibility of interactions | ||||
|     between different cryptosystems, which may be of widely varying | ||||
|     strengths.  Many systems, for instance, allow the use of 512-bit | ||||
|     public keys.  Using such keys to wrap data encrypted under strong | ||||
|     conventional cryptosystems, such as triple-DES, is inappropriate; | ||||
|     it adds a weak link to a strong one at extra cost.  Implementors | ||||
|     and administrators should take care to avoid such wasteful and | ||||
|     deceptive interactions. | ||||
|  | ||||
|     Lastly, PKINIT calls for randomly generated keys for conventional | ||||
|     cryptosystems.  Many such systems contain systematically "weak" | ||||
|     keys.  PKINIT implementations MUST avoid use of these keys, either | ||||
|     by discarding those keys when they are generated, or by fixing them | ||||
|     in some way (e.g., by XORing them with a given mask).  These | ||||
|     precautions vary from system to system; it is not our intention to | ||||
|     give an explicit recipe for them here. | ||||
|  | ||||
| 6.  Transport Issues | ||||
|  | ||||
|     Certificate chains can potentially grow quite large and span several | ||||
|     UDP packets; this in turn increases the probability that a Kerberos | ||||
|     message involving PKINIT extensions will be broken in transit.  In | ||||
|     light of the possibility that the Kerberos specification will | ||||
|     require KDCs to accept requests using TCP as a transport mechanism, | ||||
|     we make the same recommendation with respect to the PKINIT | ||||
|     extensions as well. | ||||
|  | ||||
| 7.  Bibliography | ||||
|  | ||||
|     [1] J. Kohl, C. Neuman.  The Kerberos Network Authentication Service | ||||
|     (V5).  Request for Comments 1510. | ||||
|  | ||||
|     [2] B.C. Neuman, Theodore Ts'o. Kerberos: An Authentication Service | ||||
|     for Computer Networks, IEEE Communications, 32(9):33-38.  September | ||||
|     1994. | ||||
|  | ||||
|     [3] B. Tung, T. Ryutov, C. Neuman, G. Tsudik, B. Sommerfeld, | ||||
|     A. Medvinsky, M. Hur.  Public Key Cryptography for Cross-Realm | ||||
|     Authentication in Kerberos. | ||||
|     draft-ietf-cat-kerberos-pk-cross-04.txt | ||||
|  | ||||
|     [4] A. Medvinsky, J. Cargille, M. Hur.  Anonymous Credentials in | ||||
|     Kerberos. | ||||
|     draft-ietf-cat-kerberos-anoncred-00.txt | ||||
|  | ||||
|     [5] A. Medvinsky, M. Hur, B. Clifford Neuman.  Public Key Utilizing | ||||
|     Tickets for Application Servers (PKTAPP). | ||||
|     draft-ietf-cat-pktapp-00.txt | ||||
|  | ||||
|     [6] M. Sirbu, J. Chuang.  Distributed Authentication in Kerberos | ||||
|     Using Public Key Cryptography.  Symposium On Network and Distributed | ||||
|     System Security, 1997. | ||||
|  | ||||
|     [7] B. Cox, J.D. Tygar, M. Sirbu.  NetBill Security and Transaction | ||||
|     Protocol.  In Proceedings of the USENIX Workshop on Electronic | ||||
|     Commerce, July 1995. | ||||
|  | ||||
|     [8] T. Dierks, C. Allen.  The TLS Protocol, Version 1.0 | ||||
|     Request for Comments 2246, January 1999. | ||||
|  | ||||
|     [9] B.C. Neuman, Proxy-Based Authorization and Accounting for | ||||
|     Distributed Systems.  In Proceedings of the 13th International | ||||
|     Conference on Distributed Computing Systems, May 1993. | ||||
|  | ||||
|     [10] ITU-T (formerly CCITT) Information technology - Open Systems | ||||
|     Interconnection - The Directory: Authentication Framework | ||||
|     Recommendation X.509 ISO/IEC 9594-8 | ||||
|  | ||||
|     [11] R. Housley. Cryptographic Message Syntax. | ||||
|     draft-ietf-smime-cms-13.txt, April 1999, approved for publication | ||||
|     as RFC. | ||||
|  | ||||
|     [12] PKCS #7: Cryptographic Message Syntax Standard, | ||||
|     An RSA Laboratories Technical Note Version 1.5 | ||||
|     Revised November 1, 1993 | ||||
|  | ||||
|     [13] R. Rivest, MIT Laboratory for Computer Science and RSA Data | ||||
|     Security, Inc. A Description of the RC2(r) Encryption Algorithm | ||||
|     March 1998. | ||||
|     Request for Comments 2268. | ||||
|  | ||||
|     [14] M. Wahl, S. Kille, T. Howes. Lightweight Directory Access | ||||
|     Protocol (v3): UTF-8 String Representation of Distinguished Names. | ||||
|     Request for Comments 2253. | ||||
|  | ||||
|     [15] R. Housley, W. Ford, W. Polk, D. Solo. Internet X.509 Public | ||||
|     Key Infrastructure, Certificate and CRL Profile, January 1999. | ||||
|     Request for Comments 2459. | ||||
|  | ||||
|     [16] B. Kaliski, J. Staddon. PKCS #1: RSA Cryptography | ||||
|     Specifications, October 1998.  Request for Comments 2437. | ||||
|  | ||||
|     [17] S. Dusse, P. Hoffman, B. Ramsdell, J. Weinstein.  S/MIME | ||||
|     Version 2 Certificate Handling, March 1998.  Request for | ||||
|     Comments 2312. | ||||
|  | ||||
|     [18] M. Wahl, T. Howes, S. Kille.  Lightweight Directory Access | ||||
|     Protocol (v3), December 1997.  Request for Comments 2251. | ||||
|  | ||||
| 8.  Acknowledgements | ||||
|  | ||||
|     Some of the ideas on which this proposal is based arose during | ||||
|     discussions over several years between members of the SAAG, the IETF | ||||
|     CAT working group, and the PSRG, regarding integration of Kerberos | ||||
|     and SPX.  Some ideas have also been drawn from the DASS system. | ||||
|     These changes are by no means endorsed by these groups.  This is an | ||||
|     attempt to revive some of the goals of those groups, and this | ||||
|     proposal approaches those goals primarily from the Kerberos | ||||
|     perspective.  Lastly, comments from groups working on similar ideas | ||||
|     in DCE have been invaluable. | ||||
|  | ||||
| 9.  Expiration Date | ||||
|  | ||||
|     This draft expires April 30, 2000. | ||||
|  | ||||
| 10. Authors | ||||
|  | ||||
|     Brian Tung | ||||
|     Clifford Neuman | ||||
|     USC Information Sciences Institute | ||||
|     4676 Admiralty Way Suite 1001 | ||||
|     Marina del Rey CA 90292-6695 | ||||
|     Phone: +1 310 822 1511 | ||||
|     E-mail: {brian, bcn}@isi.edu | ||||
|  | ||||
|     Matthew Hur | ||||
|     CyberSafe Corporation | ||||
|     1605 NW Sammamish Road | ||||
|     Issaquah WA 98027-5378 | ||||
|     Phone: +1 425 391 6000 | ||||
|     E-mail: matt.hur@cybersafe.com | ||||
|  | ||||
|     Ari Medvinsky | ||||
|     Excite | ||||
|     555 Broadway | ||||
|     Redwood City, CA 94063 | ||||
|     Phone +1 650 569 2119 | ||||
|     E-mail: amedvins@excitecorp.com | ||||
|  | ||||
|     Sasha Medvinsky | ||||
|     General Instrument | ||||
|     6450 Sequence Drive | ||||
|     San Diego, CA 92121 | ||||
|     Phone +1 619 404 2825 | ||||
|     E-mail: smedvinsky@gi.com | ||||
|  | ||||
|     John Wray | ||||
|     Iris Associates, Inc. | ||||
|     5 Technology Park Dr. | ||||
|     Westford, MA 01886 | ||||
|     E-mail: John_Wray@iris.com | ||||
|  | ||||
|     Jonathan Trostle | ||||
|     170 W. Tasman Dr. | ||||
|     San Jose, CA 95134 | ||||
|     E-mail: jtrostle@cisco.com | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Assar Westerlund
					Assar Westerlund