
INTERNET-DRAFT                                               Matthew Hur
draft-ietf-cat-kerberos-pk-cross-06.txt            CyberSafe Corporation
Updates: RFC 1510                                             Brian Tung
expires October 10, 2000                                  Tatyana Ryutov
                                                         Clifford Neuman
                                                             Gene Tsudik
                                                                     ISI
                                                           Ari Medvinsky
                                                                Keen.com
                                                         Bill Sommerfeld
                                                         Hewlett-Packard


    Public Key Cryptography for Cross-Realm Authentication in Kerberos


0.  Status Of this Memo

    This document is an Internet-Draft and is in full conformance with
    all provisions of Section 10 of RFC 2026.  Internet-Drafts are
    working documents of the Internet Engineering Task Force (IETF),
    its areas, and its working groups.  Note that other groups may
    also distribute working documents as Internet-Drafts.

    Internet-Drafts are draft documents valid for a maximum of six
    months and may be updated, replaced, or obsoleted by other
    documents at any time.  It is inappropriate to use Internet-Drafts
    as reference material or to cite them other than as ``work in
    progress.''

     The list of current Internet-Drafts can be accessed at
     http://www.ietf.org/ietf/1id-abstracts.txt

     The list of Internet-Draft Shadow Directories can be accessed at
     http://www.ietf.org/shadow.html.



    To learn the current status of any Internet-Draft, please check
    the ``1id-abstracts.txt'' listing contained in the Internet-Drafts
    Shadow Directories on ftp.ietf.org (US East Coast),
    nic.nordu.net (Europe), ftp.isi.edu (US West Coast), or
    munnari.oz.au (Pacific Rim).

    The distribution of this memo is unlimited.  It is filed as
    draft-ietf-cat-kerberos-pk-cross-06.txt, and expires May 15, 1999.
    Please send comments to the authors.


1.  Abstract

    This document defines extensions to the Kerberos protocol 
    specification [1] to provide a method for using public key 
    cryptography to enable cross-realm authentication.  The methods 
    defined here specify the way in which message exchanges are to be 
    used to transport cross-realm secret keys protected by encryption 
    under public keys certified as belonging to KDCs.


2.  Introduction

    The Kerberos authentication protocol [2]  can leverage the 
    advantages provided by public key cryptography.  PKINIT [3] 
    describes the use of public key cryptography in the initial 
    authentication exchange in Kerberos.  PKTAPP [4] describes how an 
    application service can essentially issue a kerberos ticket to 
    itself after utilizing public key cryptography for authentication. 
    Another informational document species the use of public key 
    crypography for anonymous authentication in Kerberos [5].  This 
    specification describes the use of public key crpytography in cross- 
    realm authentication.

    Without the use of public key cryptography, administrators must 
    maintain separate keys for every realm which wishes to exchange 
    authentication information with another realm (which implies n(n-1) 
    keys), or they must utilize a hierachichal arrangement of realms, 
    which may complicate the trust model by requiring evaluation of 
    transited realms.

    Even with the multi-hop cross-realm authentication, there must be 
    some way to locate the path by which separate realms are to be 
    transited.  The current method, which makes use of the DNS-like 
    realm names typical to Kerberos, requires trust of the intermediate 
    KDCs.

    PKCROSS utilizes a public key infrastructure (PKI) [6] to simplify 
    the administrative burden of maintaining cross-realm keys.  Such 
    usage leverages a PKI for a non-centrally-administratable environment 
    (namely, inter-realm).  Thus, a shared key for cross-realm 
    authentication can be established for a set period of time, and a 
    remote realm is able to issue policy information that is returned to 
    itself when a client requests cross-realm authentication. Such policy 
    information may be in the form of restrictions [7].  Furthermore, 
    these methods are transparent to the client; therefore, only the KDCs 
    need to be modified to use them.  In this way, we take advantage of 
    the the distributed trust management capabilities of public key 
    crypography while maintaining the advantages of localized trust 
    management provided by Kerberos.


    Although this specification utilizes the protocol specfied in the 
    PKINIT specification, it is not necessary to implement client 
    changes in order to make use of the changes in this document.


