<Kerberos Working Group>                                      Larry Zhu
Internet Draft                                       Karthik Jaganathan
Updates: 1964                                                 Microsoft
Category: Standards Track                                   Sam Hartman
draft-ietf-krb-wg-gssapi-cfx-01.txt                                 MIT
                                                        August 29, 2003
                                             Expires: February 29, 2004

          The Kerberos Version 5 GSS-API Mechanism: Version 2

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.


1. Abstract

   [RFC-1964] defines protocols, procedures, and conventions to be
   employed by peers implementing the Generic Security Service
   Application Program Interface (as specified in [RFC-2743]) when
   using the Kerberos Version 5 mechanism (as specified in [KRBCLAR]).

   This memo obsoletes [RFC-1964] and proposes changes in response to
   recent developments such as the introduction of Kerberos crypto
   framework.  It is intended that this memo or a subsequent version
   will become the Kerberos Version 5 GSS-API mechanism specification
   on the standards track.

2. Conventions used in this document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC-2119].

3. Introduction

   [KCRYPTO] defines a generic framework for describing encryption and
   checksum types to be used with the Kerberos protocol and associated
   protocols.


Zhu              Standards Trace - February 16, 2003                1
                  Kerberos Version 5 GSS-API      August 2003


   [RFC-1964] describes the GSSAPI mechanism for Kerberos V5.  It
   defines the format of context initiation, per-message and context
   deletion tokens and uses algorithm identifiers for each cryptosystem
   in per message and context deletion tokens.

   The approach taken in this document obviates the need for algorithm
   identifiers.  This is accomplished by using the same encryption and
   checksum algorithms specified by the crypto profile [KCRYPTO] for
   the session key or subkey that is created during context
   negotiation.  Message layouts of the per-message and context
   deletion tokens are therefore revised to remove algorithm indicators
   and also to add extra information to support the generic crypto
   framework [KCRYPTO].

   Tokens transferred between GSS-API peers for security context
   initiation are also described in this document.  The data elements
   exchanged between a GSS-API endpoint implementation and the Kerberos
   KDC are not specific to GSS-API usage and are therefore defined
   within [KRBCLAR] rather than within this specification.

   The new token formats specified in this memo MUST be used with all
   "newer" encryption types [KRBCLAR] and MAY be used with "older"
   encryption types, provided that the initiator and acceptor know,
   from the context establishment, that they can both process these new
   token formats.

   "Newer" encryption types are those which have been specified along
   with or since the new Kerberos cryptosystem specification [KCRYPTO]
   [KRBCLAR].

   Note that in this document, "AES" is used for brevity to refer
   loosely to either aes128-cts-hmac-sha1-96 or aes256-cts-hmac-sha1-96
   as defined in [AES-KRB5].  AES is used as an example of the new
   method defined in this document.

4. Key Derivation for Per-Message and Context Deletion Tokens

   To limit the exposure of a given key, [KCRYPTO] adopted "one-way"
   "entropy-preserving" derived keys, for different purposes or key
   usages, from a base key or protocol key.  This document defines four
   key usage values below for signing and sealing messages:

        Name                         value
      -------------------------------------
       KG-USAGE-ACCEPTOR-SEAL         22
       KG-USAGE-ACCEPTOR-SIGN         23
       KG-USAGE-INITIATOR-SEAL        24
       KG-USAGE-INITIATOR-SIGN        25

   When the sender is the context acceptor, KG-USAGE-ACCEPTOR-SIGN is
   used as the usage number in the key derivation function for deriving
   keys to be used in MIC and context deletion tokens, and KG-USAGE-
   ACCEPTOR-SEAL is used for Wrap tokens; similarly when the sender is
   the context initiator, KG-USAGE-INITIATOR-SIGN is used as the usage

Zhu              Standards Track - February 16, 2004                2
                  Kerberos Version 5 GSS-API      August 2003


   number in the key derivation function for MIC and context deletion
   tokens, KG-USAGE-INITIATOR-SEAL is used for Wrap Tokens.  Even if
   the Wrap token does not provide for confidentiality the same usage
   values specified above are used.

