就像你用一把锁和一把钥匙,但是你把钥匙扔到了茫茫大海,在不损害箱子的前提下你只能一直暴力尝试,在试了第20200404把钥匙的时候发现打开了,恍然大悟原来是这把钥匙啊!
4.2 哈希冲突和暴力破解前面举了用钥匙开箱子的问题,最终还是被打开了,先别高兴,原生钥匙也不一定就是这把呢,因为有哈希冲突,巧了可以打开,来看个图先:
文章插图
图中我们用m输入进行摘要运算之后得到了相同的摘要值,也就是打开了箱子,但是真实的输入却是k 。这里就引出了一个新问题:哈希冲突及其影响 。
那么哈希冲突是什么?又为啥会冲突呢?
我们知道摘要算法生成的字符串的长度一般是固定的有128位 256位之类的,摘要算法的神奇之处在于可以把任意长度的数据转化为固定长度的字符串 。
换句话说哈希后的字符串长度有限,那么总的集合就有限,这是个组合的问题很容易想到,但是输入是无限的呀!
极端一点你写了个摘要算法长度是4的十六进制字符串,也就只有65536个空间,实际上输入样本数量根本不需要65536就几乎必然出现冲突,因为不出现冲突的要求是非常高的,不信你看看生日悖论问题就知道了 。
生日悖论是指在不少于 23 个人中至少有两人生日相同的概率大于 50% 。例如在一个 30 人的小学班级中,存在两人生日相同的概率为 70% 。对于 60 人的大班,这种概率要大于 99% 。从引起逻辑矛盾的角度来说,生日悖论并不是一种 “悖论” 。但这个数学事实十分反直觉,故称之为一个悖论 。想想也是如此,无限输入样本对有限摘要集合,存在冲突几乎是必然的:
生日悖论的数学理论被应用于设计密码学攻击方法——生日攻击 。
文章插图
还是晕菜的话,你想想北京13号线的早高峰,车厢10个人不拥挤,瞬间来了200个人,你说挤不挤,冲突不冲突,如图:
文章插图
4.3 单向无盐哈希存储安全性前面用了两个小节阐述了摘要算法和加密算法的区别,以及哈希冲突,观点都很中立,在了解这些必备知识之后,我们不禁要问:单向无盐哈希存储密码安全吗?
安全都是相对的,没有绝对的安全,作为防守方只能让攻击方的时间和机器成本都高到无法接受,我们才是比较安全的 。
换句话说攻击方理论上可以破解我的密码,但是需要300年又或者攻击方要想在可接受的时间内破解那么就得找个天文数量级的存储空间,作为防守方你怕啥?
怕啊!万一有时间和空间都能接受的方案咋整!先卖个关子,后面重点讨论这种可怕的Trade-Off方案 。
4.3.1 在线加解密实验常见的摘要算法md5和sha1的长度分别为128位和160位,这里的位是二进制的,转化为16进制之后长度分别为32位和40位,从长度上来说sha1相比md5冲突更小一些,那么我们就来试试sha1的破解速度吧!
笔者随意找了一个在线sha1加解密的网站,这个网站的简介看着还蛮厉害的,不过都是针对md5的,看来md5已经被如此嫌弃了:
本站专业针对md5等哈希算法进行在线解密,可上传文件在线批量破解,最多可支持数万个密码 。单单MD5就拥有64T的密码数据库,3万多亿条,本站支持十几种常见的哈希算法在线解密,查询时间不到0.1秒 。摩拳擦掌赶紧试验一把:
文章插图
加密很快完成,接着解密一下:
文章插图
啊呀很快就出结果了,之前我跑了几个解密,现在让我登录才展示,我懒得登录,不过确实是解密成功了,0.01秒所言非虚 。
这怎么可以,我再试个强密码:
文章插图
速度还是很快,生成了一个长度为40位的16进制小写字符串,笔者还是很自信的,这么老长破解去吧!啊哈哈....
文章插图
果然,它跪了,所以增加密码强度多么重要!
4.3.2 国内外撞库研究我国著名的密码学家山东大学的王小云教授先后对md5和sha1进行了深入研究并且在2004年左右取到了很大的进展,因此目前对于一些高安全要求的场合已经开始使用更高的摘要算法比如:sha224、sha256、sha384、sha512等算法,也就是长度更长了,集合空间更大撞库可能更小,感受一下这个长度的变化(左右滑动):
推荐阅读
- 西红柿要如何保存,才能延长保鲜期限?
- 面试官问你:今后你的职业规划是什么?该如何回答?
- 不同的体质该如何吃肉?
- 滇红茶如何冲泡
- 淘宝直播间怎么引流呢 淘宝直播如何推广引流
- 黄茶如何冲泡 起来看黄茶冲泡步骤
- 懂得如何泡茶 才能喝好茶
- 黑茶如何冲泡出好滋味来
- 如何正确看待茶叶耐泡度
- 家居装修中屏风如何选择