3.  Objectives

    The objectives of this specification are as follows:
    
      1.  Simplify the administration required to establish Kerberos
          cross-realm keys.
          
      2.  Avoid modification of clients and application servers.

      3.  Allow remote KDC to control its policy on cross-realm
          keys shared between KDCs, and on cross-realm tickets
          presented by clients.

      4.  Remove any need for KDCs to maintain state about keys
          shared with other KDCs.

      5.  Leverage the work done for PKINIT to provide the public key
          protocol for establishing symmetric cross realm keys.


4.  Definitions

    The following notation is used throughout this specification:
    KDC_l ........... local KDC
    KDC_r ........... remote KDC
    XTKT_(l,r) ...... PKCROSS ticket that the remote KDC issues to the
                      local KDC
    TGT_(c,r) ....... cross-realm TGT that the local KDC issues to the
                      client for presentation to the remote KDC

    This specification defines the following new types to be added to the 
    Kerberos specification:
      PKCROSS kdc-options field in the AS_REQ is bit 9
      TE-TYPE-PKCROSS-KDC       2
      TE-TYPE-PKCROSS-CLIENT    3

    This specification defines the following ASN.1 type for conveying
    policy information:
    CrossRealmTktData ::= SEQUENCE OF TypedData

    This specification defines the following types for policy information 
    conveyed in CrossRealmTktData:
      PLC_LIFETIME              1
      PLC_SET_TKT_FLAGS         2
      PLC_NOSET_TKT_FLAGS       3

    TicketExtensions are defined per the Kerberos specification [8]:
    TicketExtensions ::= SEQUENCE OF TypedData
      Where
        TypedData ::=   SEQUENCE {
            data-type[0]   INTEGER,
            data-value[1]  OCTET STRING OPTIONAL
        }


5.  Protocol Specification

    We assume that the client has already obtained a TGT.  To perform
    cross-realm authentication, the client does exactly what it does
    with ordinary (i.e. non-public-key-enabled) Kerberos; the only
    changes are in the KDC; although the ticket which the client
    forwards to the remote realm may be changed.  This is acceptable
    since the client treats the ticket as opaque.


5.1.  Overview of Protocol

    The basic operation of the PKCROSS protocol is as follows:

        1.  The client submits a request to the local KDC for
            credentials for the remote realm.  This is just a typical
            cross realm request that may occur with or without PKCROSS. 

        2.  The local KDC submits a PKINIT request to the remote KDC to
            obtain a "special" PKCROSS ticket.  This is a standard
            PKINIT request, except that PKCROSS flag (bit 9) is set in
            the kdc-options field in the AS_REQ.

        3.  The remote KDC responds as per PKINIT, except that
            the ticket contains a TicketExtension, which contains
            policy information such as lifetime of cross realm tickets
            issued by KDC_l to a client.  The local KDC must reflect
            this policy information in the credentials it forwards to
            the client.  Call this ticket XTKT_(l,r) to indicate that
            this ticket is used to authenticate the local KDC to the
            remote KDC.

        4.  The local KDC passes a ticket, TGT_(c,r) (the cross realm
            TGT between the client and remote KDC), to the client.
            This ticket contains in its TicketExtension field the
            ticket, XTKT_(l,r), which contains the cross-realm key.
            The TGT_(c,r) ticket is encrypted using the key sealed in
            XTKT_(l,r).  (The TicketExtension field is not encrypted.)
            The local KDC may optionally include another TicketExtension
            type that indicates the hostname and/or IP address for the
            remote KDC.

        5.  The client submits the request directly to the remote
            KDC, as before.
            
        6.  The remote KDC extracts XTKT_(l,r) from the TicketExtension
            in order to decrypt the encrypted part of TGT_(c,r).

    --------------------------------------------------------------------
    
    Client                Local KDC (KDC_l)           Remote KDC (KDC_r)
    ------                -----------------           ------------------
    Normal Kerberos
    request for
    cross-realm
    ticket for KDC_r
    ---------------------->
    
                          PKINIT request for
                          XTKT(l,r) - PKCROSS flag
                          set in the AS-REQ
                          * ------------------------->
                          
                                                      PKINIT reply with
                                                      XTKT_(l,r) and
                                                      policy info in
                                                      ticket extension
                                           <-------------------------- *

                          Normal Kerberos reply
                          with TGT_(c,r) and
                          XTKT(l,r) in ticket
                          extension
         <--------------------------------- 

    Normal Kerberos
    cross-realm TGS-REQ
    for remote
    application
    service with
    TGT_(c,r) and
    XTKT(l,r) in ticket
    extension
    ------------------------------------------------->

                                                      Normal Kerberos
                                                      cross-realm
                                                      TGS-REP
        <---------------------------------------------------------------

    * Note that the KDC to KDC messages occur only periodically, since
      the local KDC caches the XTKT_(l,r).
    --------------------------------------------------------------------
    

    Sections 5.2 through 5.4 describe in detail steps 2 through 4
    above.  Section 5.6 describes the conditions under which steps
    2 and 3 may be skipped.

    Note that the mechanism presented above requires infrequent KDC to 
    KDC communication (as dictated by policy - this is discussed
    later).  Without such an exchange, there are the following issues:
    1) KDC_l would have to issue a ticket with the expectation that
       KDC_r will accept it.
    2) In the message that the client sends to KDC_r, KDC_l would have
       to authenticate KDC_r with credentials that KDC_r trusts.
    3) There is no way for KDC_r to convey policy information to KDC_l.
    4) If, based on local policy, KDC_r does not accept a ticket from
       KDC_l, then the client gets stuck in the middle.  To address such
       an issue would require modifications to standard client
       processing behavior.
    Therefore, the infreqeunt use of KDC to KDC communication assures
    that inter-realm KDC keys may be established in accordance with local
    policies and that clients may continue to operate without
    modification.