5. Quality of Protection

   The GSSAPI specification [RFC-2743] provides for Quality of
   Protection (QOP) values that can be used by the application to
   request a certain type of encryption or signing.  A zero QOP value
   is used to indicate the "default" protection; applications which use
   the default QOP are not guaranteed to be portable across
   implementations or even inter-operate with different deployment
   configurations of the same implementation.  Using an algorithm that
   is different from the one for which the key is defined may not be
   appropriate.  Therefore, when the new method in this document is
   used, the QOP value is ignored.

   The encryption and checksum algorithms in per-message and context
   deletion tokens are now implicitly defined by the algorithms
   associated with the session key or subkey.  Algorithms identifiers
   as described in [RFC-1964] are therefore no longer needed and
   removed from the new token headers.

6. Token Framing

   Per [RFC-2743], all tokens emitted by the Kerberos V5 GSS-API
   mechanism will have the framing shown below:

      GSS-API DEFINITIONS ::=

      BEGIN

      MechType ::= OBJECT IDENTIFIER
      -- representing Kerberos V5 mechanism

      GSSAPI-Token ::=
      -- option indication (delegation, etc.) indicated within
      -- mechanism-specific token
      [APPLICATION 0] IMPLICIT SEQUENCE {
              thisMech MechType,
              innerToken ANY DEFINED BY thisMech
                 -- contents mechanism-specific
                 -- ASN.1 structure not required
              }
      END

   The innerToken field always starts with a two byte token-identifier
   (TOK_ID).  Here are the TOK_ID values:

         Token                       TOK_ID Value in hex
        -------------------------------------------
         KRB_AP_REQUEST                 01 00
         KRB_AP_REQPLY                  02 00

Zhu              Standards Track - February 16, 2004                3
                  Kerberos Version 5 GSS-API      August 2003


         KRB_ERROR                      03 00
         [RFC-1964] MIC                 01 01
         [RFC-1964] Wrap                01 02
         [RFC-1964] context deletion    02 01
         MIC                            04 04
         Wrap                           04 05
         context deletion               05 04


7. Context Initialization Tokens

   For context initialization tokens, the body for the innerToken field
   contains a Kerberos V5 message (KRB_AP_REQUEST, KRB_AP_REPLY, or
   KRB_ERROR) as defined in [KRBCLAR].

7.1. Authenticator Checksum

   The authenticator in the KRB_AP_REQ message MUST include the
   optional sequence number and the checksum field.  The checksum field
   is used to convey service flags, channel binding, and optional
   delegation information.  It MUST have a type of 0x8003.  The length
   of the checksum MUST be 24 bytes when delegation is not used.  When
   delegation is used, a TGT with its FORWARDABLE flag set will be
   transferred within the KRB_CRED [KRBCLAR] message.

   The format of the authenticator checksum field is as follows.

      Byte    Name      Description
     -----------------------------------------------------------------
      0..3    Lgth    Number of bytes in Bnd field;
                      Currently contains hex 10 00 00 00
                      (16, represented in little-endian form)
      4..19   Bnd     MD5 hash of channel bindings, taken over all
                      non-null components of bindings, in order
                      of declaration.  Integer fields within channel
                      bindings are represented in little-endian order
                      for the purposes of the MD5 calculation.
      20..23  Flags   Bit vector of context-establishment flags,
                      as defined next. The resulting bit vector is
                      encoded into bytes 20..23 in little-endian form.
      24..25  DlgOpt  The Delegation Option identifier (=1) [optional]
      26..27  Dlgth   The length of the Deleg field [optional]
      28..n   Deleg   A KRB_CRED message (n = Dlgth + 29) [optional]

   [we need to get input on how to allow additional data for
   extensions.  Nicolas will post some text for this.  If that is the
   case, do we need to change the checksum type?]

7.1.1. Flags Field

   The checksum flags are used to convey service options or extension
   negotiation information.  The bits in the Flags field are allocated
   as follows (Most significant bit is bit 0):

