
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@15505 ec53bebd-3082-4978-b11e-865c3cabbd6b
506 lines
15 KiB
Plaintext
506 lines
15 KiB
Plaintext
|
||
|
||
|
||
NETWORK WORKING GROUP N. Williams
|
||
Internet-Draft Sun
|
||
Expires: December 15, 2005 June 13, 2005
|
||
|
||
|
||
A PRF API extension for the GSS-API
|
||
draft-ietf-kitten-gssapi-prf-04.txt
|
||
|
||
Status of this Memo
|
||
|
||
By submitting this Internet-Draft, each author represents that any
|
||
applicable patent or other IPR claims of which he or she is aware
|
||
have been or will be disclosed, and any of which he or she becomes
|
||
aware will be disclosed, in accordance with Section 6 of BCP 79.
|
||
|
||
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.
|
||
|
||
This Internet-Draft will expire on December 15, 2005.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (C) The Internet Society (2005).
|
||
|
||
Abstract
|
||
|
||
This document defines a Pseudo-Random Function (PRF) extension to the
|
||
Generic Security Service Application Programming Interface (GSS-API)
|
||
for keying application protocols given an established GSS-API
|
||
security context. The primary intended use of this function is to
|
||
key secure session layers that don't or cannot use GSS-API per-
|
||
message MIC (message integrity check) and wrap tokens for session
|
||
protection.
|
||
|
||
|
||
|
||
|
||
|
||
Williams Expires December 15, 2005 [Page 1]
|
||
|
||
Internet-Draft A PRF Extension for the GSS-API June 2005
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
|
||
1.1 Conventions used in this document . . . . . . . . . . . . . . 3
|
||
2. GSS_Pseudo_random() . . . . . . . . . . . . . . . . . . . . . 3
|
||
2.1 C-Bindings . . . . . . . . . . . . . . . . . . . . . . . . . . 5
|
||
2.2 Java Bindings . . . . . . . . . . . . . . . . . . . . . . . . 6
|
||
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6
|
||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 6
|
||
5. References . . . . . . . . . . . . . . . . . . . . . . . . . . 7
|
||
5.1 Normative References . . . . . . . . . . . . . . . . . . . . . 7
|
||
5.2 Informative References . . . . . . . . . . . . . . . . . . . . 7
|
||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . 8
|
||
Intellectual Property and Copyright Statements . . . . . . . . 9
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Williams Expires December 15, 2005 [Page 2]
|
||
|
||
Internet-Draft A PRF Extension for the GSS-API June 2005
|
||
|
||
|
||
1. Introduction
|
||
|
||
A need has arisen for users of the GSS-API to key applications'
|
||
cryptographic protocols using established GSS-API security contexts.
|
||
Such applications can use the GSS-API for authentication, but not for
|
||
transport security (for whatever reasons), and since the GSS-API does
|
||
not provide a method for obtaining keying material from established
|
||
security contexts such applications cannot make effective use of the
|
||
GSS-API.
|
||
|
||
To address this need we define a pseudo-random function (PRF)
|
||
extension to the GSS-API.
|
||
|
||
1.1 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 [RFC2119].
|
||
|
||
2. GSS_Pseudo_random()
|
||
|
||
Inputs:
|
||
|
||
|
||
o context CONTEXT handle,
|
||
|
||
o prf_key INTEGER,
|
||
|
||
o prf_in OCTET STRING,
|
||
|
||
o desired_output_len INTEGER
|
||
|
||
Outputs:
|
||
|
||
|
||
o major_status INTEGER,
|
||
|
||
o minor_status INTEGER,
|
||
|
||
o prf_out OCTET STRING
|
||
|
||
Return major_status codes:
|
||
|
||
o GSS_S_COMPLETE indicates no error.
|
||
|
||
o GSS_S_NO_CONTEXT indicates that a null context has been provided
|
||
as input.
|
||
|
||
|
||
|
||
|
||
Williams Expires December 15, 2005 [Page 3]
|
||
|
||
Internet-Draft A PRF Extension for the GSS-API June 2005
|
||
|
||
|
||
o GSS_S_CONTEXT_EXPIRED indicates that an expired context has been
|
||
provided as input.
|
||
|
||
o GSS_S_UNAVAILABLE indicates that the mechanism lacks support for
|
||
this function or, if the security context is not fully
|
||
established, that the context is not ready to compute the PRF with
|
||
the given prf_key, or that the given prf_key is not available.
|
||
|
||
o GSS_S_FAILURE indicates general failure, possibly due to the given
|
||
input data being too large or of zero length, or due to the
|
||
desired_output_len being zero; the minor status code may provide
|
||
additional information.
|
||
|
||
This function applies the established context's mechanism's keyed
|
||
pseudo-random function (PRF) to the input data ('prf_in'), keyed with
|
||
key material associated with the given security context and
|
||
identified by 'prf_key', and outputs the resulting octet string
|
||
('prf_out') of desired_output_len length.
|
||
|
||
The minimum input data length is one octet.
|
||
|
||
Mechanisms MUST be able to consume all the provided prf_in input data
|
||
that is 2^14 or fewer octets.
|
||
|
||
If a mechanism cannot consume as much input data as provided by the
|
||
caller, then GSS_Pseudo_random() MUST return GSS_S_FAILURE.
|
||
|
||
The minimum desired_output_len is one.
|
||
|
||
Mechanisms MUST be able to output at least up to 2^14 octets.
|
||
|
||
If the implementation cannot produce the desired output due to lack
|
||
of resources then it MUST output what it can and still return
|
||
GSS_S_COMPLETE.
|
||
|
||
The prf_key can take on the following values: GSS_C_PRF_KEY_FULL,
|
||
GSS_C_PRF_KEY_PARTIAL or mechanism-specific values, if any. This
|
||
parameter is intended to distinguish between the best cryptographic
|
||
keys that may be available only after full security context
|
||
establishment and keys that may be available prior to full security
|
||
context establishment. For some mechanisms, or contexts, those two
|
||
prf_key values MAY refer to the same cryptographic keys; for
|
||
mechanisms like the Kerberos V GSS-API mechanism [RFC1964] where one
|
||
peer may assert a key that may be considered better than the others
|
||
they MAY be different keys.
|
||
|
||
GSS_C_PRF_KEY_PARTIAL corresponds to a key that would be have been
|
||
used while the security context was partially established, even if it
|
||
|
||
|
||
|
||
Williams Expires December 15, 2005 [Page 4]
|
||
|
||
Internet-Draft A PRF Extension for the GSS-API June 2005
|
||
|
||
|
||
is fully established when GSS_Pseudo_random() is actually called.
|
||
Mechanism-specific prf_key values are intended to refer to any other
|
||
keys that may be available.
|
||
|
||
The GSS_C_PRF_KEY_FULL value corresponds to the best key available
|
||
for fully-established security contexts.
|
||
|
||
GSS_Pseudo_random() has the following properties:
|
||
|
||
o its output string MUST be a pseudo-random function [GGM1] [GGM2]
|
||
of the input keyed with key material from the given security
|
||
context -- the chances of getting the same output given different
|
||
input parameters should be exponentially small.
|
||
|
||
o when successfully applied to the same inputs by an initiator and
|
||
acceptor using the same security context, it MUST produce the
|
||
_same results_ for both, the initiator and acceptor, even if
|
||
called multiple times (as long as the security context is not
|
||
expired).
|
||
|
||
o upon full establishment of a security context all cryptographic
|
||
keys and/or negotiations used for computing the PRF with any
|
||
prf_key MUST be authenticated (mutually, if mutual authentication
|
||
is in effect for the given security context).
|
||
|
||
o the outputs of the mechanism's GSS_Pseudo_random() (for different
|
||
inputs) and its per-message tokens for the given security context
|
||
MUST be "cryptographically separate;" in other words, it must not
|
||
be feasible to recover key material for one mechanism operation or
|
||
transform its tokens and PRF outputs from one to the other given
|
||
only said tokens and PRF outputs. [This is a fancy way of saying
|
||
that key derivation and strong cryptographic operations and
|
||
constructions must be used.]
|
||
|
||
o as implied by the above requirement, it MUST NOT be possible to
|
||
access any raw keys of a security context through
|
||
GSS_Pseudo_random(), no matter what inputs are given.
|
||
|
||
Mechanisms MAY limit the output of the PRF, possibly in ways related
|
||
to the types of cryptographic keys available for the PRF function,
|
||
thus the prf_out output of GSS_Pseudo_random() MAY be smaller than
|
||
requested.
|
||
|
||
2.1 C-Bindings
|
||
|
||
#define GSS_C_PRF_KEY_FULL 0
|
||
#define GSS_C_PRF_KEY_PARTIAL 1
|
||
|
||
|
||
|
||
|
||
Williams Expires December 15, 2005 [Page 5]
|
||
|
||
Internet-Draft A PRF Extension for the GSS-API June 2005
|
||
|
||
|
||
OM_uint32 gss_pseudo_random(
|
||
OM_uint32 *minor_status,
|
||
gss_ctx_id_t context,
|
||
int prf_key,
|
||
const gss_buffer_t prf_in,
|
||
ssize_t desired_output_len,
|
||
gss_buffer_t prf_out
|
||
);
|
||
|
||
Additional major status codes for the C-bindings:
|
||
|
||
o GSS_S_CALL_INACCESSIBLE_READ
|
||
|
||
o GSS_S_CALL_INACCESSIBLE_WRITE
|
||
|
||
See [RFC2744].
|
||
|
||
2.2 Java Bindings
|
||
|
||
For Java GSS_Pseudo_random() maps to a GSSContext method, 'prf':
|
||
|
||
public static final int GSS_C_PRF_KEY_FULL = 0
|
||
public static final int GSS_C_PRF_KEY_PARTIAL = 1
|
||
|
||
public byte[] prf(int prf_key, byte inBuf[], int outlen)
|
||
throws GSSException
|
||
|
||
See [RFC2853].
|
||
|
||
3. IANA Considerations
|
||
|
||
This document has no IANA considerations currently. If and when a
|
||
relevant IANA registry of GSS-API symbols is created then the generic
|
||
and language-specific function names, constant names and constant
|
||
values described above should be added to such a registry.
|
||
|
||
4. Security Considerations
|
||
|
||
Care should be taken in properly designing a mechanism's PRF
|
||
function.
|
||
|
||
GSS mechanisms' PRF functions should use a key derived from contexts'
|
||
authenticated session keys and should preserve the forward security
|
||
properties of the mechanisms' key exchanges.
|
||
|
||
Some mechanisms may support the GSS PRF function with security
|
||
contexts that are not fully established, but applications MUST assume
|
||
that authentication, mutual or otherwise, has not completed until the
|
||
|
||
|
||
|
||
Williams Expires December 15, 2005 [Page 6]
|
||
|
||
Internet-Draft A PRF Extension for the GSS-API June 2005
|
||
|
||
|
||
security context is fully established.
|
||
|
||
Callers of GSS_Pseudo_random() should avoid accidentally calling it
|
||
with the same inputs. One useful technique is to prepend to the
|
||
prf_in input string, by convention, a string indicating the intended
|
||
purpose of the PRF output in such a way that unique contexts in which
|
||
the function is called yield unique inputs to it.
|
||
|
||
Pseudo-random functions are, by their nature, capable of producing
|
||
only limited amounts of cryptographically secure output. The exact
|
||
amount of output that one can safely use, unfortunately, varies from
|
||
one PRF to another (which prevents us from recommending specific
|
||
numbers). Because of this we recommend that unless you really know
|
||
what you are doing (i.e. you are a cryptographer and are qualified to
|
||
pass judgement on cryptographic functions in areas of period,
|
||
presence of short cycles, etc), you limit the amount of the PRF
|
||
output used to the necessary minimum.
|
||
|
||
5. References
|
||
|
||
5.1 Normative References
|
||
|
||
[GGM1] Goldreich, O., Goldwasser, S., and S. Micali, "How to
|
||
Construct Random Functions", October 1986.
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||
|
||
[RFC2743] Linn, J., "Generic Security Service Application Program
|
||
Interface Version 2, Update 1", RFC 2743, January 2000.
|
||
|
||
[RFC2744] Wray, J., "Generic Security Service API Version 2 :
|
||
C-bindings", RFC 2744, January 2000.
|
||
|
||
[RFC2853] Kabat, J. and M. Upadhyay, "Generic Security Service API
|
||
Version 2 : Java Bindings", RFC 2853, June 2000.
|
||
|
||
5.2 Informative References
|
||
|
||
[GGM2] Goldreich, O., Goldwasser, S., and S. Micali, "On the
|
||
Cryptographic Applications of Random Functions", 1985.
|
||
|
||
[RFC1750] Eastlake, D., Crocker, S., and J. Schiller, "Randomness
|
||
Recommendations for Security", RFC 1750, December 1994.
|
||
|
||
[RFC1964] Linn, J., "The Kerberos Version 5 GSS-API Mechanism",
|
||
RFC 1964, June 1996.
|
||
|
||
|
||
|
||
|
||
Williams Expires December 15, 2005 [Page 7]
|
||
|
||
Internet-Draft A PRF Extension for the GSS-API June 2005
|
||
|
||
|
||
Author's Address
|
||
|
||
Nicolas Williams
|
||
Sun Microsystems
|
||
5300 Riata Trace Ct
|
||
Austin, TX 78727
|
||
US
|
||
|
||
Email: Nicolas.Williams@sun.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Williams Expires December 15, 2005 [Page 8]
|
||
|
||
Internet-Draft A PRF Extension for the GSS-API June 2005
|
||
|
||
|
||
Intellectual Property Statement
|
||
|
||
The IETF takes no position regarding the validity or scope of any
|
||
Intellectual Property Rights or other rights that might be claimed to
|
||
pertain to the implementation or use of the technology described in
|
||
this document or the extent to which any license under such rights
|
||
might or might not be available; nor does it represent that it has
|
||
made any independent effort to identify any such rights. Information
|
||
on the procedures with respect to rights in RFC documents can be
|
||
found in BCP 78 and BCP 79.
|
||
|
||
Copies of IPR disclosures made to the IETF Secretariat and any
|
||
assurances of licenses to be made available, or the result of an
|
||
attempt made to obtain a general license or permission for the use of
|
||
such proprietary rights by implementers or users of this
|
||
specification can be obtained from the IETF on-line IPR repository at
|
||
http://www.ietf.org/ipr.
|
||
|
||
The IETF invites any interested party to bring to its attention any
|
||
copyrights, patents or patent applications, or other proprietary
|
||
rights that may cover technology that may be required to implement
|
||
this standard. Please address the information to the IETF at
|
||
ietf-ipr@ietf.org.
|
||
|
||
|
||
Disclaimer of Validity
|
||
|
||
This document and the information contained herein are provided on an
|
||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
|
||
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
|
||
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
|
||
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
|
||
Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (2005). This document is subject
|
||
to the rights, licenses and restrictions contained in BCP 78, and
|
||
except as set forth therein, the authors retain all their rights.
|
||
|
||
|
||
Acknowledgment
|
||
|
||
Funding for the RFC Editor function is currently provided by the
|
||
Internet Society.
|
||
|
||
|
||
|
||
|
||
Williams Expires December 15, 2005 [Page 9]
|
||
|
||
|