当密码错误时,为什么`sudo`命令会变慢?

12

当我输入我的超级用户权限密码或登录到我的Linux计算机时,如果我输入正确,它会立即返回并授予我访问权限。但是,如果我打错了一些字母,就会等待很长时间才告诉我密码不正确。通常,在计算机意识到之前,我已经知道自己搞砸了。

为什么会这样呢?据我所知,用户密码被加密并存储在/etc/shadow中,因此我的输入似乎只需要被加密并与该文件中我的用户名的内容进行比较——无论我输入正确的密码还是错误的密码,这个过程应该大致相同。是否有某种算法原因,比如它必须在确认密码不正确之前检查一堆额外的地方?或者系统知道它是一个错误的密码,但必须做很多工作来跟踪错误的登录尝试。或者只是想惩罚我犯错。


我希望这个问题适合在SO上讨论。我知道它并不严格属于编程范畴,但是我希望能够学习到一些加密算法或者安全最佳实践相关的内容。 - Sam Britt
1
这很可能是有意为之的,以减缓自动猜测的速度。 - Mike Christensen
我注意到几个月前的情况,但没有足够的好奇心去询问。希望能得到一个答案! - Jeremy D
似乎他们使用了一个相当短的时间(Ubuntu 上约为 2 秒),且不会增加。如果你要猜一百万个密码,平均需要一百万秒(1 分钟 * 2 秒 / 2)= 277 小时。虽然不算太长,但比以前仅需几秒钟好多了。有些应用程序或操作系统在尝试登录时会使用指数级增加的时间间隔,但这可能会大大扰乱用户的心情。所以选好你的密码吧! - Maarten Bodewes
4个回答

10

这是故意做的:原因是为了防止使用字典攻击来猜测密码。

快速反应对于字典攻击至关重要。在错误密码上减速是一种将攻击减缓到无法进行有意义的时间间隔内的方法。


1
话虽如此,有没有降低超时时间的方法呢? - Ehtesh Choudhury
3
@Shurane 我真心希望答案是“不是”。 - Sergey Kalinichenko
6
这可能不适用于它,但Doug Gwyn曾说过:“UNIX的设计并非为了阻止你做蠢事,因为那样也会阻止你做聪明的事情。”我不介意自己给自己惹麻烦。 - Ehtesh Choudhury

1

我不确定这个问题是否相关。我也不确定我的回答是否正确,但我认为这是为了安全。使它变慢n倍意味着暴力攻击需要花费n倍的时间。


我不明白将攻击变慢n倍会有什么帮助。原因有两个:1.如果我们让失败的速度变慢7倍,而攻击也变慢7倍...这有什么意义呢?攻击者只需等待7倍的时间就可以满足,你可能需要二次依赖关系吧?2.线性或二次并不重要,因为这里没有变化的n。 - Enlico

1

sudo 输入错误密码时的响应速度较慢,是为了防止使用 sudo 进行粗暴的暴力破解攻击,每次猜错都会减缓攻击速度,使攻击时间更长。那些合法使用它的人没有理由抱怨。如果你偶尔打错一个字母,你不会介意。如果你真的无法输入自己的密码,那么现在可能是时候将其更改为(安全的)可输入的密码了。


1
"如果你偶爾打錯字,你不會介意。" 好吧,這正是我在這裡的原因。 - Luc

1

控制台或SSH登录也很慢。需要密码的任何操作都会被“减速”,以防止暴力攻击。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接