Zhu              Standards Track - February 16, 2004                4
                  Kerberos Version 5 GSS-API      August 2003


      Bit         Name          Description
    ----------------------------------------------------
      0..11     Mandatory     Critical extension flags
      12..15    Optional      Non-critical extension flags
      16..31    Standard      Context establishment flags

   An extension or context establishment flag can either be critical or
   non-critical.  When the context initiator desires a particular
   extension or context establishment flag (either critical or non-
   critical) it sets the appropriate checksum flag.  The context
   acceptor MUST ignore unsupported non-critical extensions or flags in
   the initiator's context token (i.e., acceptors MUST NOT return an
   error just because there were unsupported non-critical extensions or
   flags in the initiator's token).  The acceptor MUST return
   GSS_S_UNAVAILABLE [RFC-2743] if there are unsupported critical
   extensions or flags in the initiator's context token.

   The following context establishment flags are defined in [RFC-2744]

        Flag Name                Value
      ---------------------------------
       GSS_C_DELEG_FLAG           1
       GSS_C_MUTUAL_FLAG          2
       GSS_C_REPLAY_FLAG          4
       GSS_C_SEQUENCE_FLAG        8
       GSS_C_CONF_FLAG           16
       GSS_C_INTEG_FLAG          32
       GSS_C_ANON_FLAG           64

   Context establishment flags are exposed to the calling application.
   If the calling application desires a particular service option then
   it requests that option via GSS_Init_sec_context().  An
   implementation that supports a particular extension SHOULD then set
   the appropriate flag in the checksum Flags field.

   All existing context establishment flags are non-critical, and it is
   possible that a new context establishment flag can be added as a
   critical flag.

7.1.2. Channel Binding Information

   In computing the contents of the "Bnd" field, the following detailed
   points apply:

   (1) Each integer field shall be formatted into four bytes, using
   little-endian byte ordering, for purposes of MD5 hash computation.

   (2) All input length fields within gss_buffer_desc [RFC-2744]
   elements of a gss_channel_bindings_struct [RFC-2744], even those
   which are zero-valued, shall be included in the hash calculation;
   the value elements of gss_buffer_desc elements shall be
   dereferenced, and the resulting data shall be included within the
   hash computation, only for the case of gss_buffer_desc elements
   having non-zero length specifiers.

Zhu              Standards Track - February 16, 2004                5
                  Kerberos Version 5 GSS-API      August 2003



   (3) If the caller passes the value GSS_C_NO_BINDINGS instead of a
   valid channel bindings structure, the Bnd field shall be set to 16
   zero-valued bytes.

   [Nicolas suggested that the only change that might be needed here
   was the use of SHA1 instead of MD5]

8. Per-Message and Context Deletion Tokens

   The new per-message and context deletion token formats defined in
   this document are designed to accommodate the requirements of newer
   crypto systems.  The token layouts have also been designed to
   facilitate scatter-gather and in-place encryption without incurring
   significant performance penalties for implementations that do not
   allow for either scatter-gather or in-place encryption.

   The design along with the rationale behind it is discussed in detail
   in the following sections.

8.1. Sequence Number and Direction Indicator

   The sequence number for any per-message or context deletion token is
   a 64 bit integer (expressed in big endian order).  One separate flag
   is used as the direction-indicator as described in section 8.2.
   Both the sequence number and the direction-indicator are protected
   by the encryption and checksum procedures as specified in section
   8.4.

8.2. Flags Field

   The Flags field is a one-byte bit vector used to indicate a set of
   attributes.  The meanings of the flags are:

        Bit    Name             Description
       ---------------------------------------------------------------
        0     SentByAcceptor  When set, this flag indicates the sender
                              is the context acceptor.  When not set,
                              it indicates the sender is the context
                              initiator.
        1     Sealed          When set in Wrap tokens, this flag
                              indicates confidentiality is provided
                              for.  It MUST not be set in MIC and
                              context deletion tokens.

   The rest of available bits are reserved for future use.

8.3. EC Field

   The EC (Extra Count) field is a two-byte integer field expressed in
   big endian order.



