将自定义SSH DH组部署到仅客户端系统有任何安全性好处吗?


16

针对SSH的与Logjam相关的攻击的一种建议的缓解策略是,使用类似以下的方法生成自定义的SSH Diffie-Hellman组:

ssh-keygen -G moduli-2048.candidates -b 2048
ssh-keygen -T moduli-2048 -f moduli-2048.candidates

然后用输出文件替换系统范围的模数文件moduli-2048。(ssh-keygen -G用于生成候选DH-GEX素数,并ssh-keygen -T测试生成的候选安全性。)

显然,这在SSH服务器上是很合理的事情,否则将使用众所周知的组来很好地进行预计算,但是将自定义SSH DH组部署到仅客户端系统上是否有安全方面的好处?(也就是说,连接到SSH服务器,但从不充当SSH服务器的系统。)

我主要对与Linux上的OpenSSH有关的答案感兴趣,但是也希望您能获得更多通用的答案。

Answers:


18

如果确实需要,您可以,但我不会为OpenSSH重新生成2048位DH参数。要保护SSH安全,还需要做更多重要的事情,例如禁用弱加密

做的是删除现有的这低于2048位。

awk '$5 >= 2000' /etc/ssh/moduli > /etc/ssh/moduli.strong && \
mv /etc/ssh/moduli.strong /etc/ssh/moduli

如果您没有注意到,OpenSSH会附带大量预生成的模数,​​一直到8192位。尽管我们今天确实担心1024位素数,但人们认为在可预见的将来2048位素数是安全的。虽然这种情况最终会改变,但可能会在下周出现,但是在我们成为养老金领取者之后,很可能会持续很长时间……

ssh-keygen手册页中也有这个奇怪的地方:

重要的是,此文件包含一定范围的位长度的模,并且连接的两端共享公共模。

这似乎反对替换现有模数,尽管它并没有真正提供这样做的实际原因。


相关:Diffie-Hellman密码学的两面都使用了不同的模数。据我有限的理解,似乎如果不存在所需长度的共享模数,则在通常情况下,具有该长度的组的Diffie-Hellman是不可能的,在任何特定情况下都不可能。因此,在两个端点之间共享模数是Diffie-Hellman密钥交换协议的数学要求,并且尝试在没有公共模数的两个端点之间执行Diffie-Hellman密钥交换将失败。
CVn

2
RFC 4419 [ tools.ietf.org/html/rfc4419]正是为了允许服务器提供自定义的DH参数。服务器将其候选参数发送给客户端,如果客户端同意,双方将使用服务器提供的参数来生成用作会话密钥的共享秘密。因此,如果服务器和客户端的模数文件中没有相同的条目,那将是非常好的。
布莱恩·明顿

2

答案是:不。没有好处。:)

/etc/ssh/moduli 文件仅用于服务器端。

您无需为SSH客户端担心该文件:

您可以跟踪SSH客户端的执行情况,并检查它没有打开该文件。

$ strace -e openat ssh user@localhost
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.