假设密码是经过散列和加盐存储的,并且它是一串随机字符,是否存在增加密码长度不会增加安全性的点?
由于散列将具有恒定长度,因此存在有限数量的可能散列。因此,我假设在某个非常长的长度上,密码的哈希值与较短密码的哈希值发生冲突的概率开始攀升,直到我们达到所有密码都与较短密码发生冲突的长度。
假设密码是经过散列和加盐存储的,并且它是一串随机字符,是否存在增加密码长度不会增加安全性的点?
由于散列将具有恒定长度,因此存在有限数量的可能散列。因此,我假设在某个非常长的长度上,密码的哈希值与较短密码的哈希值发生冲突的概率开始攀升,直到我们达到所有密码都与较短密码发生冲突的长度。
密码的强度是衡量密码强度的标准。这就是密码的工作原理:它们是给定用户记住的东西,但外人不知道。多少未知数?这就是棘手的地方。
如果您考虑一个由 7 个随机字母(大写和小写)和数字组成的密码,其中每个符号是随机、均匀且相互独立地选择的,那么有 62 7 = 3521614606208 个可能的密码,它们都有相同的概率被选中;因此,对于攻击者来说,最好的策略是全部尝试(没有顺序比其他顺序更好),直到找到匹配项。平均而言,攻击者将尝试一半的可能密码空间(因此在这种情况下为 1760807303104),然后再击中正确的密码。
所以密码的强度不是来自它的本质,尤其不是来自它的长度。密码长度与密码安全性没有直接关系。使密码强大的是它的随机性;严格来说,这是密码生成方法的属性,而不是密码本身的属性。长度与安全性的间接关系是您需要一些空间来发挥随机性:虽然很长的密码不一定安全,但很短的密码必然是不安全的。
此外,如果您通过累积随机选择的元素(随机字母、随机单词......)来创建密码,那么通过累积更多的元素来增加随机性,只要它们是相互独立选择的(你不会获得更多的随机性如果你重复同一个词四次)。从这个意义上说,你可能会觉得长度就是力量。但那是错觉。随机性产生力量——恰好需要空间。
你需要多少随机性?足以威慑攻击者。攻击者每秒可以尝试多少个密码取决于很多上下文。如果密码是智能卡的 PIN 码,那么攻击者可以尝试 3 次密码,并且不能再尝试(在 3 次错误的 PIN 后,卡会永久锁定自身)。如果攻击者每次尝试密码都必须与 Web 服务器通信,那么他将能够根据服务器 CPU 功率和配置,每秒尝试服务器愿意接受的密码。如果攻击者知道密码的哈希值,那么他可以根据自己的预算尽可能多地尝试(对于简单的哈希函数,这可以在每秒数十亿的范围内)。
对于每个上下文,攻击者可以尝试的密码数量都有限制。如果他在预算内输入正确密码的机会太低,攻击者会认为“不值得”,然后你就赢了。您不需要获得比这一点更多的随机性。
由于散列函数的长度是有限的,因此还有另一个限制,超出该限制就无法增加密码随机性,但它远得多。这不是关于碰撞,而是关于原像。让我们把数字放在它下面。一个现实的攻击者,有很多预算,面对一个简单的哈希函数,可能会尝试多达 2 70 个潜在的密码。我们在这里谈论的是数百万美元的预算,还有一个相当有耐心的攻击者(他会接受在这个密码上花费几周的时间)。有充分的理由说明这个数字不会随着技术进步而无限增长。让我们考虑哈希函数的输出为n位(例如n= 128 对于 MD5)。攻击者的目标是找到一个密码,该密码在散列后会产生一个给定的散列值;他不需要最初使用的密码,只需要匹配的密码。他有两种进攻策略:
策略 1 将花费P/2,其中P是(或多或少)用户可能选择的潜在密码的数量。如果P超过 2 71,那么这对攻击者来说太昂贵了。
策略 2 的成本为2 n-1。如果n大于 71,那么这对攻击者来说太昂贵了。
即使是最古老、最基本的哈希函数,如 MD5,其输出大小也足以使策略 2 不可行(MD2、MD4、MD5 的输出大小为 128 位;SHA-1 和 RIPEMD-160 提供 160 位;SHA-256有 256 位)。换句话说,固定的散列输出大小只有在低于 70 位左右时才会限制安全性。
有关密码随机性(通常称为“熵”)的更多信息,请参阅此答案。有关进行密码散列的正确方法(特别是进行慢速散列,使用盐以防止并行攻击)的更多信息,请参阅该答案。
为了扩展汤姆的优秀答案,假设随机字符,有用长度的硬限制是生成哈希的大小(例如:128 位大约是 21 个随机字符,假设您使用大写、小写、数字和基本符号,只有英文字符)。
然而,真正的密码更多地受到构造助记符的限制,以及人们记住它们的能力。正如汤姆所说,你真正想要的是 128 位的随机熵(假设是 128 位哈希),这可能需要超过 21 个字符才能在密码中生成具有这么多熵的密码,而人们也可以真正记住。实际上,很少有用户记忆的密码会有这么多的熵。
当然,我也考虑过。特别是读完这篇论文后:
如何破解 MD5 和其他哈希函数(PDF)
这是由安全研究人员 Wang 和 Yu 进行的一项研究,他们开发了一种技术来强制 md5 哈希之间的冲突(根据他们的说法是 HAVAL、MD4、RIPEMD 和 SHA0)......当涉及到冲突证书时,它是一个广泛研究的话题哈希
虽然,我相信,哈希冲突主要是证书和文件而不是密码的问题,因为它们太短(与文件相比)它们发生冲突的可能性要小得多。
如果我们严格地谈论密码,这就是身份验证慢慢迁移到两因素身份验证的原因。密码及其人工管理员对于正确的身份验证根本不可靠。不是因为它们的弱点和哈希冲突风险,而是因为一个更简单的因素:它们背后的人类。
简短的回答:不,没有一点没有好处。只要您的密码是完全随机的,您拥有的字符越多,使用暴力破解密码就越难。话虽如此,有很多方法可以在没有蛮力的情况下访问密码,而您的密码是什么并不重要。不过,就最近的研究而言,8 个字符长的密码是完全不安全的,也可能是 1 个字符长。超过 16 个字符但非随机的密码也是不安全的。如果你想要一个完全安全的暴力破解密码,如果没有新一代技术,一组随机的 32 个字符、数字和特殊字符几乎是不可破解的,因为这需要大约 93^32 个可能的密码,