INTERNET-DRAFT                                                Brian Tung
draft-ietf-cat-kerberos-pk-init-16.txt
draft-ietf-cat-kerberos-pk-init-17.txt                   Clifford Neuman
Updates: RFC 1510bis                                             USC/ISI
expires March 12, 2002 May 31, 2004                                         Matthew Hur
                                                   Microsoft Corporation
                                                           Ari Medvinsky
                                                   Liberate Technologies
                                                   Microsoft Corporation
                                                         Sasha Medvinsky
                                                          Motorola, Inc.
                                                               John Wray
                                                   Iris Associates, Inc.
                                                        Jonathan Trostle

    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 provision 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).
http://www.ietf.org/shadow.html

The distribution of this memo is unlimited.  It is filed as
    draft-ietf-cat-kerberos-pk-init-16.txt,
draft-ietf-cat-kerberos-pk-init-17.txt and expires March 12,
    2002. May 31, 2004.
Please send comments to the authors.

1.  Abstract

This document defines draft describes protocol extensions (PKINIT) (hereafter called PKINIT)
to the Kerberos protocol specification (RFC 1510bis [1]) to [1]).  These
extensions provide a method for using integrating public key cryptography during initial authentication.  The methods
    defined specify
into the ways initial authentication exchange, by passing cryptographic
certificates and associated authenticators in which preauthentication data fields and
    error data fields in Kerberos messages are to be used to transport
    public key data.
fields.

2.  Introduction

    The popularity of public key cryptography has produced

A client typically authenticates itself to a desire for
    its support service in Kerberos [2].  The advantages provided by public key
    cryptography include simplified key management (from
using three distinct though related exchanges.  First, the client
requests a ticket-granting ticket (TGT) from the Kerberos
    perspective) and
authentication server (AS).  Then, it uses the ability TGT to leverage existing request a
service ticket from the Kerberos ticket-granting server (TGS).
Usually, the AS and developing
    public key certification infrastructures.

    Public key cryptography can be TGS are integrated into Kerberos in a number
    of ways.  One is to associate single device known as
a key pair with each realm, which can
    then be used to facilitate cross-realm authentication; Kerberos Key Distribution Center, or KDC.  (In this is the
    topic of another draft proposal.  Another way is to allow users with
    public key certificates draft, we will
refer to use them in initial authentication.  This
    is both the concern of AS and the current document.

    PKINIT utilizes ephemeral-ephemeral Diffie-Hellman keys in
    combination with RSA keys TGS as the primary, required mechanism.  Note
    that PKINIT supports KDC.) Finally, the use of separate signature and encryption
    keys.

    PKINIT enables access client
uses the service ticket to authenticate itself 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: service.

The
    user sends an AS-REQ message to advantage afforded by the KDC as before, except that if that
    user TGT is to use public key cryptography in the initial authentication
    step, his certificate and a signature accompany that the initial user need only
explicitly 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 and expose his credentials once.  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 and its associated session key signature can then be used for any
subsequent requests.  One implication of the KDC.

    Note this is that PKINIT does not require the use all further
authentication is independent of certificates.  A KDC
    may store the public key of method by which the initial
authentication was performed.  Consequently, initial authentication
provides a principal as convenient place to integrate public-key cryptography
into Kerberos authentication.

As defined, Kerberos authentication exchanges use symmetric-key
cryptography, in part of that principal's
    record.  In this scenario, the KDC for performance.  (Symmetric-key cryptography
is typically 10-100 times faster than public-key cryptography,
depending on the trusted party public-key operations. [c])  One cost of using
symmetric-key cryptography is that vouches
    for the principal (as in a standard, non-cross realm, Kerberos
    environment).  Thus, for any principal, the KDC may maintain a
    symmetric key, a public key, or both.

    The PKINIT specification may also keys must be used as shared, so that
before a building block for
    other specifications.  PKINIT may user can authentication himself, he must already be utilized to establish
    inter-realm keys for
registered with the purposes of issuing cross-realm service
    tickets.  It may also be used KDC.

Conversely, public-key cryptography--in conjunction with an
established certification infrastructure--permits authentication
without prior registration.  Adding it to issue anonymous Kerberos tickets
    using the Diffie-Hellman option.  Efforts are under way to draft
    specifications for these two application protocols.

    Additionally, allows the PKINIT specification may be used for direct peer
    to peer authentication
widespread use of Kerberized applications by users without contacting requiring
them to register first--a requirement that has no inherent security
benefit.

As noted above, a central KDC. This
    application of PKINIT convenient and efficient place to introduce
public-key cryptography into Kerberos is based on concepts introduced in [6, 7].
    For direct client-to-server authentication, the client uses PKINIT
    to authenticate to initial
authentication exchange.  This document describes the end server (instead of a central KDC), which
    then issues methods and
data formats for integrating public-key cryptography into Kerberos
initial authentication.  Another document (PKCROSS) describes a ticket
similar protocol for itself.  This approach has an advantage
    over TLS [5] 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 [6]). cross-realm authentication.

3.  Proposed  Extensions

This section describes extensions to RFC 1510bis for supporting the
use of public key public-key cryptography in the initial request for a ticket
granting ticket (TGT).

    In summary,

Briefly, the following change changes to RFC 1510bis is are proposed:

        * Users may authenticate

    1.  If public-key authentication is indicated, the client sends
        the user's public-key data and an authenticator in a
        preauthentication field accompanying the usual request.
        This authenticator is signed by the user's private
        signature key.

    2.  The KDC verifies the client's request against its own
        policy and certification authorities.

    3.  If the request passes the verification tests, the KDC
        replies as usual, but the reply is encrypted using either either:

        a.  a public randomly generated key, signed using the KDC's
            signature key pair and encrypted using the user's encryption
            key; or

        b.  a
          conventional (symmetric) key.  If public key cryptography is
          used, public generated through a Diffie-Hellman exchange with
            the client, signed using the KDC's signature key.

        Any key data required by the client to obtain the encryption
        key is transported returned in a preauthentication
          data fields to help establish identity. field accompanying
        the usual reply.

    4.  The user presents
          a public key certificate and client obtains an ordinary TGT that may
          be used for subsequent authentication, with such
          authentication using only conventional cryptography. the encryption key, decrypts the reply,
        and then proceeds as usual.

Section 3.1 provides definitions to help specify of this document defines the necessary message formats.
Section 3.2 describes the extensions their syntax and use in greater detail.
Implementation of all specified formats and uses in these sections
is REQUIRED for the initial authentication
    method. compliance with PKINIT.

