0

我知道哈希值(例如:md5 值)可以与多个值有联系,例如 '^&#%we242eweqweqweqwedfdfdfee2'、'%$#%3423efffe435%%^#'

但是由于大多数用户实际上使用的是非常简单的密码,那些 md5 值是否只能与有限的简单 cleartxt 密码有关?

我的意思是,如果 'cfcd208495d565ef66e7dff9f98764da' 只与 '0'、'tom123'、'goodcar' 等 30 个简单值有联系,那么从数据库中获取 md5 数据的黑客很容易找出用户名与其明文密码之间的关系,然后可以使用这对值在其他网站上破解相同的帐户。

那么,任何指定的 md5 值是否只对有限的简单值负责?

PS:我知道我可以加盐或使用更好的方法,如 sha512、sha3,但我对上面的问题很好奇。

4

1 回答 1

2

这个问题取决于你对“简单价值观”的理解是什么。一般来说,密码散列函数试图模拟任意长度输入到固定长度输出的随机映射。这些密码散列最基本的安全概念是所谓的抗碰撞性,即找到一对散列到相同固定长度输出的输入消息在计算上是不可行的。正如您所展示的,这个概念现在被 md5 打破了,因为您可以构建在 md5 下确实发生冲突的特殊消息。

但是当您谈论“简单值”时,我假设您排除了此类人为制作的消息,然后我们仍然可以将 md5 视为随机映射。

对于这样的随机映射,碰撞的机会仅取决于输入域的大小。例如,如果您正在查看字符集 {az, AZ, 0-9} 中的所有 6 个字符密码,您可以确定不会发生冲突(正如 Chris 指出的那样,您甚至可以自己尝试)。但是,如果您将该大小扩展到同一字符集中的 25 个字符,则肯定会发生冲突,因为现在可能的密码比可用的哈希值更多。

估计碰撞的机会称为生日问题。作为一个简单的估计,如果您有k可能的输出值,您可以预期在达到sqrt(k)输入值时会发生冲突。因此,对于 md5,k=2^128如果您的输入值集接近2^64.

于 2014-04-25T06:19:36.177 回答