x
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12581 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
461
doc/standardisation/draft-ms-krb-wg-gssapi-cfx-00.txt
Normal file
461
doc/standardisation/draft-ms-krb-wg-gssapi-cfx-00.txt
Normal file
@@ -0,0 +1,461 @@
|
||||
|
||||
|
||||
|
||||
<Kerberos Working Group> Larry Zhu
|
||||
Internet Draft Microsoft
|
||||
Updates: 1964 Karthik Jaganathan
|
||||
Category: Standards Track Microsoft
|
||||
draft-ietf-krb-wg-gssapi-cfx-00.txt August 16, 2003
|
||||
Expires: February 16, 2004
|
||||
|
||||
Crypto Profile Based Support for the Inclusion of New Encryption and
|
||||
Checksum Algorithms in the Kerberos V5 GSSAPI Mechanism
|
||||
|
||||
|
||||
Status of this Memo
|
||||
|
||||
This document is an Internet-Draft and is in full conformance with
|
||||
all provisions of Section 10 of RFC2026 [1].
|
||||
|
||||
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
|
||||
|
||||
[KCRYPTO] introduced a generic framework for the inclusion of new
|
||||
encryption and checksum algorithms to be used in the Kerberos V5
|
||||
protocol. [AES-KRB5] describes a crypto profile (per [KCRYPTO]) for
|
||||
AES. This document introduces a generic method for adding new
|
||||
crypto-systems to the GSSAPI-KerberosV5 mechanism based on crypto
|
||||
profiles as defined in [KCRYPTO]. It also describes the use of AES
|
||||
encryption for GSSAPI as an example of this new method.
|
||||
|
||||
|
||||
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 [2].
|
||||
|
||||
|
||||
3. Introduction
|
||||
|
||||
[GSSAPI-KRB5] describes the GSSAPI mechanism for Kerberos V5. It
|
||||
defines the format of context initiation, per-message and context
|
||||
deletion tokens. When adding new crypto system support, the
|
||||
|
||||
|
||||
Zhu Standards Trace - February 16, 2003 1
|
||||
Crypto Profile Support for Kerberos GSSAPI August 2003
|
||||
|
||||
|
||||
approach taken in [GSSAPI-KRB5] is to add algorithm identifiers for
|
||||
each new cryptosystem.
|
||||
|
||||
The approach taken in this document is to use the same encryption
|
||||
and checksum algorithms specified by the crypto profile for the
|
||||
session key or subkey that is created during context negotiation.
|
||||
Message layouts of the per-message and context deletion tokens are
|
||||
revised to remove algorithm indicators and add extra information to
|
||||
support the generic crypto framework [KCRYPTO].
|
||||
|
||||
"Newer" encryption and checksum types MUST use the new token formats
|
||||
defined in this document. Older encryption and checksum types SHALL
|
||||
NOT use these new token formats. The term "newer" is more precisely
|
||||
defined in [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].
|
||||
|
||||
4. Quality of Protection and Algorithm Identifiers
|
||||
|
||||
The GSSAPI specification [GSSAPI] provides for 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 and subkey. Algorithms identifiers are
|
||||
therefore no longer needed and removed from the token headers.
|
||||
|
||||
5. Key Derivation
|
||||
|
||||
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-SIGN 22
|
||||
KG-USAGE-ACCEPTOR-SEAL 23
|
||||
KG-USAGE-INITIATOR-SIGN 24
|
||||
KG-USAGE-INITIATOR-SEAL 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-
|
||||
Zhu Standards Track - February 16, 2004 2
|
||||
Crypto Profile Support for Kerberos GSSAPI August 2003
|
||||
|
||||
|
||||
ACCEPTOR-SEAL is used for Wrap tokens; similarly when the sender is
|
||||
the context initiator, KG-USAGE-INITIATOR-SIGN is used as the usage
|
||||
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.
|
||||
|
||||
6. Token Formats and Definitions
|
||||
|
||||
The new token formats defined in this document are designed to
|
||||
accommodate the requirements of newer crypto systems. Certain
|
||||
implementations of GSSAPI, such as SSPI, allow for "scatter-gather"
|
||||
and in-place encryption, mostly by leveraging low level details of
|
||||
crypto systems. The token layouts have been designed to satisfy the
|
||||
above requirements without incurring significant performance
|
||||
penalties or loosing generality.
|
||||
|
||||
The design along with the rationale behind it, is discussed in
|
||||
detail in the following sections.
|
||||
|
||||
6.1. Sequence Number and Direction Indicators
|
||||
|
||||
The sequence number for any per-message or context deletion token is
|
||||
a 64 bit integer (expressed in big endian order). One separate byte
|
||||
is used as the directional indicator: the hex value FF if the sender
|
||||
is the context acceptor, 00 otherwise. Both the sequence number and
|
||||
the directional indicator are protected as specified in section 6.2.
|
||||
|
||||
6.2. Encryption and Checksum Operations
|
||||
|
||||
The encryption algorithms defined by the crypto profiles provide for
|
||||
integrity protection. Therefore no separate checksum is needed.
|
||||
|
||||
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. Hence the resulting Wrap token is {"header" |
|
||||
encrypt(plaintext-data | "header")}, where encrypt() is the
|
||||
encryption operation defined in the crypto profile. 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). Hence 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. 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, directional indicator, and the
|
||||
rotation count.
|
||||
|
||||
[With AEAD, Wrap tokens with confidentiality do not need to encrypt
|
||||
the header and the overhead can be reduced slightly]
|
||||
|
||||
|
||||
Zhu Standards Track - February 16, 2004 3
|
||||
Crypto Profile Support for Kerberos GSSAPI August 2003
|
||||
|
||||
|
||||
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.
|
||||
|
||||
6.3. RRC Field
|
||||
|
||||
A new field, called "RRC" (Right Rotation Count), is added to allow
|
||||
the data to be encrypted in place. 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 octet 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.
|
||||
|
||||
6.4. EC Field
|
||||
|
||||
The decryption operation in the crypto profile may not always return
|
||||
the exact length of the plaintext data. An "EC"(Extra Count) field
|
||||
is added to the Wrap() token header to indicate the number of bytes
|
||||
that have been added to the end of the plaintext data before
|
||||
encryption. The "EC" field is a two byte integer expressed in big
|
||||
endian order and it should be 00 00 if confidentiality is not
|
||||
provided for by the Wrap tokens.
|
||||
|
||||
6.5. Seal Field
|
||||
|
||||
The Seal field in Wrap tokens is used to indicate whether
|
||||
confidentiality is provided for. If confidentiality is provided for
|
||||
by the Wrap token, this field contains the hex value FF, otherwise it
|
||||
contains the hex value 00.
|
||||
|
||||
6.6. Message Layout for Per-message and Context Deletion Tokens
|
||||
|
||||
The new message layouts are as follows.
|
||||
|
||||
MIC Token:
|
||||
Zhu Standards Track - February 16, 2004 4
|
||||
Crypto Profile Support for Kerberos GSSAPI August 2003
|
||||
|
||||
|
||||
|
||||
Byte no Name Description
|
||||
0..1 TOK_ID Identification field.
|
||||
Tokens emitted by GSS_GetMIC()
|
||||
contain the hex value 04 04 in
|
||||
this field.
|
||||
2..2 Direction Hex value FF if the sender is the
|
||||
context acceptor, 00 otherwise.
|
||||
3..7 Filler Contains 5 bytes of hex value FF.
|
||||
8..15 SND_SEQ Sequence number field in
|
||||
cleartext, in big endian order.
|
||||
16.. 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..2 Direction Hex value FF if the sender is the
|
||||
context acceptor, 00 otherwise.
|
||||
3..3 Seal Confidentiality indicator: hex
|
||||
value FF if confidentiality is
|
||||
provided for, 00 otherwise.
|
||||
4..5 EC Contains the "extra count" field,
|
||||
in big endian order as described in
|
||||
section 6.4.
|
||||
6..7 RRC Contains the "right rotation
|
||||
count" in big endian order, as
|
||||
described in section 6.3.
|
||||
8..15 SND_SEQ Sequence number field in
|
||||
cleartext, in big endian order.
|
||||
16.. Data Encrypted or plaintext data, as
|
||||
described in section 6.2, 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
|
||||
Zhu Standards Track - February 16, 2004 5
|
||||
Crypto Profile Support for Kerberos GSSAPI August 2003
|
||||
|
||||
|
||||
0..1 TOK_ID Identification field.
|
||||
Tokens emitted by
|
||||
GSS_Delete_sec_context() contain
|
||||
the hex value 04 05 in this
|
||||
field.
|
||||
2..2 Direction Hex value FF if the sender is the
|
||||
context acceptor, 00 otherwise.
|
||||
3..7 Filler Contains 5 bytes of hex value FF.
|
||||
8..15 SND_SEQ Sequence number field in
|
||||
cleartext, in big endian order.
|
||||
16.. SGN_CKSUM Checksum of byte 0..15, where the
|
||||
checksum algorithm is defined by
|
||||
the crypto profile for the
|
||||
session key or subkey.
|
||||
|
||||
|
||||
7. Backwards compatibility considerations
|
||||
|
||||
The new token formats defined in this document will only be
|
||||
recognized by new implementations. A MIC or wrap token generated
|
||||
with the algorithms defined in this document will not be recognized
|
||||
by an older implementation that only recognizes the algorithms
|
||||
defined in [GSSAPI-KRB5]. To address this, implementations can
|
||||
always use the explicit sign or seal algorithm in [GSSAPI-KRB5] when
|
||||
the key type corresponds to those 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 [SPNEGO] to securely
|
||||
negotiate the algorithm or the use out of band mechanism to choose
|
||||
appropriate algorithms. For this reason, it is RECOMMENDED that the
|
||||
use of the new token formats defined in this document be confined
|
||||
only for "newer encryption and checksum" described by a crypto
|
||||
profile.
|
||||
|
||||
8. 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
|
||||
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.
|
||||
Zhu Standards Track - February 16, 2004 6
|
||||
Crypto Profile Support for Kerberos GSSAPI August 2003
|
||||
|
||||
|
||||
|
||||
It is recommended by some cryptographers that the output of a
|
||||
checksum used with an encryption algorithm should have the same
|
||||
strength as the key in use. In this regard standardization work for
|
||||
SHA-256 and SHA-512 to be used with AES is currently in progress.
|
||||
This document retains the use of HMAC_SHA1_96 as specified in the
|
||||
[AES-KRB5] draft. The use of SHA-256 or SHA-512 with AES will
|
||||
require new crypto profiles and there should not be any further
|
||||
changes needed to this document.
|
||||
|
||||
9. 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.
|
||||
|
||||
10. References
|
||||
|
||||
[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.
|
||||
|
||||
[AES-KRB5] Raeburn, K., "AES Encryption for Kerberos 5", draft-
|
||||
raeburn-krb-rijndael-krb-05.txt, June, 2003. Work in progress.
|
||||
|
||||
[DES3] Raeburn, K., "Triple-DES Support for the Kerberos 5 GSSAPI
|
||||
Mechanism", draft-raeburn-gssapi-krb5-3des-XX.txt in the MIT
|
||||
distribution, June 2000.
|
||||
|
||||
|
||||
[GSSAPI] Linn, J., "Generic Security Service Application Program
|
||||
Interface Version 2, Update 1", RFC 2743, January, 2000.
|
||||
|
||||
[GSSAPI-KRB5] 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.
|
||||
|
||||
Zhu Standards Track - February 16, 2004 7
|
||||
Crypto Profile Support for Kerberos GSSAPI August 2003
|
||||
|
||||
|
||||
|
||||
[KRBCLAR] Neuman, C., Kohl, J., Ts'o T., Yu T., Hartman, S.,
|
||||
Raeburn, K., "The Kerveros Network Authentication Service (V5)",
|
||||
http://www.isi.edu/people/bcn/draft-kerberos-rev.html/krb-
|
||||
clarifications-00-020222.txt, February,2002. Work in progress.
|
||||
|
||||
[SPNEGO] Baize, E., Pinkas D., "The Simple and Protected GSS-API
|
||||
Negotiation Mechanism.", RFC 2478, December 1998.
|
||||
|
||||
11. 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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Zhu Standards Track - February 16, 2004 8
|
Reference in New Issue
Block a user