5.2.  Local KDC's Request to Remote KDC

    When the local KDC receives a request for cross-realm authentication, 
    it first checks its ticket cache to see if it has a valid PKCROSS 
    ticket, XTKT_(l,r).  If it has a valid XTKT_(l,r), then it does not 
    need to send a request to the remote KDC (see section 5.5).

    If the local KDC does not have a valid XTKT_(l,r), it sends a     
    request to the remote KDC in order to establish a cross realm key and 
    obtain the XTKT_(l,r).  This request is in fact a PKINIT request as 
    described in the PKINIT specification; i.e., it consists of an AS-REQ 
    with a PA-PK-AS-REQ included as a preauthentication field.  Note, 
    that the AS-REQ MUST have the PKCROSS flag (bit 9) set in the 
    kdc_options field of the AS-REQ.  Otherwise, this exchange exactly 
    follows the description given in the PKINIT specification.  In 
    addition, the naming


5.3.  Remote KDC's Response to Local KDC

    When the remote KDC receives the PKINIT/PKCROSS request from the
    local KDC, it sends back a PKINIT response as described in
    the PKINIT specification with the following exception: the encrypted
    part of the Kerberos ticket is not encrypted with the krbtgt key;
    instead, it is encrypted with the ticket granting server's PKCROSS
    key.  This key, rather than the krbtgt key, is used because it
    encrypts a ticket used for verifying a cross realm request rather
    than for issuing an application service ticket.  Note that, as a
    matter of policy, the session key for the XTKT_(l,r) MAY be of
    greater strength than that of a session key for a normal PKINIT
    reply, since the XTKT_(l,r) SHOULD be much longer lived than a
    normal application service ticket.

    In addition, the remote KDC SHOULD include policy information in the 
    XTKT_(l,r).  This policy information would then be reflected in the 
    cross-realm TGT, TGT_(c,r).  Otherwise, the policy for TGT_(c,r) 
    would be dictated by KDC_l rather than by KDC_r.  The local KDC MAY 
    enforce a more restrictive local policy when creating a cross-realm 
    ticket, TGT_(c,r).  For example, KDC_r  may dictate a lifetime 
    policy of eight hours, but KDC_l may create TKT_(c,r) with a 
    lifetime of four hours, as dictated by local policy.  Also, the 
    remote KDC MAY include other information about itself along with the 
    PKCROSS ticket.  These items are further discussed in section 6 
    below.