Zhu              Standards Track - February 16, 2004                6
                  Kerberos Version 5 GSS-API      August 2003


   In Wrap tokens with confidentiality, the EC field is used to encode
   the size (in bytes) of the random filler, as described in section
   8.4.

   In Wrap tokens without confidentiality, the EC field is used to
   encode the size (in bytes) of the trailing checksum, as described in
   section 8.4.

   When AES is used, the EC field contains the hex value 00 0C in Wrap
   tokens without confidentiality, and 00 00 in Wrap tokens with
   confidentiality.

8.4. Encryption and Checksum Operations

   The encryption algorithms defined by the crypto profiles provide for
   integrity protection.  Therefore no separate checksum is needed.

   The result of decryption can be longer than the original plaintext
   [KCRYPTO] and the extra trailing bytes are called "crypto-system
   garbage".  However, given the size of any plaintext data, one can
   always find the next (possibly larger) size so that, when padding
   the to-be-encrypted text to that size, there will be no crypto-
   system garbage added [KCRYPTO].

   In Wrap tokens that provide for confidentiality, the "header" (the
   first 16 bytes of the Wrap token) is appended to the plaintext data
   before encryption.  Random filler is inserted between the plaintext-
   data and the "header", and there SHALL NOT be crypto-system garbage
   added by the decryption operation.  The resulting Wrap token is
   {"header" | encrypt(plaintext-data | random-filler | "header")},
   where encrypt() is the encryption operation (which provides for
   integrity protection) defined in the crypto profile [KCRYPTO].

   [A note from the design team (Sam, Nicolas, Ken, JK and Larry):
   constraints need to be added to kcrypto to keep the header at the
   end of the decrypted data.  Without these constraints, we might have
   the header pre-pended to the front of the data and encode an 8 byte
   length for the plaintext data, which is less efficient.

   Constraints to be added: Given the length of any plaintext data,
   there should always exist the next (possibly larger) size for which,
   when padding the to-be-encrypted data to that size, there will be no
   cryptosystem garbage added, and the number of bytes needed to pad to
   the next size is no larger than 64K.  This is a small addition to
   kcrypto and we will bring it up at the IETF last call for kcrypto]

   In Wrap tokens that do not provide for confidentiality, the checksum
   is calculated over the plaintext data concatenated with the token
   header (the first 16 bytes of the Wrap token).  The resulting Wrap
   token is {"header" | plaintext-data | get_mic(plaintext-data |
   "header")},  where get_mic() is the checksum operation defined in
   the crypto profile [KCRYPTO].


Zhu              Standards Track - February 16, 2004                7
                  Kerberos Version 5 GSS-API      August 2003


   The parameters for the key and the cipher-state in the encrypt() and
   get_mic() operations have been omitted for brevity.

   The resulting Wrap tokens bind the data to the token header,
   including the sequence number and the directional indicator.

   [With AEAD, Wrap tokens with confidentiality do not need to encrypt
   the header and the overhead can be reduced slightly]

   For MIC tokens, the checksum is first calculated over the token
   header (the first 16 bytes of the MIC token) and then the to-be-
   signed plaintext data.

   For context deletion tokens, the checksum is calculated over the
   token header (the first 16 bytes of the context deletion token).

   When AES is used, the checksum algorithm is HMAC_SHA1_96 and the
   checksum size is 12 bytes.  Data is pre-pended with a 16 byte
   confounder before encryption, and no padding is needed.

8.5. RRC Field

   The RRC (Right Rotation Count) field in Wrap tokens is added to
   allow the data to be encrypted in-place by existing [SSPI]
   applications that do not provide an additional buffer for the
   trailer (the cipher text after the in-place-encrypted data) in
   addition to the buffer for the header (the cipher text before the
   in-place-encrypted data).  The resulting Wrap token in the previous
   section, excluding the first 16 bytes of the token header, is
   rotated to the right by "RRC" bytes.  The net result is that "RRC"
   bytes of trailing octets are moved toward the header.  Consider the
   following as an example of this rotation operation: Assume that the
   RRC value is 3 and the token before the rotation is {"header" | aa |
   bb | cc | dd | ee | ff | gg | hh}, the token after rotation would be
   {"header" | ff | gg | hh | aa | bb | cc | dd | ee }, where {aa | bb
   | cc |...| hh} is used to indicate the byte sequence.

   The RRC field is expressed as a two-byte integer in big endian
   order.

   The rotation count value is chosen by the sender based on
   implementation details, and the receiver MUST be able to interpret
   all possible rotation count values.

