OpenSSH 服务器是否使用 2048 位的后备硬编码 DH 参数?

信息安全 diffie-hellman 打开sh
2021-09-05 21:35:33

我正在玩弄 OpenSSH 配置并研究 Diffie-Hellman 参数。我正在使用 GDSSecurity 的工具检查 DH 设置,并使用此页面查看其他 SSH 设置。

为了有趣,我从以下位置删除了所有小于 4096 位的模数/etc/ssh/moduli

$ awk '{print $5}' /etc/ssh/moduli | sort | uniq
4095
6143
8191

如果客户端仅接受 2048 位或 3072 位组,我希望密钥交换应该失败。有趣的是,它并不能在后一种情况下,但前,2048位情况。

KEX proposal client: diffie-hellman-group-exchange-sha256
KEX proposal server: curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
KEX algorithm chosen: diffie-hellman-group-exchange-sha256
KEX client group sizes: min = 2048, nbits = 2048, max = 2048
KEX server-chosen group size in bits: 2048
Warning: Permanently added 'test,x.x.x.x' (ED25519) to the list of known hosts.
KEX proposal client: diffie-hellman-group-exchange-sha256
KEX proposal server: curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
KEX algorithm chosen: diffie-hellman-group-exchange-sha256
KEX client group sizes: min = 3072, nbits = 3072, max = 3072
ssh_dispatch_run_fatal: Connection to x.x.x.x: DH GEX group out of range

上述站点还声称使用 2048 位组进行了成功的密钥交换。

我对 SSH 协议或 OpenSSH 的细节知之甚少,无法理解这里发生了什么。如果模数文件中没有合适的组可用,OpenSSH 是否使用回退参数?

1个回答

备用 DH 组在此处的源代码中定义当前组可以是 2k 或 4k。但这真的取决于您使用的是哪个版本(最近有一些变化)。

请注意RFC 4419,它指定:

服务器和客户端应该支持模数长度为 k 位的组,其中 1024 <= k <= 8192。min 和 max 的推荐值分别为 1024 和 8192。

以及未来openssh-7.2的最新发行说明

  • ssh(1), sshd(8):将 diffie-hellman-group-exchange 支持的最小模数增加到 2048 位。