5.4.  Local KDC's Response to Client

    Upon receipt of the PKINIT/CROSS response from the remote KDC,
    the local KDC formulates a response to the client.  This reply
    is constructed exactly as in the Kerberos specification, except
    for the following:

    A) The local KDC places XTKT_(l,r) in the TicketExtension field of
       the client's cross-realm, ticket, TGT_(c,r), for the remote realm.
       Where
          data-type   equals 3 for TE-TYPE-PKCROSS-CLIENT
          data-value  is ASN.1 encoding of XTKT_(l,r)
     
    B) The local KDC adds the name of its CA to the transited field of
       TGT_(c,r).


5.5   Remote KDC's Processing of Client Request

    When the remote KDC, KDC_r, receives a cross-realm ticket, 
    TGT_(c,r), and it detects that the ticket contains a ticket 
    extension of type TE-TYPE-PKCROSS-CLIENT, KDC_r must first decrypt 
    the ticket, XTKT_(l,r), that is encoded in the ticket extension.  
    KDC_r uses its PKCROSS key in order to decrypt XTKT_(l,r).  KDC_r 
    then uses the key obtained from XTKT_(l,r) in order to decrypt the 
    cross-realm ticket, TGT_(c,r).

    KDC_r MUST verify that the cross-realm ticket, TGT_(c,r) is in 
    compliance with any policy information contained in XTKT_(l,r) (see 
    section 6).  If the TGT_(c,r) is not in compliance with policy, then 
    the KDC_r responds to the client with a KRB-ERROR message of type 
    KDC_ERR_POLICY.

    
5.6.  Short-Circuiting the KDC-to-KDC Exchange

    As we described earlier, the KDC to KDC exchange is required only 
    for establishing a symmetric, inter-realm key.  Once this key is 
    established (via the PKINIT exchange), no KDC to KDC communication 
    is required until that key needs to be renewed.  This section 
    describes the circumstances under which the KDC to KDC exchange 
    described in Sections 5.2 and 5.3 may be skipped.

    The local KDC has a known lifetime for TGT_(c,r).  This lifetime may 
    be determined by policy information included in XTKT_(l,r), and/or 
    it may be determined by local KDC policy.  If the local KDC already 
    has a ticket XTKT(l,r), and the start time plus the lifetime for 
    TGT_(c,r) does not exceed the expiration time for XTGT_(l,r), then 
    the local KDC may skip the exchange with the remote KDC, and issue a 
    cross-realm ticket to the client as described in Section 5.4.

    Since the remote KDC may change its PKCROSS key (referred to in 
    Section 5.2) while there are PKCROSS tickets still active, it SHOULD 
    cache the old PKCROSS keys until the last issued PKCROSS ticket 
    expires.  Otherwise, the remote KDC will respond to a client with a 
    KRB-ERROR message of type KDC_ERR_TGT_REVOKED.


6.  Extensions for the PKCROSS Ticket

    As stated in section 5.3, the remote KDC SHOULD include policy 
    information in XTKT_(l,r).  This policy information is contained in 
    a TicketExtension, as defined by the Kerberos specification, and the 
    authorization data of the ticket will contain an authorization 
    record of type AD-IN-Ticket-Extensions.  The TicketExtension defined 
    for use by PKCROSS is TE-TYPE-PKCROSS-KDC.
      Where
        data-type   equals 2 for TE-TYPE-PKCROSS-KDC
        data-value  is ASN.1 encoding of CrossRealmTktData

      CrossRealmTktData ::= SEQUENCE OF TypedData


      ------------------------------------------------------------------
      CrossRealmTktData types and the corresponding data are interpreted 
      as follows:

                                                            ASN.1 data
      type                value   interpretation            encoding
      ----------------    -----   --------------            ----------
      PLC_LIFETIME          1     lifetime (in seconds)     INTEGER
                                  for TGT_(c,r) 
                                  - cross-realm tickets
                                    issued for clients by
                                    TGT_l

      PLC_SET_TKT_FLAGS     2     TicketFlags that must     BITSTRING
                                  be set
                                  - format defined by
                                    Kerberos specification

      PLC_NOSET_TKT_FLAGS   3     TicketFlags that must     BITSTRING
                                  not be set
                                  - format defined by
                                    Kerberos specification

      Further types may be added to this table.
      ------------------------------------------------------------------


