INTERNET-DRAFT Clifford Neumandraft-ietf-cat-kerberos-pk-init-02.txtdraft-ietf-cat-kerberos-pk-init-03.txt Brian Tung Updates: RFC 1510 ISI expiresApril 19,September 30, 1997 John Wray Digital Equipment CorporationJonathan TrostleAri 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 otherdocu- mentsdocuments at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as``work"work inpro- gress.''progress." To learn the current status of any Internet-Draft, please check the``1id-abstracts.txt''"1id-abstracts.txt" listing contained in the Internet-DraftsSha- dowShadow 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 asdraft-ietf-cat-kerberos-pk-init-02.txt,draft-ietf-cat-kerberos-pk-init-03.txt, and expiresApril 19,September 30, 1997. Please send comments to the authors. 1. Abstract This document defines extensions (PKINIT) to the Kerberos protocol specification (RFC1510, "The Kerberos Network Authentication Service (V5)", September 1993)1510 [1]) to provide a method for using public key cryptography during initial authentication. Themethodmethods definedspecifiesspecify thewayways in which preauthentication data fields and error data fields in Kerberos messages are to be used to transport public key data. 2.Motivation PublicIntroduction The popularity of public key cryptographypresentshas produced ameansdesire for its support in Kerberos [2]. The advantages provided bywhich a principal may demonstrate possession of a key, without ever having divulged this key to anyone else. In conventional cryptography, the encryption key and decryption key are either identical or can easily be derived from one another. In public key cryptography, however, neither thepublic keynor the privatecryptography include simplified keycan be derived frommanagement (from theother (although the private key RECORD may includeKerberos perspective) and theinformation requiredability togenerate BOTH keys). Hence, a message encrypted with aleverage existing and developing public keyis private, since only the person possessing the private key can decrypt it; similarly, someone possessing the privatecertification infrastructures. Public key cryptography canalso encrypt a message, thus providing a digital signature. Furthermore, conventional keys are often derived from passwords, so messages encrypted with these keys are susceptible to dictionary attacks, whereas public key pairs are generated frombe integrated into Kerberos in apseudo-randomnumbersequence. While itof ways. One istrue that messages encrypted using publicto to associate a keycryptography are actually encryptedpair witha conventional secret key,each realm, which can then be used to facilitate cross-realm authentication; this isin turn encrypted usingthepublic key pair, the secret key is also randomly generated andtopic of another draft proposal. Another way ishence not vulnerabletoa dictionary attack. The advantages provided by public key cryptography have produced a demand for its integration into the Kerberos authentication protocol. Theallow users with public keyintegration into Kerberos described in this document has three goals. First, by allowing userscertificates toregister public keys withuse them in initial authentication. This is theKDC,concern of theKDC can be recovered much more easilycurrent document. One of the guiding principles in theevent itdesign of PKINIT iscompromised. With Kerberosthat changes should be asit currently stands, compromise ofminimal as possible. As a result, theKDCbasic mechanism of PKINIT isdisastrous. All keys become known by the attacker and all keys must be changed. Second, we allow users that have public key certificates signed by outside authorities to obtain Kerberos credentials for accessas follows: The user sends a request toKerberized services. Third, we obtain the above benefits while maintainingtheperformance advantages of Kerberos over protocolsKDC as before, except that if that user is to useonlypublic keyauthentication. If users register public keys, compromise ofcryptography in theKDC does not divulge their private key. Compromiseinitial authentication step, his certificate accompanies the initial request, in the preauthentication fields. Upon receipt ofsecurity onthis request, the KDCis still a problem, since an attacker can impersonate any user by creatingverifies the certificate and issues a ticket granting ticketfor the user. When(TGT) as before, except that instead of being encrypted in thecompromiseuser's long-term key (which isdetected, the KDC can be cleaned up and restoredderived frombackup media and loaded with a backup private/public key pair. Keys for application servers are conventional symmetric keys and must be changed. Note: Ifauser stores his private key, in an encrypted form, on the KDC, thenpassword), itmay be desirable to change the key pair, since the private keyis encryptedusingin asymmetricrandomly-generated key. This random keyderived from a password (as described below), and can therefore be vulnerable to dictionary attack if a good password policyisnot used. Alternatively, ifin turn encrypted using theencrypting symmetricpublic keyhas 56 bits, then it may also be desirable to changecertificate that came with thekey pair after a short period due torequest and signed using theshort key length. The KDC does not have access toKDC's signature key, and accompanies theuser's unencrypted private key. There are two important areas where public key cryptography will have immediate use:reply, in theinitial authentication ofpreauthentication fields. PKINIT also allows for usersregisteredwiththe KDC oronly digital signature keys to authenticate usingpublic key certificates from outside authorities,those keys, and for users toestablish inter-realmstore and retrieve private keysfor cross-realm authentication. This memo describes a method by whichon thefirst of these can be done.KDC. Thesecond case willPKINIT specification may also bethe topicused for direct peer to peer authentication without contacting aseparate proposal. Somecentral KDC. This application ofthe ideas on which this proposalPKINIT is described in PKTAPP [4] and is basedarose during discussions over several years between members of the SAAG,on concepts introduced in [5, 6]. For direct client-to-server authentication, theIETF-CAT working group, andclient uses PKINIT to authenticate to thePSRG, regarding integrationend server (instead ofKerberos and SPX. Some ideas are drawn from the DASS system, and similar extensions have been discusseda central KDC), which then issues a ticket foruse in DCE. These changes are by no means endorsed by these groups.itself. Thisisapproach has anattempt to revive some of the goals ofadvantage over SSL [7] in thatgroup, and the proposal approaches those goals primarily fromthe server does not need to save state (cache session keys). Furthermore, an additional benefit is that Kerberosperspective.tickets can facilitate delegation (see [8]). 3.Initial authentication of users with public keysProposed Extensions This section describestheextensions toVersion 5 of the Kerberos protocol that will supportRFC 1510 for supporting the use of public key cryptographyby usersin the initial request for a ticket grantingticket. Roughly speaking,ticket (TGT). In summary, the following changes to RFC 1510 are proposed: --> Userscan initiallymay authenticate using either a public key pair orconventional (symmetric key) cryptography. AfteraKDC compromise, the KDC replies with an error message that informs the client of the new KDC public backupconventional (symmetric) key.Users must authenticate usingIf public key cryptographyin response to the error message. If applicable, the client generates the new user secret key at this point as well. Public key initial authenticationisperformed using either the RSA encryption or Diffie Hellmanused, public keyalgorithms. Theredata isalso an option to allow the usertransported in preauthentication data fields to help establish identity. --> Users may storehis/her private key encrypted in the user password in the KDC database; this option solves the problem of transporting the userprivatekey to different workstations. The combination of this option and the provision for conventional symmetric key authentication allows organizations to smoothly migrate to public key cryptography. This proposal will allow users either to usekeysregistered directly with the KDC, or to use keys already registered for use with X.509, PEM, or PGP, to obtain Kerberos credentials. These credentials can then be used, as before, with application servers supporting Kerberos. Use of public key cryptography will not be a requirement for Kerberos, but if one's organization runs a KDC supporting public key, then users may choose to be registered with a public key pair, instead of or in addition to the current secret key. The application request and response between Kerberos clients and application servers will continue to be basedonconventional cryptography, or will be converted to use user-to-user authentication. There are performance issues and other reasons that servers may be better off using conventional cryptography. For this proposal, we feel that 80 percent ofthebenefits of integrating public key with Kerberos can be attainedKDC for20 percent of the effort, by addressing onlyretrieval during Kerberos initial authentication. This proposaldoes not preclude separate extensions. With these changes, users will be able to register public keys, only in realms that support public key, but they will still be able to perform initial authentication from a client that does not support public key. They will be able to use services registered in any realm. Furthermore, users registered with conventional keys will be able to use any client. This proposaladdressesthreetwo waysin whichthat users may use public key cryptography for initialauthentication with Kerberos, with minimal change to the existing protocol.authentication. Users mayregister keys directly with the KDC,present public key certificates, or they maypresent certificates by outside certification authorities (or certificationsgenerate their own session key, signed byother users) attesting to the association of the public key with the named user.their digital signature key. Inboth cases,either case, the end result is that the user obtainsa conventional ticket granting ticket or conventional server ticketan ordinary TGT that may be used for subsequent authentication, with suchsubsequentauthentication using only conventional cryptography.Additionally, users may also register a digital signature verification key withSection 3.1 provides definitions to help specify message formats. Section 3.2 and 3.3 describe theKDC. We provide this optionextensions for thelicensing benefits, as well as a simpler variant of thetwo initial authenticationexchange. However, this option relies onmethods. Section 3.3 describes a way for theclientuser togenerate random keys. We first consider the case where the user'sstore and retrieve his private keyis registered withon the KDC.3.13.1. DefinitionsBefore we proceed, we will lay some groundwork definitions for encryptionHash andsignatures. Weencryption types will be specified using ENCTYPE tags; we propose thefollowing definitionsaddition ofsignature and encryption modes (and their corresponding values onthewire):following types: #defineENCTYPE_SIGN_MD5_RSAENCTYPE_SIGN_DSA_GENERATE 0x0011 #define ENCTYPE_SIGN_DSA_VERIFY 0x0012 #define ENCTYPE_ENCRYPT_RSA_PRIV 0x0021 #define ENCTYPE_ENCRYPT_RSA_PUB 0x0022 allowing furthermodessignature types to be definedaccordingly. In the exposition below, we will use the notation E (T, K) to denotein the range 0x0011 through 0x001f, and further encryptionof data T, with key (or parameters) K. If E is ENCTYPE_SIGN_MD5_RSA, then E (T, K) = {T, RSAEncryptPrivate (MD5Hash (T), K)} If E is ENCTYPE_ENCRYPT_RSA_PRIV, then E (T, K) = RSAEncryptPrivate (T, K) Correspondingly, if E is ENCTYPE_ENCRYPT_RSA_PUB, then E (T, K) = RSAEncryptPublic (T, K) 3.2 Initial request for user registered with public key on KDC In this scenario it is assumed that the user is registered with a public key on the KDC. The user's private key may be held by the user, or it may be stored on the KDC, encrypted so that it cannottypes to beused by the KDC. 3.2.1 User's private key is stored locally Implementation of the changesdefined inthis section is REQUIRED. In this section, we presentthebasic Kerberos V5 pk-init protocol that all conforming implementations must support.range 0x0021 through 0x002f. Thekey features of the protocol are: (1) easy, automatic (for the clients) recovery after a KDC compromise, (2) the ability for a realm to support a mix of old andextensions involve newKerberos V5 clients withpreauthentication fields. The preauthentication data types are in thenew clients being a mix of both public key and symmetric key configured clients, and (3) support for Diffie-Hellman (DH) key exchange as well as RSA public key encryption.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 Thebenefit of havingextensions also involve newclients being able to use either symmetric key or public key initial authentication is that it allows an organization to roll out theerror types. The newclients as rapidly as possible without having to be concerned about the need to purchase additional hardware to supporterror types are in theCPU intensive public key cryptographic operations.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 Inorder to give a brief overview ofthefour protocols in this section,exposition below, wenow give diagrams ofuse theprotocols. We denotefollowing terms: encryptionof message M with key K by {M}K and thekey, decryption key, signatureof message M with key K by [M]K. All messages from the KDC to the clientkey, verification key. It should be understood that encryption and verification keys areAS_REP messages unless denoted otherwise; similarly, all messages from the client to the KDCessentially public keys, and decryption and signature keys areAS_REQ messages unless denoted otherwise. Since only the padata fieldsessentially private keys. The fact that they areaffected by this specification in the AS_REQ and AS_REP messages, we dologically distinct does notshow the other fields. We first showpreclude theRSA encryption option in normal mode: certifier list, [cksum, time, nonce, kdcRealm, kdcName]User PrivateKey C ------------------------------------------------------> KDC list of cert's, {[encReplyKey, nonce]KDC privkey} EncReplyTmpKey, {EncReplyTmpKey}Userpubkey C <------------------------------------------------------ KDC We now show RSA encryption in recovery mode: certifier list, [cksum, time, nonce, kdcRealm, kdcName]User PrivateKey C ------------------------------------------------------> KDC KRB_ERROR (error code KDC_RECOVERY_NEEDED) error data: [nonce, algID (RSA), KDC PublicKey Kvno and PublicKey, KDC Salt] Signed with KDC PrivateKey C <------------------------------------------------------ KDC certifier list, [cksum, time, nonce, kdcRealm, kdcName, {newUserSymmKey, nonce}KDC public key]User PrivateKey C ------------------------------------------------------> KDC list of cert's, {[encReplyKey, nonce]KDC privkey} EncReplyTmpKey, {EncReplyTmpKey}Userpubkey C <------------------------------------------------------ KDC Next, we show Diffie Hellman in normal mode: certifier list, [cksum, time, nonce, kdcRealm, kdcName, User DH public parameter]User PrivateKey C ------------------------------------------------------> KDC listassignment ofcert's, {encReplyKey, nonce}DH shared symmetric key, [KDC DH public parameter]KDC Privatebitwise identical keys. 3.2. Standard Public KeyC <------------------------------------------------------ KDC Finally, we show Diffie HellmanAuthentication Implementation of the changes inrecovery mode: certifier list, [cksum, time, nonce, kdcRealm, kdcName, User DH public parameter]User PrivateKey C ------------------------------------------------------> KDC KRB_ERROR (error code KDC_RECOVERY_NEEDED) error data: [nonce, algID (DH), KDC DH public parameter, KDC DH ID, KDC PublicKey Kvno and PublicKey, KDC Salt] Signedthis section is REQUIRED for compliance withKDC PrivateKey C <------------------------------------------------------ KDC certifier list, [cksum, time, nonce, kdcRealm, kdcName, User DHpk-init. It is assumed that all publicparameter, {newUserSymmKey, nonce}DH shared key, KDC DH ID]User PrivateKey C ------------------------------------------------------> KDC list of cert's, {encReplyKey, nonce}DH shared symmetric key C <------------------------------------------------------ KDC If the user stores his private key locally, thekeys are signed by some certification authority (CA). The initial authentication requestto the KDC for a ticket granting ticket proceeds according tois sent as per RFC 1510, except that a preauthentication field containinga noncedata signed by the user'sprivatesignature keyis included. The preauthentication field may also include a list of the root certifiers trusted byaccompanies theuser. PA-PK-AS-ROOT ::=request: PA-PK-AS-REQ ::- SEQUENCE {rootCert[0]-- PA TYPE 17 signedPKAuth [0] SignedPKAuthenticator, userCert [1] SEQUENCE OFOCTET STRING, signedAuth[1] SignedPKAuthenticatorCertificate 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 {authent[0]pkAuth [0] PKAuthenticator,authentSig[1] SignaturepkAuthSig [1] Signature, -- of pkAuth -- using user's signature key } PKAuthenticator ::= SEQUENCE {cksum[0] Checksum OPTIONAL, cusec[1]cusec [0] INTEGER,ctime[2]-- for replay prevention ctime [1] KerberosTime,nonce[3]-- for replay prevention nonce [2] INTEGER,kdcRealm[4] Realm, kdcName[5]-- binds response to this request kdcName [3] PrincipalName,clientPubValue[6]clientPubValue [4] SubjectPublicKeyInfo OPTIONAL, --DHfor Diffie-Hellman algorithmrecoveryData[7] RecoveryData OPTIONAL -- Recovery Alg.}RecoveryDataSignature ::= SEQUENCE {clientRecovData[0] ClientRecovData, kdcPubValueId[1] INTEGER OPTIONAL -- DH algorithm, copied -- from KDC response } ClientRecovData ::= CHOICE { newPrincKey[0] EncryptedData, -- EncPaPkAsRoot -- encrypted with -- either KDC -- public key or -- DH shared key recovDoneFlag[1] INTEGER -- let KDC know that -- recovery is done -- when user uses asignedHash [0] EncryptedData --mixofclients or -- does not want to -- keep a symmetrictype Checksum -- encrypted under signature keyin the database}EncPaPkAsRootChecksum ::= SEQUENCE {newSymmKey[0] EncryptionKey -- the principal's new -- symmetric key nonce[1] INTEGERcksumtype [0] INTEGER, checksum [1] OCTET STRING } --the same nonceas specified by RFC 1510 SubjectPublicKeyInfo ::= SEQUENCE { algorithm [0] algorithmIdentifier, subjectPublicKey [1] BIT STRING } -- as specified by theone in the -- PKAuthenticator } SignatureX.509 recommendation [9] Certificate ::= SEQUENCE {sigType[0]CertType [0] INTEGER,kvno[1] INTEGER OPTIONAL, sigHash[2]-- type of certificate -- 1 = X.509v3 (DER encoding) -- 2 = PGP (per PGP draft) CertData [1] OCTET STRING -- actual certificate -- type determined by CertType }Notationally, sigHash isNote: If the signature uses RSA keys, thensigType (authent, userPrivateKey) where userPrivateKeyit isthe user's private key (corresponding to the public key held in the user's database record). Valid sigTypes are thus far limitedtothe above-listed ENCTYPE_SIGN_MD5_RSA; we expect that other types maybelisted (and given on-the-wire values between 0x0011 and 0x001f).performed as per PKCS #1. Theformat of each certificate depends on the particular service used. (Alternatively, the KDC could send, with its reply, a sequence of certifications (see below), but since the KDC is likelyPKAuthenticator carries information tohave more certifications than users have trusted root certifiers, we have chosen the first method.) In the event thatfoil replay attacks, to bind theclient believes it already possessesrequest and response, and to optionally pass thecurrentclient's Diffie-Hellman publickey of the KDC, a zero-length root-cert field is sent. The fields in the signed authenticator are the same as those in the Kerberos authenticator;value (i.e. for using DSA inaddition, we include a client-generated nonce, and the name of the KDC.combination with Diffie-Hellman). ThestructurePKAuthenticator isitselfsignedusingwith theuser'sprivate key corresponding to the public keyregistered with the KDC. We includein thenewSymmKey field so clients can generate a new symmetric key (for users, this key is based on a password and a salt value generatedcertificate found in userCert (or cached by theKDC) and confidentially send this key toKDC). In theKDC duringPKAuthenticator, therecovery phase. We now describeclient may specify therecovery phaseKDC name in one ofthe protocol. There istwo ways: 1) abit associated with eachKerberos principal name, or 2) the name in thedatabase indicating whether recovery for that principal is necessary. AfterKDC's certificate (e.g., an X.500 name, or aKDC compromise,PGP name). Note that case #1 requires that theKDC software is reloaded from backup mediacertificate name anda new backup KDC public/private pair is generated. The public half of this pair is then either made available totheKDC, or given to the appropriate certification authorities for certification.Kerberos principal name be bound together (e.g., via an X.509v3 extension). Theprivate halfuserCert field isnot made available to the KDC until after the next compromise clean-up. If clients are maintainingacopysequence of certificates, theKDC public key, they also have a copyfirst of which must be thebackupuser's publickey. After the reloadkey certificate. Any subsequent certificates will be certificates ofKDC software,thebits associated with recoverycertifiers ofeach principal are all set. The KDC clearsthebit for each principal that undergoes the recovery phase. In addition, there is a bit associated with each principal to indicate whether there is a valid symmetric key in the database for the principal.user's certificate. Thesebits are all cleared after the reload of the KDC software (the old symmetric keys are no longer valid). Finally, there is a bit associated with each principal indicating whether that principal still uses non-public key capable clients. If a user principal falls into this category, a public key capable client cannot transparently re-establish a symmetric key for that user, since the older clients would notcerificates may beable to compute the new symmetric key that includes hashingused by thepassword with aKDCsupplied salt value. The re-establishment of the symmetric key in this case is outside the scope of this protocol. One method of re-establishing a symmetric key for public key capable clients istogenerate a hash ofverify theuser password and a KDC supplied salt value. The KDC saltuser's public key. This field ischanged after every compromise of the KDC. In the recovery protocol,empty if theprincipal does not still use old clients, theKDCsupplied salt is sent toalready has theclient principal in a KRB_ERROR message with error code KDC_RECOVERY_NEEDED.user's certifcate. Theerror datatrustedCertifiers fieldof the messagecontainsthe following structure which is encoded into an octet string. PA-PK-KDC-ERR ::= CHOICE { recoveryDhErr SignedDHError, -- Used during recovery -- when algorithm is DH -- based recoveryPKEncErr SignedPKEncError -- Used during recovery -- for PK encryption -- (RSA,...) } SignedDHError ::= SEQUENCE { dhErr DHError, dhErrSig Signature } SignedPKEncError ::= SEQUENCE { pkEncErr PKEncryptError, pkEncErrSig Signature } DHError ::= SEQUENCE { nonce INTEGER, -- From AS_REQ algorithmId INTEGER, -- DH algorithm kdcPubValue SubjectPublicKeyInfo, -- DH algorithm kdcPubValueId INTEGER, -- DH algorithm kdcPublicKeyKvno INTEGER OPTIONAL, -- New KDC public -- key kvno kdcPublicKey OCTET STRING OPTIONAL, -- New KDC pubkey kdcSalt OCTET STRING OPTIONAL -- If user uses -- only new -- clients } PKEncryptError ::= SEQUENCE { nonce INTEGER, -- From AS_REQ algorithmId INTEGER, -- Public Key -- encryption alg kdcPublicKeyKvno INTEGER OPTIONAL, -- New KDC public -- key kvno kdcPublicKey OCTET STRING OPTIONAL, -- New KDC public -- key kdcSalt OCTET STRING OPTIONAL -- If user uses -- only new -- clients } The KDC_RECOVERY_NEEDED error message is sent in response toaclient AS_REQ message if the client principal needs to be recovered, unless the client AS_REQ contains the PKAuthenticator with a nonempty RecoveryData field (in this case the client has already received the KDC_RECOVERY_NEEDED error message. We will also see in section 3.2.2 that a different error response is sentlist of certification authorities trusted by theKDC if the encrypted user private key is storedclient, in theKDC database.) If the client principal uses only new clients, then the kdcSalt field is returned; otherwise, the kdcSalt field is absent. Ifcase that the clientuses the Diffie Hellman algorithm during the recovery phase then the DHError field containsdoes not possess the KDC's publicDiffie Hellman parameter (kdcPubValue) forkey certificate. Upon receipt of theKDC alongAS_REQ withan identifier (kdcPubValueID). The client will then send this identifier toPA-PK-AS-REQ pre-authentication type, the KDCin an AS_REQ message;attempts to verify theidentifier allowsuser's certificate chain (userCert), if one is provided in theKDC to look uprequest. This is done by verifying theDiffie Hellman private value corresponding tocertification path against theidentifier. DependingKDC's policy of legitimate certifiers. This may be based onhow often the KDC updates its private Diffie Hellman parameters,a certification hierarchy, or itwill have to store anywhere betweenmay be simply ahandful and several dozenlist ofthese identifiers and their parameters. The KDC must send its Diffie Hellman public value to the client first so the client can encrypt its new symmetric key. In the case whererecognized certifiers in a system like PGP. If theuser principalcertification path does notneed to be recovered and the user still uses old clients as well as new clients,match one of theKDC_ERR_NULL_KEY error is sent in response to symmetric AS_REQ messages when there is no valid symmetric key inKDC's trusted certifiers, the KDCdatabase. This situation can occur if the user principal has been recovered but no new symmetric key has been established in the database. In addition, the two error messages withsends back an errorcodes KDC_ERR_PREAUTH_FAILEDmessage of type KDC_ERROR_CLIENT_NOT_TRUSTED, andKDC_ERR_PREAUTH_REQUIRED are modified soit includes in the error datacontains the kdcSalt encoded as an OCTET STRING. The reason for the modification is to allow principals that use new clients only to have their symmetric key transparently updated byfield a list of its own trusted certifiers, upon which the clientsoftware during the recovery phase. The kdcSalt is used to createresends thenew symmetric key. As a performance optimization, the kdcSaltrequest. If trustedCertifiers isstoredprovided in the/krb5/salt file along with the realm. ThusPA-PK-AS-REQ, the/krb5/salt file consistsKDC verifies that it has a certificate issued by one ofrealm-salt pairs. Ifthefile is missing, orcertifiers trusted by thesalt isclient. If it does notcorrect, the above error messages allow the client to find out the correct salt. New clients which are configured for symmetric key authentication attempt to preauthenticate with the salt fromhave a suitable certificate, the/krb5/salt file asKDC returns aninput into their key, and if the file is not present, the new client does not use preauthentication. Theerrormessages above return either the correct salt to use, or no salt at all which indicates that the principal is still using old clients (the client software should use the existing mapping from the user passwordmessage of type KDC_ERROR_KDC_NOT_TRUSTED to thesymmetric key). In order to assure interoperability between clients from different vendors and organizations,client. If astandard algorithm is needed for creating the symmetric key fromtrust relationship exists, theprincipal password and kdcSalt. The algorithm for creatingKDC then verifies thesymmetric key is as follows: takeclient's signature on PKAuthenticator. If that fails, theSHA-1 hashKDC returns an error message ofthe kdcSalt concatenated with the principal password and use the 20 byte output as the input into the existing key generation process (string to key function). After a compromise,type KDC_ERROR_INVALID_SIG. Otherwise, the KDCchangesuses thekdcSalt; thus,timestamp in therecovery algorithm allows usersPKAuthenticator toobtainassure that the request is not anew symmetric key without actually changing their password.replay. Theresponse from theKDCwould be identical to the responsealso verifies that its name is specified in PKAuthenticator. Assuming no errors, the KDC replies as per RFC 1510, except thatinstead of being encrypted in the secret key shared byit encrypts theclient andreply not with theKDC, it is encrypted inuser's key, but with a random keyfreshlygeneratedby the KDC (of type ENCTYPE_ENC_CBC_CRC). A preauthentication field (specified below) accompanies the response, optionally containing a certificate with the public keyonly forthe KDC (since we do not assume that the client knowsthispublic key), and a package containing the secret key in which the rest of the response is encrypted, along with the same nonce used in the rest of the response, in order to prevent replays.particular response. Thispackage is itself signed with the private key of the KDC, then encrypted with the symmetricrandom keythatisreturned encryptedsealed in thepublic key of the user (or for Diffie Hellman, encrypted in the shared secret Diffie Hellman symmetric key). Pictorially, in the public key encryption case we have: kdcCert, {[encReplyKey, nonce] Sig w/KDC privkey}EncReplyTmpKey, {EncReplyTmpKey}Userpubkey Pictorially, in the Diffie Hellman case we have: kdcCert, {encReplyKey, nonce}DH shared symmetric key, [DH public value]Sig w/KDC privkeypreauthentication field: PA-PK-AS-REP ::= SEQUENCE {kdcCert[0]-- PA TYPE 18 kdcCert [0] SEQUENCE OFCertificate, encryptShell[1] EncryptedData,Certificate OPTIONAL, --EncPaPkAsRepPartShellthe KDC's certificate --encryptedoptionally followed by that --encReplyTmpKey or DH -- shared symmetric key pubKeyExchange[2] PubKeyExchange OPTIONAL, -- a choice betweencertificate's certifier chain encPaReply [1] EncryptedData, --a KDC signed DHof type PaReply --value and ausing either the client public -- keyencrypted -- symmetric key. -- Not needed after -- recovery when -- DH is used. } PubKeyExchange ::= CHOICE { signedDHPubVal SignedDHPublicValue, encryptKey EncryptedData -- EncPaPkAsRepTmpKeyor the Diffie-Hellman key --encryptedspecified by-- userPublicKey }SignedDHPublicValue::= SEQUENCE { dhPublic[0] SubjectPublicKeyInfo, dhPublicSig[1] SignaturesignedDHPublicValue [2] SignedDHPublicValue OPTIONAL }EncPaPkAsRepPartShellPaReply ::= SEQUENCE {encReplyPart[0] EncPaPkAsRepPart, encReplyPartSig[1] Signature OPTIONAL -- encReplyPartreplyEncKeyPack [0] ReplyEncKeyPack, replyEncKeyPackSig [1] Signature, --signed by kdcPrivateKey -- except not present inof replyEncKeyPack --DH caseusing KDC's signature key }EncPaPkAsRepPartReplyEncKeyPack ::= SEQUENCE {encReplyKey[0]replyEncKey [0] EncryptionKey,nonce[1] INTEGER,-- used to encrypt main reply nonce [1] INTEGER -- binds response to the request -- passed in the PKAuthenticator }EncPaPkAsRepTmpKeySignedDHPublicValue ::= SEQUENCE {encReplyTmpKey[0] EncryptionKeydhPublicValue [0] SubjectPublicKeyInfo, dhPublicValueSig [1] Signature -- of dhPublicValue -- using KDC's signature key } Thekdc-cert specificationkdcCert field islifted, with slight modifications, from v3a sequence of certificates, theX.509 certificate specification: Certificate ::= SEQUENCE { version[0] Version DEFAULT v1 (1), serialNumber[1] CertificateSerialNumber, signature[2] AlgorithmIdentifier, issuer[3] PrincipalName, validity[4] Validity, subjectRealm[5] Realm, subject[6] PrincipalName, subjectPublicKeyInfo[7] SubjectPublicKeyInfo, issuerUniqueID[8] IMPLICIT UniqueIdentifier OPTIONAL, subjectUniqueID[9] IMPLICIT UniqueIdentifier OPTIONAL, authentSig[10] Signature } The kdc-certfirst of which must have as its rootcertificationcertifier one of the certifiers sent to the KDCwith the original request. Ifin theKDC has no such certification, then itPA-PK-AS-REQ. Any subsequent certificates willinstead reply with a KRB_ERRORbe certificates oftype KDC_ERROR_PREAUTH_FAILED. If a zero-length root-cert was sent bytheclient as partcertifiers of thePA-PK-AS-ROOT, then a correspondingly zero-length kdc-certKDC's certificate. These cerificates may beabsent, in which caseused by the clientuses its copy ofto verify the KDC's public key.InThis field is empty if thecaseclient did not send to the KDC a list ofrecovery,trusted certifiers (the trustedCertifiers field was empty). Since each certifier in theclient uses its copycertification path of a user's certificate is essentially a separate realm, thebackup KDC public key. Upon receiptname of each certifier shall be added to theresponse fromtransited field of theKDC,ticket. The format of these realm names shall follow theclientnaming constraints set forth in RFC 1510 (sections 7.1 and 3.3.3.1). Note that this willverify the public keyrequire new nametypes to be defined forthe KDC from PA-PK-AS-REP preauthentication data field.PGP certifiers and other types of realms as they arise. The KDC's certificate mustcertifybind the public keyas belongingto aprincipal whosenamecan be derivedderivable from therealm name. If the certificate checks out, the client then decrypts the EncPaPkAsRepPart and verifies the signaturename of the realm for that KDC.ItThe client thenusesextracts the random keycontained thereinused todecrypt the rest of the response, and continues as per RFC 1510. Because there is direct trust between the user and the KDC, the transited field of the ticket returned by the KDC should remain empty. (Cf. Section 3.3.) Examples We now give several examples illustratingencrypt theprotocols in this section. Encryption of message M withmain reply. This random keyK(in encPaReply) isdenoted {M}K andencrypted with either thesignature of message Mclient's public key or with a keyK is denoted [M]K. Example 1: The requesting user principal needs to be recovered and uses only new clients. The recovery algorithm is Diffie Hellman (DH). Thenderived from theexchange sequenceDH values exchanged between theuser principalclient and theKDC is: Client --------> AS_REQ (with or without preauth) --------> KDC Client <--- KRB_ERROR (error code KDC_RECOVERY_NEEDED) <--- KDC error data: [nonce, algID (DH), KDC DH public parameter, KDC DH ID, KDC PublicKey Kvno and PublicKey, KDC Salt]SignedKDC. 3.3. Digital Signature Implementation of the changes in this section are OPTIONAL for compliance withKDC PrivateKey Atpk-init. We offer thispoint,option with theclient validateswarning that it requires theKDC signature, checksclient tosee ifgenerate a random key; thenonce isclient may not be able to guarantee the same level of randomness as theone in the AS_REQ, and storesKDC. If thenew KDC public key and public key version number. The client then generatesuser registered aDiffie Hellman private parameter and computes the corresponding Diffie Hellman public parameter; the client also computes the shared Diffie Hellman symmetricdigital signature keyusingwith the KDCDiffie Hellman public parameter and its own Diffie Hellman private parameter. Next, theinstead of an encryption key, then a separate exchange must be used. The clientprompts the usersends a request forhis/her password (ifa TGT as usual, except that itdoes not already have the password). The password is concatenated with the KDC Salt and then SHA1 hashed; the result is fed into(rather than thestring to key function to obtainKDC) generates thenew user DES key. The new user DESrandom key that will beencrypted (along with the AS_REQ nonce) usingused to encrypt theDiffie Hellman symmetricKDC response. This keyandis 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 thenew AS_REQ message: Client -> AS_REQ with preauth: rootCert, [PKAuthenticator with user DHKDC's publicparameter, {newUser DES key, nonce}DH symmetric key, KDC DH ID]Signed with User PrivateKey -> KDC The KDC DH IDkey } 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 copiedby the clientfrom theKDC_ERROR message received above.request. Upon receiptand validationofthis message, the KDC first uses the KDC DH ID as an index to locate its private Diffie Hellman parameter; it uses this parameter in combination with the user public Diffie Hellman parameter to compute the symmetric Diffie Hellman key. The KDC checks iftheencrypted nonce isPA-PK-AS-SIGN, thesame as the one in the PKAuthenticator and the AS_REQ part. TheKDC decrypts thenenters the new user DES key into the database, resets the recovery needed bit, and setsverifies thevalid symmetric key in database bit. The KDCrandomKey. It thencreatesreplies as per RFC 1510, except that theAS_REP message: Client <-- AS_REP with preauth: kdcCert, {encReplyKey, nonce}DH symmetric key <-------------------- KDC The AS_REP encrypted partreply is encrypted not with a password-derived user key, but with theencReplyKey that is generated onrandomKey sent in theKDC. The nonces are copied fromrequest. Since the clientAS_REQ. The kdcCertalready knows this key, there isa sequence of certificates that have been certified by certifiers listed inno need to accompany theclient rootCert field, unless a zero length rootCertreply with an extra preauthentication field. The transited fieldwas sent. Inof thelast case,ticket should specify the certification path as described in Section 3.2. 3.4. Retrieving thekdcCert will also have zero length. 3.2.2.Privatekey held byKey From the KDC Implementation of the changes in this section isRECOMMENDED.RECOMMENDED for compliance with pk-init. When the user's private key is notcarried withstored local to the user,the userhe mayencryptchoose to store the private keyusing conventional cryptography, and register the(normally encryptedprivate key withusing a password-derived key) on the KDC.As described in the previous section, the SHA1 hash of the password concatenated with the kdcSalt is also stored in the KDC database if the user only uses new clients.Werestrict users of this protocol to using new clients only. The reason forprovide thisrestriction is that it is not secureoption tostore both the user private key encrypted in the user's password andpresent the userpassword on the KDC simultaneously. There are several options forwith an alternative to storingprivate keys. Iftheuser stores theirprivate key ona removable disk, it is less convenient since they need to always carry thelocal diskaround with them; in addition, the procedures for extractingat each machine where he expects to authenticate himself using pk-init. It should be noted that it replaces thekey may vary between different operating systems. Alternatively,added risk of long-term storage of theuser can store aprivate key on possibly many workstations with thehard disks of systems that he/she uses; besides limiting the systems that the user can login from there is also a greater securityadded riskto the private key. If smart card readers or slots are deployed in an organization, thenof storing theuser can store his/herprivate key ona smart card. Finally,theuser can store his/her private key encryptedKDC in apassword on the KDC. This last option is probably the most practical option currently; it is important that a good password policy be used. When the user's private key is stored on the KDC, preauthentication is required. There are two cases depending on whether the requesting user principal needsform vulnerable tobe recovered.brute-force attack. In order to obtainitsa private key,a user principal includes the padata type PA-PK-AS-REQ inthe client includes a preauthenticationdatafieldofwith theAS_REQ message. The accompanying pa-data field is: PA-PK-AS-REQAS-REQ message: PA-PK-KEY-REQ ::= SEQUENCE {algorithmId[0] INTEGER,--Public Key Alg. encClientPubVal[1] EncryptedDataPA TYPE 20 patimestamp [0] KerberosTime OPTIONAL, --EncPaPkAsReqDHused to address replay attacks. pausec [1] INTEGER OPTIONAL, --(encrypted with keyused to address replay attacks. nonce [2] INTEGER, --K1) } EncPaPkAsReqDH ::= SEQUENCE { clientPubValue[0] SubjectPublicKeyInfo } Pictorially, PA-PK-AS-REQ is algorithmID, {clientPubValue}K1. The user principal sends its Diffie-Hellman public value encrypted inbinds thekey K1. The key K1 is derived by performing stringreply tokey on the SHA1this request privkeyID [3] SEQUENCE OF KeyID OPTIONAL -- constructed as a hash ofthe user password concatenated with the kdcSalt which is stored in the /krb5/salt file. If the file is absent, the concatenation step is skipped in the above algorithm. The Diffie Hellman parameters g and p are implied by the algorithmID field. By choosing g and p correctly, dictionary attacks against the-- public keyK1 can be made more difficult [Jaspan]. If the requesting user principal needs recovery, the encrypted usercorresponding to -- desired private keyis stored in the KDC database, and the AS_REQ RecoveryData field is not present in the PKAuthenticator, then the KDC replies with a KRB_ERROR message, with msg-type set to KDC_ERR_PREAUTH_REQUIRED, and e-data set to: PA-PK-AS-INFO} KeyID ::= SEQUENCE {signedDHErr SignedDHError, -- signed by KDC encUserKeyKeyIdentifier [0] OCTET STRINGOPTIONAL -- encrypted by -- user password -- key; (recovery -- response)} Theuser principal should then continue with the section 3.2.1.1 protocol using the Diffie Hellman algorithm. We now assume that the requesting user principal does not need recovery. Upon receipt of the authenticationclient may requestwitha specific private key by sending thePA-PK-AS-REQ,corresponding ID. If this field is left empty, then all private keys are returned. If all checks out, the KDCgenerates the AS responseresponds asdefined in RFC 1510, but additionally includes a preauthentication field of type PA-PK-USER-KEY. PA-PK-USER-KEY ::= SEQUENCE { kdcCert SEQUENCE OF Certificate, encUserKeyPart EncryptedData, -- EncPaPkUserKeyPart kdcPrivKey KDCPrivKey, kdcPrivKeySig Signature } The kdc-cert field is identical to thatdescribed in thePA-PK-AS-REPabove sections, except that an additional preauthenticationdata field returned with the KDC response, and must be validated as belonging tofield, containing theKDC inuser's private key, accompanies thesame manner. KDCPrivKeyreply: PA-PK-KEY-REP ::= SEQUENCE {nonce INTEGER,--From AS_REQ algorithmIdPA TYPE 21 nonce [0] INTEGER, --DH algorithm kdcPubValue SubjectPublicKeyInfo, -- DH algorithm kdcSalt OCTET STRING -- Since user -- uses only new -- clients } The KDCPrivKey field is signed usingbinds theKDC private key. The encrypted part of the AS_REP message is encrypted using the Diffie Hellman derived symmetric key, as isreply to theEncPaPkUserKeyPart. EncPaPkUserKeyPartrequest KeyData [1] SEQUENCE OF KeyPair } KeyPair ::= SEQUENCE {encUserKeyprivKeyID [0] OCTET STRING,nonce INTEGER--From AS_REQ } Notationally, if encryption algorithm A is used, then enc-key-part is A ({encUserKey, nonce}, Diffie-Hellman-symmetric-key). If the client has used an incorrect kdcSaltcorresponding tocomputeencPrivKey encPrivKey [1] OCTET STRING } 3.4.1. Additional Protection of Retrieved Private Keys We solicit discussion on thekey K1, thenfollowing proposal: that the clientneedsmay optionally include in its request additional data toresubmit the above AS_REQ message using the correct kdcSalt field from the KDCPrivKey field. This message containsencrypt theencryptedprivatekey that has been registered with the KDC by the user, as encryptedkey, which is currently only protected by theuser, super-encrypted with the Diffie Hellman derived symmetric key. Because thereuser's password. One possibility isdirect trust between the user and the KDC,that thetransited fieldclient might generate a random string of bits, encrypt it with theticket returned bypublic key of the KDCshould remain empty. (Cf. Section 3.3.) Examples We now give several examples illustrating the protocols(as inthis section. Example 1: The requesting user principal needs to be recovered and stores his/her encrypted private key ontheKDC. Then the exchange sequence between the user principal and the KDC is: Client --------> AS_REQ (with or without preauth) -----> KDC Client <--- KRB_ERROR (error code KDC_ERR_PREAUTH_REQUIRED) error data: [nonce, algID (DH), KDC DH public parameter, KDC DH ID, KDC PublicKey Kvno and PublicKey, KDC Salt]Signed with KDC PrivateKey, {user private key}user password <------------- KDC The protocol now continuesSignedKeyPack, but withthe second AS_REQ asan ordinary OCTET STRING inExample 1place ofsection 3.2.1.1. Example 2: The requesting user principal does not need to be recovered and stores his/her encrypted private key on the KDC. Then the exchange sequence between the user principalan EncryptionKey), and include this with the request. The KDCwhen the user principal wants to obtain his/her privatethen XORs each returned keyis: Client -> AS_REQwithpreauth: algID, {DH public parameter}K1 -> KDC The key K1 is generated by usingthis random bit string. (If the bit stringto key function on the SHA1 hash of the password concatenated with the kdcSalt from the /krb5/salt file. If the fileisabsent, then the concatenation step is skipped, and the client will learn the correct kdcSalt in the following AS_REP message fromtoo short, theKDC. The algID should indicate some type of Diffie Hellman algorithm. TheKDCreplies withcould either return an error, or XOR theAS_REP messagereturned key with apreauthentication data field: Client <-- AS_REP with preauth: kdcCert, {encUserKey, <-- KDC nonce}DH symmetric key, [nonce, algID, DH public parameter, kdcSalt]KDC privateKey The client validates the KDC's signature and checks that the nonce matches the nonce in its AS_REQ message. If the kdcSalt does not match what the client used, it starts the protocol over. The client then uses the KDC Diffie Hellman public parameter along with its own Diffie Hellman private parameter to computerepetition of theDiffie Hellman symmetric key. This key is usedbit string.) In order todecrypt the encUserKey field; the client checks if the nonce matches its AS_REQ nonce. Atmake thispoint, the initial authentication protocol is complete. Example 3: The requesting user principal does notwork, additional means of preauthentication need to berecovered and stores his/her encrypted private key on the KDC. In this example, the user principal uses the conventional symmetric key Kerberos V5 initial authentication protocol exchange. We note that the conventional protocol exposes the user passworddevised in order todictionary attacks; therefore, the user password must be changed more often. An example of whenprevent attackers from simply inserting their own bit string. One way to do thisprotocol would be usediswhen new clients have been installed but an organization has not phased in public key authentication for all clients duetoperformance concerns. Client ----> AS_REQ with preauthentication: {time}K1 --> KDC Client <-------------------- AS_REP <------------------ KDC The key K1 is derived as in the preceding two examples. 3.3. Clients withstore apublic key certified by an outside authority Implementationhash of thechanges in this section is OPTIONAL. In the case where the client is not registered with the current KDC, the client is responsible for obtaining the privatepassword-derived keyon its own. The client will request initial tickets from the KDC using the TGS exchange, but instead of performing preauthentication using a Kerberos ticket granting ticket, or with the PA-PK-AS-REQ that is(the one usedwhento encrypt thepublic keyprivate key). This hash isknownthen used in turn tothe KDC, the client performs preauthentication using the preauthentication data field of type PA-PK-AS-EXT-CERT: PA-PK-AS-EXT-CERT ::= SEQUENCE { userCert[0] SEQUENCE OF OCTET STRING, signedAuth[1] SignedPKAuthenticator } where the user-cert specification depends on the type of certificate that the user possesses. In cases where the service has separatederive a second keypairs for digital signature and for encryption, we recommend that the signature keys be used for(called thepurposes of sendinghash-key); thepreauthentication (and deciphering the response). The authenticatorhash-key isthe oneusedfrom the exchange in section 3.2.1, except that it is signed using the private key correspondingto encrypt an ASN.1 structure containing thepublic key in the user-cert. The KDC will verify the preauthentication authenticator,generated bit string andcheck the certification path against its own policy of legitimate certifiers. This may be based onacertification hierarchy, or simply a list of recognized certifiers in a system like PGP. If all checks out, the KDC will issue Kerberos credentials, as in 3.2, but with the names of all the certifiers in the certification path addednonce value that binds it to thetransited field of the ticket, with a principal name taken fromrequest. Since thecertificate (this might be a long path for X.509, or a string like "John Q. Public <jqpublic@company.com>" ifKDC possesses thecertificate was a PGP certificate. The realm will identifyhash, it can generate thekind of certificatehash-key andthe final certifier as follows: cert_type/final_certifier as in PGP/<endorser@company.com>. 3.4. Digital Signature Implementation of the changes in this section is OPTIONAL. We offerverify thisoption with(weaker) preauthentication, and yet cannot reproduce thewarning that it requiresprivate key itself, since theclient process to generatehash is arandom DES key; this generation may notone-way function. 4. Logistics and Policy Issues We solicit discussion on how clients and KDCs should beableconfigured in order toguarantee the same leveldetermine which ofrandomness as the KDC. If a user registered a digital signature key pair withtheKDC, a separate exchange mayoptions described above (if any) should be used.The client sends a KRB_AS_REQ as described in section 3.2.2. IfOne possibility is to set the user's database recordindicates that a digital signature key istobe used, then the KDC sends back a KRB_ERROR as in section 3.2.2. It is assumed hereindicate thatthe signature key is stored on local disk. The client generates a random key of enctype ENCTYPE_DES_CBC_CRC, signs it using the signature key (otherwise the signatureauthentication isperformed as described in section 3.2.1), then encrypts the whole with theto use public keyof the KDC. This is returned with a separate KRB_AS_REQ in a preauthentication of type PA-PK-AS-SIGNED ::= SEQUENCE { signedKey[0] EncryptedData -- PaPkAsSignedData } PaPkAsSignedData ::= SEQUENCE { signedKeyPart[0] SignedKeyPart, signedKeyAuth[1] PKAuthenticator, sig[2] Signature } SignedKeyPart ::= SEQUENCE { encSignedKey[0] EncryptionKey, nonce[1] INTEGER } where the nonce is the one from the request. Upon receipt of the request, the KDC decrypts, then verifies the random key. It then replies as per RFC 1510, except that instead of being encrypted with the password-derived DES key, the reply is encrypted using the randomKey sent by the client. Since the client already knowscryptography; thiskey, there is no need to accompany the reply with an extra preauthentication field. Because there is direct trust between the user and the KDC, the transited field of the ticket returned by the KDC should remain empty. (Cf. Section 3.3.) In the event that the KDC database indicates that the user principal must be recovered, and the PKAuthenticator does not contain the RecoveryData field, the KDCwillreply with the KDC_RECOVERY_NEEDED error. The user principal then sends another AS_REQ message that includes the RecoveryData field in the PKAuthenticator. The AS_REP message is the same asnot work, however, in thebasic Kerberos V5 protocol. 4. Preauthentication Data Types We proposeevent that thefollowing preauthentication types be allocated forclient needs to know before making thepreauthentication data packages described in this draft: #define KRB5_PADATA_ROOT_CERT 17 /* PA-PK-AS-ROOT */ #define KRB5_PADATA_PUBLIC_REP 18 /* PA-PK-AS-REP */ #define KRB5_PADATA_PUBLIC_REQ 19 /* PA-PK-AS-REQ */ #define KRB5_PADATA_PRIVATE_REP 20 /* PA-PK-USER-KEY */ #define KRB5_PADATA_PUBLIC_EXT 21 /* PA-PK-AS-EXT-CERT */ #define KRB5_PADATA_PUBLIC_SIGN 22 /* PA-PK-AS-SIGNED */initial request. 5.Encryption Information For the public key cryptography used in direct registration, we used (in our implementation) the RSAREF library supplied with the PGP 2.6.2 release. Encryption and decryption functions were implemented directly on top of the primitives made available therein, rather than the fully sealing operations in the API. 6.Compatibility with One-Time Passcodes We solicit discussion on how theuse of public key cryptography for initial authenticationprotocol changes proposed in this draft will interact with the proposed use ofone time passwordsone-time passcodes discussed inInternet Draft <draft-ietf-cat-kerberos-passwords-00.txt>. 7.draft-ietf-cat-kerberos-passwords-00.txt. 6. Strength ofEncryption and Signature MechanismsCryptographic Schemes In light of recent findings on thestrengthsstrength of MD5 andvarious DES modes,DES, we solicit discussion on whichmodesencryption 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 ThisInternet-Draftdraft expireson April 19,September 30, 1997.9. Authors' Addresses B.10. Authors Clifford NeumanUSC/Information Sciences Institute 4676 Admiralty Way Suite 1001 Marina del Rey, CA 90292-6695 Phone: 310-822-1511 EMail: bcn@isi.eduBrian TungUSC/InformationUSC Information Sciences Institute 4676 Admiralty Way Suite 1001 Marina delRey,Rey CA 90292-6695 Phone:310-822-1511 EMail: brian@isi.edu+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:508-486-5210 EMail:+1 508 486 5210 E-mail: wray@tuxedo.enet.dec.comJonathan TrostleAri Medvinsky Matthew Hur CyberSafe Corporation 1605 NW SammamishRd.,Road Suite 310Issaquah,Issaquah WA 98027-5378 Phone:206-391-6000 EMail: jonathan.trostle@cybersafe.com+1 206 391 6000 E-mail: {ari.medvinsky, matt.hur}@cybersafe.com Jonathan Trostle Novell E-mail: jonathan.trostle@novell.com