OpenSSH:基于密钥的授权,最大密钥长度


9

我正在Windows上使用具有基于密钥的身份验证的Putty来访问一些我的服务器。

使用〜3700位密钥,它完全可以正常工作,但是使用〜17000位密钥,它在客户端认为大概20秒,然后只说“拒绝访问”并要求输入密码。

OpenSSH中是否存在基于密钥的身份验证的密钥长度限制或超时?

我知道使用这么大的键并没有太多实际意义,尤其是在看这20秒的计算时,只是试图解决我面临的任何问题:-)...


我已经看到一些类似的问题发生在某些OpenSSH版本上,我通过使用密钥长度(是2的幂)来解决此问题。
kasperd 2015年

Answers:


9

有一次,我调查了Diffie-Hellman密钥的OpenSSL来源,发现DH密钥的大小有“任意”的10K限制。我更改了测试源,并发现它可行。我向作者写了一个bug,他们回答说,这是设计意图,目的是通过使用大量密钥来防止DoS。

在OpenSSH中看到类似的东西也不会令我感到惊讶。


5

协议中没有定义最大密钥大小或超时(或者至少没有达到您的要求),但是实现可能不支持这么长的密钥。对于17kbit RSA密钥,使用私钥的20秒处理时间听起来并不高。然后,服务器可能不希望在未经身份验证的用户身上花费过多的计算能力:拒绝很大的密钥可以防止DoS攻击。

目前,对于RSA密钥,认为2048位是合理的。4096位比必需的高,但通常受支持;除此之外,如果某些程序拒绝密钥,您也不会感到惊讶。


这种保护看起来很合理。它在源代码中是可调的还是硬编码的?
BarsMonster 2010年

手册中对此没有任何选择,因此任何限制都必须在源代码中。就是说,我不知道是否真的有保护,我只是想拥有一个保护是合理的。我怀疑AndreasM的答案更接近目标。
吉尔(Gilles)'所以

3

您是否能够在预期的目标系统上生成该大小的密钥?您可能会遇到限制所支持的内容。我的当前Centos系统最多支持16k的最大值,这似乎足以应付大量的密钥。如果您尝试使用ssh-keygen超过最大值,则应该看到最大值,如下所示。

[nathan@omni ~]# ssh-keygen -t rsa -b 32768
key bits exceeds maximum 16384

与Debian 8.2相同。我的上网本可能会花相当长的一段时间才能生成此16384位密钥……我为笑而做的事情。
underscore_d 2015年

在基于MinGW的Windows 7的“ Git Bash”上也是如此。
user1364368 '16

在OpenSuse Leap 42.1上也相同。
user1364368 '16

1

openssh服务器具有LoginGraceTime设置。从手册页:

The server disconnects after this time if the user has not suc-
cessfully logged in.  If the value is 0, there is no time limit.
The default is 120 seconds.

如果将其设置为20秒,则可能是达到的极限。

疯狂的猜测:腻子本身也可能有此限制,以为如果客户端对公钥身份验证的处理花费了这么长时间,那肯定是错误的。


我也这么认为,并将LoginGraceTime设置为1200,控制台中显示错误消息,所以我怀疑这是Putty中的问题……
BarsMonster 2010年

1
检查服务器日志。使用这样的密钥大小,我得到:RSA_public_decrypt failed:error:04067069:lib(4):func(103):reason(105)。(显然是因为密钥大小。)我将尝试使用2 ^ n密钥。
AndreasM 2010年

1
16384位似乎有效。有关32kbit的结果,请参见hermann-uwe.de/blog/… :)
AndreasM,2010年

1
您的致命权利:发现的威胁:sshd [1014]:错误:RSA_public_decrypt失败:错误:04067069:lib(4):func(103):reason(105)因此,这一定是sshd / OpenSSL中的错误:-)
BarsMonster
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.