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