IETF-SSH archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: SSH_MSG_KEXGSS_HOSTKEY (was: Re: I-D ACTION:draft-weber-secsh-pkalg-none-00.txt)
On Sat, 19 Jul 2003, 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.
OK; that's fair enough. I think we have been discussing four basic
problems, and have even come to agreement on solutions for two of them.
Allow me to recap somewhat, and then we can decide where to go from here.
(1) It is desirable for GSS-API key exchange to be able to proceed
even when the server has no host key and the user's credentials have
expired. This is particularly important in the case of a rekey,
where a failure means the session will be disconnected. Ken Hornstein
reports that this problem is causing difficulties for him in deploying
ssh in his environment.
Joel Weber proposed a solution to this, in the form of an individual
internet-draft submission, draft-weber-secsh-pkalg-none-00.txt. This
proposal defines a new hostkey algorithm, to be used only during
rekey, whose semantics amount to not actually performing any signature
checking or encryption operations. While there was some initial
concern, people eventually realized that the rekey operation would be
protected by the existng encryption. It was then agreed, at least
among those who spoke up, that this should be rolled into the gsskeyex
draft.
(2) Currently, when key exchange fails for any reason, the session is
disconnected and a client which wishes to try another key exchange
method must reconnect and try again. This has the disadvantage that
any negotiation performed as part of the first connection is lost,
and particularly that the sequence of negotiations and failures that
lead to the ultimate selection of a key exchange algorithm and host
key are not properly authenticated.
To solve this problem, it has been proposed that key exchange be
allowed to fail and be retried without disconnection, using a method
that would allow the complete process to be properly authenticated.
Exactly how to do this is under discussion, but it would likely
involve a new message to be used when keyex fails, combined with one
of (a) a rev in the protocol version, (b) a backward-compatible change
to the format of the SSH_MSG_KEXINIT message, or (c) a new message to
be used in place of SSH_MSG_KEXINIT. I believe it is generally
agreed that (a) is not acceptable.
(3) There is a multi-level negotiation issue involving the negotiation of
keyex and host key algorithms. These are currently listed and
selected almost as if they were independent, when in fact that are
not; in particular, a client must choose and express its order of
preference for key exchange algorithms without regard to what host key
algorithm will be used. This makes it impossible to express cases
like that described by Joel Weber, in which one would prefer to use a
traditional DH algorithm (either group1 or group exchange) with a
pgp-* host key, but failing that, to try a mechanism like GSS-krb5
before falling back on DH using an ssh-* host key.
IMHO, this is clearly the issue with the most contention with regard
to finding a solution. There are three separate proposals under
discussion:
(a) Joel Weber's proposal of turning GSSAPI key exchange into a single
keyex algorithm with multiple host key types, and simultaneously
reversing the order of selection such that the host key type is
selected before keyex algorithm. This involves a change in
semantics which would be signalled by one of the methods described
in (2)(a), (b), or (c) above; again, I believe it is generally
agreed that (2)(a) is not acceptable.
(b) Nico Williams' proposal of inventing "alias" names for keyex
algorithms, which would be negotiated in the usual way but would
carry with them the semantics of being restricted to particular
host key types. I expanded on this to propose a general way of
constructing alias names, rather than requiring them to be
registered individually for each { keyex, host key } tuple for
which they are to be used.
(c) The third proposal (whose origin I can't recall, but it might have
been myself or Nico Williams) is to exchange a list of { keyex,
restrictions } tuples, where restrictions might include host key
algorithms or other parameters. This would involve a change in
the way in which this information is exchanged, using one of the
methods described in (2)(b) or (2)(c) above.
(4) It is desirable under certain circumstances to securely transmit to
the client a host key which was not used to authenticate the key
exchange; particularly, a key not known to the client in advance.
This is useful for bootstrapping a client's host key database using
a preexisting authentication infrastructure (PGP, PKI, Kerberos,
DNSSEC, etc), and also for allowing "rollover" when a host decides
to change its long-term key (Ken Hornstein points out that some sites
have policies which require long-term keys to be changed on a regular
basis).
The GSSAPI-based key exchange algorithms provide an optional mechanism
for this, by allowing the transport of a host key belonging to the
algorithm selected in the first steps of key exchange, and including
that key in the exchange hash. However, a more general solution is
desired, which would allow multiple keys to be transported, as well
as allowing the transport of additional host keys when using keyex
algorithms other than the GSSAPI-based ones.
My original proposal was to create a host key pseudo-algorithm which
would actually carry a list of keys, and perform encryption and
signature operations as with the first key. I have since withdrawn
that proposal, in favor of one proposed by Nico Williams, in which
a new message type is defined which can be used to transport arbitrary
host keys once the key exchange has been completed and new keys have
been taken into use.
I believe the problem described in (1) is well-understood, and the
solution is fairly clean. Barring any further discussion or objections
from the working group (which has been mostly silent on this), I will be
incorporating Joel's solution into the description of the 'null' host key
algorithm in the next version of the gsskeyex document.
I also believe the problem described in (4) is well-understood, and the
solution is again appropriate and fairly clean. However, I think some
further work is required to nail down the details. I will probably
contact Nico offline about preparing an internet-draft to document this
proposal.
(2) and (3) both involve significant changes to the protocol. I believe
these can both be done as backward-compatible extensions without holding
up the core drafts. However, I also agree that we should carefully
consider whether these problems are worth solving, particularly given the
amount of work required to specify them properly, evaluate the security
implications, and implement and test the changes.
-- Jeff
Home |
Main Index |
Thread Index |
Old Index