ffd449e518
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16198 ec53bebd-3082-4978-b11e-865c3cabbd6b
954 lines
34 KiB
Plaintext
954 lines
34 KiB
Plaintext
|
|
|
|
|
|
NETWORK WORKING GROUP N. Williams
|
|
Internet-Draft Sun
|
|
Expires: April 19, 2006 October 16, 2005
|
|
|
|
|
|
Stackable Generic Security Service Pseudo-Mechanisms
|
|
draft-ietf-kitten-stackable-pseudo-mechs-01.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 April 19, 2006.
|
|
|
|
Copyright Notice
|
|
|
|
Copyright (C) The Internet Society (2005).
|
|
|
|
Abstract
|
|
|
|
This document defines and formalizes the concept of stackable pseudo-
|
|
mechanisms, and associated concept of composite mechanisms, for the
|
|
Generic Security Service Application Programming Interface (GSS-API),
|
|
as well as several utility functions.
|
|
|
|
Stackable GSS-API pseudo-mechanisms allow for the composition of new
|
|
mechanisms that combine features from multiple mechanisms. Stackable
|
|
mechanisms that add support for Perfect Forward Security (PFS), data
|
|
compression, additional authentication factors, etc... are
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 1]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
facilitated by this document.
|
|
|
|
|
|
Table of Contents
|
|
|
|
1. Conventions used in this document . . . . . . . . . . . . 3
|
|
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . 3
|
|
2.1. Glossary . . . . . . . . . . . . . . . . . . . . . . . . . 3
|
|
3. Mechanism Composition Issues . . . . . . . . . . . . . . . 4
|
|
4. Mechanism Composition . . . . . . . . . . . . . . . . . . 5
|
|
4.1. Construction of Composed Mechanism OIDs . . . . . . . . . 5
|
|
4.2. Mechanism Composition Rules . . . . . . . . . . . . . . . 6
|
|
4.3. Interfacing with Composite Mechanisms . . . . . . . . . . 7
|
|
4.4. Compatibility with the Basic GSS-APIv2u1 Interfaces . . . 7
|
|
4.5. Processing of Tokens for Composite Mechanisms . . . . . . 8
|
|
5. New GSS-API Interfaces . . . . . . . . . . . . . . . . . . 8
|
|
5.1. New GSS-API Function Interfaces . . . . . . . . . . . . . 9
|
|
5.1.1. GSS_Compose_oid() . . . . . . . . . . . . . . . . . . . . 9
|
|
5.1.2. GSS_Decompose_oid() . . . . . . . . . . . . . . . . . . . 10
|
|
5.1.3. GSS_Release_oid() . . . . . . . . . . . . . . . . . . . . 10
|
|
5.1.4. GSS_Indicate_negotiable_mechs() . . . . . . . . . . . . . 11
|
|
5.1.5. GSS_Negotiate_mechs() . . . . . . . . . . . . . . . . . . 12
|
|
5.1.6. C-Bindings . . . . . . . . . . . . . . . . . . . . . . . . 12
|
|
6. Negotiation of Composite Mechanisms . . . . . . . . . . . 13
|
|
6.1. Negotiation of Composite Mechanisms Through SPNEGO . . . . 14
|
|
7. Requirements for Mechanism Designers . . . . . . . . . . . 14
|
|
8. IANA Considerations . . . . . . . . . . . . . . . . . . . 14
|
|
9. Security considerations . . . . . . . . . . . . . . . . . 14
|
|
10. Normative . . . . . . . . . . . . . . . . . . . . . . . . 15
|
|
Author's Address . . . . . . . . . . . . . . . . . . . . . 16
|
|
Intellectual Property and Copyright Statements . . . . . . 17
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 2]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
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. Introduction
|
|
|
|
Recent discussions within the IETF have shown the need for a
|
|
refactoring of the features that GSS-API mechanisms may provide and a
|
|
way to compose new mechanisms from smaller components.
|
|
|
|
One way to do this is to "stack" multiple mechanisms on top of each
|
|
other such that the features of all of them are summed into a new,
|
|
composite mechanism.
|
|
|
|
One existing GSS-API mechanism, LIPKEY [LIPKEY], is essentially
|
|
stacked over another, SPKM-3 [LIPKEY] (although LIPKEY does not
|
|
conform to the stackable pseduo-mechanism framework described
|
|
herein).
|
|
|
|
The first truly stackable pseudo-mechanism proposed, CCM [CCM], is
|
|
intended for signalling, during negotiation of mechanisms, the
|
|
willingness of an initiator and/or acceptor to utilize channel
|
|
bindings
|
|
|
|
Since then other similar mechanism compositing needs and ideas have
|
|
come up, along with problems such as "what combinations are possible,
|
|
useful, reasonable and secure?" This document addresses those
|
|
problems. It introduces the concepts of stackable pseudo-mechanisms,
|
|
composite mechanisms and mechanism features or attributes, as well as
|
|
new inquiry and related interfaces to help in the mechanism
|
|
compositing.
|
|
|
|
(Mechanism features are more formally referred to as "mechanism
|
|
attributes" below. The terms "feature" and mechanism attribute" are
|
|
sometimes used interchangeably.)
|
|
|
|
2.1. Glossary
|
|
|
|
Concrete GSS-API mechanism
|
|
A mechanism which can be used standalone. Examples include: the
|
|
Kerberos V mechanism [CFX], SPKM-1/2 [SPKM] and SPKM-3 [LIPKEY].
|
|
|
|
GSS-API Pseudo-mechanism
|
|
A mechanism which uses other mechanisms in the construction of its
|
|
context and/or per-message tokens and security contexts. SPNEGO
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 3]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
is an example of this.
|
|
|
|
Stackable GSS-API pseudo-mechanism
|
|
A mechanism which uses a single other mechanism in the
|
|
construction of its tokens such that the OID of the composite
|
|
result can be constructed by prepending the OID of the stackable
|
|
pseudo-mechanism to the OID of the mechanism to be used by it.
|
|
|
|
Mechanism-negotiation GSS-API pseudo-mechanism
|
|
A GSS-API mechanism that negotiates the use of GSS-API mechanisms.
|
|
SPNEGO [SPNEGO] is an example of this.
|
|
|
|
|
|
3. Mechanism Composition Issues
|
|
|
|
Interfacing with composite mechanisms through the existing GSS-API
|
|
interfaces and the handling of composite mechanism tokens is
|
|
straightforward enough and described in Section 4.
|
|
|
|
However, the concepts of stackable and composite mechanisms do give
|
|
rise to several minor problems:
|
|
|
|
o How to determine allowable combinations of mechanisms;
|
|
o How to encode composite mechanism OIDs;
|
|
o How to decompose the OID of a composite mechanism and process its
|
|
tokens properly;
|
|
o Application interfacing issues such as:
|
|
|
|
* Whether and/or which composite mechanisms should be listed by
|
|
GSS_Indicate_mechs();
|
|
* Whether and/or which composite mechanisms not listed by
|
|
GSS_Indicate_mechs() may nonetheless be available for use by
|
|
applications and how applications can detect their
|
|
availability;
|
|
* What additional, if any, interfaces should be provided to help
|
|
applications select appropriate mechanisms;
|
|
o
|
|
|
|
Mechanism negotiation issues (related to the application interface
|
|
issues listed above), such as: vspace blankLines='1'/>
|
|
* Should applications advertise composite mechanisms in SPNEGO or
|
|
other application-specific mechanism negotiation contexts?
|
|
* Or should applications implicitly advertise composite
|
|
mechanisms by advertising concrete and stackable pseudo-
|
|
mechanisms in SPNEGO or other application-specific mechanism
|
|
negotiation contexts?
|
|
|
|
Section 4 addresses the OID composition, decomposition and encoding
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 4]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
issues, as well as basic interfacing and token handling issues.
|
|
|
|
Section 5 addresses interfacing issues more generally through the
|
|
specification of additional, optional APIs.
|
|
|
|
Section 6 addresses mechanism negotiation issues.
|
|
|
|
|
|
4. Mechanism Composition
|
|
|
|
Mechanism composition by stacking pseudo-mechanisms on a concrete
|
|
mechanism is conceptually simple: join the OIDs of the several
|
|
mechanisms in question and process GSS-API tokens and routine calls
|
|
through the top-most pseudo-mechanism in a stack, which can then, if
|
|
necessary, recursively call the GSS-API to process any tokens for the
|
|
remainder of the stack.
|
|
|
|
Some stackable pseudo-mechanisms may do nothing more than perform
|
|
transformations on application data (e.g., compression); such pseudo-
|
|
mechanisms will generally chain the processing of tokens and routine
|
|
calls to the mechanisms below them in the stack.
|
|
|
|
Other stackable pseudo-mechanisms may utilize the mechanisms below
|
|
them only during security context setup. For example, a stackable
|
|
pseudo-mechanism could perform a Diffie-Hellman key exchange and
|
|
authenticate it by binding a security context established with the
|
|
mechanism stacked below it; such a mechanism would provide its own
|
|
per-message tokens.
|
|
|
|
4.1. Construction of Composed Mechanism OIDs
|
|
|
|
Composition of mechanism OIDs is simple: prepend the OID of one
|
|
pseudo-mechanism to the OID of another mechanism (composite or
|
|
otherwise), but there MUST always be at least one final mechanism OID
|
|
and it MUST be useful standalone (i.e., it MUST NOT be a pseudo-
|
|
mechanism). A composite mechanism OID forms, essentially, a stack.
|
|
|
|
The encoding of composed mechanism OIDs is not quite the
|
|
concatenation of the component OIDs' encodings, however. This is
|
|
because the first two arcs of ASN.1 OIDs are encoded differently from
|
|
subsequent arcs (the first two arcs have a limited namespace and are
|
|
encoded as a single octet), so were composite mechanism OIDs to be
|
|
encoded as the concatenation of the component OIDs the result would
|
|
not decode as the concatenation of the component OIDs. To avoid this
|
|
problem the first two arcs of each component of a composite mechanism
|
|
OID, other than the leading component, will be encoded as other arcs
|
|
would.
|
|
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 5]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
Decomposition of composite mechanism OIDs is similar, with each
|
|
pseudo-mechanism in the stack being able to determine the OID suffix
|
|
from knowledge of its own OID(s).
|
|
|
|
New pseudo-mechanisms MAY be allocated OIDs from the prefix given
|
|
below as follows by assignment of a sub-string of OID arcs to be
|
|
appended to this prefix. This prefix OID is:
|
|
|
|
<TBD> [1.3.6.1.5.5.11 appears to be available, registration w/ IANA
|
|
TBD]
|
|
|
|
All OID allocations below this OID MUST be for stackable pseudo-
|
|
mechanisms and MUST consist of a single arc. This will make it
|
|
possible to decompose the OIDs of composite mechanisms without
|
|
necessarily knowing a priori the OIDs of the component stackable
|
|
pseudo-mechanisms.
|
|
|
|
4.2. Mechanism Composition Rules
|
|
|
|
All new stackable pseudo-mechanisms MUST specify the rules for
|
|
determining whether they can stack above a given mechanism, composite
|
|
or otherwise. Such rules may be based on specific mechanism
|
|
attribute OID sets [EXTENDED-INQUIRY] and/or specific mechanism OIDs
|
|
(composite and otherwise).
|
|
|
|
All stackable pseudo-mechanisms MUST have the following mechanism
|
|
composition rule relating to unknown mechanism attributes:
|
|
|
|
o composition with mechanisms supporting unknown mechanism
|
|
attributes MUST NOT be permitted.
|
|
|
|
This rule protects against compositions which cannot be considered
|
|
today but which might nonetheless arise due to the introduction of
|
|
new mechanisms and which might turn out to be insecure or otherwise
|
|
undesirable.
|
|
|
|
Mechanism composition rules for stackable pseudo-mechanisms MAY and
|
|
SHOULD be updated as new GSS-API mechanism attributes and mechanisms
|
|
sporting them are introduced. The specifications of mechanisms that
|
|
introduce new mechanism attributes or which otherwise should not be
|
|
combined with others in ways which would be permitted under existing
|
|
rules SHOULD also update the mechanism composition rules of affected
|
|
pseudo-mechanisms.
|
|
|
|
A RECOMMENDED way to describe the stacking rules for stackable
|
|
mechanisms is as an ordered sequence of "MAY stack above X
|
|
mechanism," "REQUIRES Y mechanism feature(s)," "MUST NOT stack above
|
|
Z mechanism," and/or "MUST NOT stack above a mechanism with Z
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 6]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
mechanism feature(s)."
|
|
|
|
For example a stackable mechanism that provides its own per-msg
|
|
tokens and does not use the underlying mechnism's per-msg token
|
|
facilities might require a rule such as "MUST NOT stack above a
|
|
mechanism with the GSS_C_MA_COMPRESS mechanism feature."
|
|
|
|
4.3. Interfacing with Composite Mechanisms
|
|
|
|
The basic GSS-API [RFC2743] interfaces MUST NOT accept as input or
|
|
provide as output the OID of any stackable pseudo-mechanism.
|
|
Composite mechanisms MUST be treated as concrete mechanisms by the
|
|
basic GSS-API interfaces [RFC2743].
|
|
|
|
Thus the way in which a composite mechanism is used by applications
|
|
with the basic GSS-API (version 2, update 1) is straightforward:
|
|
exactly as if composite mechanisms were normal GSS-API mechanisms.
|
|
|
|
This is facilitated by the fact that in all cases where the GSS-API
|
|
implementation might need to know how to process or create a token it
|
|
has the necessary contextual information, that is, the mechanism OID,
|
|
available and can decompose composite mechanism OIDs as necessary.
|
|
|
|
For example, for initial GSS_Init_sec_context() calls the
|
|
implementation knows the desired mechanism OID, and if it should be
|
|
left unspecified, it can pick a default mechanism given the initiator
|
|
credentials provided by the application (and if none are provided
|
|
other default mechanism and credential selections can still be made).
|
|
For subsequent calls to GSS_Init_sec_context() the implementation
|
|
knows which mechanism to use from the given [partially established]
|
|
security context. Similarly for GSS_Accept_sec_context, where on
|
|
initial calls the mechanism OID can be determined from the given
|
|
initial context token's framing.
|
|
|
|
The manner in which GSS-API implementations and the various
|
|
mechanisms and pseudo-mechanisms interface with one another is left
|
|
as an excercise to implementors.
|
|
|
|
4.4. Compatibility with the Basic GSS-APIv2u1 Interfaces
|
|
|
|
In order to preserve backwards compatibility with applications that
|
|
use only the basic GSS-API interfaces (version 2, update 1), several
|
|
restrictions are imposed on the use of composite and stackable
|
|
pseduo-mechanisms with the basic GSS-API interfaces:
|
|
|
|
o GSS_Indicate_mechs() MUST NOT indicate support for any stackable
|
|
pseduo-mechanisms under any circumstance.
|
|
o GSS_Indicate_mechs() MAY indicate support for some, all or none of
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 7]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
the available composite mechanisms.
|
|
o Which composite mechanisms, if any, are indicated through
|
|
GSS_Indicate_mechs() SHOULD be configurable.
|
|
o Composite mechanisms which are not indicated by
|
|
GSS_Indicate_mechs() MUST NOT be considered as the default
|
|
mechanism (GSS_C_NULL_OID) or as part of the default mechanism set
|
|
(GSS_C_NULL_OID_SET).
|
|
o The OIDs of *stackable* (not composite) pseudo-mechanisms MUST NOT
|
|
be accepted as inputs or produced in the output of any of the
|
|
basic GSS-APIv2, update 1 API functions, except for any OID set
|
|
construction/iteration functions. And, if present in any OID SET
|
|
input parameters of GSS-APIv2, update 1 functions, they MUST be
|
|
ignored.
|
|
o The OIDs of *stackable* (not composite) pseudo-mechanisms MAY only
|
|
be used as inputs or produced as outputs of functions whose
|
|
specification explicitly allows for them or which are concerned
|
|
with the creation/iteration of OID containters, such as OID SETs.
|
|
|
|
4.5. Processing of Tokens for Composite Mechanisms
|
|
|
|
The initial context token for any standard mechanism, including
|
|
mechanisms composited from standard pseudo- and concrete mechanisms,
|
|
MUST be encapsulated as described in section 3.1 of rfc2743
|
|
[RFC2743], and the OID used in that framing MUST be that of the
|
|
mechanism, but in the case of composite mechanisms this OID MUST be
|
|
the OID of the leading component of the composite mechanism.
|
|
|
|
Note that this has implications for pluggable multi-mechanism
|
|
implementations of the GSS-API, namely that acceptors must route
|
|
initial context tokens to the appropriate mechanism and they must
|
|
allow that mechanism to determine the composite mechanism OID (such
|
|
as by allowing that mechanism's GSS_Accept_sec_context() to output
|
|
the actual mechanism to the application.
|
|
|
|
In all other cases the mechanism that produced or is to produce a
|
|
given token can be determined internally through the given security
|
|
context.
|
|
|
|
|
|
5. New GSS-API Interfaces
|
|
|
|
...
|
|
|
|
Utility functions for mechanism OID composition and decomposition are
|
|
given in sections 5.1.1, 5.1.2 and 5.1.3.
|
|
|
|
Two utility functions, GSS_Indicate_negotiable_mechs() and
|
|
GSS_Negotiate_mechs(), to aid applications in mechanism negotiation
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 8]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
are described in sections 5.1.4 and 5.1.5. These two interfaces may
|
|
be implemented entirely in terms of the other interfaces described
|
|
herein.
|
|
|
|
5.1. New GSS-API Function Interfaces
|
|
|
|
Several new interfaces are given by which, for example, GSS-API
|
|
applications may determine what features are provided by a given
|
|
mechanism, what mechanisms provide what features and what
|
|
compositions are legal.
|
|
|
|
These new interfaces are all OPTIONAL.
|
|
|
|
In order to preserve backwards compatibility with applications that
|
|
do not use the new interfaces GSS_Indicate_mechs() MUST NOT indicate
|
|
support for any stackable pseduo-mechanisms. GSS_Indicate_mechs()
|
|
MAY indicate support for some, all or none of the available composite
|
|
mechanisms; which composite mechanisms, if any, are indicated through
|
|
GSS_Indicate_mechs() SHOULD be configurable. GSS_Acquire_cred() and
|
|
GSS_Add_cred() MUST NOT create credentials for composite mechanisms
|
|
not explicitly requested or, if no desired mechanism or mechanisms
|
|
are given, for composite mechanisms not indicated by
|
|
GSS_Indicate_mechs().
|
|
|
|
Applications SHOULD use GSS_Indicate_mechs_by_mech_attrs() instead of
|
|
GSS_Indicate_mechs() wherever possible.
|
|
|
|
Applications can use GSS_Indicate_mechs_by_mech_attrs() to determine
|
|
what, if any, mechanisms provide a given set of features.
|
|
|
|
GSS_Indicate_mechs_by_mech_attrs() can also be used to indicate (as
|
|
in GSS_Indicate_mechs()) the set of available mechanisms of each type
|
|
(concrete, mechanism negotiation pseudo-mechanism, stackable pseudo-
|
|
mechanism and composite mechanisms).
|
|
|
|
Applications may use GSS_Inquire_mech_attrs_for_mech() to test
|
|
whether a given composite mechanism is available and the set of
|
|
features that it offers.
|
|
|
|
GSS_Negotiate_mechs() may be used to negotiate the use of mechanisms
|
|
such that composite mechanisms need not be advertised but instead be
|
|
implied by offering stackable pseudo-mechanisms.
|
|
|
|
5.1.1. GSS_Compose_oid()
|
|
|
|
Inputs:
|
|
o mech1 OBJECT IDENTIFIER, -- mechanism OID
|
|
o mech2 OBJECT IDENTIFIER -- mechanism OID
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 9]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
Outputs:
|
|
o major_status INTEGER,
|
|
o minor_status INTEGER,
|
|
o composite OBJECT IDENTIFIER -- OID composition of mech1 with mech2
|
|
({mech1 mech2})
|
|
|
|
Return major_status codes:
|
|
o GSS_S_COMPLETE indicates success.
|
|
o GSS_S_BAD_MECH indicates that mech1 is not supported.
|
|
o GSS_S_FAILURE indicates that the request failed for some other
|
|
reason. The minor status will be specific to mech1 and may
|
|
provide further information.
|
|
|
|
5.1.2. GSS_Decompose_oid()
|
|
|
|
Inputs:
|
|
o input_mech OBJECT IDENTIFIER, -- mechanism OID.
|
|
o mechs SET OF OBJECT IDENTIFIER -- mechanism OIDs (if
|
|
GSS_C_NULL_OID_SET defaults to the set of stackable pseudo-
|
|
mechanism OIDs indicated by GSS_Indicate_mechs_by_mech_attrs()).
|
|
|
|
Outputs:
|
|
o major_status INTEGER,
|
|
o minor_status INTEGER,
|
|
o lead_mech OBJECT IDENTIFIER, -- leading stackable pseudo-
|
|
mechanism OID.
|
|
o trail_mech OBJECT IDENTIFIER -- input_mech with lead_mech removed
|
|
from the front.
|
|
|
|
Return major_status codes:
|
|
o GSS_S_COMPLETE indicates success.
|
|
o GSS_S_BAD_MECH indicates that the input_mech could not be
|
|
decomposed as no stackable pseudo-mechanism is available whose OID
|
|
is a prefix of the input_mech.
|
|
o GSS_S_FAILURE indicates that the request failed for some other
|
|
reason.
|
|
|
|
5.1.3. GSS_Release_oid()
|
|
|
|
The following text is adapted from the obsoleted rfc2078 [RFC2078].
|
|
|
|
Inputs:
|
|
o oid OBJECT IDENTIFIER
|
|
|
|
Outputs:
|
|
o major_status INTEGER,
|
|
o minor_status INTEGER
|
|
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 10]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
Return major_status codes:
|
|
o GSS_S_COMPLETE indicates successful completion
|
|
o GSS_S_FAILURE indicates that the operation failed
|
|
|
|
Allows the caller to release the storage associated with an OBJECT
|
|
IDENTIFIER buffer allocated by another GSS-API call, specifically
|
|
GSS_Compose_oid() and GSS_Decompose_oid(). This call's specific
|
|
behavior depends on the language and programming environment within
|
|
which a GSS-API implementation operates, and is therefore detailed
|
|
within applicable bindings specifications; in particular, this call
|
|
may be superfluous within bindings where memory management is
|
|
automatic.
|
|
|
|
5.1.4. GSS_Indicate_negotiable_mechs()
|
|
|
|
Inputs:
|
|
o input_cred_handle CREDENTIAL HANDLE, -- credential handle to be
|
|
used with GSS_Init_sec_context(); may be GSS_C_NO_CREDENTIAL.
|
|
o peer_type_known BOOLEAN, -- indicates whether the peer is known to
|
|
support or not supprot the stackable pseudo-mechanism framework.
|
|
o peer_has_mech_stacking BOOLEAN -- indicates whether the peer
|
|
supports the stackable pseudo-mechanism framework; ignore if
|
|
peer_type_known is FALSE.
|
|
|
|
Outputs:
|
|
o major_status INTEGER,
|
|
o minor_status INTEGER,
|
|
o offer_mechs SET OF OBJECT IDENTIFIER, -- mechanisms to offer.
|
|
|
|
Return major_status codes:
|
|
o GSS_S_COMPLETE indicates success.
|
|
o GSS_S_NO_CREDENTIAL indicates that the caller's credentials are
|
|
expired or, if input_cred_handle is GSS_C_NO_CREDENTIAL, that no
|
|
credentials could be acquired for GSS_C_NO_NAME.
|
|
o GSS_S_FAILURE indicates that the request failed for some other
|
|
reason.
|
|
|
|
This function produces a set of mechanism OIDs, optimized for space,
|
|
that its caller should advertise to peers during mechanism
|
|
negotiation.
|
|
|
|
The output offer_mechs parameter will include all of the mechanisms
|
|
for which the input_cred_handle has elements (as indicated by
|
|
GSS_Inquire_cred()), but composite mechanisms will be included either
|
|
implicitly or implicitly as per the following rules:
|
|
o if peer_type_known is TRUE and peer_has_mech_stacking is FALSE
|
|
then no composite mechanisms not indicated by GSS_Indicate_mechs()
|
|
will be advertised, explictly or implicitly;
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 11]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
o if peer_type_known is FALSE then all composite mechanisms
|
|
indicated by GSS_Indicate_mechs() for which input_cred_handle has
|
|
elements will be indicated in offer_mechs explicitly and all
|
|
others may be indicated in offer_mechs implicitly, by including
|
|
their component stackable pseduo-mechanism OIDs (see below);
|
|
o if peer_type_known is TRUE and peer_has_mech_stacking is TRUE
|
|
composite mechanisms will generally not be advertised explicitly,
|
|
but will be advertised implicitly, by including their component
|
|
stackable pseduo-mechanism OIDs (see below); no composite
|
|
mechanisms will be advertised explicitly
|
|
o if the input_cred_handle does not have elements for all of the
|
|
possible composite mechanisms that could be constructed from the
|
|
its elements' decomposed mechanisms, then all composite mechanisms
|
|
for which the input_cred_handle does have elements will be
|
|
advertised explicitly in offer_mechs.
|
|
|
|
5.1.5. GSS_Negotiate_mechs()
|
|
|
|
Inputs:
|
|
o input_credential_handle CREDENTIAL HANDLE, -- mechanisms offered
|
|
by the caller.
|
|
o peer_mechs SET OF OBJECT IDENTIFIER -- mechanisms offered by the
|
|
caller's peer.
|
|
|
|
Outputs:
|
|
o major_status INTEGER,
|
|
o minor_status INTEGER,
|
|
o mechs SET OF OBJECT IDENTIFIER -- mechanisms common to the
|
|
caller's credentials and the caller's peer.
|
|
|
|
Return major_status codes:
|
|
o GSS_S_COMPLETE indicates success; the output mechs parameter MAY
|
|
be the empty set (GSS_C_NO_OID_SET).
|
|
o GSS_S_NO_CREDENTIAL indicates that the caller's credentials are
|
|
expired or, if input_cred_handle is GSS_C_NO_CREDENTIAL, that no
|
|
credentials could be acquired for GSS_C_NO_NAME.
|
|
o GSS_S_FAILURE indicates that the request failed for some other
|
|
reason.
|
|
|
|
This function matches the mechanisms for which the caller has
|
|
credentials with the mechanisms offered by the caller's peer and
|
|
returns the set of mechanisms in common to both, accounting for any
|
|
composite mechanisms offered by the peer implicitly.
|
|
|
|
5.1.6. C-Bindings
|
|
|
|
|
|
OM_uint32 gss_compose_oid(
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 12]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
OM_uint32 *minor_status,
|
|
const gss_OID mech1,
|
|
const gss_OID mech2,
|
|
gss_OID *composite);
|
|
|
|
OM_uint32 gss_decompose_oid(
|
|
OM_uint32 *minor_status,
|
|
const gss_OID input_mech,
|
|
const gss_OID_set mechs,
|
|
gss_OID *lead_mech,
|
|
gss_OID *trail_mech);
|
|
|
|
OM_uint32 gss_release_oid(
|
|
OM_uint32 *minor_status,
|
|
gss_OID *oid);
|
|
|
|
OM_uint32 gss_indicate_negotiable_mechs(
|
|
OM_uint32 *minor_status,
|
|
const gss_cred_id_t input_cred_handle,
|
|
OM_uint32 peer_type_known,
|
|
OM_uint32 peer_has_mech_stacking,
|
|
gss_OID_set *offer_mechs);
|
|
|
|
OM_uint32 gss_negotiate_mechs(
|
|
OM_uint32 *minor_status,
|
|
const gss_cred_id_t input_cred_handle,
|
|
const gss_OID_set peer_mechs,
|
|
const gss_OID_set *mechs);
|
|
|
|
|
|
Figure 1
|
|
|
|
|
|
6. Negotiation of Composite Mechanisms
|
|
|
|
Where GSS-API implementations do not support the stackable mechanism
|
|
framework interfaces applications may only negotiate explicitly from
|
|
a set of concrete and composite mechanism OIDs as indicated by
|
|
GSS_Indicate_mechs() and for which suitable credentials are
|
|
available. GSS_Indicate_mechs(), as described in Section 4.4, MUST
|
|
NOT indicate support for individual stackable pseudo-mechanisms, so
|
|
there will not be any composite mechanisms implied but not explicitly
|
|
offered in the mechanism negotiation.
|
|
|
|
Applications that support the stackable mechanism framework SHOULD
|
|
use GSS_Indicate_negotiable_mechs() to construct the set of mechanism
|
|
OIDs to offer to their peers. GSS_Indicate_negotiable_mechs()
|
|
optimizes for bandwidth consumption by using decomposed OIDs instead
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 13]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
of composed OIDs, where possible. See Section 5.1.4.
|
|
|
|
Peers that support the stackable mechanism framework interfaces
|
|
SHOULD use GSS_Negotiate_mechs() to select a mechanism as that
|
|
routine accounts for composite mechanisms implicit in the mechanism
|
|
offers.
|
|
|
|
6.1. Negotiation of Composite Mechanisms Through SPNEGO
|
|
|
|
SPNEGO applications MUST advertise either the set of mechanism OIDs
|
|
for which they have suitable credentials or the set of mechanism OIDs
|
|
produced by calling GSS_Indicate_negotiable_mechs() with the
|
|
available credentials and the peer_type_known parameter as FALSE.
|
|
|
|
|
|
7. Requirements for Mechanism Designers
|
|
|
|
Stackable pseudo-mechanisms specifications MUST:
|
|
o list the set of GSS-API mechanism attributes associated with them
|
|
o list their initial mechanism composition rules
|
|
o specify a mechanism for updating their mechanism composition rules
|
|
|
|
All other mechanism specifications MUST:
|
|
o list the set of GSS-API mechanism attributes associated with them
|
|
|
|
|
|
8. IANA Considerations
|
|
|
|
Allocation of arcs in the namespace of OIDs relative to the base
|
|
stackable pseduo-mechanism OID specified in Section 4.1 is reserved
|
|
to the IANA.
|
|
|
|
|
|
9. Security considerations
|
|
|
|
Some composite mechanisms may well not be secure. The mechanism
|
|
composition rules of pseudo-mechanisms (including the default
|
|
composition rule given in Section 4 for unknown mechanism attributes)
|
|
should be used to prevent the use of unsafe composite mechanisms.
|
|
|
|
Designers of pseudo-mechanisms should study the possible combinations
|
|
of their mechanisms with others and design mechanism composition
|
|
rules accordingly.
|
|
|
|
Similarly, pseudo-mechanism designers MUST specify, and implementors
|
|
MUST implement, composite mechanism attribute set determination rules
|
|
appropriate to the subject pseduo-mechanism, as described in section
|
|
4.2. Failure to do so may lead to inappropriate composite mechanisms
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 14]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
being deemed permissible by programmatic application of flawed
|
|
mechanism composition rules or to by their application with incorrect
|
|
mechanism attribute sets.
|
|
|
|
10. Normative
|
|
|
|
[EXTENDED-INQUIRY]
|
|
Williams, N., "Extended Generic Security Service Mechanism
|
|
Inquiry APIs",
|
|
draft-ietf-kitten-extended-mech-inquiry-00.txt (work in
|
|
progress).
|
|
|
|
[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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 15]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 2005
|
|
|
|
|
|
Author's Address
|
|
|
|
Nicolas Williams
|
|
Sun Microsystems
|
|
5300 Riata Trace Ct
|
|
Austin, TX 78727
|
|
US
|
|
|
|
Email: Nicolas.Williams@sun.com
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Williams Expires April 19, 2006 [Page 16]
|
|
|
|
Internet-Draft Stackable GSS Mechs October 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 April 19, 2006 [Page 17]
|
|
|
|
|