draft-ietf-sasl-gs2-04.txt   draft-ietf-sasl-gs2-05.txt 
Network Working Group S. Josefsson Network Working Group S. Josefsson
Intended status: Standards Track Intended status: Standards Track
Expires: June 10, 2007 Expires: July 13, 2007
Using GSS-API Mechanisms in SASL: The GS2 Mechanism Family Using GSS-API Mechanisms in SASL: The GS2 Mechanism Family
draft-ietf-sasl-gs2-04 draft-ietf-sasl-gs2-05
Status of this Memo Status of this Memo
By submitting this Internet-Draft, each author represents that any By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware 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 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. aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
skipping to change at page 1, line 34 skipping to change at page 1, line 34
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt. http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on June 10, 2007. This Internet-Draft will expire on July 13, 2007.
Copyright Notice Copyright Notice
Copyright (C) The Internet Society (2006). Copyright (C) The Internet Society (2007).
Abstract Abstract
This document describes how to use a Generic Security Service This document describes how to use a Generic Security Service
Application Program Interface (GSS-API) mechanism in the the Simple Application Program Interface (GSS-API) mechanism in the the Simple
Authentication and Security Layer (SASL) framework. This is done by Authentication and Security Layer (SASL) framework. This is done by
defining a new SASL mechanism family, called GS2. This mechanism defining a new SASL mechanism family, called GS2. This mechanism
family offers a number of improvements over the previous SASL/GSS-API family offers a number of improvements over the previous SASL/GSS-API
mechanism: it is more general, uses fewer messages for the mechanism: it is more general, uses fewer messages for the
authentication phase in some cases, and supports a SASL-specific authentication phase in some cases, and supports a SASL-specific
skipping to change at page 3, line 19 skipping to change at page 3, line 19
3. Mechanism name . . . . . . . . . . . . . . . . . . . . . . . . 6 3. Mechanism name . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1. Generating SASL mechanism names from GSS-API OIDs . . . . 6 3.1. Generating SASL mechanism names from GSS-API OIDs . . . . 6
3.2. Computing mechanism names manually . . . . . . . . . . . . 6 3.2. Computing mechanism names manually . . . . . . . . . . . . 6
3.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . . 6
4. SASL Authentication Exchange Message Format . . . . . . . . . 8 4. SASL Authentication Exchange Message Format . . . . . . . . . 8
4.1. SASL Messages . . . . . . . . . . . . . . . . . . . . . . 8 4.1. SASL Messages . . . . . . . . . . . . . . . . . . . . . . 8
4.2. Context Token Field . . . . . . . . . . . . . . . . . . . 9 4.2. Context Token Field . . . . . . . . . . . . . . . . . . . 9
4.2.1. Client side . . . . . . . . . . . . . . . . . . . . . 9 4.2.1. Client side . . . . . . . . . . . . . . . . . . . . . 9
4.2.2. Server side . . . . . . . . . . . . . . . . . . . . . 10 4.2.2. Server side . . . . . . . . . . . . . . . . . . . . . 10
4.3. Wrap Token Field . . . . . . . . . . . . . . . . . . . . . 11 4.3. Wrap Token Field . . . . . . . . . . . . . . . . . . . . . 11
4.3.1. Client first GSS_Wrap input . . . . . . . . . . . . . 12 4.3.1. The GS2_Wrap function . . . . . . . . . . . . . . . . 12
4.3.2. Server last GSS_Wrap input . . . . . . . . . . . . . . 13 4.3.2. Client first GS2_Wrap input . . . . . . . . . . . . . 12
4.3.3. Server first GSS_Wrap input . . . . . . . . . . . . . 13 4.3.3. Server last GS2_Wrap input . . . . . . . . . . . . . . 13
4.3.4. Client last GSS_Wrap input . . . . . . . . . . . . . . 14 4.3.4. Server first GS2_Wrap input . . . . . . . . . . . . . 13
4.3.5. Client last GS2_Wrap input . . . . . . . . . . . . . . 14
5. Channel Bindings . . . . . . . . . . . . . . . . . . . . . . . 15 5. Channel Bindings . . . . . . . . . . . . . . . . . . . . . . . 15
6. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 16 6. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 16
7. Authentication Conditions . . . . . . . . . . . . . . . . . . 20 7. Authentication Conditions . . . . . . . . . . . . . . . . . . 20
8. GSS-API Parameters . . . . . . . . . . . . . . . . . . . . . . 21 8. GSS-API Parameters . . . . . . . . . . . . . . . . . . . . . . 21
9. Security Layer Bits . . . . . . . . . . . . . . . . . . . . . 22 9. Security Layer Bits . . . . . . . . . . . . . . . . . . . . . 22
9.1. Examples . . . . . . . . . . . . . . . . . . . . . . . . . 22 9.1. Examples . . . . . . . . . . . . . . . . . . . . . . . . . 22
10. Interoperability with the SASL "GSSAPI" mechanism . . . . . . 24 10. Non-integrity capable GSS-API mechanisms . . . . . . . . . . . 24
10.1. The interoperability problem . . . . . . . . . . . . . . . 24 11. Interoperability with the SASL "GSSAPI" mechanism . . . . . . 25
10.2. Resolving the problem . . . . . . . . . . . . . . . . . . 24
10.3. Additional recommendations . . . . . . . . . . . . . . . . 24
11. Mechanisms that negotiate other mechanisms . . . . . . . . . . 25
11.1. The interoperability problem . . . . . . . . . . . . . . . 25 11.1. The interoperability problem . . . . . . . . . . . . . . . 25
11.2. Security problem . . . . . . . . . . . . . . . . . . . . . 25 11.2. Resolving the problem . . . . . . . . . . . . . . . . . . 25
11.3. Resolving the problems . . . . . . . . . . . . . . . . . . 25 11.3. Additional recommendations . . . . . . . . . . . . . . . . 25
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 12. Mechanisms that negotiate other mechanisms . . . . . . . . . . 26
13. Security Considerations . . . . . . . . . . . . . . . . . . . 27 12.1. The interoperability problem . . . . . . . . . . . . . . . 26
14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 28 12.2. Security problem . . . . . . . . . . . . . . . . . . . . . 26
15. References . . . . . . . . . . . . . . . . . . . . . . . . . . 29 12.3. Resolving the problems . . . . . . . . . . . . . . . . . . 26
15.1. Normative References . . . . . . . . . . . . . . . . . . . 29 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27
15.2. Informative References . . . . . . . . . . . . . . . . . . 29 14. Security Considerations . . . . . . . . . . . . . . . . . . . 28
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 31 15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 30
Intellectual Property and Copyright Statements . . . . . . . . . . 32 16. References . . . . . . . . . . . . . . . . . . . . . . . . . . 31
16.1. Normative References . . . . . . . . . . . . . . . . . . . 31
16.2. Informative References . . . . . . . . . . . . . . . . . . 31
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 33
Intellectual Property and Copyright Statements . . . . . . . . . . 34
1. Introduction 1. Introduction
Generic Security Service Application Program Interface (GSS-API) [3] Generic Security Service Application Program Interface (GSS-API) [3]
is a framework that provide security services to applications. is a framework that provide security services to applications.
Simple Authentication and Security Layer (SASL) [2] is a framework to Simple Authentication and Security Layer (SASL) [2] is a framework to
provide authentication and security layers for connection based provide authentication and security layers for connection based
protocols. This document describe how to use a GSS-API mechanism in protocols. This document describe how to use a GSS-API mechanism in
a connection-based protocol using the SASL framework. a connection-based protocol using the SASL framework.
skipping to change at page 4, line 32 skipping to change at page 4, line 32
the other protocol is more widely deployed. There are the other protocol is more widely deployed. There are
interoperability concerns by having the same GSS-API mechanism interoperability concerns by having the same GSS-API mechanism
available under more than one SASL mechanism name, see the section available under more than one SASL mechanism name, see the section
"Interoperability with the GSSAPI mechanism" below. "Interoperability with the GSSAPI mechanism" below.
There are interoperability and security concerns if this SASL There are interoperability and security concerns if this SASL
mechanism is used together with a GSS-API mechanism that negotiate mechanism is used together with a GSS-API mechanism that negotiate
other GSS-API mechanisms (such as SPNEGO [11]), see the section other GSS-API mechanisms (such as SPNEGO [11]), see the section
"Mechanisms that negotiate other mechanisms" below. "Mechanisms that negotiate other mechanisms" below.
There are interoperability and security concerns with GSSAPI
mechanism that do not provide integrity, see the section "Non-
integrity capable GSS-API mechanisms" below.
SASL mechanism names starting with "GS2-" are reserved for SASL SASL mechanism names starting with "GS2-" are reserved for SASL
mechanisms which conform to this document. mechanisms which conform to this document.
The IESG is considered to be the owner of all SASL mechanisms which The IESG is considered to be the owner of all SASL mechanisms which
conform to this document. This does not necessarily imply that the conform to this document. This does not necessarily imply that the
IESG is considered to be the owner of the underlying GSSAPI IESG is considered to be the owner of the underlying GSSAPI
mechanism. mechanism.
2. Conventions used in this document 2. Conventions used in this document
skipping to change at page 8, line 40 skipping to change at page 8, line 40
octet (32 bit) integer encoded in network byte order, that indicate octet (32 bit) integer encoded in network byte order, that indicate
the length of the "Context token" and "Wrap token" fields, the length of the "Context token" and "Wrap token" fields,
respectively. A length of 0 means that a particular field is not respectively. A length of 0 means that a particular field is not
present. present.
The "Context token" field, if present, contain a GSS-API context The "Context token" field, if present, contain a GSS-API context
establishment token generated by GSS_Init_sec_context or establishment token generated by GSS_Init_sec_context or
GSS_Accept_sec_context. GSS_Accept_sec_context.
The "Wrap token" field, if present, contain the output generated by The "Wrap token" field, if present, contain the output generated by
GSS_Wrap. the GS2_Wrap function.
The fields need not be aligned to 32-bit a boundary. There is no The fields need not be aligned to 32-bit a boundary. There is no
padding between fields. padding between fields.
Messages shorter than or equal to 8 octets are invalid. From that it Messages shorter than or equal to 8 octets are invalid. From that it
follows that at least one of the "Context token length" and the "Wrap follows that at least one of the "Context token length" and the "Wrap
token length" integers MUST be non-zero in a particular message. If token length" integers MUST be non-zero in a particular message. If
the sum of the length integers is longer than the entire message the sum of the length integers is longer than the entire message
size, minus 8 octets for the length fields, the message is invalid. size, minus 8 octets for the length fields, the message is invalid.
skipping to change at page 9, line 14 skipping to change at page 9, line 14
Conforming implementations MUST NOT send additional data after the Conforming implementations MUST NOT send additional data after the
above message syntax, and MUST ignore additional data. To above message syntax, and MUST ignore additional data. To
illustrate, implementations MUST NOT assume that the last "Wrap token illustrate, implementations MUST NOT assume that the last "Wrap token
length" octets of the packet correspond to the "Wrap token", because length" octets of the packet correspond to the "Wrap token", because
that would be incorrect if the packet contained additional data not that would be incorrect if the packet contained additional data not
described by this document. described by this document.
4.2. Context Token Field 4.2. Context Token Field
The format of the "Context token" field inside the SASL token are The format of the "Context token" field inside the SASL token is
defined by the GSS-API specifications, and the data is computed by defined by each GSS-API mechanism, and the data is computed by (for
the GSS_Init_sec_context (for the client) and GSS_Accept_sec_context the client) GSS_Init_sec_context and (for the server)
(for the server) functions. GSS_Accept_sec_context.
4.2.1. Client side 4.2.1. Client side
The client calls GSS_Init_sec_context, passing in The client calls GSS_Init_sec_context, passing in
input_context_handle of GSS_C_NO_CONTEXT (initially), mech_type of input_context_handle of GSS_C_NO_CONTEXT (initially), mech_type of
the GSSAPI mechanism for which this SASL mechanism is registered, the the GSSAPI mechanism for which this SASL mechanism is registered, the
chan_binding is set to NULL, and targ_name equal to output_name from chan_binding is set to NULL, and targ_name equal to output_name from
GSS_Import_Name called with input_name_type of GSS_Import_Name called with input_name_type of
GSS_C_NT_HOSTBASED_SERVICE (*) and input_name_string of GSS_C_NT_HOSTBASED_SERVICE (*) and input_name_string of
"service@hostname" where "service" is the service name specified in "service@hostname" where "service" is the service name specified in
the protocol's profile, and "hostname" is the fully qualified host the protocol's profile, and "hostname" is the fully qualified host
name of the server. name of the server.
(*) - Clients MAY use name types other than (*) - Clients MAY use name types other than
GSS_C_NT_HOSTBASED_SERVICE to import servers' acceptor names, but GSS_C_NT_HOSTBASED_SERVICE to import servers' acceptor names, but
only when they have a priori knowledge that the servers support only when they have a priori knowledge that the servers support
alternate name types. Otherwise clients MUST use alternate name types. Otherwise clients MUST use
GSS_C_NT_HOSTBASED_SERVICE for importing acceptor names. GSS_C_NT_HOSTBASED_SERVICE for importing acceptor names.
When calling the GSS_Init_sec_context the client MUST pass the When calling the GSS_Init_sec_context the client SHOULD pass the
integ_req_flag of TRUE. If the client intends to request a security integ_req_flag of TRUE, but MAY set it to FALSE (see section 10
layer, it MUST also supply to the GSS_Init_sec_context a below). If the client intends to request a security layer, it MUST
mutual_req_flag of TRUE, and a sequence_req_flag of TRUE. If the also supply to the GSS_Init_sec_context a mutual_req_flag of TRUE,
client will be requesting a security layer providing confidentiality and a sequence_req_flag of TRUE. If the client will be requesting a
protection, it MUST also supply to the GSS_Init_sec_context a security layer providing confidentiality protection, it MUST also
conf_req_flag of TRUE. supply to the GSS_Init_sec_context a conf_req_flag of TRUE.
The client then responds with any resulting output_token. The client then responds with any resulting output_token.
If GSS_Init_sec_context returns GSS_S_CONTINUE_NEEDED, then the If GSS_Init_sec_context returns GSS_S_CONTINUE_NEEDED, then the
client expect the server to issue a token in a subsequent challenge client expect the server to issue a token in a subsequent challenge
or as additional information to the outcome of the authentication. or as additional information to the outcome of the authentication.
The client pass the context token to another call to The client pass the context token to another call to
GSS_Init_sec_context, repeating the procedure, until GSS_S_COMPLETE GSS_Init_sec_context, repeating the procedure, until GSS_S_COMPLETE
is returned or authentication is aborted. is returned or authentication is aborted.
skipping to change at page 11, line 31 skipping to change at page 11, line 31
permitted by the server's security policy. permitted by the server's security policy.
4.3. Wrap Token Field 4.3. Wrap Token Field
The Wrap token field MUST NOT be sent or received before the The Wrap token field MUST NOT be sent or received before the
PROT_READY flag is set locally (by GSS_Init_sec_context or PROT_READY flag is set locally (by GSS_Init_sec_context or
Gss_Accept_sec_context), or if the PROT_READY flag is never set, Gss_Accept_sec_context), or if the PROT_READY flag is never set,
before the context has been fully established. The Wrap token field before the context has been fully established. The Wrap token field
does not have to be present directly when the PROT_READY flag is set. does not have to be present directly when the PROT_READY flag is set.
During any exchange, exactly one Wrap token field is sent in each During any exchange, exactly one Wrap token field is sent in each
direction. The input to the GSS_Wrap function MUST follow the format direction. The GS2_Wrap function is defined below, and its inputs
described below. If not exactly one Wrap token is received by the MUST follow the format described below. If not exactly one Wrap
client and by the server, the authentication MUST fail. token is received by the client and by the server, the authentication
MUST fail.
If PROT_READY is never set by GSS_Init_sec_context or If PROT_READY is never set by GSS_Init_sec_context or
GSS_Accept_sec_context, the flag is implied by successful context GSS_Accept_sec_context, the flag is implied by successful context
negotiation. This is for GSS-API v1 mechanisms that do not support negotiation. This is for GSS-API v1 mechanisms that do not support
PROT_READY. This may result in a SASL token consisting of a context PROT_READY, or for GSS-API mechanism that do not provide per-message
protection. This may result in a SASL token consisting of a context
token length of 0 and a Wrap token. token length of 0 and a Wrap token.
The entity that sends its first Wrap token will have to specify a The entity that sends the first Wrap token will have to specify a
bitmap of supported and preferred quality of protection schemes. The bitmap of supported and preferred quality of protection schemes. The
entity that replies to the Wrap tokens will pick a scheme, based on entity that replies to the Wrap tokens will pick a scheme, based on
the bitmask and local policy. The quality of protection values are the bitmask and local policy. The quality of protection values are
defined in section 9. defined in section 9.
Two pairs of input formats to the GSS_Wrap function are defined. The Two pairs of input formats to the GS2_Wrap function are defined. The
first pair is used when the client sends the GSS_Wrap token first and first pair is used when the client sends the Wrap token first and the
the server responds. The other pair is used when the server sends server responds. The other pair is used when the server sends the
the GSS_Wrap token first and the client responds. Wrap token first and the client responds.
The inputs below are passed to GSS_Wrap with conf_flag set to FALSE, The inputs below are passed to GS2_Wrap, and the output is used as
and the Wrap token will be the generated output_message. the Wrap token value.
Some fields in the input formats are optional, indicated by brackets Some fields in the input formats are optional, indicated by brackets
("[" and "]") and explained by the text below. ("[" and "]") and explained by the text below.
4.3.1. Client first GSS_Wrap input 4.3.1. The GS2_Wrap function
The input to GSS_Wrap when the client sends a Wrap token field first The GS2_Wrap function have two implementations, and which one is used
depends on whether the negotiated GSS-API context supports per-
message protection. When a context is successfully negotiated (i.e.,
when GSS_S_COMPLETE is returned from, for clients,
GSS_Init_sec_context, or, for servers, GSS_Accept_sec_context) and
the output variable integ_avail is FALSE, then GSS_Wrap cannot be
used and instead we define GS2_Wrap to be the identity function.
When integ_avail is negotiated TRUE, the GS2_Wrap is identical to
calling the GSS_Wrap function with conf_flag set to FALSE and using
the generated output_message as the output data.
4.3.2. Client first GS2_Wrap input
The input to GS2_Wrap when the client sends a Wrap token field first
is as follows. is as follows.
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| client_qops | client_maxbuf | | client_qops | client_maxbuf |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| channel_binding_length | | channel_binding_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|[client_cbqops]| [channel_binding_data] / |[client_cbqops]| [channel_binding_data] /
skipping to change at page 13, line 10 skipping to change at page 13, line 24
The optional field "channel_binding_data" is present only if The optional field "channel_binding_data" is present only if
"channel_binding_length" is non-zero, and contain the actual channel "channel_binding_length" is non-zero, and contain the actual channel
binding data. binding data.
The optional field "authzid" contain the authorization identity. The The optional field "authzid" contain the authorization identity. The
authorization identity is encoded using UTF-8 [5]. The authorization authorization identity is encoded using UTF-8 [5]. The authorization
identity is not terminated with the NUL (U+0000) character. Servers identity is not terminated with the NUL (U+0000) character. Servers
MUST validate that the authorization identity is valid UTF-8. MUST validate that the authorization identity is valid UTF-8.
4.3.2. Server last GSS_Wrap input 4.3.3. Server last GS2_Wrap input
The input to GSS_Wrap when the server sends a Wrap token field, after The input to GS2_Wrap when the server sends a Wrap token field, after
receiving the Wrap token in the previous section from the client, is receiving the Wrap token in the previous section from the client, is
as follows. as follows.
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| server_qop | server_maxbuf | | server_qop | server_maxbuf |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The "server_qop" field integer indicate the selected quality of The "server_qop" field integer indicate the selected quality of
skipping to change at page 13, line 34 skipping to change at page 13, line 48
9. 9.
The "server_maxbuf" field indicate the maximum protected data buffer The "server_maxbuf" field indicate the maximum protected data buffer
size the server can receive in network byte order. It MUST be 0 if size the server can receive in network byte order. It MUST be 0 if
the server doesn't advertise support for any security layer, the the server doesn't advertise support for any security layer, the
client MUST verify this. Small values can make it impossible for the client MUST verify this. Small values can make it impossible for the
client to send any protected message to the server, due to the client to send any protected message to the server, due to the
overhead added by GSS_Wrap, and the client MAY reject the overhead added by GSS_Wrap, and the client MAY reject the
authentication if it detects this situation. authentication if it detects this situation.
4.3.3. Server first GSS_Wrap input 4.3.4. Server first GS2_Wrap input
The input to GSS_Wrap when the server sends the Wrap token first is The input to GS2_Wrap when the server sends the Wrap token first is
as follows. as follows.
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| server_qops | server_maxbuf | | server_qops | server_maxbuf |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|[server_cbqops]| [channel_binding_data] / |[server_cbqops]| [channel_binding_data] /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 14, line 12 skipping to change at page 14, line 27
The "server_maxbuf" is the same as above. The "server_maxbuf" is the same as above.
The optional field "server_cbqops" indicate the server's preferred The optional field "server_cbqops" indicate the server's preferred
quality of protection if channel binding negotiation succeeds. The quality of protection if channel binding negotiation succeeds. The
quality of protection values are defined in section 9. quality of protection values are defined in section 9.
The optional field "channel_binding_data" contain the actual channel The optional field "channel_binding_data" contain the actual channel
binding data. binding data.
4.3.4. Client last GSS_Wrap input 4.3.5. Client last GS2_Wrap input
The input to GSS_Wrap when the clients sends a Wrap token field, The input to GS2_Wrap when the clients sends a Wrap token field,
after receiving the Wrap token in the previous section from the after receiving the Wrap token in the previous section from the
server, is as follows. server, is as follows.
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| client_qop | client_maxbuf | | client_qop | client_maxbuf |
/ [authzid] | / [authzid] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
skipping to change at page 16, line 15 skipping to change at page 16, line 15
6. Protocol Overview 6. Protocol Overview
This section describe several high-level protocol exchanges. The This section describe several high-level protocol exchanges. The
descriptions do not assume any properties of the actual GSS-API descriptions do not assume any properties of the actual GSS-API
mechanism. Protocol profiles, GSS-API mechanism specific behaviour, mechanism. Protocol profiles, GSS-API mechanism specific behaviour,
and to some extent implementation and policy choices, will dictate and to some extent implementation and policy choices, will dictate
which packets are sent in what order. The protocol exchanges are which packets are sent in what order. The protocol exchanges are
examples and other exchanges are permitted and will occur. examples and other exchanges are permitted and will occur.
An informal pseudo-language is used to describe the packets sent An informal pseudo-language is used to describe the packets sent
below. In particular, when GSS_Wrap() is mentioned below, it refer below. GS2_Wrap refer to the operation of calling GS2_Wrap on the
to the operation of calling GSS_Wrap on the indicated fields, indicated fields, formatted in the structures described earlier.
formatted in the structures described earlier. GSS_Init_sec_context and GSS_Accept_sec_context refer to the context
token generated by calling the respective function. The GS2 SASL
Message is denoted as [Context_token, Wrap_token], and the length
fields are not mentioned.
An authentication exchange using GS2 may look like: An authentication exchange using GS2 may look like:
C: Request authentication exchange C: Request authentication exchange
S: Send [length=0] token S: Send ["", ""] token
C: Send [length, GSS_Init_sec_context] token C: Send [GSS_Init_sec_context, ""] token
... ...
S: After PROT_READY is set, S: After PROT_READY is set,
send [length, GSS_Accept_sec_context, send [GSS_Accept_sec_context,
GSS_Wrap(server_qops | server_maxbuf] wrap_length, GS2_Wrap(server_qops | server_maxbuf]
... ...
C: After PROT_READY is set, C: After PROT_READY is set,
send [length, GSS_Init_sec_context, send [GSS_Init_sec_context,
GSS_Wrap (client_qop | client_maxbuf | authzid)] wrap_length, GS2_Wrap (client_qop | client_maxbuf |
S: Send [length, GSS_Accept_sec_context] token authzid)]
C: Send [length, GSS_Init_sec_context] token S: Send [GSS_Accept_sec_context, ""] token
C: Send [GSS_Init_sec_context, ""] token
... ...
S: Outcome of authentication exchange S: Outcome of authentication exchange
Because GSS-API authentication is initiated by the client, the length Because GSS-API authentication is initiated by the client, the length
field will be 0 in the initial token from the server to the client field will be 0 in the initial token from the server to the client
when the protocol profile does not support additional information to when the protocol profile does not support additional information to
be sent together with the authentication request. be sent together with the authentication request.
The next example illustrate when the client sends its Wrap token The next example illustrate when the client sends its Wrap token
first. first.
C: Request authentication exchange C: Request authentication exchange
S: Send [length=0] token S: Send ["", ""] token
C: Send [length, GSS_Init_sec_context] token C: Send [GSS_Init_sec_context, ""] token
... ...
C: After PROT_READY is set, C: After PROT_READY is set,
send [length, GSS_Init_sec_context, send [GSS_Init_sec_context,
GSS_Wrap(client_qops | client_maxbuf | GS2_Wrap(client_qops | client_maxbuf |
channel_binding_length=0 | authzid)] channel_binding_length=0 | authzid)]
... ...
S: After PROT_READY is set, S: After PROT_READY is set,
send [length, GSS_Accept_sec_context, send [GSS_Accept_sec_context,
GSS_Wrap (server_qop | server_maxbuf)] GS2_Wrap (server_qop | server_maxbuf)]
C: Send [length, GSS_Init_sec_context] token C: Send [GSS_Init_sec_context, ""] token
S: Send [length, GSS_Accept_sec_context] token S: Send [GSS_Accept_sec_context, ""] token
... ...
S: Outcome of authentication exchange S: Outcome of authentication exchange
If the protocol profile support the optional initial client response, If the protocol profile support the optional initial client response,
the first empty message can be optimized away, and then the protocol the first empty message can be optimized away, and then the protocol
exchange will look like: exchange will look like:
C: Request authentication exchange and C: Request authentication exchange and
send [length, GSS_Init_sec_context] token send [GSS_Init_sec_context, ""] token
S: Send [length, GSS_Accept_sec_context] token S: Send [GSS_Accept_sec_context, ""] token
... ...
S: Outcome of authentication exchange S: Outcome of authentication exchange
If the protocol profile can also send additional information when If the protocol profile can also send additional information when
indicating the outcome of the authentication, then the protocol indicating the outcome of the authentication, then the protocol
exchange will look like: exchange will look like:
C: Request authentication exchange and C: Request authentication exchange and
send [length, GSS_Init_sec_context] token send [GSS_Init_sec_context, ""] token
S: Send [length, GSS_Accept_sec_context] token S: Send [GSS_Accept_sec_context, ""] token
... ...
C: Send [length, GSS_Init_sec_context] token C: Send [GSS_Init_sec_context, ""] token
S: Indicate successful authentication and S: Indicate successful authentication and
send [length, GSS_Accept_sec_context] token send [GSS_Accept_sec_context, ""] token
as additional information. as additional information.
If the PROT_READY flag is never set by the GSS-API mechanism, the If the PROT_READY flag is never set by the GSS-API mechanism, the
GSS_Wrap message will be sent after the context has been established. GS2_Wrap message will be sent after the context has been established.
The protocol may look like: The protocol may look like:
C: Request authentication exchange C: Request authentication exchange
... ...
S: GSS_Accept_sec_context() returns GSS_S_COMPLETE and outputs S: GSS_Accept_sec_context() returns GSS_S_COMPLETE and outputs
a token, send [length, context token, a token, send ["", GS2_Wrap(server_qops | server_maxbuf)]
GSS_Wrap(server_qops | server_maxbuf)]
C: GSS_Init_sec_context() returns GSS_S_COMPLETE and does not C: GSS_Init_sec_context() returns GSS_S_COMPLETE and does not
output a token, send output a token, send
[length=0, context token, ["", GS2_Wrap(client_qop | client_maxbuf |
GSS_Wrap(client_qop | client_maxbuf |
channel_binding_length=0 | authzid)] channel_binding_length=0 | authzid)]
S: Outcome of authentication exchange S: Outcome of authentication exchange
Alternatively, if the client finishes first, it may look like: Alternatively, if the client finishes first, it may look like:
C: Request authentication exchange C: Request authentication exchange
... ...
C: GSS_Init_sec_context() returns GSS_S_COMPLETE and outputs a C: GSS_Init_sec_context() returns GSS_S_COMPLETE and outputs a
token, send [length, context token, token, send ["", GS2_Wrap(client_qops | client_maxbuf |
GSS_Wrap(client_qops | client_maxbuf |
channel_binding_length=0 | authzid)] channel_binding_length=0 | authzid)]
S: GSS_Accept_sec_context() returns GSS_S_COMPLETE and does not S: GSS_Accept_sec_context() returns GSS_S_COMPLETE and does not
output a token, send [length, context token, output a token, send ["", GS2_Wrap(server_qop | server_maxbuf |
GSS_Wrap(server_qop | server_maxbuf |
channel_binding_length=0)] channel_binding_length=0)]
S: Outcome of authentication exchange S: Outcome of authentication exchange
Adding channel bindings to the last examples, gives the following Adding channel bindings to the last examples, gives the following
situation. Here the client request confidentiality for the complex situation. Here the client request confidentiality for the
application data if channel binding fails but no SASL security layer application data if channel binding fails but no SASL security layer
if channel binding negotiation succeeds: if channel binding negotiation succeeds:
C: Request authentication exchange C: Request authentication exchange
... ...
C: GSS_Init_sec_context() returns GSS_S_COMPLETE and outputs a C: GSS_Init_sec_context() returns GSS_S_COMPLETE and outputs a
token, send [length, context token, token, send [GSS_Init_sec_context,
GSS_Wrap(client_qops=0x04 | client_maxbuf | GS2_Wrap(client_qops=0x04 | client_maxbuf |
channel_binding_length=n | channel_binding_length=n |
client_cbqops=0x01 | channel_binding_data | client_cbqops=0x01 | channel_binding_data |
authzid)] authzid)]
S: GSS_Accept_sec_context() returns GSS_S_COMPLETE and does not S: GSS_Accept_sec_context() returns GSS_S_COMPLETE and does not
output a token, send [length, context token, output a token, send ["",
GSS_Wrap(server_qop | server_maxbuf | GS2_Wrap(server_qop | server_maxbuf |
channel_binding_length=0)] channel_binding_length=0)]
S: Outcome of authentication exchange S: Outcome of authentication exchange
If the protocol support initial data from the client, and the If the protocol support initial data from the client, and the
PROT_READY flag is set in the client after the first call to PROT_READY flag is set in the client after the first call to
GSS_Init_sec_context, and the server can send additional data to the GSS_Init_sec_context, and the server can send additional data to the
client when indicating successful authentication, the following client when indicating successful authentication, the following
protocol exchange will occur. protocol exchange will occur.
C: Request authentication exchange and C: Request authentication exchange and
send [length, GSS_Init_sec_context, send [GSS_Init_sec_context,
GSS_Wrap (client_qops | client_maxbuf | GS2_Wrap (client_qops | client_maxbuf |
channel_binding_length=0 | authzid)] token channel_binding_length=0 | authzid)] token
S: Indicate successful authentication and S: Indicate successful authentication and
send [length, GSS_Accept_sec_context, send [GSS_Accept_sec_context,
GSS_Wrap(server_qop | server_maxbuf)] token GS2_Wrap(server_qop | server_maxbuf)] token
as additional information. as additional information.
The last example illustrate the optimal (round-trip wise) The last example illustrate the optimal (round-trip wise)
authentication possible using this protocol. authentication possible using this protocol.
7. Authentication Conditions 7. Authentication Conditions
Authentication MUST NOT succeed if any one of the following Authentication MUST NOT succeed if any one of the following
conditions are true: conditions are true:
skipping to change at page 24, line 5 skipping to change at page 24, line 5
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
When confidentiality is negotiated the octet will encode an integer 4 When confidentiality is negotiated the octet will encode an integer 4
as follows. as follows.
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|0|0|0|0|0|1|0|0| |0|0|0|0|0|1|0|0|
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
10. Interoperability with the SASL "GSSAPI" mechanism 10. Non-integrity capable GSS-API mechanisms
Mechanisms that do not support integrity can be used with GS2, but
some security features cannot be provided, in particular including
channel bindings, security layers, and integrity protection of the
authorization identity.