IETF-SSH archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
KEX problems
On Sat, Jul 19, 2003 at 01:29:16PM -0400, Bill Sommerfeld wrote:
> So, I'd like to call for a general moratorium on such proposals until
> such time as we have a clear statement of why anything NEEDS to be
> changed, and a clear understaning of the requirements of any such
> change so we can figure out the path of least resistance.
There are two, well, three problems that we've been discussing. These
are all related only in that they have something to do with key
exchanges.
The problem statement:
A. Key Exchange and Host Authentication Preference Expressibility
This is a very unlikely problem that occurs under the following
circumstances:
- the client can support the use of three or more host
authentication infrastructures
and
- at least two of those host authentication infrastructures are
based on public key based using the dh-group1-sha1 or
dh-group-exchange-sha1 key exchange methods
and
- at least one of those host authentication infrastructures is not
based on host public keys usable with the dh-group1-sha1 or
dh-group-exchange-sha1 key exchange methods
The problem then is that some preferences cannot be expressed with
the current KEXINIT message and algorithm negotiation algorithm.
One example given to the list was one where the client wishes to
offer the following preference:
- diffie-hellman-group1-sha1 w/ pgp-* host keys
- gss-group1-sha1-*
- diffie-hellman-group1-sha1 w/ ssh-* host keys
IMO, the proximate causes of this problem is the conflation of raw
key exchange methods (DH) with host authentication methods (e.g.,
ssh-rsa, pgp-dss, x509v3-sign-rsa, ...) and the expectation that all
host authentication methods would be based on public key
cryptosystems.
Thus draft-ietf-secsh-gsskeyex defines its own key exchange method
which is based on DH because the ones defined in the transport I-D
are not appropriate since there is no way to fit in the GSS-API to
authenticate the server. A separate gss-group-exchange-sha1-* key
exchange method will eventually be needed also, adding more
duplication This too is a result of the conflation of key exchange
and host authentication methods in draft-ietf-secsh-transport.
A generic key exchange method based on DH plus a generic message
exchange for server authentication would have allowed both, the use
of public keys and the use of the GSS-API to authenticate the server
to the client and prove that there's no man-in-the-middle. It is
years too late to consider this in any way other than academically.
I do not propose that we solve this problem by starting from scratch. In
fact, I do not propose solving this problem unless we also want to
solve (B) - see below.
B. Key Exchange Should be Re-Triable
SSHv2 clients and servers must commit to undertaking a single initial
key exchange method per-connection and disconnect if that method
fails.
In the case of public key / certificate based host authentication
algorithms the client might well refuse to accept the server's keys
once the client knows what they are, but by then the key exchange
cannot be re-tried.
This problem too is unlikely (though I myself have experienced it
plenty, mostly in situations where a server had multiple identities
but the server's GSS-API implementation did not support the full
range of GSS_C_NO_CREDENTIAL/GSS_C_NO_NAME semantics and the SSHv2
server software did not fully support virtualization).
C. Distribution of Authenticated Servers' Other Keys
Draft-ietf-secsh-gsskeyex allows servers to send one, and only one
public host key to clients protected by the gss-group1-sha1-... key
exchange. The I-D should have allowed for hosts to tell clients of
all their host keys - but then, this feature should be not be
specific to the GSS key exchange method, it should be available in
all cases after key exchange succeeds.
IMO, problem (B) is the problem most worth solving, but it requires
extending the key exchange phase of the protocol, one way or another.
IMO, problem (C) is the simplest to solve and does not require modifying
the key exchange part of the protocol.
IMO, problem (A) is the problem least worth solving, but if we solve (B)
then we should consider solving (A) as well.
IMO, problems (A) and (B) can be solve backwards compatibly through
extensions to the KEXINIT message (see its 'reserved' field). For this
we'd need draft-ietf-secsh-transport to have some text describing the
meta-semantics KEXINIT extensions and their negotiation so that problems
(A) and (B) can be solved in a separate I-D. I will submit a last call
comment on this point.
Cheers,
Nico
--
Home |
Main Index |
Thread Index |
Old Index