我正在 Windows 上使用基于密钥的身份验证的 Putty 来访问我的一些服务器。
它在使用~3700 位密钥时工作正常,但使用~17000 位密钥时,它会在客户端思考大约 20 秒,然后显示“拒绝访问”并要求输入密码。
OpenSSH 中基于密钥的身份验证是否有密钥长度限制或超时?
我知道使用这么大的密钥没有太多实际意义,尤其是当我看到这 20 秒的计算时,只是试图解决我遇到的任何问题:-)......
答案1
有一次,我查看了 OpenSSL 的 Diffie-Hellman 密钥源代码,发现 DH 密钥的大小有一个“任意”的 10K 限制。我更改了源代码进行测试,发现这样做有效。我向作者写了一个 bug,他们回复说,使用大量密钥是为了防止 DoS。
在 OpenSSH 中看到类似的东西我并不会感到惊讶。
答案2
协议中没有定义最大密钥大小或超时(或者至少没有定义您会达到的最大密钥大小或超时),但实现可能不支持这么长的密钥。对于 17kbit 的 RSA 密钥来说,使用私钥进行 20 秒的处理时间听起来并不长。然后服务器可能不想在未经身份验证的用户身上花费太多的计算能力:拒绝非常大的密钥是防止 DoS 攻击的一种保护措施。
目前,2048 位对于 RSA 密钥被认为是合理的;4096 位高于必要的位,但通常是受支持的;除此之外,如果某些程序拒绝密钥,您也不应该感到惊讶。
答案3
您是否能够在目标系统上生成该大小的密钥?您可能遇到了支持的限制。相反,我当前的 Centos 系统支持的最大大小为 16k,这似乎足以容纳大量密钥。如果您尝试使用 ssh-keygen 超过该大小,您应该会看到最大值,如下所示。
[nathan@omni ~]# ssh-keygen -t rsa -b 32768
key bits exceeds maximum 16384
答案4
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 秒,则这可能是您达到的限制。
猜测:也可能是putty本身有这个限制,认为如果客户端处理公钥认证需要那么长时间,那就出问题了。