8.6. Message Layout for Per-message and Context Deletion Tokens

   The new message layouts are as follows.

   MIC Token:

      Byte no           Name           Description
       0..1            TOK_ID       Identification field.
                                    Tokens emitted by GSS_GetMIC()
                                    contain the hex value 04 04 in

Zhu              Standards Track - February 16, 2004                8
                  Kerberos Version 5 GSS-API      August 2003


                                    this field.
       2               Flags        Attributes field, as described in
                                    Section 8.2.
       3..7            Filler       Contains 5 bytes of hex value FF.
       8..15           SND_SEQ      Sequence number field in
                                    cleartext, in big endian order.
       16..last        SGN_CKSUM    Checksum of byte 0..15 and the
                                    "to-be-signed" data, where the
                                    checksum algorithm is defined by
                                    the crypto profile for the
                                    session key or subkey.


   The Filler field is included in the checksum calculation for
   simplicity.  This is common to both MIC and context deletion token
   checksum calculations.

   Wrap Token:

      Byte no           Name           Description
       0..1            TOK_ID       Identification field.
                                    Tokens emitted by GSS_Wrap()
                                    contain the hex value 05 04
                                    in this field.
       2               Flags        Attributes field, as described in
                                    Section 8.2.
       3               Filler       Contains the hex value FF.
       4..5            EC           Contains the "extra count" field,
                                    in big endian order as described in
                                    section 8.3.
       6..7            RRC          Contains the "right rotation
                                    count" in big endian order, as
                                    described in section 8.5.
       8..15           SND_SEQ      Sequence number field in
                                    cleartext, in big endian order.
       16..last        Data         Encrypted data or (plaintext data +
                                    checksum), as described in section
                                    8.4, where the encryption or
                                    checksum algorithm is defined by
                                    the crypto profile for the session
                                    key or subkey.


   Context Deletion Token:

      Byte no          Name             Description
       0..1           TOK_ID        Identification field.
                                    Tokens emitted by
                                    GSS_Delete_sec_context() contain
                                    the hex value 04 05 in this
                                    field.
       2              Flags         Attributes field, as described in
                                    Section 8.2.

Zhu              Standards Track - February 16, 2004                9
                  Kerberos Version 5 GSS-API      August 2003


       3..7           Filler        Contains 5 bytes of hex value FF.
       8..15          SND_SEQ       Sequence number field in
                                    cleartext, in big endian order.
       16..N          SGN_CKSUM     Checksum of byte 0..15, where the
                                    checksum algorithm is defined by
                                    the crypto profile for the
                                    session key or subkey.


9. Parameter Definitions

   This section defines parameter values used by the Kerberos V5 GSS-
   API mechanism. It defines interface elements in support of
   portability, and assumes use of C language bindings per [RFC-2744].

9.1. Minor Status Codes

   This section recommends common symbolic names for minor_status
   values to be returned by the Kerberos V5 GSS-API mechanism.  Use of
   these definitions will enable independent implementers to enhance
   application portability across different implementations of the
   mechanism defined in this specification.  (In all cases,
   implementations of GSS_Display_status() will enable callers to
   convert minor_status indicators to text representations.)  Each
   implementation should make available, through include files or other
   means, a facility to translate these symbolic names into the
   concrete values which a particular GSS-API implementation uses to
   represent the minor_status values specified in this section.

   It is recognized that this list may grow over time, and that the
   need for additional minor_status codes specific to particular
   implementations may arise.  It is recommended, however, that
   implementations should return a minor_status value as defined on a
   mechanism-wide basis within this section when that code is
   accurately representative of reportable status rather than using a
   separate, implementation-defined code.