7.  Usage of Certificates

    In the cases of PKINIT and PKCROSS, the trust in a certification 
    authority is equivalent to Kerberos cross realm trust.  For this 
    reason, an implementation MAY choose to use the same KDC certificate 
    when the KDC is acting in any of the following three roles:
      1) KDC is authenticating clients via PKINIT
      2) KDC is authenticating another KDC for PKCROSS 
      3) KDC is the client in a PKCROSS exchange with another KDC

    Note that per PKINIT, the KDC X.509 certificate (the server in a 
    PKINIT exchange) MUST contain the principal name of the KDC in the 
    subjectAltName field.


8.  Transport Issues

    Because the messages between the KDCs involve PKINIT exchanges, and 
    PKINIT recommends TCP as a transport mechanism (due to the length of 
    the messages and the likelihood that they will fragment), the same 
    recommendation for TCP applies to PKCROSS as well.

    
9. Security Considerations

   Since PKCROSS utilizes PKINIT, it is subject to the same security
   considerations as PKINIT.  Administrators should assure adherence 
   to security policy - for example, this affects the PKCROSS policies
   for cross realm key lifetime and for policy propogation from the 
   PKCROSS ticket, issued from a remote KDC to a local KDC, to
   cross realm tickets that are issued by a local KDC to a client.


10. Bibliography

  [1] J. Kohl, C. Neuman.  The Kerberos Network Authentication Service 
  (V5).  Request for Comments 1510.

  [2] B.C. Neuman, Theodore Ts'o. Kerberos: An Authentication Service
  for Computer Networks, IEEE Communications, 32(9):33-38.  September
  1994.

  [3] B. Tung, C. Neuman, M. Hur, A. Medvinsky, S.Medvinsky, J. Wray
  J. Trostle.  Public Key Cryptography for Initial Authentication
  in Kerberos.
  draft-ietf-cat-kerberos-pk-init-11.txt

  [4] A. Medvinsky, M. Hur, S. Medvinsky, B. Clifford Neuman.  Public 
  Key Utilizing Tickets for Application Servers (PKTAPP). draft-ietf-
  cat-pktapp-02.txt

  [5] A. Medvinsky, J. Cargille, M. Hur.  Anonymous Credentials in
  Kerberos. draft-ietf-cat-kerberos-anoncred-01.txt

  [6] ITU-T (formerly CCITT) Information technology - Open Systems
  Interconnection - The Directory: Authentication Framework
  Recommendation X.509 ISO/IEC 9594-8
    
  [7] B.C. Neuman, Proxy-Based Authorization and Accounting for 
  Distributed Systems.  In Proceedings of the 13th International 
  Conference on Distributed Computing Systems, May 1993.

  [8] C.Neuman, J. Kohl, T. Ts'o.  The Kerberos Network Authentication 
  Service (V5). draft-ietf-cat-kerberos-revisions-05.txt


11. Authors' Addresses

    Matthew Hur
    CyberSafe Corporation
    1605 NW Sammamish Road
    Issaquah WA 98027-5378
    Phone: +1 425 391 6000
    E-mail: matt.hur@cybersafe.com

    Brian Tung
    Tatyana Ryutov
    Clifford Neuman
    Gene Tsudik
    USC/Information Sciences Institute
    4676 Admiralty Way Suite 1001
    Marina del Rey, CA 90292-6695
    Phone: +1 310 822 1511
    E-Mail: {brian, tryutov, bcn, gts}@isi.edu

    Ari Medvinsky
    Keen.com
    2480 Sand Hill Road, Suite 200
    Menlo Park, CA 94025
    Phone +1 650 289 3134
    E-mail: ari@keen.com

    Bill Sommerfeld
    Hewlett Packard
    300 Apollo Drive
    Chelmsford MA 01824
    Phone: +1 508 436 4352
    E-Mail: sommerfeld@apollo.hp.com

