为什么旧版mysql密码函数被认为是不安全的?

3

我知道旧版mysql密码函数(4.1之前的版本)被认为是不安全的,但我不确定为什么。它被认为不安全的具体原因是什么?

2个回答

3
根据MySQL密码哈希文档的说法:
密码哈希机制在MySQL 4.1中进行了更新,以提供更好的安全性并降低密码被截取的风险。
我不确定“降低密码被截取的风险”是否意味着其他额外的含义,或者它只是意味着它们更难破解,但主要区别在于产生的哈希值的大小。
在4.1之前,哈希大小为16字节。从4.1开始,哈希大小为41字节(* + 40字节)。
相对于更大的哈希函数,16字节的哈希值非常小且易于发生冲突。MD5通常被认为强度不足,而它产生的哈希值是32字节。相比之下,16字节基本上是可怜的。作为比较:
pre-4.1 MySQL PASSWORD:  16 bytes  
                   MD5:  32 bytes
                 SHA 1:  40 bytes
   4.1+ MySQL PASSWORD:  41 bytes (40 bytes, prepended with an asterisk)
               SHA-256:  64 bytes
               SHA-512: 128 bytes

新的密码哈希方案与SHA-1相当,略优于MD5,但仍不足以推荐用于密码。

1

根据:旧版MySQL密码破解

使用旧密码格式创建16字节哈希,例如: 6f8c114b58f2ce9e 对于相同的密码,MySQL4.1哈希是41个字节长的: *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 表面上看,通过使用新密码提供的额外安全级别可能并不重要。然而,源代码已经在创意共用许可下发布,允许非常快速地破解旧的MySQL密码。 密码“a@4〜1b”的哈希值为2c28061c5bda971d。 使用上述破解程序,在一台两年前的笔记本电脑上不到1秒钟就可以破解此密码。 通过使用SQL注入攻击,未经许可的用户可能可以查看您的my.cnf文件。如果选择语句中的第二个参数正在屏幕上显示而没有正确转义,则在搜索框中输入此内容可能会在浏览器中呈现文件的内容: something' UNION ALL SELECT 1,(SELECT LOAD_FILE('/etc/my.cnf')),3,4,5,password FROM user ORDER BY '7

如果未经授权的用户能够拦截您的哈希密码,那么很容易对它们进行暴力破解并获取明文密码。复杂的密码仍然难以破解,但是8个字符的密码将需要很少的时间。

由于MySQL密码哈希长度的更改,现在要对哈希进行暴力破解变得更加困难。


链接已失效。我正在寻找那个破解工具。 - reinierpost

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