您可能已经阅读了该信息,并且知道MD5不是最安全的哈希函数,
但是您知道为什么吗?您知道更安全的替代方法吗?
这就是我今天要向你解释的。
为什么MD5不安全?
MD5是一种加密算法,通常用于在数据库中存储密码,
但是这种算法不再安全。
蛮力攻击比以往任何时候都快,字典表很大,MD5算法还有其他潜在问题
我将在本文中解释所有这些
什么是MD5?
MD5是一种加密算法,通常用于在数据库中存储密码
。在Internet初期,网站主要将密码以明文形式保存在数据库中,
这不是一个好选择,因此人们使用MD5来混淆数据库中的密码。
MD5是一种算法,可以从任何密码,短语或文本中生成32个字符的十六进制字符串
。例如,如果您的密码是“ qwerty”(不好的主意),则在数据库中您将拥有d8578edf8458ce06fbc5bb76a58c5ca4
这样,IT人员就看不到您的密码,而且如果有人偷了数据库,他们就不会直接获得所有密码。
今天,解密密码变得非常容易。
我将在后面解释原因部分,以及为什么必须找到另一种方式来存储密码
为什么MD5不安全(3个原因)
1 –暴力攻击速度很快
蛮力攻击是通过尝试多种可能性来查找密码的一种方法,
既可以猜测用户可能使用的东西(出生日期,孩子的名字,宠物的名字等),也可以尝试一切(从a,b, c到10个字符的特殊字符密码)
MD5算法使用起来很快,
因此您可以在几秒钟内尝试多种组合
20年前,要找到世界上功能最强大的计算机的密码可能要花费数年时间。
如今,每个人都在家中拥有一台超级计算机,随着处理器和图形处理器的改进,我们最多可以在几天内解密“安全”密码。
最好的计算机每秒可以尝试数十亿个密码.
抵御暴力攻击的唯一方法可能是密码长度
如果您拥有40个字符长的随机密码(带有特殊字符),那么目前您可能是安全的,
但可以保留多长时间?
2 –字典表很大
在cmd5上,他们喜欢字典表。
通过在数据库中存储超过90万亿个密码,他们可以在几秒内为您查找任何哈希值的答案
这是用MD5算法的第二个问题,
它的用途很广泛,像这样庞大的数据库已经建立,多年来
如果你的密码是内部(也有是,如果你有一个“短”密码的好机会),您的帐户不绝对安全
对于暴力破解方法,唯一安全的方法是使用带有特殊字符的长随机密码。
在这种数据库中拥有此密码的可能性太大,
像这样的数据库正在占用大量磁盘空间。即使多年来价格越来越便宜,它仍然是一个障碍
3 –碰撞
MD5算法在其加密方法中也证明了问题
。冲突是当两个单词产生相同的哈希值时
安全的算法具有良好的抗冲突性
也就是说,对于不同的单词,您获得相同哈希值的可能性较低,
但是MD5的抗冲突性较低
因此,如果您知道“ abc”和“ def”具有相同的生成哈希(仅作为示例),则
可以说“ 123abc”和“ 123def”也具有相同的哈希生成
,这对于加密哈希函数来说是不好的特性你可以猜出很多派生词
有什么解决方案?
既然您知道了为什么MD5不安全,那么可以采取什么措施来提高数据库安全性?
用盐
您可以尝试做的第一件事是在加密密码时使用salt,
我已经写过一篇关于此的文章:什么是MD5 Salt?如何使用它?
如果您想了解更多关于此的信息,请检查
基本上,盐是您在每个密码之前和/或之后添加的单词。
如果盐是“ randomsaltformypassword”,并且用户选择“ qwerty”作为密码,
则将“ randomsaltformypasswordqwerty”用作MD5功能参数
这样,您就可以在数据库中加密更长的密码,并且黑客很难找到相应的密码。
请确保选择长字样以充分提高安全性
长密码
另一个解决方案是强制用户使用更长的密码(可能是15个字符或更多),
您还可以增加密码的复杂度,以确保他们使用的是大写,小写和特殊字符
但是请注意,即使您实施了所有
“ ILoveMyChina!” ,人们也会经常使用弱密码。是一个15字符的密码,带有特殊字符,但很容易猜到
甚至更糟的是,他们会在计算机附近的便签纸上记录密码:)
其他哈希函数
最好的解决方案可能是使用其他加密算法,
这不是最简单的方法,因为您可能必须更改数据库结构,但这可能是最安全的方法。
我不会给您太多示例,好像您在十年中阅读这些行可能会更改一样。
但是,今天,PHP中的password_hash()函数似乎是一个好主意(请参阅文档)。
也许bcrypt或scrypt加上盐,足够的迭代也是一个很好的解决方案
结论
就是这样,您现在知道了为什么MD5算法不再可以安全地用于密码加密,
并且我还为您提供了其他替代方法来提高数据库安全性。