9.1.1. Non-Kerberos-specific codes

      GSS_KRB5_S_G_BAD_SERVICE_NAME
              /* "No @ in SERVICE-NAME name string" */
      GSS_KRB5_S_G_BAD_STRING_UID
              /* "STRING-UID-NAME contains nondigits" */
      GSS_KRB5_S_G_NOUSER
              /* "UID does not resolve to username" */
      GSS_KRB5_S_G_VALIDATE_FAILED
              /* "Validation error" */
      GSS_KRB5_S_G_BUFFER_ALLOC
              /* "Couldn't allocate gss_buffer_t data" */
      GSS_KRB5_S_G_BAD_MSG_CTX
              /* "Message context invalid" */
      GSS_KRB5_S_G_WRONG_SIZE
              /* "Buffer is the wrong size" */
      GSS_KRB5_S_G_BAD_USAGE

Zhu              Standards Track - February 16, 2004               10
                  Kerberos Version 5 GSS-API      August 2003


              /* "Credential usage type is unknown" */
      GSS_KRB5_S_G_UNKNOWN_QOP
              /* "Unknown quality of protection specified" */

9.1.2. Kerberos-specific-codes

      GSS_KRB5_S_KG_CCACHE_NOMATCH
              /* "Principal in credential cache does not match desired
                 name" */
      GSS_KRB5_S_KG_KEYTAB_NOMATCH
              /* "No principal in keytab matches desired name" */
      GSS_KRB5_S_KG_TGT_MISSING
              /* "Credential cache has no TGT" */
      GSS_KRB5_S_KG_NO_SUBKEY
              /* "Authenticator has no subkey" */
      GSS_KRB5_S_KG_CONTEXT_ESTABLISHED
              /* "Context is already fully established" */
      GSS_KRB5_S_KG_BAD_SIGN_TYPE
              /* "Unknown signature type in token" */
      GSS_KRB5_S_KG_BAD_LENGTH
              /* "Invalid field length in token" */
      GSS_KRB5_S_KG_CTX_INCOMPLETE
              /* "Attempt to use incomplete security context" */

9.2. Buffer Sizes

   All implementations of this specification shall be capable of
   accepting buffers of at least 16K bytes as input to GSS_GetMIC(),
   GSS_VerifyMIC(), and GSS_Wrap(), and shall be capable of accepting
   the output_token generated by GSS_Wrap() for a 16K byte input buffer
   as input to GSS_Unwrap().  Support for larger buffer sizes is
   optional but recommended.

10. Backwards Compatibility Considerations

   The new token formats defined in this document will only be
   recognized by new implementations.  To address this, implementations
   can always use the explicit sign or seal algorithm in [GSSAPI-KRB5]
   when the key type corresponds to "older" algorithms.  An alternative
   approach might be to retry sending the message with the sign or seal
   algorithm explicitly defined as in [GSSAPI-KRB5].  However this
   would require the use of a mechanism such as [RFC-2478] to securely
   negotiate the algorithm or the use out of band mechanism to choose
   appropriate algorithms.  For this reason, it is RECOMMENDED that the
   new token formats defined in this document can be used only if both
   peers are known during context negotiation to support the new
   mechanism (either because of the use of "new" enctypes or because of
   the use of Kerberos V extensions).

11. Security Considerations

   It is possible that the KDC returns a session-key type that is not
   supported by the GSSAPI implementation (either on the client and the
   server). In this case the implementation MUST not try to use the key

Zhu              Standards Track - February 16, 2004               11
                  Kerberos Version 5 GSS-API      August 2003


   with a supported cryptosystem. This will ensure that no security
   weaknesses arise due to the use of an inappropriate key with an
   encryption algorithm.

   In addition the security problem described in [3DES] arising from
   the use of a service implementation with a GSSAPI mechanism
   supporting only DES and a Kerberos mechanism supporting both DES and
   Triple DES is actually a more generic one.  It arises whenever the
   GSSAPI implementation does not support a stronger cryptosystem
   supported by the Kerberos mechanism.  KDC administrators desiring to
   limit the session key types to support interoperability with such
   GSSAPI implementations should carefully weigh the reduction in
   protection offered by such mechanisms against the benefits of
   interoperability.


