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

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

默认情况下,在我当前的版本(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

通过测试,我注意到,至少使用相同版本的 OpenSSH 客户端(6.9p1),无论客户端的密钥类型如何,主机都会使用 ECDSA 密钥。

OpenSSH 在哪里决定所支持的算法的优先级?这些信息是可编辑的,还是硬编码到当前版本的源代码中?

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

答案1

顺序由客户端使用配置选项选择HostKeyAlgorithms。我的系统上的默认顺序(根据手册页)是:

  1. [电子邮件保护]
  2. [电子邮件保护]
  3. [电子邮件保护]
  4. [电子邮件保护]
  5. [电子邮件保护]
  6. [电子邮件保护]
  7. [电子邮件保护]
  8. [电子邮件保护]
  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 [email protected]

答案2

更重要的是,为什么 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 位的曲线

相关内容