Encryption 彩虹表分析能从md5值中找出简单的明文密码吗?

Encryption 彩虹表分析能从md5值中找出简单的明文密码吗?,encryption,hash,md5,rainbowtable,Encryption,Hash,Md5,Rainbowtable,我知道散列值(例如:md5值)可以与多个值连接,如“^&#%we242eweqweqweqweqwedfdfee2”、“%$#%3423efffe435%%^” 但由于大多数用户实际上使用的是非常简单的密码,这些md5值是否只能与有限的简单cleartxt密码有关系 我的意思是,如果“cfcd208495d565ef66e7dff9f98764da”只与30个简单值(如“0”、“tom123”、“goodcar”)有关联,那么从数据库获取md5数据的黑客将很容易找出用户名和明文密码之间的关系,然

我知道散列值(例如:md5值)可以与多个值连接,如“^&#%we242eweqweqweqweqwedfdfee2”、“%$#%3423efffe435%%^”

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

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

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


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

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

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

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


估计碰撞的可能性被称为。作为一个简单的估计,如果您有
k
可能的输出值,那么当您达到
sqrt(k)
输入值时,可能会发生冲突。因此,对于具有
k=2^128
的md5,如果您的输入值集接近
2^64

的大小,则会发生冲突。“更好的方法”是bcrypt和scrypt。就密码散列而言,SHA-512或SHA-3不是“更好的方法”。但无论如何,你的问题的答案是“是的,当然”。@ChrisJester Young,这意味着md5值只是对少量简单明文值的响应?这完全取决于你如何定义“简单明文值”,但是,如果你能列举所有这些值,您可以轻松构建一个表,其中MD5值都对应于该表。假设我有一个表,其中混合了8位数字(a-Z+0-9+a-Z)的组合。MD5值平均有多少这样的普通值?