IETF-SSH archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
SSH key algorithm updates
On Thu, 2015-10-29 at 23:53 -0700, Mark D. Baushke wrote:
> Hi denis,
>
> Should this Draft RFC also be the one that moves the "ssh-dss" public
> key algorithm from a "REQUIRED" and "MUST" implement algorithm to
> an "OPTIONAL" and "SHOULD NOT" implement algorithm?
>
> As things stand right now with RFC4253, the only REQUIRED algorithm is
> "ssh-dss" and I do not believe that it is a good idea to leave it in
> that state.
Agreed. In fact, we probably should undertake a general updating of
recommended and required crypto algorithms across the protocol. A
number of new algorithms have been defined over time, but none of them
is REQUIRED and none of the old ones have been downgraded.
My suggestion would be to publish a document which updates RFC4253 with
a new set of requirements and recommendations for algorithms. It should
include tables listing key exchange, encryption, MAC, and public key
algorithms, showing the current state (REQUIRED, RECOMMENDED, OPTIONAL,
NOT RECOMMENDED) of each algorithm. I've included below a table showing
the current state of all registered algorithms, as far as I've been able
to determine, along with some proposals for changes.
To summarize the changes, I propose:
For public key algorithms:
- Downgrade ssh-dss, pgp-sign-dss, and x509v3-ssh-dss to NOT
RECOMMENDED.
- Upgrade ssh-rsa to REQUIRED
- Upgrade ecdsa-sha2-* to RECOMMENDED
- Add dsa-sha2-256 as RECOMMENDED
Since ssh-rsa has always been RECOMMENDED and is very widely deployed,
it not only is a good candidate for upgrade to REQUIRED, but also
justifies downgrading ssh-dss directly from REQUIRED to NOT RECOMMENDED.
If we're going to downgrade DSS, we should do it across the board.
Perhaps Denis wants to add pgp-sign-dsa-sha2-256 and/or
x509v3-dsa-sha2-256 to his document.
Both larger-key DSA and ECDSA are viable algorithms, and there is some
benefit to having multiple algorithms which are widely implemented,
since public keys tend to have long lifetimes and be difficult to
upgrade if there is a crisis. Thus, I think it's reasonable to list
both of these as RECOMMENDED and would probably not object to listing
one of them as REQUIRED (in addition to ssh-rsa).
For MAC algorithms:
- Upgrade hmac-sha2-256 to REQUIRED
- Consider upgrading hmac-sha2-512 to RECOMMENDED
- Downgrade hmac-md5 and hmac-md5-96 to NOT RECOMMENDED
- Downgrade hmac-sha1-96 to NOT RECOMMENDED
- Consider downgrading hmac-sha1 to RECOMMENDED
HMAC-SHA1 is not (yet) considered insecure, it has been SSHv2's only
required algorithm since RFC 425x were published, and it is probably the
most widely deployed. So, we should not downgrade it below RECOMMENDED.
However, I think a case can be made for hmac-sha2-256 replacing it as
the REQUIRED algorithm, if we think that has gained enough traction.
For encryption algorithms:
- Upgrade aes128-ctr to REQUIRED
- Consider downgrading 3des-cbc to RECOMMENDED
- Downgrade all other *-cbc algorithms to NOT RECOMMENDED
- Do we want to say anything about IDEA, CAST, or RC4?
Downgrading the CBC modes should be obvious. Similarly, it should be
clear that we should upgrade one of the AES counter variants to take its
place. I chose aes128-ctr because RFC4253 listed aes128-cbc as
RECOMMENDED while leaving the other sizes OPTIONAL. I suspect this was
done because at the time, some folks did not want to ship AES256 due to
export restrictions and/or lack of utility. Today, we may want to
reconsider this position and REQUIRE aes256-ctr instead of aes128-ctr.
Unfortunately, I don't have a good idea how widely implemented these
are.
We may wish to consider leaving 3des-cbc at SHOULD, with a
recommendation that it be disabled by default, especially in servers.
If implementors all remove this, then users may be stuck unable to
access embedded and other old devices which cannot be upgraded. This
has been a serious problem for people trying to access web-based
management interfaces of older devices, as browsers and TLS stacks have
done things like removing support for smaller DH groups and objecting to
certificates with smaller key sizes.
Finally, for key exchange algorithms:
- Upgrade diffie-hellman-group-exchange-sha256 to REQUIRED
- Upgrade ecdh-sha2-* to RECOMMENDED
- Consider downgrading diffie-hellman-group14-sha1 to RECOMMENDED
- Downgrade other diffie-hellman-*-sha1 to NOT RECOMMENDED
- Downgrade rsa1024-sha1 to NOT RECOMMENDED
Again, eliminating the SHA1-based DH algorithms in favor of GEX SHA256
should be obvious, but there is the question of interoperability with
existing deployments. Thus, we may want to consider leaving group1 or
group14 at SHOULD, with a recommendation that it be disabled by default
in servers.
If we're going to de-recommend SHA1 (outside of HMAC), we should do so
across the board. Unfortunately, sha256-based versions of the GSSAPI
key exchanges have not yet been defined or implemented. Since no
replacement is available, deprecating them is premature. It would
probably be good to update RFC4462, but even after an update is
published, it will probably be a while before the new version is widely
implemented enough to downgrade the old.
Analogous to the public key algorithms, ECDH is a viable algorithm, so
IMHO it makes sense to upgrade to RECOMMENDED.
> Or, is this better left to another RFC? Perhaps moving the Ed25519
> algorithm created by
>
> https://tools.ietf.org/html/draft-irtf-cfrg-eddsa-00
>
> into a MUST algorithm while deprecating "ssh-dss" for SSH?
That's an unfinished, -00 version internet draft from CFRG. It's
probably too soon to use it as the basis for an SSH public key algorithm
at all, let alone make such an algorithm mandatory to implement. Once
the document is ready, we can start with OPTIONAL, and consider
upgrading when the algorithm has proven itself and is reasonably widely
implemented in SSH.
-- Jeff
Type Current Proposed RFC Name
==== ========== ========== ==== ========================================
kex MUST SHOULD NOT 4253 diffie-hellman-group1-sha1
kex MUST SHOULD? 4253 diffie-hellman-group14-sha1
kex MAY SHOULD NOT 4419 diffie-hellman-group-exchange-sha1
kex MAY MUST 4419 diffie-hellman-group-exchange-sha256
kex MAY SHOULD NOT 4432 rsa1024-sha1
kex MAY 4432 rsa2048-sha256
kex MAY 4462 gss-group1-sha1-*
kex MAY 4462 gss-group14-sha1-*
kex MAY 4462 gss-gex-sha1-*
kex MAY(+) SHOULD 5656 ecdh-sha2-*
kex MAY 5656 ecmqv-sha2-*
Type Current Proposed RFC Name
==== ========== ========== ==== ========================================
enc MUST SHOULD? 4253 3des-cbc
enc MAY SHOULD NOT 4253 blowfish-cbc
enc MAY SHOULD NOT 4253 twofish256-cbc
enc MAY SHOULD NOT 4253 twofish-cbc
enc MAY SHOULD NOT 4253 twofish192-cbc
enc MAY SHOULD NOT 4253 twofish128-cbc
enc MAY SHOULD NOT 4253 aes256-cbc
enc MAY SHOULD NOT 4253 aes192-cbc
enc SHOULD SHOULD NOT 4253 aes128-cbc
enc MAY SHOULD NOT 4253 serpent256-cbc
enc MAY SHOULD NOT 4253 serpent192-cbc
enc MAY SHOULD NOT 4253 serpent128-cbc
enc MAY SHOULD NOT 4253 arcfour
enc MAY SHOULD NOT 4253 idea-cbc
enc MAY SHOULD NOT 4253 cast128-cbc
enc SHOULD NOT 4253 none
enc ??? ---- des-cbc
enc SHOULD MUST? 4344 aes128-ctr
enc SHOULD 4344 aes192-ctr
enc SHOULD 4344 aes256-ctr
enc SHOULD 4344 3des-ctr
enc MAY 4344 blowfish-ctr
enc MAY 4344 twofish128-ctr
enc MAY 4344 twofish192-ctr
enc MAY 4344 twofish256-ctr
enc MAY 4344 serpent128-ctr
enc MAY 4344 serpent192-ctr
enc MAY 4344 serpent256-ctr
enc MAY ??? 4344 idea-ctr
enc MAY ??? 4344 cast128-ctr
enc MAY ??? 4345 arcfour128
enc MAY ??? 4345 arcfour256
enc MAY 5647 AEAD_AES_128_GCM
enc MAY 5647 AEAD_AES_256_GCM
Type Current Proposed RFC Name
==== ========== ========== ==== ========================================
mac MUST SHOULD? 4253 hmac-sha1
mac SHOULD SHOULD NOT 4253 hmac-sha1-96
mac MAY SHOULD NOT 4253 hmac-md5
mac MAY SHOULD NOT 4253 hmac-md5-96
mac SHOULD NOT 4253 none
mac MAY 5647 AEAD_AES_128_GCM
mac MAY 5647 AEAD_AES_256_GCM
mac SHOULD MUST 6668 hmac-sha2-256
mac MAY SHOULD? 6668 hmac-sha2-512
Type Current Proposed RFC Name
==== ========== ========== ==== ========================================
pk MUST SHOULD NOT 4253 ssh-dss
pk SHOULD MUST 4253 ssh-rsa
pk MAY 4253 pgp-sign-rsa
pk MAY SHOULD NOT 4253 pgp-sign-dss
pk ??? ???? spki-sign-rsa
pk ??? ???? spki-sign-dss
pk MAY 4462 null
pk MAY(+) SHOULD 5656 ecdsa-sha2-*
pk MAY SHOULD NOT 6187 x509v3-ssh-dss
pk MAY 6187 x509v3-ssh-rsa
pk MAY 6187 x509v3-rsa2048-sha256
pk MAY 6187 x509v3-ecdsa-sha2-*
(+) "SSH ECC implementations" (i.e., those that implement RFC5656)
are required to implement the ecdsa-sha2-* public key algorithms
and the ecdh-sha2-* kex algorithms, but not the ecmqv-sha2-* kex
algorithm. Furthermore, only certain curves are required.
Home |
Main Index |
Thread Index |
Old Index