哪种主机密钥算法最适合用于 SSH?

信息安全 加密 SSH RSA 不对称 电子抄送
2021-08-28 21:52:34

当您第一次连接到known_hosts文件中未包含的 SSH 服务器时,您的 SSH 客户端会显示服务器提供的公钥的指纹。我从这个问题here中发现,作为客户端,您可以指定您想要的主机目录ssh_config中的哪个公钥对。/etc/ssh/

ssh_config手册页我发现当前的默认值如下:

    ecdsa-sha2-nistp256-cert-v01@openssh.com,
    ecdsa-sha2-nistp384-cert-v01@openssh.com,
    ecdsa-sha2-nistp521-cert-v01@openssh.com,
    ssh-ed25519-cert-v01@openssh.com,
    ssh-rsa-cert-v01@openssh.com,
    ssh-dss-cert-v01@openssh.com,
    ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,
    ecdsa-sha2-nistp521,ssh-ed25519,
    ssh-rsa,ssh-dss

直到最近,我的 SSH 服务器才向我发送 ECDSA 指纹而不是 RSA,但我想知道如果它重要,我应该选择哪种算法?

本文声称 ECDSA 是the old elliptic-curve DSA implementation that is known to have severe vulnerabilites 我应该使用 RSA 还是最新的 ed25519 算法?

3个回答

由于算法处于不断变化的状态,我发现使用ssh-audit工具(在 Github 上可用)(这里是更新的分支)非常有用。

当前但安全的 SSH 设置的示例输出如下所示:

# general
(gen) banner: SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u3
(gen) software: OpenSSH 6.7p1
(gen) compatibility: OpenSSH 6.5+, Dropbear SSH 2013.62+
(gen) compression: enabled (zlib@openssh.com)

# key exchange algorithms
(kex) curve25519-sha256@libssh.org          -- [info] available since OpenSSH 6.5, Dropbear SSH 2013.62
(kex) diffie-hellman-group-exchange-sha256  -- [warn] using custom size modulus (possibly weak)
                                            `- [info] available since OpenSSH 4.4

# host-key algorithms
(key) ssh-ed25519                           -- [info] available since OpenSSH 6.5
(key) ssh-rsa                               -- [info] available since OpenSSH 2.5.0, Dropbear SSH 0.28

# encryption algorithms (ciphers)
(enc) chacha20-poly1305@openssh.com         -- [info] available since OpenSSH 6.5
                                            `- [info] default cipher since OpenSSH 6.9.
(enc) aes256-gcm@openssh.com                -- [info] available since OpenSSH 6.2
(enc) aes128-gcm@openssh.com                -- [info] available since OpenSSH 6.2
(enc) aes256-ctr                            -- [info] available since OpenSSH 3.7, Dropbear SSH 0.52
(enc) aes192-ctr                            -- [info] available since OpenSSH 3.7
(enc) aes128-ctr                            -- [info] available since OpenSSH 3.7, Dropbear SSH 0.52

# message authentication code algorithms
(mac) hmac-sha2-256-etm@openssh.com         -- [info] available since OpenSSH 6.2
(mac) hmac-sha2-512-etm@openssh.com         -- [info] available since OpenSSH 6.2
(mac) umac-128-etm@openssh.com              -- [info] available since OpenSSH 6.2
(mac) hmac-sha1                             -- [warn] using encrypt-and-MAC mode
                                            `- [warn] using weak hashing algorithm
                                            `- [info] available since OpenSSH 2.1.0, Dropbear SSH 0.28

# algorithm recommendations (for OpenSSH 6.7)
(rec) -hmac-sha1                            -- mac algorithm to remove

用于的设置/etc/ssh/sshd_config

KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
# Following MACs does not work on Mac OSX 10.10 or older
MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha1

用于的设置/etc/ssh/ssh_config

HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha1
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr

目前,

  • RSA 仍被推荐为黄金标准(强大、广泛兼容)
  • ed25519 很好(独立于 NIST,但不兼容所有旧客户端)。

服务器通常提供更多不同的主机密钥类型,因此您的目标是兼容性。客户端配置中的优先级顺序是从更强到更兼容的。

坦率地说,对于作为最终用户的您来说,这无关紧要。一些密钥可能存在一些安全问题,但没有一个被认为是完全破坏且长度合理,这可能会导致中间人攻击或类似情况。

文章提到了“严重的漏洞”,但没有具体说明。如果它有这样的服务漏洞,那么没有人会使用它,支持它,也不推荐它。没有任何参考,很难评论您的担忧。

选择算法和密钥大小

SSH 支持多种用于身份验证密钥的公钥算法。这些包括:

  • rsa- 基于大数分解困难的旧算法。建议 RSA 使用至少 2048 位的密钥大小;4096 位更好。RSA 正在变老,并且在因式分解方面取得了重大进展。选择不同的算法可能是可取的。RSA 算法很有可能在可预见的未来变得实际可破解。所有 SSH 客户端都支持此算法。

  • dsa- 一个旧的美国政府数字签名算法。它基于计算离散对数的难度。通常会使用 1024 的密钥大小。不再推荐原始形式的 DSA。

  • ecdsa- 一种由美国政府标准化的新数字签名算法,使用椭圆曲线。对于当前的应用程序来说,这可能是一个很好的算法。仅支持三种密钥大小:256、384 和 521(原文如此!)位。我们建议始终使用 521 位,因为密钥仍然很小并且可能比较小的密钥更安全(即使它们也应该是安全的)。大多数 SSH 客户端现在都支持这种算法。

  • ed25519- 这是 OpenSSH 中添加的新算法。客户端对它的支持还不是普遍的。因此,可能还不建议将其用于通用应用程序。

https://www.ssh.com/ssh/keygen/#sec-Choosing-an-Algorithm-and-Key-Size