密码是否有阈值,只要它不再安全甚至变得不安全?

信息安全 密码 哈希 密码破解
2021-08-20 04:03:39

我总是听到“长密码好,长密码更好”。但是是否存在“密码太长以至于变得不安全”或“密码足够长,让它变长无关紧要”之类的东西?

我只对破解密码的安全性感兴趣。
如果它在散列时会导致 DoS使服务器过载,或者如果供应商不这么认为,则不会。

还假设密码不包含任何字典,它无论如何都会出现在评论中。单词,使用最佳实践存储,具有强大而独特的 salt以及每个字符的相关熵。用户将如何记住/调用/存储密码也无关紧要。

我同意更长的/密码/更安全我问的是上限

是否存在使密码不再(原文如此)重要甚至削弱其安全性的长度(或熵大小)?我知道这取决于散列算法,如果给定算法的上限存在并且已知,它是什么?

4个回答

128 位(熵)

较长密码的主要目的是防止暴力攻击。人们普遍认为 128 位超出了任何人的暴力破解能力,并且在可预见的未来仍将如此。您可以在几个地方看到这个数字,例如,具有 128 位或更大密钥长度的 SSL 密码被认为是“高安全性”,OWASP 建议会话令牌至少为 128 位。所有这些的推理都是相同的 - 128 位防止暴力攻击。

在实践中,如果密码由大小写字母、数字和一点标点组成,每个字符大约有 6 位熵,因此 128 位密码由 22 个字符组成。

密码可以通过蛮力以外的方式泄露。也许客户端系统上有键盘记录器,或者用户被钓鱼。密码长度对这些攻击几乎没有影响——即使是 1000 位的密码也会被同样捕获。而且这些攻击在实践中很常见,所以真的不值得使用太长的密码。

实际上,您可以使用少于 128 位的数据。如果使用 bcrypt 之类的慢速哈希函数对密码进行哈希处理,这会使蛮力攻击更加困难,因此 100 位(或大约)完全可以防止蛮力攻击。如果您只关心在线攻击,并且该站点有锁定策略,那么您可以少用一些 - 64 位将完全防止速率受限的在线暴力攻击。

密码可以长到不安全吗?是的。

当您查看组织中安全的总体情况时,安全并不仅仅意味着“使用无法猜测的密码保护帐户”。安全必须通过机密性、完整性和可用性的“CIA 三元组”保护整个组织。超过一定的密码长度阈值,机密性和完整性在统计上没有提高,而可用性由于可用性差而下降。您无法登录的系统与已关闭的系统一样不可用。

如果您强制您的用户输入由所有随机、混合大小写字母、数字和符号组成的 22 个字符的密码,您的用户将更容易出错。考虑到用户可能处于压力之下,无法立即对紧急情况做出反应。用长密码摸索可能会导致 3 次尝试锁定并花费用户大量时间来重置,以至于他们无法及时解决问题,从而导致灾难。那个长密码阻止了可用性;它没有保护组织,反而造成了伤害。

您的用户浪费了多少时间输入密码?密码越长,输入越慢。从底线中减去这笔费用。这是安全成本的一部分,本可以花在其他地方的钱。一个 100 个字符的密码会比一个 20 个字符的密码花费更多,同时不会显着降低风险。时间和金钱是资产,太长的密码会花费它们而不会产生额外的好处。

综上所述,我是否提倡 4 位 PIN 的安全性差,以便用户更快、更快乐、更少出错?当然不是。您需要做的是平衡密码提供的熵与使用它的心理。

虽然大多数用户无法记住由 70 个字母、数字和符号组成的 12 个字符的密码,但他们可能会记住 5 个单词的密码。所以考虑一个 diceware 方法来实现类似的熵。五个随机但熟悉的单词可能比 12 个随机符号更容易记住和输入,同时提供了五亿个可能的组合;六个 diceware 单词比 12 个字符的密码提供更多的安全性。

如果出于某种原因必须是字符,请确保从一组明确的字符中选择它们。不要强迫用户在 shift 键上跳舞,或者输入随机符号。如果您需要来自 [az][AZ][0-9][!-*] 的 12 个随机字符密码的熵,则可以仅使用 [az] 并将其扩展为 15 个字符来实现类似的熵级别.

或者考虑使用其他工具,例如验证令牌、生物识别或智能卡,并让这些工具补充更短的 PIN。

安全系统必须是可用的,否则它们会干扰组织对其造成损害。

越来越长的密码不会变得不安全,但在某些时候它们会停止变得更安全。

根据您提到的假设,密码似乎是真正随机的并使用bcrypt(最先进的密码存储)存储。Bcrypt 的长度限制在 50 到 72 个字符之间,具体取决于实现。因此,不允许使用比这更长的密码,仅使用前 N 个字符进行散列,或类似的东西。基本上,更长的时间不会更好(尽管也不会更糟)。

也有人可能会争辩说,一旦密码从现在到宇宙的尽头都可以抵御对密码哈希的暴力攻击,那么延长密码并不会使其更安全。即使您对攻击者的硬件做出疯狂的假设,20-30 个字符的真正随机密码也将是安全的,直到宇宙尽头。因此,较长的密码不会更安全。

较长的密码实际上可能比预期的要弱的一种情况是系统会截断您作为密码输入的字符串。考虑

passwordsogoodtahtittakestrillionyearstobreakitgoaheadtryme

此密码非常好1除非您的系统实际上将其视为

password

因为它只接受 8 个字符。其余的被默默地丢弃,所以你总是输入passwordsogoodtahtittakestrillionyearstobreakitgoaheadtryme,系统接受password它,每个人都很高兴。包括最先尝试这种组合
的黑客

1 是的,也因为它有字典单词,比数学受损的安全顾问提倡的一些无用的大写数字特殊字符三元组更容易记住