为什么旧的mysql密码功能被认为是不安全的

时间:2011-08-16 17:07:55

标签: mysql security passwords

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

2 个答案:

答案 0 :(得分:3)

根据MySQL docs on password hashing

  

密码散列机制已在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 :(得分:1)

根据:Old MySQL password cracking

  

使用旧密码格式创建一个16字节的哈希,例如:

     

6f8c114b58f2ce9e

     

对于相同的密码,MySQL4.1哈希长度为41个字节:

     

* 6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4

     

从表面上看,似乎授予了这种额外的安全级别   使用新密码可能不重要。但是,来源   代码已在允许的创意通用许可下发布   很快破解旧的MySQL密码。

     

密码'a @ 4~1b'的散列为2c28061c5bda971d。

     

使用上面提到的破解程序,这个密码可以   在一台2岁的笔记本电脑上以1秒钟的速度破解。

     

通过使用SQL注入攻击,用户可能会这样做   未经许可查看my.cnf文件。在搜索中输入此内容   如果是第二个,框可以在浏览器中呈现文件的内容   select语句中的param显示在屏幕上而不是   正确逃脱:

     

某事'UNION ALL SELECT 1,(选择   LOAD_FILE('/ etc / my.cnf')),3,4,5,密码来自用户ORDER BY'7

如果未经授权的用户能够拦截您的散列密码,则很容易强制它们并获取纯文本密码。复杂的密码仍然难以破解,但8个字符的密码将花费很少的时间。

由于更改了MySQL密码哈希的长度,因此强制散列哈希要困难得多。