diffie-hellman-group-exchange-sha256 的 modp 长度是多少?

信息安全 SSH 密码学
2021-08-23 11:24:14

OpenSSH 6.2 默认提供以下密钥交换算法

ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
diffie-hellman-group-exchange-sha256
diffie-hellman-group-exchange-sha1
diffie-hellman-group14-sha1
diffie-hellman-group1-sha1

前三个的群体规模是显而易见的。最后两个也是如此。但尚不清楚这两种算法属于哪一组

diffie-hellman-group-exchange-sha256
diffie-hellman-group-exchange-sha1

操作。很难接受这样一个重要的安全点是无证的。RFC 4419 对此一无所知,openSSH 的联机帮助页也是如此。有人可以对此有所了解吗?

1个回答

DH 群由素数模数和生成元定义。生成素数模数有点昂贵,因此OpenSSH一般不会这样做。相反,sshd将在收到连接后使用/etc/ssh/moduli文件中的组之一。该文件包含各种大小的预先生成的模数。你可以使用 OpenSSH 提供的,或者使用 ; 生成你自己的ssh-keygen查看手册页(使用与其他人相同的组没有安全问题,但是,出于某种心理原因,一些系统管理员在生成自己的模数时会体验到更高的安全性)。

在 OpenSSH 源代码中,实际的选择过程是在文件中的choose_dh()函数中dh.c粗略地说,如果客户端想要至少min bits,最多max bits,最好是n bits,那么服务器将在min..max范围内的模数中进行选择;它将尝试获得超过n的最小模量,如果没有,则获得它具有的最大模量(当然,仍在min..max范围内)。如果服务器找到多个具有相同“最佳”长度的模数,则它会随机选择一个。如果服务器知道min..max范围内没有模数,则连接失败。

/etc/ssh/moduli至少在我的服务器上,默认值的模数似乎为 1023 到 8191 位。