为什么输入错误的密码要比输入正确的密码花费更多的时间?


17

我注意到的最突出的地方是在工作中进行SSH时,但是我觉得我在其他地方也观察到了这种行为。

当我尝试从工作中的Windows桌面登录Linux服务器时,我注意到,如果我输错了密码,大约需要5秒钟左右的时间,然后我才能恢复“访问被拒绝”。然后,当我正确输入密码时,登录(以及欢迎消息等)几乎是即时的。

是否有任何逻辑原因,还是归结于特定于此处工作的计算机的奇怪配置?


1
stackoverflow.com/questions/712339/…上对此进行了很好的讨论/解答,包括在此处此处
drzaus 2013年

当您使用错误的密码登录Windows时,也会发生同样的情况,但是我注意到时间不时地变化,范围从几秒到大约1-2分钟
phuclv

Answers:



10

这是防止暴力攻击的预定延迟。较长的延迟还可以防止攻击者猜测用户名错误和密码错误之间的区别(与检查用户名相比,哈希和检查密码花费的时间明显更长)。


1

从技术上讲,这种故意的延迟是为了防止诸如“线性化攻击”之 类的攻击(还有其他攻击和原因)

为了说明这种攻击,请考虑一个程序(没有故意的延迟),该程序将检查输入的序列以查看其是否与正确的序列匹配,在这种情况下,该序列恰好是“ xyba。为了提高效率,程序员决定一次检查一个字符,一旦发现不正确的字符,则立即退出,然后再开始检查长度。

正确的序列长度比不正确的序列长度需要更长的处理时间。甚至更好(对于攻击者而言),具有正确的第一个字符的序列号将比具有不正确的第一个字符的序列号花费更长的时间。等待时间中的后续步骤是因为每次都有一个以上的循环,比较将在正确的输入上进行。

  • 因此,攻击者可以选择一个四个字符的字符串,并且以x开头的字符串花费的时间最多。(通过猜测工作)
  • 然后,攻击者可以将字符固定为x并改变第二个字符,在这种情况下,他们会发现y花费的时间最长。
  • 然后,攻击者可以将前两个字符固定为xy并更改第三个字符,在这种情况下,他们会发现b花费的时间最长。
  • 然后,攻击者可以将前三个字符固定为xyb并更改第四个字符,在这种情况下,他们会发现a花费的时间最长。

因此,攻击者可以一次恢复一个连续字符。

Linearization.java。

Linearization.docx,样本输出

序列号长为四个字符,每个字符有128个可能的值。然后有128 4 = 2 28 = 268,435,456个可能的序列。如果攻击者必须随机猜测完整的序列号,那么她将在大约2 27 = 134,217,728次尝试中猜测序列号 ,这是一项巨大的工作。另一方面,通过使用上面的线性化攻击,每个字母平均只需要128/2 = 64个猜测,预期工作量约为4 * 64 = 2 8 = 256个猜测, 这是微不足道的数量工作的。

大部分的书面门派改编自(马克邮票的“信息安全:原理与实践”获得)。同样,以上计算未考虑找出正确序列长度所需的猜测工作量。

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.