IETF-SSH archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
RE: gss userauth
On Friday, August 22, 2003 14:41:38 -0700 Joseph Salowey
<jsalowey%cisco.com@localhost> wrote:
I'm in favor of using channel bindings for this purpose.
CCM could be one approach to do this.
http://www.ietf.org/internet-drafts/draft-ietf-nfsv4-ccm-01.txt
At first glance it seems a little complex, but I need to actaully read
the spec.
CCM actually isn't what we want. It's a way of taking an app that uses
GSSAPI's integrity and/or encryption features, and a mechanism that
provides them, and essentially ripping out the mechanism's authentication
and encryption and replacing them with that provided by some lower-layer
protocol such as IPsec, on the theory that hardware acceleration is more
likely to be available there. We don't need that functionality -- we don't
ever use GSSAPI encryption features, and we currently send exactly one
integrity-protected message (during key exchange).
What we need is a way to bind user authentication to our application
protocol's existing cryptographic context, not to some lower-layer
protocol. We don't need a special GSS mechanism for that -- all we need to
to require the client to send an integrity-protected copy (or checksum) of
the exchange hash, just as we do in other user auth mechanisms, and as we
do in the reverse direction during key exchange.
I can think of two ways of doing this:
(1) Use GSSAPI channel bindings. Unfortunately, some mechanisms require
bindings to take a particular format, as described in RFC2744 section 3.11.
In our case, we would want to use address types of GSS_C_AF_NULLADDR, since
we very much do _not_ want to bind this authentication to network protocol
addresses (that would gain nothing, and make it not work through NAT's).
We could then include the session ID as "application data".
(2) Add an additional step in which the client is required to send a MIC of
the session ID before authentication can succeed. This is essentially the
same as what we do in key exchange, but in the reverse direction.
I find myself preferring option (2) for several reasons:
- By my reading, RFC2743 does not appear to actually require that GSSAPI
mechanisms _do_ anything with channel bindings. A mechanism could just
choose to ignore them.
- RFC2743 _does_ allow mechanisms to require bindings to take a particular,
mechanism-dependent form. It does not specify what the behaviour might be
if the provided bindings are not in a format acceptable to the mechanism.
- Some mechanism might be unable or unwilling to provide integrity
protection for channel bindings, and there is no way for them to signal
this to the application. While it may be the case that a mechanism cannot
support gss_get_mic, at least there is a flag to indicate that, and we can
write appropriate requirements.
- Using a separate message means we can maintain some amount of backward
compatibility for sites that have already deployed earlier versions of this
draft. Particularly, it allows for situations in which the client
implements the new message, but the server does not.
-- Jeff
Home |
Main Index |
Thread Index |
Old Index