OpenSSH 如何决定使用哪个主机密钥?

IQA*_*eas 9 ssh openssh rsa dsa

默认情况下,在我当前的版本 ( 6.9p1) 中,OpenSSH Server 将创建四种类型的主机密钥:

$ ls /etc/ssh/ssh_host_*_key.pub
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key.pub
Run Code Online (Sandbox Code Playgroud)

通过测试,我注意到,至少在使用相同版本的 OpenSSH 客户端 ( 6.9p1) 时,主机将使用 ECDSA 密钥,而不管客户端的密钥类型如何。

OpenSSH 在哪里决定支持的算法具有哪个优先级?此信息是否可编辑或硬编码到当前版本的源代码中?

更重要的是,为什么 OpenSSH 决定优先考虑 ECDSA 算法?

Tho*_*mas 9

订单由客户端使用HostKeyAlgorithms配置选项选择。我的系统上的默认值(根据联机帮助页)是:

  1. ecdsa-sha2-nistp256-cert-v01@openssh.com
  2. ecdsa-sha2-nistp384-cert-v01@openssh.com
  3. ecdsa-sha2-nistp521-cert-v01@openssh.com
  4. ssh-ed25519-cert-v01@openssh.com
  5. ssh-rsa-cert-v01@openssh.com
  6. ssh-dss-cert-v01@openssh.com
  7. ssh-rsa-cert-v00@openssh.com
  8. ssh-dss-cert-v00@openssh.com
  9. ecdsa-sha2-nistp256
  10. ecdsa-sha2-nistp384
  11. ecdsa-sha2-nistp521
  12. ssh-ed25519
  13. ssh-rsa
  14. ssh-dss

要覆盖它,请执行以下操作:

ssh -oHostKeyAlgorithms=ssh-ed25519 user@foo.com

  • 要查找的相关手册页是 [ssh_config(5)](https://man.openbsd.org/ssh_config)。 (2认同)

Mar*_*iae 5

更重要的是,为什么 OpenSSH 决定优先考虑 ECDSA 算法?

ECDSA 是在 openssh 5.7 版本中引入的,您可以在此处找到发行说明。特别指出:

按照 RFC5656 的规定,实现密钥交换 (ECDH) 和主机/用户密钥 (ECDSA) 的椭圆曲线加密模式。在相同的等效对称密钥长度以及更短的密钥下,ECDH 和 ECDSA 比普通 DH 和 DSA 提供更好的性能。

…………

支持使用新 ECDSA 密钥类型的证书主机和用户密钥 - ECDSA 密钥可以经过认证,并且 ECDSA 密钥可以充当 CA 来签署证书。

当客户端和服务器都支持时,256 位曲线字段中的 ECDH 是首选密钥协商算法。首次学习主机密钥时,首选 ECDSA 主机密钥,或者可以使用 ssh-keyscan(1) 学习。

此外,RFC 5656指出:

许多估计认为 2^80-2^90 次操作是不可行的,因此建议使用至少 160-180 位的椭圆曲线。本文档中所需的曲线是 256 位、384 位和 521 位曲线;实现不应使用小于 160 位的曲线