Extension Negotiation in the Secure Shell (SSH) Protocol
Draft of message to be sent after approval:
From: The IESG <email@example.com> To: IETF-Announce <firstname.lastname@example.org> Cc: The IESG <email@example.com>, firstname.lastname@example.org, Daniel Migault <email@example.com>, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org Subject: Protocol Action: 'Extension Negotiation in Secure Shell (SSH)' to Proposed Standard (draft-ietf-curdle-ssh-ext-info-15.txt) The IESG has approved the following document: - 'Extension Negotiation in Secure Shell (SSH)' (draft-ietf-curdle-ssh-ext-info-15.txt) as Proposed Standard This document is the product of the CURves, Deprecating and a Little more Encryption Working Group. The IESG contact persons are Kathleen Moriarty and Eric Rescorla. A URL of this Internet Draft is: https://datatracker.ietf.org/doc/draft-ietf-curdle-ssh-ext-info/
Technical Summary This memo updates RFC 4252, RFC 4253, and RFC 4254 to define a mechanism for SSH clients and servers to exchange information about supported protocol extensions confidentially after SSH key exchange. Working Group Summary The only discussion of this draft concerned some incompatibilities with the current implementations of OpenSSH 7.3/7.4 and the "server-sig-algs" extension described in the document. The issue is that 7.3 and 7.4 does not provide the full list of supported algorithms, so client that assume the full list is provided in order to narrow down the identities/keys (adaptive public key algorithm selection) to use for the authentication may not be able to find the appropriated identity. The consensus was that work around should be found when adaptive public key algorithm selection is needed and when interacting with these two implementations. Romen announced "21 May 2017 : Version x509-10.2"  that PKIX-SSH implemented such work around. He is the only one that raised this issue. Further explanation can be found in "work with broken "server-sig-algs" extension"  as well as Denis email . I am copying the text from , as I believe it provides a complete description of the issue: *Server-side situation:* OpenSSH versions before 7.5 (such as 7.3) send the "server-sig-algs" extension, but they only use it to indicate support for "rsa-sha2-512" and "rsa-sha2-256". They do not include other public key algorithms that the server supports, even though the server will accept those algorithms if they are attempted. It is intended that the server should send a complete set of accepted public key algorithms. My understanding is that OpenSSH versions 7.5 and later do this. Bitvise SSH Server has always sent a complete list. *Client-side situation:* There exist clients which have problems with OpenSSH 7.3 behavior, and clients that don't. *Clients with explicit public key configuration.* Bitvise SSH Client does not have a problem with this behavior, because it does not use public keys opportunistically. Our SSH Client will use a public key to authenticate only if the key is explicitly configured by the user. It will use only the requested key, and not other keys that it may find in various places of storage. As a result, our SSH Client has no use for a hint from the server about which key types are OK to use. It already knows the key it's going to use. The question is what signature algorithm (now renamed "public key algorithm") to use with that key. For this purpose, the information sent by OpenSSH is sufficient, regardless of version. For RSA keys, the "server-sig-algs" extension provides the info. For non-RSA keys, there's only one algorithm possible anyway, so we use it. *Clients with opportunistic key search.* Other SSH clients, including OpenSSH and PKIXSSH (Roumen's work) do not require a public key to be explicitly configured in order to be used. Such clients perform an opportunistic search, and try to use any and all keys that might work that can be found in various places of storage. This includes the user's .ssh directory, keys available via the SSH agent protocol, and keys specified on the command line. These types of clients have a problem, because: - In OpenSSH versions 7.5 and higher, the client can use the list of algorithms sent in the server's "server-sig-algs" extension to narrow down the public keys it's going to try. If the server doesn't list ECDSA or DSA, for example, the client can take that as authoritative, and can exclude those keys from authentication. This is nice because it may involve trying fewer keys. - In OpenSSH version 7.3, the server will only send "rsa-sha2-256" and "rsa-sha2-512", even if the server also accepts ECDSA and other algorithms. This means the client needs to have explicit treatment to detect the OpenSSH protocol version. If the OpenSSH version is older than 7.5, "server-sig-algs" can still be used to enable the use of "rsa-sha2-XXXX" instead of "ssh-rsa", but it cannot be used to exclude non-RSA keys in authentication. *Options:* *(A) Rename extension.* Roumen has requested that we rename the "server-sig-algs" extension and make it clear that the server must send all algorithms it will accept. I think this is not the best thing to do for the following reasons: - There are multiple implementations of this extension which are not impacted by the OpenSSH 7.3 issue. These implementations would suffer from the rename. - Implementations that are impacted by the OpenSSH 7.3 issue may still have a requirement to interoperate with OpenSSH 7.5, as well as other servers that currently send "server-sig-algs" with a complete list of algorithms. For such implementations, renaming the extension is again not a fix, but a further complication. *(B) Workaround by clients that need it.* My suggestion is that clients that use opportunistic key search, and wish to interoperate with OpenSSH 7.3, should implement a compatibility workaround for the way "server-sig-algs" is sent by that version. I think this is the better solution for the following reasons: - There are multiple implementations which are already not affected by the issue, whether communicating with OpenSSH or between themselves. In this case, those implementations do not need to change anything. - The work required for clients with opportunistic key search is similar to the work required in above option A), *assuming *those clients want to interoperate with OpenSSH 7.5+ and other existing servers that send "server-sig-algs" with a complete list of algorithms. On May 21 Romen has implemented the work around : work with broken "server-sig-algs" extension Server extension "server-sig-algs" was not implemented properly in OpenSSH 7.3 and 7.4. New version detect broken servers and replaces incorrect algorithm announcement with correct list. For instance OpenSSH 7.3 list only algorithms rsa-sha2-256 and rsa-sha2-512. As result PKIX-SSH functionality for "adaptive public key algorithm selection" in connection to OpenSSH 7.3 skips all other identities except those with RSA key. Document Quality From the non up-to-date SSH implementation comparison , as well from the author/implementer of the draft that the following SSH implementations implement the draft: - Bitvise SSH Server and Client - OpenSSH - AsyncSSH - SmartFTP In addition, Romen the implementer of PKIX-SSH provided significant clarification of the document and the release note of "21 May 2017 : Version x509-10.2" suggests PKIX-SSH supports the current draft. This may be updated regarding the necessity of "adaptive public key algorithm selection"  http://ssh-comparison.quendi.de/comparison/hostkey.html  http://roumenpetrov.info/secsh/index.html Personnel Daniel Migault is the Document Shepherd and Eric Rescorla is the Responsible Area.