RE: C-Bindings/rfc2078bis discuss items
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: C-Bindings/rfc2078bis discuss items



Thanks, Martin, for your detailed review.  Here are my thoughts on the
"discuss" items:

> While re-reading the C-Bindings document I discovered a few small
> issues that do indicate a slight inconsistency in rfc2078bis.
> Since we already had closure (WG last call) on the document,
> these issues should only be addressed when we have immediate and
> obvious consensus in the WG   IF we need to fix anything and how.
> 
> (1) permit GSS_C_NO_NAME as the return parameter "target_name" from
>     gss_inquire_context() (on the initiator side) for an established
>     security context
>     IF  the context was established using GSS_C_NO_NAME for target_name
>         and mutual_req_flag=0 (i.e. target-only authentication)
>         
>     Note that we added the possibility to pass in a target_name
>     of GSS_C_NO_NAME into gss_init_sec_context at the
>     Washington D.C. IETF *with the caveat* that existing implementations
>     will probably not support it, even for target-only authentication.
> 
>     Currently rfc2078bis claims that targ_name will always be valid
>     and a mechanism name (MN) when the call returns GSS_S_COMPLETE
>     and the open flag is TRUE.  GSS_C_NO_NAME doesn't fit this claim.
> 
Good point: the fairly late breaking addition of GSS_C_NO_NAME for
target_name input into gss_init_sec_context() implies a need for some
corresponding action on gss_inquire_context() as well.  I propose the
following specific response: expand gss_inquire_context's discussion of
GSS_S_COMPLETE, final sentence, to indicate that not only "open" must be
true but also that a context peer's name must be known in order for a name
to be returned.  (The description of the return name parameters already says
"if returned", implying an already-existing possibility that it might not
be.)  Any objections?

> (2) use of incomplete security contexts for message (un)protection
>     due to the "prot_ready_state" indicator.
> 
>     The current wording in both rfc2078 (section 1.2.7) says that
>     both: message protection and message UNprotection will become
>     available when prot_ready_state is returned by a context
>     establishment call. 
> 
True.  The existing 2078bis text states that TRUE prot_ready_state is
sufficient to enable usage not only of GSS_Wrap() and GSS_GetMIC() but also
of GSS_Unwrap() and GSS_VerifyMIC().

>     I'm somewhat uncomfortable with message UNprotection being
>     available before the security context is successfully
>     established.  Since we don't make any restrictions on the
>     number of message protection calls an application can do
>     at this stage, the application could theoretically exchange
>     thousands of protected messages before completing completing
>     security context establishment (or even skip context establishment).
> 
>     And what are the semantics when the security context establishment
>     fails after messages have been unprotected and processed?  It's
>     already to late, the gssapi can not roll back application actions
>     based on the unprotected messages.
> 
I'm not sure that I see this as a problem.  If the application uses
per-message unprotection upon TRUE prot_ready_state before GSS_S_COMPLETE,
it's doing so based on the information which is available at that point;
once returned, only mech_type (I believe) is liable to change upon a later
call in the context established sequence.  There's already a warning that
mutual authentication isn't guaranteed until GSS_S_COMPLETE, and the
anonymity service is a special case of its own; applications which require
services or information which aren't guaranteed until GSS_S_COMPLETE are
limited in their ability to exploit the prot_ready_state optimization. 

>     Personally, I would really appreciate if we spec'd that message
>     UNprotection becomes available only after the local security
>     context establishment call has returned GSS_S_COMPLETE.  This
>     should still satisfy Bob Blakley's original requirement,
>     which triggered the inclusion of prot_ready support in 1995.
> 
Rather than introducing a new prohibition at this point (which might be
unnecessarily strict against some valid circumstances), I'd suggest instead
that we assume (strengthening warnings if necessary) that applications
dependent on context data unavailable before GSS_S_COMPLETE will constrain
their use of the prot_ready_state facility accordingly. 

> (3) mech_type return value from gss_init_sec_context() (and
>     gss_accept_sec_context()), especially when a call fails with an error.
> 
>     It has been mostly discussed on the CAT list around March 27th, 1997
>     between Marc Horowitz and John Wray for errors during
>     gss_accept_sec_context(), but not for gss_init_sec_context().
> 
>     The problem gets more complex with the presence of a negotiation
>     mechanism, in which case the returned mech_type from the inital
>     call to gss_init_sec_context() will differ from the mech_type
>     on the final call.
> 
>     How about an alignment to both documents that says basically:
>     whenever a context establishment call fails with a minor_error!=0
>     it shall return an actual_mech_type / mech_type that can be
>     used to translate the minor_status value via
>     gss_display_status( GSS_C_MECH_CODE, minor_status, mech_type )
> 
The current situation for gss_init() and gss_accept() is that mech_type must
be valid on GSS_S_COMPLETE and may also be valid (though potentially
changeable for future calls) along with GSS_S_CONTINUE_NEEDED.  If/when an
OID is returned, the caller isn't expected to release it. Can we state
simply that a mech_type shall also be returned if determinable in
conjunction with fatal error cases, recognizing that there can also be cases
where no supported mechanism can be identified (e.g., upon GSS_S_BAD_MECH)?
Would anyone object to this (or, if so, what about a recommendation rather
than a requirement?)? If the mechanism isn't supported, it doesn't seem
likely that an implementation would generate minor status codes
corresponding to the unsupported mechanism. 

>     This is an exception to the C-Bindings rule that says that
>     (pointer) output parameters will be cleared when a routine
>     returns with a fatal error.
> 
>  
> -Martin
> 
--jl


Note Well: Messages sent to this mailing list are the opinions of the senders and do not imply endorsement by the IETF.

Note: Messages sent to this list are the opinions of the senders and do not imply endorsement by the IETF.