
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19623 ec53bebd-3082-4978-b11e-865c3cabbd6b
615 lines
27 KiB
Plaintext
615 lines
27 KiB
Plaintext
INTERNET-DRAFT Clifford Neuman
|
|
draft-ietf-cat-kerberos-pk-init-01.txt Brian Tung
|
|
Updates: RFC 1510 ISI
|
|
expires December 7, 1996 John Wray
|
|
Digital Equipment Corporation
|
|
|
|
|
|
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 docu-
|
|
ments at any time. It is inappropriate to use Internet-Drafts as
|
|
reference material or to cite them other than as ``work in pro-
|
|
gress.''
|
|
|
|
To learn the current status of any Internet-Draft, please check the
|
|
``1id-abstracts.txt'' listing contained in the Internet-Drafts Sha-
|
|
dow 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-01.txt, and expires December 7, 1996.
|
|
Please send comments to the authors.
|
|
|
|
|
|
1. Abstract
|
|
|
|
This document defines extensions to the Kerberos protocol specifi-
|
|
cation (RFC 1510, "The Kerberos Network Authentication Service
|
|
(V5)", September 1993) to provide a method for using public key
|
|
cryptography during initial authentication. The method defined
|
|
specifies the way in which preauthentication data fields and error
|
|
data fields in Kerberos messages are to be used to transport public
|
|
key data.
|
|
|
|
2. Motivation
|
|
|
|
Public key cryptography presents a means by which 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 the public
|
|
key nor the private key can be derived from the other (although the
|
|
private key RECORD may include the information required to generate
|
|
BOTH keys). Hence, a message encrypted with a public key is private,
|
|
since only the person possessing the private key can decrypt it;
|
|
similarly, someone possessing the private key can also 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 from a pseudo-random
|
|
number sequence. While it is true that messages encrypted using
|
|
public key cryptography are actually encrypted with a conventional
|
|
secret key, which is in turn encrypted using the public key pair,
|
|
the secret key is also randomly generated and is hence not vulnerable
|
|
to a dictionary attack.
|
|
|
|
The advantages provided by public key cryptography have produced a
|
|
demand for its integration into the Kerberos authentication protocol.
|
|
The primary advantage of registering public keys with the KDC lies in
|
|
the ease of recovery in case the KDC is compromised. With Kerberos as
|
|
it currently stands, compromise of the KDC is disastrous. All
|
|
keys become known by the attacker and all keys must be changed.
|
|
|
|
If users register public keys, compromise of the KDC does not divulge
|
|
their private key. Compromise of security on the KDC is still a
|
|
problem, since an attacker can impersonate any user by certifying a
|
|
bogus key with the KDC's private key. However, all bogus
|
|
certificates can be invalidated by revoking and changing the
|
|
KDC's public key. Legitimate users have to re-certify their public
|
|
keys with the new KDC key, but the users's keys themselves do not
|
|
need to be changed. Keys for application servers are conventional
|
|
symmetric keys and must be changed.
|
|
|
|
Note: If a user stores his private key, in an encrypted form, on the
|
|
KDC, then he does have to change the key pair, since the private key
|
|
is encrypted using a symmetric key derived from a password (as
|
|
described below), and is therefore vulnerable to dictionary attack.
|
|
Assuming good password policy, however, legitimate users may be
|
|
allowed to use the old password for a limited time, solely for the
|
|
purpose of changing the key pair. The realm administrator is then
|
|
not forced to re-key all users.
|
|
|
|
There are two important areas where public key cryptography will have
|
|
immediate use: in the initial authentication of users registered with
|
|
the KDC or using public key certificates from outside authorities,
|
|
and to establish inter-realm keys for cross-realm authentication.
|
|
This memo describes a method by which the first of these can be done.
|
|
The second case will be the topic for a separate proposal.
|
|
|
|
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 are drawn from the DASS system, and
|
|
similar extensions have been discussed for use in DCE. These changes
|
|
are by no means endorsed by these groups. This is an attempt to
|
|
revive some of the goals of that group, and the proposal approaches
|
|
those goals primarily from the Kerberos perspective.
|
|
|
|
|
|
3. Initial authentication of users with public keys
|
|
|
|
This section describes the extensions to Version 5 of the Kerberos
|
|
protocol that will support the use of public key cryptography by
|
|
users in the initial request for a ticket granting ticket. This
|
|
proposal is based on the implementation already made available;
|
|
nevertheless, we solicit any comments on modifications or additions
|
|
to the protocol description below.
|
|
|
|
Roughly speaking, the following changes to RFC 1510 are proposed:
|
|
a. The KDC's response is encrypted using a random nonce key,
|
|
rather than the user's secret key.
|
|
b. This random key accompanies the response in a
|
|
preauthentication field, encrypted and signed using the
|
|
public key pairs of the user and the KDC.
|
|
Certificate and message formats are also defined in this section.
|
|
|
|
This proposal will allow users either to use keys registered 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 the
|
|
current secret key.
|
|
|
|
The application request and response between Kerberos clients and
|
|
application servers will continue to be based on conventional
|
|
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 of the benefits of
|
|
integrating public key with Kerberos can be attained for 20 percent
|
|
of the effort, by addressing only initial authentication. This
|
|
proposal does not preclude separate extensions.
|
|
|
|
With these changes, users will be able to register public keys, only
|
|
in realms that support public key, and they will then only be able
|
|
to perform initial authentication from a client that supports public key,
|
|
although 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 proposal addresses three ways in which users may use public key
|
|
cryptography for initial authentication with Kerberos, with minimal
|
|
change to the existing protocol. Users may register keys directly
|
|
with the KDC, or they may present certificates by outside certification
|
|
authorities (or certifications by other users) attesting to the
|
|
association of the public key with the named user. In both cases,
|
|
the end result is that the user obtains a conventional ticket
|
|
granting ticket or conventional server ticket that may be used for
|
|
subsequent authentication, with such subsequent authentication using
|
|
only conventional cryptography.
|
|
|
|
Additionally, users may also register a digital signature key with
|
|
the KDC. We provide this option for the licensing benefits, as well
|
|
as a simpler variant of the initial authentication exchange. However,
|
|
this option relies on the client to generate random keys.
|
|
|
|
We first consider the case where the user's key is registered with
|
|
the KDC.
|
|
|
|
|
|
3.1 Definitions
|
|
|
|
Before we proceed, we will lay some groundwork definitions for
|
|
encryption and signatures. We propose the following definitions
|
|
of signature and encryption modes (and their corresponding values
|
|
on the wire):
|
|
|
|
#define ENCTYPE_SIGN_MD5_RSA 0x0011
|
|
|
|
#define ENCTYPE_ENCRYPT_RSA_PRIV 0x0021
|
|
#define ENCTYPE_ENCRYPT_RSA_PUB 0x0022
|
|
|
|
allowing further modes to be defined accordingly.
|
|
|
|
In the exposition below, we will use the notation E (T, K) to denote
|
|
the encryption of 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 cannot be
|
|
used by the KDC.
|
|
|
|
3.2.1 User's private key is stored locally
|
|
|
|
If the user stores his private key locally, the initial request to
|
|
the KDC for a ticket granting ticket proceeds according to RFC 1510,
|
|
except that a preauthentication field containing a nonce signed by
|
|
the user's private key is included. The preauthentication field
|
|
may also include a list of the root certifiers trusted by the user.
|
|
|
|
PA-PK-AS-ROOT ::= SEQUENCE {
|
|
rootCert[0] SEQUENCE OF OCTET STRING,
|
|
signedAuth[1] SignedPKAuthenticator
|
|
}
|
|
|
|
SignedPKAuthenticator ::= SEQUENCE {
|
|
authent[0] PKAuthenticator,
|
|
authentSig[1] Signature
|
|
}
|
|
|
|
PKAuthenticator ::= SEQUENCE {
|
|
cksum[0] Checksum OPTIONAL,
|
|
cusec[1] INTEGER,
|
|
ctime[2] KerberosTime,
|
|
nonce[3] INTEGER,
|
|
kdcRealm[4] Realm,
|
|
kdcName[5] PrincipalName
|
|
}
|
|
|
|
Signature ::= SEQUENCE {
|
|
sigType[0] INTEGER,
|
|
kvno[1] INTEGER OPTIONAL,
|
|
sigHash[2] OCTET STRING
|
|
}
|
|
|
|
Notationally, sigHash is then
|
|
|
|
sigType (authent, userPrivateKey)
|
|
|
|
where userPrivateKey is the user's private key (corresponding to the
|
|
public key held in the user's database record). Valid sigTypes are
|
|
thus far limited to the above-listed ENCTYPE_SIGN_MD5_RSA; we expect
|
|
that other types may be listed (and given on-the-wire values between
|
|
0x0011 and 0x001f).
|
|
|
|
The format 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 likely
|
|
to have more certifications than users have trusted root certifiers,
|
|
we have chosen the first method.) In the event that the client
|
|
believes it already possesses the current public key 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; in addition, we include a client-
|
|
generated nonce, and the name of the KDC. The structure is itself
|
|
signed using the user's private key corresponding to the public key
|
|
registered with the KDC.
|
|
|
|
Typically, preauthentication using a secret key would not be included,
|
|
but if included it may be ignored by the KDC. (We recommend that it
|
|
not be included: even if the KDC should ignore the preauthentication,
|
|
an attacker may not, and use an intercepted message to guess the
|
|
password off-line.)
|
|
|
|
The response from the KDC would be identical to the response in RFC 1510,
|
|
except that instead of being encrypted in the secret key shared by the
|
|
client and the KDC, it is encrypted in a random key freshly generated
|
|
by the KDC (of type ENCTYPE_ENC_CBC_CRC). A preauthentication field
|
|
(specified below) accompanies the response, optionally containing a
|
|
certificate with the public key for the KDC (since we do not assume
|
|
that the client knows this public 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. This package is itself encrypted with the private key of the
|
|
KDC, then encrypted with the public key of the user.
|
|
|
|
PA-PK-AS-REP ::= SEQUENCE {
|
|
kdcCert[0] SEQUENCE OF Certificate,
|
|
encryptShell[1] EncryptedData, -- EncPaPkAsRepPartShell
|
|
-- encrypted by encReplyTmpKey
|
|
encryptKey[2] EncryptedData -- EncPaPkAsRepTmpKey
|
|
-- encrypted by userPubliKey
|
|
}
|
|
|
|
EncPaPkAsRepPartShell ::= SEQUENCE {
|
|
encReplyPart[0] EncPaPkAsRepPart,
|
|
encReplyPartSig[1] Signature -- encReplyPart
|
|
-- signed by kdcPrivateKey
|
|
}
|
|
|
|
EncPaPkAsRepPart ::= SEQUENCE {
|
|
encReplyKey[0] EncryptionKey,
|
|
nonce[1] INTEGER
|
|
}
|
|
|
|
EncPaPkAsRepTmpKey ::= SEQUENCE {
|
|
encReplyTmpKey[0] EncryptionKey
|
|
}
|
|
|
|
Notationally, assume that encryptPack is encrypted (or signed) with
|
|
algorithm Ak, and that encryptShell is encrypted with algorithm Au.
|
|
Then, encryptShell is
|
|
|
|
Au (Ak ({encReplyKey, nonce}, kdcPrivateKey), userPublicKey)
|
|
|
|
where kdcPrivateKey is the KDC's private key, and userPublicKey is the
|
|
user's public key.
|
|
|
|
The kdc-cert specification is lifted, with slight modifications,
|
|
from v3 of the X.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-cert must have as its root certification one of the certifiers
|
|
sent to the KDC with the original request. If the KDC has no such
|
|
certification, then it will instead reply with a KRB_ERROR of type
|
|
KDC_ERROR_PREAUTH_FAILED. If a zero-length root-cert was sent by the
|
|
client as part of the PA-PK-AS-ROOT, then a correspondingly zero-length
|
|
kdc-cert may be absent, in which case the client uses its copy of the
|
|
KDC's public key.
|
|
|
|
Upon receipt of the response from the KDC, the client will verify the
|
|
public key for the KDC from PA-PK-AS-REP preauthentication data field,
|
|
The certificate must certify the key as belonging to a principal whose
|
|
name can be derived from the realm name. If the certificate checks
|
|
out, the client then decrypts the EncPaPkAsRepPart using the private
|
|
key of the user, and verifies the signature of the KDC. It then uses
|
|
the random key contained therein to decrypt 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.)
|
|
|
|
|
|
3.2.2. Private key held by KDC
|
|
|
|
Implementation of the changes in this section is OPTIONAL.
|
|
|
|
When the user's private key is not carried with the user, the user may
|
|
encrypt the private key using conventional cryptography, and register
|
|
the encrypted private key with the KDC. The MD5 hash of the DES key
|
|
used to encrypt the private key must also be registered with the KDC.
|
|
|
|
We provide this option with the warning that storing the private key
|
|
on the KDC carries the risk of exposure in case the KDC is compromised.
|
|
If a suffiently good password is chosen to encrypt the key, then this
|
|
password can be used for a limited time to change the private key.
|
|
If the user wishes to authenticate himself without storing the private
|
|
key on each local disk, then a safer, albeit possibly less practical,
|
|
alternative is to use a smart card to store the keys.
|
|
|
|
When the user's private key is stored on the KDC, the KDC record
|
|
will also indicate whether preauthentication is required before
|
|
returning the key (we recommend that it be required). If such
|
|
preauthentication is required, when the initial request is received,
|
|
the KDC will respond with a KRB_ERROR message, with msg-type set
|
|
to KDC_ERR_PREAUTH_REQUIRED, and e-data set to:
|
|
|
|
PA-PK-AS-INFO ::= SEQUENCE {
|
|
kdcCert[0] SEQUENCE OF Certificate
|
|
}
|
|
|
|
The kdc-cert field is identical to that in the PA-PK-AS-REP
|
|
preauthentication data field returned with the KDC response, and must
|
|
be validated as belonging to the KDC in the same manner.
|
|
|
|
Upon receipt of the KRB_ERROR message with a PA-PK-AS-INFO field, the
|
|
client will prompt the user for the password that was used to
|
|
encrypt the private key, derive the DES key from that password,
|
|
and calculate the MD5 hash H1 of the DES key. The client then sends
|
|
a request to the KDC, which includes a timestamp and a
|
|
client-generated random secret key that will be used by the KDC
|
|
to super-encrypt the encrypted private key before it is returned
|
|
to the client. This information is sent to the KDC in a subsequent
|
|
AS_REQ message in a preauthentication data field:
|
|
|
|
PA-PK-AS-REQ ::= SEQUENCE {
|
|
encHashShell[0] EncryptedData -- EncPaPkAsReqShell
|
|
}
|
|
|
|
EncPaPkAsReqShell ::= SEQUENCE {
|
|
encHashPart[0] EncryptedData -- EncPaPkAsReqPart
|
|
}
|
|
|
|
EncPaPkAsReqPart ::= SEQUENCE {
|
|
encHashKey[0] EncryptionKey,
|
|
nonce[1] INTEGER
|
|
}
|
|
|
|
The EncPaPkAsReqPart is first encrypted with a DES key K1, derived
|
|
by string_to_key from the hash H1 (with null salt), then encrypted
|
|
again with the KDC's public key from the certificate in the
|
|
PA-PK-AS-INFO field of the error response.
|
|
|
|
Notationally, if encryption algorithm A is used for DES encryption,
|
|
and Ak is used for the public key encryption, then enc-shell is
|
|
|
|
Ak (A ({encHashKey, nonce}, K1), kdcPublicKey)
|
|
|
|
Upon receipt of the authentication request with the PA-PK-AS-REQ, the
|
|
KDC verifies the hash of the user's DES encryption key by attempting
|
|
to decrypt the EncPaPkAsReqPart of the PA-PK-AS-REQ. If decryption
|
|
is successful, the KDC generates the AS response as defined in
|
|
RFC 1510, but additionally includes a preauthentication field of type
|
|
PA-PK-USER-KEY. (This response will also be included in response to
|
|
the initial request without preauthentication if preauthentication is
|
|
not required for the user and the user's encrypted private key is
|
|
stored on the KDC.)
|
|
|
|
PA-PK-USER-KEY ::= SEQUENCE {
|
|
encUserKeyPart[0] EncryptedData -- EncPaPkUserKeyPart
|
|
}
|
|
|
|
EncPaPkUserKeyPart ::= SEQUENCE {
|
|
encUserKey[0] OCTET STRING,
|
|
nonce[1] INTEGER
|
|
}
|
|
|
|
Notationally, if encryption algorithm A is used, then enc-key-part is
|
|
|
|
A ({encUserKey, nonce}, enc-hash-key)
|
|
|
|
(where A could be null encryption).
|
|
|
|
This message contains the encrypted private key that has been
|
|
registered with the KDC by the user, as encrypted by the user,
|
|
optionally super-encrypted with the enc-hash-key from the PA-PK-AS-REQ
|
|
message if preauthentication using that method was provided (otherwise,
|
|
the EncryptedData should denote null encryption). Note that since
|
|
H1 is a one-way hash, it is not possible for one to decrypt the
|
|
message if one possesses H1 but not the DES key that H1 is derived
|
|
from. 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.)
|
|
|
|
|
|
3.3. Clients with a public key certified by an outside authority
|
|
|
|
Implementation of the changes 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 private key on its own.
|
|
The client will request initial tickets from the KDC using the TGS
|
|
exchange, but instead of performing pre-authentication using a
|
|
Kerberos ticket granting ticket, or with the PA-PK-AS-REQ that is used
|
|
when the public key is known to the 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 separate
|
|
key pairs for digital signature and for encryption, we recommend
|
|
that the signature keys be used for the purposes of sending the
|
|
preauthentication (and deciphering the response).
|
|
|
|
The authenticator is the one used from the exchange in section 3.2.1,
|
|
except that it is signed using the private key corresponding to
|
|
the public key in the user-cert.
|
|
|
|
The KDC will verify the preauthentication authenticator, and check the
|
|
certification path against its own policy of legitimate certifiers.
|
|
This may be based on a certification 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
|
|
added to the transited field of the ticket, with a principal name
|
|
taken from the certificate (this might be a long path for X.509, or a
|
|
string like "John Q. Public <jqpublic@company.com>" if the certificate
|
|
was a PGP certificate. The realm will identify the kind of
|
|
certificate and the 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 offer this option with the warning that it requires the client
|
|
process to generate a random DES key; this generation may not
|
|
be able to guarantee the same level of randomness as the KDC.
|
|
|
|
If a user registered a digital signature key pair with the KDC,
|
|
a separate exchange may be used. The client sends a KRB_AS_REQ as
|
|
described in section 3.2.2. If the user's database record
|
|
indicates that a digital signature key is to be used, then the
|
|
KDC sends back a KRB_ERROR as in section 3.2.2.
|
|
|
|
It is assumed here that the 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 signature is
|
|
performed as described in section 3.2.1), then encrypts the whole with
|
|
the public key of 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
|
|
}
|
|
|
|
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 knows
|
|
this key, 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.)
|
|
|
|
|
|
4. Preauthentication Data Types
|
|
|
|
We propose that the following preauthentication types be allocated
|
|
for the preauthentication 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 */
|
|
|
|
|
|
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 the use of public key cryptography for initial
|
|
authentication will interact with the proposed use of one time passwords
|
|
discussed in Internet Draft <draft-ietf-cat-kerberos-passwords-00.txt>.
|
|
|
|
|
|
7. Strength of Encryption and Signature Mechanisms
|
|
|
|
In light of recent findings on the strengths of MD5 and various DES
|
|
modes, we solicit discussion on which modes to incorporate into the
|
|
protocol changes.
|
|
|
|
|
|
8. Expiration
|
|
|
|
This Internet-Draft expires on December 7, 1996.
|
|
|
|
|
|
9. Authors' Addresses
|
|
|
|
B. Clifford Neuman
|
|
USC/Information Sciences Institute
|
|
4676 Admiralty Way Suite 1001
|
|
Marina del Rey, CA 90292-6695
|
|
|
|
Phone: 310-822-1511
|
|
EMail: bcn@isi.edu
|
|
|
|
Brian Tung
|
|
USC/Information Sciences Institute
|
|
4676 Admiralty Way Suite 1001
|
|
Marina del Rey, CA 90292-6695
|
|
|
|
Phone: 310-822-1511
|
|
EMail: brian@isi.edu
|
|
|
|
John Wray
|
|
Digital Equipment Corporation
|
|
550 King Street, LKG2-2/Z7
|
|
Littleton, MA 01460
|
|
|
|
Phone: 508-486-5210
|
|
EMail: wray@tuxedo.enet.dec.com
|