12. Acknowledgments

  The authors wish to acknowledge the contributions from the following
  individuals:

  Ken Raeburn and Nicolas Willams corrected many of our errors in the
  use of generic profiles and were instrumental in the creation of this
  draft.

  Sam Hartman and Ken Raeburn suggested the "floating trailer" idea.

  Sam Hartman and Nicolas Williams recommended the replacing our
  earlier key derivation function for directional keys with different
  key usage numbers for each direction as well as retaining the
  directional bit for maximum compatibility.

  Paul Leach provided numerous suggestions and comments.

  Scott Field, Richard Ward, Dan Simon also provided valuable inputs on
  this draft.

13. References

13.1. Normative References

   [RFC-2026] Bradner, S., "The Internet Standards Process -- Revision
   3", BCP 9, RFC 2026, October 1996.

   [RFC-2119] Bradner, S., "Key words for use in RFCs to Indicate
   Requirement Levels", BCP 14, RFC 2119, March 1997.

   [AES] National Institute of Standards and Technology, U.S.
   Department of Commerce, "Advanced Encryption Standard", Federal
   Information Processing Standards Publication 197, Washington, DC,
   November 2001.



Zhu              Standards Track - February 16, 2004               12
                  Kerberos Version 5 GSS-API      August 2003


   [AES-KRB5] Raeburn, K., "AES Encryption for Kerberos 5", draft-
   raeburn-krb-rijndael-krb-05.txt, June 2003.  Work in progress.

   [3DES] Raeburn, K., "Triple-DES Support for the Kerberos 5 GSSAPI
   Mechanism", draft-raeburn-gssapi-krb5-3des-XX.txt in the MIT
   distribution, June 2000.

   [RFC-2743] Linn, J., "Generic Security Service Application Program
   Interface Version 2, Update 1", RFC 2743, January 2000.

   [RFC-2744] Wray, J., "Generic Security Service API Version 2 : C-
   bindings", RFC 2744, January 2000.

   [RFC-1964] Linn, J., "The Kerberos Version 5 GSS-API Mechanism",
   RFC 1964, June 1996.

   [KCRYPTO] Raeburn, K., "Encryption and Checksum Specifications for
   Kerberos 5", draft-ietf-krb-wg-crypto-05.txt, June, 2003.  Work in
   progress.

   [KRBCLAR] Neuman, C., Kohl, J., Ts'o T., Yu T., Hartman, S.,
   Raeburn, K., "The Kerveros Network Authentication Service (V5)",
   draft-ietf-krb-wg-kerberos-clarifications-04.txt, February 2002.
   Work in progress.

   [RFC-2478] Baize, E., Pinkas D., "The Simple and Protected GSS-API
   Negotiation Mechanism.", RFC 2478, December 1998.

13.2. Informative References

   [SSPI] Leach, P., Security Service Provider Interface, MSDN, April
   2003

14. Author's Address

   Larry Zhu
   One Microsoft Way
   Redmond, WA 98052 - USA
   EMail: LZhu@microsoft.com

   Karthik Jaganathan
   One Microsoft Way
   Redmond, WA 98052 - USA
   EMail: karthikj@microsoft.com

   Sam Hartman
   Massachusetts Institute of Technology
   77 Massachusetts Avenue
   Cambridge, MA 02139 - USA
   Email: hartmans@MIT.EDU


Zhu              Standards Track - February 16, 2004               13
                  Kerberos Version 5 GSS-API      August 2003



Full Copyright Statement

   "Copyright (C) The Internet Society (date). All Rights Reserved.

   This document and translations of it may be copied and
   furnished to others, and derivative works that comment on or
   otherwise explain it or assist in its implementation may be
   prepared, copied, published and distributed, in whole or in
   part, without restriction of any kind, provided that the above
   copyright notice and this paragraph are included on all such
   copies and derivative works.  However, this document itself may
   not be modified in any way, such as by removing the copyright
   notice or references to the Internet Society or other Internet
   organizations, except as needed for the purpose of developing
   Internet standards in which case the procedures for copyrights
   defined in the Internet Standards process must be followed, or
   as required to translate it into languages other than English.

   The limited permissions granted above are perpetual and will
   not be revoked by the Internet Society or its successors or
   assigns.
































Zhu              Standards Track - February 16, 2004               14