不再安全的MD5

你是否思考过,比如我们的游戏账号、某些储蓄账户的各种数据都是存在别的数据库里的。万一他们中有某个带恶人,或是他们的数据库被攻破,那我们岂不是会有重大损失吗?

所以做开发或是还在学习阶段的你,应该早已听说了加密算法:MD5。或者更准确的说是一种信息摘要算法。那么你也应该早就听说它已经不在安全了吧。那又为什么时至今日它仍然没有被抛弃呢?

那么接下来,让我们尝试去破解MD5。

第一:直接解密

若我们想直接通过解密获取MD5加密的明文的话,这显然是不可能的。因为想要从密文中获取明文前提是加密过程中不会造成信息损失。而显然MD5并不是这样的。众所周知MD5的长度是固定的128比特,无论你是加密的密码、视屏、图片、压缩包还是其他什么东西。几百MB或几G的东西被加密后只有128比特的长度,显然这其中必定是舍弃了部分信息的。所以这种方法显然不可行。

第二:暴力枚举法

我们知道MD5很多时候与明文的关系是一一对应的。但MD5的长度是128比特,这也意味这MD5值是有边界的(既是有穷的)。既然是有穷就能使用暴力破解。理论上可行,但实际上2^128种可能想要一一列举显得吃力不讨好​。

那是什么真正导致了MD5的不安全性呢?

MD5是有穷的,而数值、文件、视屏可以是无穷的。以有穷对无穷势必会出现一个MD5值对应多个明文的情况,这便是散列碰撞。所以抗碰撞性才是​它最大的弊病。

2005年,山东大学王小云团队便发表了,快速发现大量MD5真碰撞的方法​。但这是在精心设计为前提下得到的,而且大多得到的数据也都是一些乱码显然无法构成对MD5的​致命一击。

2007年,密码学学者Marc Stevens基于王小云团队的论文继续研究,最终交付成果​。这一次,不仅仅是论文还有可执行的代码,并为这一成果制作对应的软件​。该软件能根据用户上传的文件生成两个外表相同的可查看文件​,但以文本打开文件时两文件的结尾却确不一样。而他本人就提供了两个不同的执行文件示范,一个输出一次hello world,另一个以死循环输出goodbye word​。

这意味着你能够给原文件添油加醋,或使用原文件构造两个不相同的后缀而他们的MD5值却是一样的​。有心之人便可以利用这一点攻击哪些以MD5值作为安全判断依据去下载各种安装包、软件等的个人或公司。

既然如此那么MD5为何到今天仍然不被放弃呢?

主要也是因为就这么一个点,无法做到全场景覆盖​。比如篡改文件与我将MD5加密后的密文存入数据库有什么关系?即便在暴力枚举法面前的形式也不算乐观,但MD5仍然是掩盖密文的一种​不错的选择。

但对于安全系数要求较高的场景还是​另做考虑吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值