3.1.  Definitions

    The extensions involve new preauthentication fields; we introduce

3.1.1.  Required Algorithms

[What is the current list of required algorithm? --brian]

3.1.2.  Defined Message and Encryption Types

PKINIT makes use of the following new preauthentication types:

    PA-PK-AS-REQ                            14                             TBD
    PA-PK-AS-REP                            15

    The extensions also involve new error types; we introduce                             TBD

PKINIT introduces the following new error 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

PKINIT uses the following typed data types for errors:

        TD-PKINIT-CMS-CERTIFICATES             101

    TD-DH-PARAMETERS                         102
    TD-TRUSTED-CERTIFIERS                    104
    TD-CERTIFICATE-INDEX                     105

    We utilize

PKINIT defines the following encryption types (which map directly to
    OIDs): types, for use in the AS-REQ
message (to indicate acceptance of the corresponding encryption OIDs
in PKINIT):

    dsaWithSHA1-CmsOID                         9
    md5WithRSAEncryption-CmsOID               10
    sha1WithRSAEncryption-CmsOID              11
    rc2CBC-EnvOID                             12
    rsaEncryption-EnvOID (PKCS#1   (PKCS1 v1.5)       13
    rsaES-OAEP-ENV-OID   (PKCS#1     (PKCS1 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).

The above encryption types are utilized used (in PKINIT) only within CMS [8]
structures within the PKINIT preauthentication fields.  Their use
within
    the Kerberos EncryptedData structure structures is unspecified.

    In many cases,

3.1.3.  Algorithm Identifiers

PKINIT requires the encoding of the X.500 name of a
    certificate authority as a Realm.  When such a name appears as
    a realm it will be represented using the "Other" form of the realm
    name as specified in the naming constraints section of RFC 1510bis.
    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 [11] (part of LDAPv3 [15]).

    Each component of a DistinguishedName is called a
    RelativeDistinguishedName, where a RelativeDistinguishedName is a
    SET OF AttributeTypeAndValue.  RFC 2253 does not specify the order
    in which to encode the elements of the RelativeDistinguishedName and
    so to ensure that this encoding is unique, we add the following rule
    to those specified by RFC 2253:

	When converting a multi-valued RelativeDistinguishedName
        to a string, the output consists of the string encodings
        of each AttributeTypeAndValue, in the same order as
	specified by the DER encoding.

    Similarly, in cases where the KDC define, but 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 MUST be set to KRB_NT-X500-PRINCIPAL.  This new
    name type is defined in RFC 1510bis as:

        KRB_NT_X500_PRINCIPAL    6

    For this type, the name-string MUST be set as follows:

        RFC2253Encode(DistinguishedName)

    as described above.  When this name type is used, the principal's
    realm MUST be set to the certificate authority's distinguished
    name using the X500-RFC2253 realm name format described earlier in
    this section.

    Note that the same string may be represented using several different
    ASN.1 data types.  As the result, the reverse conversion from an
    RFC2253-encoded principal name back to an X.500 name may not be
    unique and may result in an X.500 name that is not the same as the
    original X.500 name found in the client certificate.

    RFC 1510bis describes an alternate encoding of an X.500 name into a
    realm name.  However, as described in RFC 1510bis, make use of, the alternate
    encoding does not guarantee a unique mapping from a
    DistinguishedName inside a certificate into a realm name and
    similarly cannot be used to produce a unique principal name. following
algorithm identifiers.

PKINIT
    therefore uses an RFC 2253-based name mapping approach, as specified
    above.

    RFC 1510bis specifies the ASN.1 structure for PrincipalName as follows:

        PrincipalName ::=   SEQUENCE {
                        name-type[0]     INTEGER,
                        name-string[1]   SEQUENCE OF GeneralString
        }

    The following rules relate to the the matching of PrincipalNames
    with regard to the PKI name constraints for CAs as laid out in RFC
    2459 [12].  In order to be regarded as a match (for permitted and
    excluded name trees), the following MUST be satisfied.

        1.  If the constraint is given as a user plus realm name, or
            as a client principal name plus realm name (as specified in
            RFC 1510bis), the realm name MUST be valid (see 2.a-d below)
            and the match MUST be exact, byte for byte.

        2.  If the constraint is given only as a realm name, matching
            depends on the type of the realm:

            a.  If the realm contains a colon (':') before any equal
                sign ('='), it is treated as a realm of type Other,
                and MUST match exactly, byte for byte.

            b.  Otherwise, if the realm name conforms to rules regarding
                the format of DNS names, it is considered a realm name of
                type Domain.  The constraint may be given as a realm
                name 'FOO.BAR', which matches any PrincipalName within
                the realm 'FOO.BAR' but not those in subrealms such as
                'CAR.FOO.BAR'.  A constraint of the form '.FOO.BAR'
                matches PrincipalNames in subrealms of the form
                'CAR.FOO.BAR' but not the realm 'FOO.BAR' itself.

            c.  Otherwise, the realm name is invalid and does not match
                under any conditions.

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 algorithm identifier for RSA
    keys.

    In the case of Diffie-Hellman, the key is produced from the agreed
    bit string as follows:

        * Truncate the bit string to the required length.
        * Apply the specific cryptosystem's random-to-key function.

    Appropriate Diffie-Hellman
key constraints for each valid cryptosystem are given
    in RFC 1510bis.

3.1.2. Algorithm Identifiers agreement [11]:

    dhpublicnumber

PKINIT does not define, but does permit, uses the algorithm identifiers
    listed below.

3.1.2.1. Signature Algorithm Identifiers

    The following signature algorithm identifiers specified in [8] and
    in [12] are used with PKINIT: [8, 12]:

    sha-1WithRSAEncryption (RSA with SHA1)
    md5WithRSAEncryption   (RSA with MD5)
    id-dsa-with-sha1       (DSA 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

PKINIT uses the associated algorithm parameters are
    specified in RFC 2459 [12].

3.1.2.3. Algorithm Identifiers for RSA Encryption

    These following encryption algorithm identifiers are used inside the EnvelopedData data
    structure, [12] for
encrypting the temporary key with a public key:

    rsaEncryption (RSA encryption, PKCS#1          (PKCS1 v1.5)
    id-RSAES-OAEP (RSA encryption, PKCS#1          (PKCS1 v2.0)

    Both of the above RSA encryption schemes

These OIDs are specified in [13].
    Currently, only PKCS#1 v1.5 is specified by CMS [8], although not to be confused with the
    CMS specification says that it will likely include PKCS#1 v2.0 in encryption types listed
above.

PKINIT uses 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 following algorithm identifiers are used inside the EnvelopedData data
    structure in the PKINIT Reply, [8] for encrypting
the reply key with the temporary key:

    des-ede3-cbc (3-key 3-DES,           (three-key 3DES, CBC mode)
    rc2-cbc                (RC2, CBC mode)

    The full definition of

Again, these OIDs are not to be confused with the above algorithm identifiers encryption types
listed above.

3.2.  PKINIT Preauthentication Syntax and their
    corresponding parameters (an IV for block chaining) is provided in Use

In this section, we describe the CMS specification [8].

3.2.  Public Key Authentication

    Implementation syntax and use of the changes in this section is REQUIRED for
    compliance with various
preauthentication fields employed to implement 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 (AS-REQ) is sent as per RFC
1510bis, except that a preauthentication field containing data
signed by the user's private signature key accompanies the request: request,
as follows:

    PA-PK-AS-REQ ::= SEQUENCE {
                                    -- PA TYPE 14 PAType TBD
        signedAuthPack          [0] ContentInfo,
                                    -- Defined in CMS [8]; CMS.
                                    -- SignedData OID Type is {pkcs7 2} SignedData.
                                    -- Content is AuthPack (below) defines the
                                    -- data that is signed. (defined below).
        trustedCertifiers       [1] SEQUENCE OF TrustedCas TrustedCAs OPTIONAL,
                                    -- This is a A list of CAs that the CAs, trusted by
                                    -- client trusts and that the client, used to certify
                                    -- KDCs.
        kdcCert                 [2] IssuerAndSerialNumber OPTIONAL OPTIONAL,
                                    -- As defined Defined in CMS [8]; CMS.
                                    -- specifies Identifies a particular KDC
                                    -- certificate certificate, if the client
                                    -- already has it.
        encryptionCert          [3] IssuerAndSerialNumber OPTIONAL OPTIONAL,
                                    -- For example, this may be May identify the user's
                                    -- client's Diffie-Hellman
                                    -- certificate, or it may be the
                                    -- client's or an RSA encryption key
                                    -- certificate.
        ...
    }

    TrustedCas

    TrustedCAs ::= CHOICE {
        principalName         [0] KerberosName,
                                  -- as defined below
        caName                [1] Name                  [0] Name,
                                    -- fully Fully qualified X.500 name
                                    -- as defined by in X.509 [11].
        issuerAndSerial       [2] IssuerAndSerialNumber         [1] IssuerAndSerialNumber,
                                    -- Since Identifies a specific CA may have a number of
                                  -- certificates, only one of which
                                    -- a client trusts
    }

    The type of the ContentInfo in the signedAuthPack is SignedData.
    Its usage is as follows:

        The SignedData data type is specified in the Cryptographic
        Message Syntax, a product of the S/MIME working group of the
        IETF.  The following describes how to fill in the fields of
        this data:

        1.  The encapContentInfo field MUST contain the PKAuthenticator
            and, optionally, the client's Diffie Hellman public value.

            a.  The eContentType field MUST contain the OID value for
                pkauthdata: iso (1) org (3) dod (6) internet (1)
                security (5) kerberosv5 (2) pkinit (3) pkauthdata (1)

            b.  The eContent field is data of the type AuthPack (below).

        2.  The signerInfos field contains the signature of AuthPack.

        3.  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 certificate
            chains 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.

        4.  When a DH key is being used, the public exponent is provided
            in the subjectPublicKey field of the SubjectPublicKeyInfo and
            the DH parameters are supplied as a DomainParameters in the
            AlgorithmIdentitfier parameters.  The DH paramters SHOULD be
            chosen from the First and Second defined Oakley Groups [The
            Internet Key Exchange (IKE) RFC-2409], certificate, if a server will not
            accept either of these groups, it will respond with a krb-
            error of KDC_ERR_KEY_TOO_WEAK.  The accompanying e-data is
            a SEQUENCE of TypedData that includes type
            TD-DH-PARAMETERS (102) whose data-value is DomainParameters
            with appropriate Diffie-Hellman parameters for the client to
            use.

        5.  The KDC may wish to use cached Diffie-Hellman parameters
            (see Section 3.2.2, KDC Response).  To indicate acceptance
            of cached parameters, the client sends zero in the nonce
            field of the PKAuthenticator.  Zero is not a valid value
            for this field under any other circumstances.  If cached
            parameters are used, the client and the KDC MUST perform
            key derivation (for the appropriate cryptosystem) on the
            resulting encryption key,
                                    -- only trusts one.
        ...
    }

[Should we even allow principalName as specified in RFC 1510bis.  (With a zero nonce, message binding is performed using the nonce
            in the main request, which must be encrypted using the
            encapsulated reply key.) choice? --brian]

    AuthPack ::= SEQUENCE {
        pkAuthenticator         [0] PKAuthenticator,
        clientPublicValue       [1] SubjectPublicKeyInfo OPTIONAL
                                    -- Defined in X.509,
                                    -- reproduced below.
                                    -- Present only if the client
                                    -- is using Diffie-Hellman ephemeral-ephemeral
                                    -- (ephemeral-ephemeral only) Diffie-Hellman.
    }

    PKAuthenticator ::= SEQUENCE {
        cusec                   [0] INTEGER,
                                    -- for replay prevention as in RFC 1510bis
        ctime                   [1] KerberosTime,
                                    -- for replay prevention cusec and ctime are used as
                                    -- in RFC 1510bis 1510bis, for replay
                                    -- prevention.
        nonce                   [2] INTEGER,
                                    -- Binds reply to request,
                                    -- except is zero only if when client
                                    -- will accept
                                    -- cached DH
                                    -- Diffie-Hellman parameters from KDC;
                                    -- must from KDC and MUST NOT be non-zero otherwise
        pachecksum              [3] Checksum
                                    -- Checksum over KDC-REQ-BODY zero otherwise.
        paChecksum              [3] Checksum,
                                    -- Defined by Kerberos spec; in RFC 1510bis.
                                    -- Performed over KDC-REQ-BODY,
                                    -- must be unkeyed, e.g. sha1 or rsa-md5 unkeyed.
        ...
    }

    SubjectPublicKeyInfo ::= SEQUENCE {
                                    -- As defined in X.509.
        algorithm                   AlgorithmIdentifier,
                                    -- dhPublicNumber Equals dhpublicnumber (see
                                    -- AlgorithmIdentifier, below)
                                    -- for PKINIT.
        subjectPublicKey            BIT STRING
                                    -- for DH, equals
                                    -- Equals public exponent
                                    -- (INTEGER encoded
                                    -- as payload
                                    -- of BIT STRING) for PKINIT.
    }   -- as specified by the X.509 recommendation [7]

    AlgorithmIdentifier ::= SEQUENCE {
                                    -- As defined in X.509.
        algorithm                   OBJECT IDENTIFIER,
                                    -- for dhPublicNumber, this dhpublicnumber is
                                    -- { iso (1) member-body (2)
                                    -- US (840) ansi-x942 (10046)
                                    -- ansi-x942(10046) number-type(2) number-type (2) 1 }
                                    -- from From RFC 2459 [12] [11].
        parameters                  ANY DEFINED by BY algorithm OPTIONAL
                                    -- for dhPublicNumber, this Content is
                                    -- DomainParameters
    }
                                    -- as specified by the X.509 recommendation [7] (see below) for PKINIT.
    }

    DomainParameters ::= SEQUENCE {
                                    -- As defined in RFC 2459.
        p                           INTEGER,
                                    -- p is the odd prime, p=jq +1 equals
                                    -- jq+1.
        g                           INTEGER,
                                    -- generator, g Generator.
        q                           INTEGER,
                                    -- factor of p-1 Divides p-1.
        j                           INTEGER OPTIONAL,
                                    -- subgroup factor Subgroup factor.
        validationParms             ValidationParms OPTIONAL
    }   -- as defined in RFC 2459 [12]

    ValidationParms ::= SEQUENCE {
                                    -- As defined in RFC 2459.
        seed                        BIT STRING,
                                    -- seed Seed for the system parameter
                                    -- generation process process.
        pgenCounter                 INTEGER
                                    -- integer Integer value output as part
                                    -- of the of the system parameter
                                    -- prime generation process process.
    }   -- as defined in RFC 2459 [12]

    If the client passes an issuer and serial number

The ContentInfo in the request,
    the KDC signedAuthPack is requested to use the referred-to certificate.  If none
    exists, then the KDC returns an error filled out as follows:

    1.  The eContent field contains data of type
    KDC_ERR_CERTIFICATE_MISMATCH. AuthPack.  It MUST
        contain the pkAuthenticator, and MAY also returns this error if, on contain the
    other hand,
        user's Diffie-Hellman public value (clientPublicValue).

    2.  The eContentType field MUST contain the client does not pass any trustedCertifiers,
    believing that it has OID value for
        pkauthdata: { iso (1) org (3) dod (6) internet (1)
        security (5) kerberosv5 (2) pkinit (3) pkauthdata (1)}

    3.  The signerInfos field MUST contain the KDC's certificate, but signature of the KDC has more
    than one certificate.
        AuthPack.

    4.  The KDC should include information in the
    KRB-ERROR message certificates field MUST contain at least a signature
        verification certificate chain that indicates the KDC certificate(s) that a can use to
        verify the signature on the AuthPack.  Additionally, the
        client may utilize.  This data is specified in also insert an encryption certificate chain, if
        (for example) the e-data, which client is defined in RFC 1510bis revisions as not using ephemeral-ephemeral
        Diffie-Hellman.

    5.  If a SEQUENCE of TypedData:

    TypedData ::=  SEQUENCE {
                    data-type      [0] INTEGER,
                    data-value     [1] OCTET STRING,
    } -- per Kerberos RFC 1510bis

    where one of Diffie-Hellman key is being used, the TypedData elements is:
    data-type = TD-PKINIT-CMS-CERTIFICATES = 101
    data-value = CertificateSet // as specified by CMS [8] parameters SHOULD
        be chosen from the First or Second defined Oakley Groups.
        (See RFC 2409 [c].)

    6.  The PKAuthenticator carries information to foil replay attacks, KDC may wish to
    bind use cached Diffie-Hellman parameters.
        To indicate acceptance of caching, the pre-authentication data to client sends zero in
        the KDC-REQ-BODY, and to bind nonce field of the
    request and response.  The PKAuthenticator pkAuthenticator.  Zero is signed with not a valid
        value for this field under any other circumstances.  Since
        zero is used to indicate acceptance of cached parameters,
        message binding in this case is performed instead using the client's
    signature key.
        nonce in the main request.

3.2.2.  KDC Response

    Upon receipt  Validation of Client Request

Upon receiving the AS_REQ with PA-PK-AS-REQ pre-authentication
    type, client's request, the KDC attempts to verify validates it.  This
section describes the client's certificate chain, if
    one is provided steps that the KDC MUST (unless otherwise
noted) take in validating the request.  This is done by verifying the
    certification path against

The KDC must look for a user certificate in the KDC's policy of legitimate
    certifiers. signedAuthPack.
If the KDC it cannot find one signed by a trusted client certificate chain within
    the PA-PK-AS-REQ, then the KDC CA it trusts, it sends back an
error message of type KDC_ERR_CANT_VERIFY_CERTIFICATE.  Certificate chain validation is
    defined in RFC 2459 [12].  The accompanying
e-data for this error
    code is a SEQUENCE of OF TypedData:

    TypedData that includes type
    TD-TRUSTED-CERTIFIERS (104) whose ::= SEQUENCE {
                                    -- As defined in RFC 1510bis.
        data-type               [0] INTEGER,
        data-value              [1] OCTET STRING
    }

For this error, the data-type is TD-TRUSTED-CERTIFIERS, and the
data-value is an OCTET STRING
    which is containing the DER encoding of

    TrustedCertifiers ::= SEQUENCE OF PrincipalName
                              -- X.500 name encoded as a principal name
                              -- see Section 3.1

    If Name

If, while verifying a the certificate chain chain, the KDC determines that
the signature on one of the certificates in the CertificateSet from
    the signedAuthPack fails verification, then the KDC is
invalid, it returns an error of type KDC_ERR_INVALID_CERTIFICATE.
The accompanying e-data for this error is a SEQUENCE of TypedData that includes type
    TD-CERTIFICATE-INDEX (105) OF TypedData,
whose data-type is TD-CERTIFICATE-INDEX, and whose data-value is an
OCTET STRING
    which is containing the DER encoding of the index into the
CertificateSet field, ordered as sent by the client. client:

    CertificateIndex ::= INTEGER
                                    -- 0 = 1st certificate,
                              -- first certificate (in
                                    --     order of encoding) encoding),
                                    -- 1 = 2nd second certificate, etc etc.

If more than one signature is invalid, the KDC sends one TypedData
per invalid signature.

The KDC may MAY also check whether any of the certificates in the
    client's user's
chain has have been revoked.  If one any of the certificates has them have been revoked, then the KDC
returns an error of type KDC_ERR_REVOKED_CERTIFICATE; if such a query reveals that the certificate's KDC
attempts to determine the revocation status but is unknown or not
    available, then if required by policy, the KDC unable to do so,
it returns the
    appropriate an error of type KDC_ERR_REVOCATION_STATUS_UNKNOWN or
    KDC_ERR_REVOCATION_STATUS_UNAVAILABLE. KDC_ERR_REVOCATION_STATUS_UNKNOWN.  In any of these three
    cases,
either case, the affected certificate is or certificates affected are identified by the accompanying
    e-data, which contains a CertificateIndex
exactly as described for
    KDC_ERR_INVALID_CERTIFICATE. an error of type KDC_ERR_INVALID_CERTIFICATE (see
above).

If the certificate chain can be verified, is successfully validated, but the name of the
    client in
the user's certificate does not match the client's name given in the request, then
the KDC returns an error of type KDC_ERR_CLIENT_NAME_MISMATCH.  There
is no accompanying e-data
    field in for this case. error.

Even if all succeeds, the chain is validated, and the names in the certificate and
the request match, the KDC may--for policy reasons--decide may decide not to trust the client.  In this case, the KDC returns an error message
    of type KDC_ERR_CLIENT_NOT_TRUSTED.  One specific case of this is  For
example, the presence or absence of certificate may include (or not include) an Enhanced
Key Usage (EKU) OID within in the certificate extensions.  The rules regarding acceptability extensions field.  As a matter of local
policy, the KDC may decide to reject requests on the basis of
    an EKU sequence (or the
absence or presence of any sequence) are a matter specific EKU OIDs.  In this case, the KDC
returns an error of
    local policy. type KDC_ERR_CLIENT_NOT_TRUSTED.  For the
benefit of implementers, implementors, we define a PKINIT EKU OID as the following: follows:
{ iso (1) org (3) dod (6) internet (1) security (5) kerberosv5 (2)
pkinit (3) pkekuoid (2). (2) }.

If a trust relationship exists, the KDC then verifies certificate chain and usage check out, but the client's
signature on AuthPack.  If that fails, the signedAuthPack fails to verify, the KDC returns an
error
    message of type KDC_ERR_INVALID_SIG.  Otherwise,  There is no accompanying e-data
for this error.

[What about the case when all this checks out but one or more
certificates is rejected for other reasons?  For example, perhaps
the key is too short for local policy. --DRE]

The KDC uses must check the timestamp (ctime and cusec) in the PKAuthenticator to assure ensure that the request is not
a replay.  The KDC also verifies replay, and that its name
    is specified in the PKAuthenticator. time skew falls within acceptable limits.  If
the check fails, the KDC returns an error of type KRB_AP_ERR_REPEAT
or KRB_AP_ERR_SKEW, respectively.

Finally, if the clientPublicValue field is filled in, indicating that the
client wishes to use Diffie-Hellman key agreement, then ephemeral-ephemeral Diffie-Hellman, the KDC
checks to see that if 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 not,
it returns an error message of type KDC_ERR_KEY_TOO_WEAK.  The accompanying
e-data is a SEQUENCE of
    TypedData that includes type TD-DH-PARAMETERS (102) OF TypedData, whose data-type is
TD-DH-PARAMETERS, and whose data-value is an OCTET STRING containing
the DER encoding of a DomainParameters with (see above), including
appropriate Diffie-Hellman parameters for
    the client with which to retry the
request.  Otherwise, it generates its own
    public and private values

[This makes no sense.  For example, maybe the key is too strong for
local policy. --DRE]

In order to establish authenticity of the reply, the response.

    The KDC also checks that will sign
some key data (either the timestamp random key used to encrypt the reply in
the PKAuthenticator case of a KDCDHKeyInfo, or the Diffie-Hellman parameters used to
generate the reply-encrypting key in the case of a ReplyKeyPack).
The signature certificate to be used is
    within to be selected as follows:

    1.  If the allowable window and that client included a kdcCert field in the principal name and realm
    are correct. PA-PK-AS-REQ,
        use the referred-to certificate, if the KDC has it.  If it
        does not, the local (server) time and KDC returns an error of type
        KDC_ERR_CERTIFICATE_MISMATCH.

    2.  Otherwise, if the client time in did not include a kdcCert field,
        but did include a trustedCertifiers field, and the
    authenticator differ KDC
        possesses a certificate issued by more than one of the allowable clock skew, then listed
        certifiers, use that certificate.  if it does not possess
        one, it returns an error of type KDC_ERR_KDC_NOT_TRUSTED.

    3.  Otherwise, if the client included neither a kdcCert field
        nor a trustedCertifiers field, and the KDC has only one
        signature certificate, use that certificate.  If it has
        more than one certificate, it returns an error message of type KRB_AP_ERR_SKEW as defined in
    RFC 1510bis.
        KDC_ERR_CERTIFICATE_MISMATCH.

3.2.3.  KDC Reply

Assuming no errors, that the client's request has been properly validated, the
KDC replies proceeds as per RFC 1510bis, except as follows.

The user's name as represented in the ticket is determined by AS-REP must be derived from
the
    following decision algorithm:

        1. certificate provided in the client's request.  If the KDC has a
its own mapping from the name in the certificate to a Kerberos name, then use
it uses that Kerberos name.
            Else
        2.  If

Otherwise, if the certificate contains the SubjectAltName extention
            and the local KDC policy defines a mapping from the
            SubjectAltName to a Kerberos name, then use subjectAltName extension
with PrincipalName, it uses that name.
            Else
        3.  Use the name as represented in the certificate, mapping
            as necessary (e.g., as per RFC 2253 for X.500 names).  In this case case, the realm in
the ticket MUST be the name of the
            certifier that issued the user's certificate.

    Note that a principal name may be carried in the subjectAltName
    field of a certificate. This name may be mapped to a principal
    record in a security database based on local policy, for example
    the subjectAltName 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 other 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 [14], may utilize the email address.  If the KDC
    is presented with an S/MIME certificate, then the email address
    within subjectAltName will be interpreted as a principal  (OID and realm
    separated by the "@" sign, or as a name that needs syntax for this extension to be mapped
    according to local policy.  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
specified here.)  Otherwise, 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
KDC_ERR_CLIENT_NAME_MISMATCH.

In addition, the serialNumber included certifiers in the client's request.
    2. Use a certificate issued to the KDC by one certification path of the client's
       trustedCertifier(s);
    If the KDC is unable user's
certificate MUST be added to comply with any of these options, then the
    KDC returns an error message of type KDC_ERR_KDC_NOT_TRUSTED to the
    client. authdata (to be specified at a later
time).

The AS-REP is otherwise unchanged from RFC 1510bis.  The KDC then
encrypts the reply as usual, but not with the user's long-term key, but key.
Instead, it encrypts it with the Diffie Hellman derived key or either a random encryption key, or a
key generated
    for this particular response which derived through a Diffie-Hellman exchange.  Which is carried in the padata field case is
indicated by the contents of the TGS-REP message. PA-PK-AS-REP (note tags):

    PA-PK-AS-REP ::= CHOICE {
                                    -- PA TYPE 15 PAType YY (TBD)
        dhSignedData            [0] ContentInfo,
                                    -- Defined in CMS [8] and used only with
                            -- Diffie-Hellman key exchange (if the
                            -- client public value was present in the
                            -- request).
                            -- SignedData OID Type is {pkcs7 2} SignedData.
                                    -- This choice MUST be supported Content is KDCDHKeyInfo
                                    -- by compliant implementations. (defined below).
        encKeyPack              [1] ContentInfo
                            -- Defined in CMS [8].
                            -- The temporary key is encrypted
                            -- using the client public key
                            -- key. ContentInfo,
                                    -- EnvelopedData OID Type is {pkcs7 3}
                            -- SignedReplyKeyPack, encrypted EnvelopedData.
                                    -- with the temporary key, Content is also ReplyKeyPack
                                    -- included. (defined below).
        ...
    }

Note that PA-PK-AS-REP is a CHOICE: either a dhSignedData, or an
encKeyPack, but not both.  The type former contains data of the ContentInfo in the dhSignedData is SignedData.
    Its usage is as follows:

        When the Diffie-Hellman option type
KDCDHKeyInfo, and is used, dhSignedData in
        PA-PK-AS-REP provides authenticated Diffie-Hellman parameters
        of the KDC.  The reply key used to encrypt part of only when the KDC reply
        message is derived from the Diffie-Hellman exchange:

        1.  Both the KDC and the client calculate a secret value
            (g^ab mod p), where encrypted using a is the client's private
Diffie-Hellman derived key:

    KDCDHKeyInfo ::= SEQUENCE {
        subjectPublicKey        [0] BIT STRING,
                                    -- Equals public exponent and
            b is the KDC's private exponent.

        2.  Both the KDC and the client take the first N bits
                                    -- (g^a mod p).
                                    -- INTEGER encoded as payload
                                    -- of this
            secret value and convert it into a reply key.  N depends on
            the reply key type.

            a.  For example, if the BIT STRING.
        nonce                   [1] INTEGER,
                                    -- Binds reply key is DES, N=64 bits, where
                some of the bits are replaced with parity bits, according to FIPS PUB 74.

            b.  As another example, if request.
                                    -- Exception: A value of zero
                                    -- indicates that the reply key KDC is (3-key) 3-DES,
                N=192 bits, where some
                                    -- using cached values.
        dhKeyExpiration         [2] KerberosTime OPTIONAL,
                                    -- Expiration time for KDC's
                                    -- cached values.
        ...
    }

The fields of the bits ContentInfo for dhSignedData are replaced with
                parity bits, according to FIPS PUB 74.

        3. be filled in
as follows:

    1.  The encapContentInfo eContent field MUST contain the KdcDHKeyInfo as
            defined below.

            a. contains data of type KDCDHKeyInfo.

    2.  The eContentType field MUST contain contains the OID value for
        pkdhkeydata: { iso (1) org (3) dod (6) internet (1)
        security (5) kerberosv5 (2) pkinit (3) pkdhkeydata (2)

            b. }

    3.  The eContent signerInfos field contains a single signerInfo, which is data
        the signature of the type KdcDHKeyInfo
                (below). KDCDHKeyInfo.

    4.  The certificates field MUST contain the certificates
            necessary for contains a signature verification
        certificate chain that the client may use to establish trust in verify the
        KDC's
            certificate based on the list of trusted certifiers sent by
            the client in signature over the PA-PK-AS-REQ.  This field KDCDHKeyInfo.)  It may only be left
        empty if the client did not send to the KDC include a list of trusted
            certifiers (the trustedCertifiers
        field was empty, meaning
            that the client already possesses in the KDC's certificate).

        5.  The signerInfos field is a SET PA-PK-AS-REQ, indicating that MUST contain at least
            one member, since it contains has the actual signature.

        6. KDC's
        certificate.

    5.  If the client indicated acceptance of cached Diffie-Hellman
            parameters from the KDC, and the KDC supports such an option
            (for performance reasons), agree to use cached parameters, the
        KDC should SHOULD return a zero in the nonce field and include the
        expiration time of the
            parameters cached values in the dhKeyExpiration
        field.  If this time is exceeded, the client SHOULD NOT use
        the reply.  If the time is absent, the client SHOULD NOT use
        the reply and MAY resubmit a request with a non-zero nonce (thus nonce,
        thus indicating non-acceptance of the cached Diffie-Hellman parameters).  As
            indicated above in Section 3.2.1, Client Request, when parameters.

The key is derived as follows: Both the KDC uses cached parameters, and the client calculate
the value g^(ab) mod p, where a and b are the KDC MUST
            perform key derivation (for client and KDC's
private exponents, respectively.  They both take the appropriate cryptosystem) first N bits of
this secret value and convert it into a reply key, where N depends
on the resulting key type.

    1.  For example, if the key type is DES, N = 64 bits, where some
        of the bits are replaced with parity bits, according to FIPS
        PUB 74 [c].

    2.  If the key type is (three-key) 3DES, N = 192 bits, where
        some of the bits are replaced with parity bits, again
        according to FIPS PUB 74.

If the KDC and client are not using Diffie-Hellman, the KDC encrypts
the reply with an encryption key, as specified packed in RFC 1510bis.

    KdcDHKeyInfo the encKeyPack, which
contains data of type ReplyKeyPack:

    ReplyKeyPack ::= SEQUENCE {
                              -- used only when utilizing Diffie-Hellman
      subjectPublicKey
        replyKey                [0] BIT STRING, EncryptionKey,
                                    -- Equals public exponent (g^a mod p) Defined in RFC 1510bis.
                                    -- INTEGER encoded Used to encrypt main reply.
                                    -- MUST be at least as strong as payload of
                                    -- BIT STRING enctype of session key.
        nonce                   [1] INTEGER,
                                    -- Binds response to the request
                                -- Exception: Set reply to zero when KDC
                                -- is using a cached DH value
      dhKeyExpiration       [2] KerberosTime OPTIONAL
                                -- Expiration time for KDC's cached
                                -- DH value request.
        ...
    }

[What exactly does "at least as strong" mean? --DRE]

The type fields of the ContentInfo in the for encKeyPack is EnvelopedData.  Its
    usage is MUST be filled in as
follows:

        The EnvelopedData data type is specified in the Cryptographic
        Message Syntax, a product of the S/MIME working group of the
        IETF.  It contains a temporary key encrypted with the PKINIT
        client's public key.  It also contains a signed and encrypted
        reply key.

    1.  The originatorInfo field is not required, since that
            information may be presented in the signedData structure
            that is encrypted within the encryptedContentInfo field.

        2.  The optional unprotectedAttrs field is not required for
            PKINIT.

        3.  The recipientInfos field innermost data is a SET which MUST contain exactly
            one member of the KeyTransRecipientInfo type for encryption
            with a public key.

            a.  The encryptedKey field (in KeyTransRecipientInfo)
                contains the temporary key which is encrypted with the
                PKINIT client's public key.

        4.  The encryptedContentInfo field contains the signed and
            encrypted reply key.

            a. SignedData.  The contentType field MUST contain the OID value eContent for
                id-signedData: iso (1) member-body (2) us (840)
                rsadsi (113549) pkcs (1) pkcs7 (7) signedData (2)

            b.  The encryptedContent field is encrypted
        this data is of the CMS type signedData as specified below.

                i.  The encapContentInfo field MUST contains the ReplyKeyPack.

                    *

    2.  The eContentType field MUST contain for this data contains the OID value for
        pkrkeydata: { iso (1) org (3) dod (6) internet (1)
        security (5) kerberosv5 (2) pkinit (3) pkrkeydata (3)

                    * }

    3.  The eContent signerInfos field contains a single signerInfo, which is data
        the signature of the type ReplyKeyPack
                      (below).

                ii. ReplyKeyPack.

    4.  The certificates field MUST contain the certificates
                     necessary for contains a signature verification
        certificate chain, which the client may use to establish trust in verify the
        KDC's certificate based on the list of trusted
                     certifiers sent by the client in signature over the PA-PK-AS-REQ.
                     This field ReplyKeyPack.)  It may only be left
        empty if the client did not send
                     to the KDC include a list of trusted certifiers (the trustedCertifiers
        field was empty, meaning that the
                     client already possesses in the KDC's certificate).

                iii.  The signerInfos field is a SET PA-PK-AS-REQ, indicating that MUST contain at
                      least one member, since it contains the actual
                      signature.

    ReplyKeyPack ::= SEQUENCE {
                              -- not used for Diffie-Hellman
        replyKey             [0] EncryptionKey,
                                 -- from RFC 1510bis
                                 -- 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
    }

3.2.2.1. Use of transited Field

    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 has the ticket. KDC's
        certificate.

    5.  The format of these realm names outer data is
    defined in Section 3.1 of type EnvelopedData.  The
        encryptedContent for this document.  If applicable, the
    transit-policy-checked flag should be set in data is the issued ticket.

3.2.2.2. Kerberos Names SignedData described
        in Certificates items 1 through 4, above.

    6.  The KDC's certificate(s) MUST bind the public key(s) of the KDC to
    a name derivable from the name of the realm encryptedContentType for that KDC.  X.509
    certificates MUST contain the principal name of the KDC (defined in
    RFC 1510bis) 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] OtherName,
            ...
        }

        OtherName ::= SEQUENCE {
            type-id         OBJECT IDENTIFIER,
            value           [0] EXPLICIT ANY DEFINED BY type-id
        }

    For the purpose of specifying a Kerberos principal name, data contains the OID
        value
    in OtherName MUST be a KerberosName, defined as follows:

        KerberosName ::= SEQUENCE {
            realm           [0] Realm,
            principalName   [1] PrincipalName
        }

    This specific syntax is identified within subjectAltName by setting
    the type-id in OtherName to krb5PrincipalName, where (from the
    Kerberos specification) we have

        krb5 OBJECT IDENTIFIER ::= for id-signedData: { iso (1)
                                     org (3)
                                     dod (6)
                                     internet member-body (2) us (840)
        rsadsi (113549) pkcs (1)
                                     security (5)
                                     kerberosv5 pkcs7 (7) signedData (2) }

        krb5PrincipalName OBJECT IDENTIFIER ::= { krb5 2 }

    (This specification may also be used to specify a Kerberos name
    within the user's certificate.)

    7.  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.

    Note that the KDC's principal name has the instance equal to the
    realm, and those fields should be appropriately set in the realm
    and principalName fields of the KerberosName.  This recipientInfos field is the case
    even when obtaining a cross-realm ticket using PKINIT.

3.2.3. Client Extraction SET which MUST contain exactly
        one member of Reply type KeyTransRecipientInfo.  The client then extracts the random key used to encrypt encryptedKey
        for this member contains the main
    reply.  This random temporary key (in encPaReply) which is
        encrypted with either using the client's public key or with a key derived from the DH values
    exchanged between the client and key.

    8.  Neither the KDC.  The client uses this
    random key to decrypt unprotectedAttrs field nor the main reply, and subsequently proceeds as
    described in RFC 1510bis. originatorInfo
        field is required for PKINIT.

3.2.4. Required Algorithms

    Not all  Validation of KDC Reply

Upon receipt of the algorithms in KDC's reply, the PKINIT protocol specification have
    to be implemented in order to comply with client proceeds as follows.  If
the proposed standard.
    Below is PA-PK-AS-REP contains a list of dhSignedData, the required algorithms:

    * Diffie-Hellman public/private key pairs
        * utilizing Diffie-Hellman ephemeral-ephemeral mode
    * SHA1 digest client obtains and RSA for signatures
    * SHA1 digest for the Checksum in the PKAuthenticator
        * using Kerberos checksum type 'sha1'
    * 3-key triple DES keys derived from
verifies the Diffie-Hellman Exchange
    * 3-key triple DES Temporary and Reply keys

4.  Logistics parameters, and Policy

    This section describes a way to define the policy on obtains the use of
    PKINIT for each principal and request.

    The KDC is not required to contain a database record for users
    who use public shared key authentication.  However, if these users are
    registered with the KDC, it is recommended that
as described above.  Otherwise, the database record
    for these users be modified to message contains an additional flag in the attributes
    field to indicate that encKeyPack,
and the user should authenticate using PKINIT.
    If this flag is set client decrypts and a request message does not contain verifies the
    PKINIT preauthentication field, temporary encryption key.
In either case, the client then decrypts the KDC sends back main reply with the
resulting key, and then proceeds as error of
    type KDC_ERR_PREAUTH_REQUIRED indicating that a preauthentication
    field of type PA-PK-AS-REQ must be included described in the request.

5. RFC 1510bis.

4.  Security Considerations

PKINIT raises a few certain security considerations, which we considerations beyond those that can
be regulated strictly in protocol definitions.  We will address them
in this section.

    First of all,

PKINIT extends the cross-realm model to the public
    key public-key
infrastructure.  Anyone using PKINIT must be aware of how the
certification infrastructure they are linking to works.

Also, as in standard Kerberos, PKINIT presents the possibility of
interactions between different cryptosystems of varying strengths, and this
now includes public-key cryptosystems.  Many systems, for
    instance, example,
allow the use of 512-bit public keys.  Using such keys to wrap data
encrypted under strong conventional cryptosystems, such as triple-DES, 3DES, may
be inappropriate.

PKINIT calls for randomly generated keys for conventional
cryptosystems.  Many such systems contain systematically "weak"
keys.  For recommendations regarding these weak keys, see RFC
1510bis.

Care should be taken in how certificates are choosen chosen for the purposes
of authentication using PKINIT.  Some local policies may require
that key escrow be applied for certain certificate types.  People
deploying PKINIT should be aware of the implications of using
certificates that have escrowed keys for the purposes of
authentication.

    As described in Section 3.2, PKINIT allows for the caching of the
    Diffie-Hellman parameters on the KDC side, for performance reasons.
    For similar reasons, the signed data in this case does not vary from
    message to message, until the cached parameters expire.  Because of
    the persistence of these parameters, the client and the KDC are to
    use the appropriate key derivation measures (as described in RFC
    1510bis) when using cached DH parameters.

PKINIT does not provide for a "return routability test" routability" test to prevent
attackers from mounting a denial of service denial-of-service attack on the KDC by
causing it to perform needless unnecessary and expensive cryptographic public-key
operations.  Strictly speaking, this is also true of base standard
Kerberos, although the potential cost is not as great in base Kerberos, great, because it
standard Kerberos does not make use of public key public-key cryptography.

    Lastly, PKINIT calls for randomly generated keys for conventional
    cryptosystems.  Many such systems contain systematically "weak"
    keys.  For recommendations regarding these weak keys, see RFC
    1510bis.

6.  Transport Issues

    Certificate chains can potentially grow quite large and span several
    UDP packets; this in turn increases

5.  Acknowledgements

Some of the probability that a Kerberos
    message involving PKINIT extensions will be broken in transit.  In
    light ideas on which this proposal is based arose during
discussions over several years between members of the possibility that SAAG, the IETF
CAT working group, and the PSRG, regarding integration of Kerberos specification will
    require KDCs to accept requests using TCP as a transport mechanism,
    we make
and SPX.  Some ideas have also been drawn from the same recommendation with respect DASS system.
These changes are by no means endorsed by these groups.  This is an
attempt to revive some of the PKINIT
    extensions as well. 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.

6.  Expiration Date

This draft expires May 31, 2004.

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] M. Sirbu, J. Chuang.  Distributed Authentication in Kerberos
Using Public Key Cryptography.  Symposium On Network and Distributed
System Security, 1997.

[4] B. Cox, J.D. Tygar, M. Sirbu.  NetBill Security and Transaction
Protocol.  In Proceedings of the USENIX Workshop on Electronic
Commerce, July 1995.

[5] T. Dierks, C. Allen.  The TLS Protocol, Version 1.0 1.0.  Request
for Comments 2246, January 1999.

[6] B.C. Neuman, Proxy-Based Authorization and Accounting for
Distributed Systems.  In Proceedings of the 13th International
Conference on Distributed Computing Systems, May 1993.

[7] ITU-T (formerly CCITT) Information technology - Open Systems
Interconnection - The Directory: Authentication Framework
Recommendation X.509 ISO/IEC 9594-8

[8] R. Housley. Cryptographic Message Syntax.
draft-ietf-smime-cms-13.txt, April 1999, approved for publication as
RFC.

[9] PKCS #7: Cryptographic Message Syntax Standard, Standard. An RSA
Laboratories Technical Note Version 1.5 1.5. Revised November 1, 1993

[10] R. Rivest, MIT Laboratory for Computer Science and RSA Data
Security, Inc. A Description of the RC2(r) Encryption Algorithm Algorithm.
March 1998.  Request for Comments 2268.

[11] M. Wahl, S. Kille, T. Howes. Lightweight Directory Access
    Protocol (v3): UTF-8 String Representation of Distinguished Names.
    Request for Comments 2253.

    [12] R. Housley, W. Ford, W. Polk, D. Solo. Internet X.509 Public
Key Infrastructure, Certificate and CRL Profile, January 1999.
Request for Comments 2459.

    [13]

[12] B. Kaliski, J. Staddon. PKCS #1: RSA Cryptography
Specifications, October 1998.  Request for Comments 2437.

    [14] S. Dusse, P. Hoffman, B. Ramsdell, J. Weinstein.  S/MIME
    Version 2 Certificate Handling, March 1998.  Request for
    Comments 2312.

    [15] M. Wahl, T. Howes, S. Kille.  Lightweight Directory Access
    Protocol (v3), December 1997.  Request for Comments 2251.

    [16]

[13] ITU-T (formerly CCITT) Information Processing Systems - Open
Systems Interconnection - Specification of Abstract Syntax Notation
One (ASN.1) Rec. X.680 ISO/IEC 8824-1

    [17]

[14] PKCS #3: Diffie-Hellman Key-Agreement Standard, An RSA
Laboratories Technical Note, Version 1.4, Revised November 1, 1993.

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 March 12, 2002.

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 {brian,bcn}@isi.edu

Matthew Hur
Ari Medvinsky
Microsoft Corporation
One Microsoft Way
Redmond WA 98052
Phone: +1 425 707 3336
E-mail: matthur@microsoft.com

    Ari Medvinsky
    Liberate Technologies
    2 Circle Star Way
    San Carlos CA 94070
    E-mail: ari@liberate.com matthur@microsoft.com, arimed@windows.microsoft.com

Sasha Medvinsky
Motorola, Inc.
6450 Sequence Drive
San Diego, CA 92121
+1 858 404 2367
E-mail: smedvinsky@gi.com smedvinsky@motorola.com

John Wray
Iris Associates, Inc.
5 Technology Park Dr.
Westford, MA 01886
E-mail: John_Wray@iris.com

Jonathan Trostle
E-mail: jtrostle@world.std.com