转载自 玻璃猫 程序员小灰

在之前的漫画中,我们介绍了MD5算法的基本概念和底层原理,没看过的小伙伴们可以点击下面的链接:《漫画:什么是MD5算法?》

这一次,我们来讲解如何破解MD5算法

设MD5的哈希函数是H(X),那么:

H(A) = M

H(B) = M

任意一个B即为破解结果。

B有可能等于A,也可能不等于A。

用一个形象的说法,A和B的MD5结果“殊途同归”。

MD5碰撞通常用于登陆密码的破解。应用系统的数据库中存储的用户密码通常都是原密码的MD5哈希值,每当用户登录时,验签过程如下:

如果我们得到了用户ABC的密码哈希值E10ADC3949BA59ABBE56E057F20F883E,并不需要还原出原密码123456,只需要“碰撞”出另一个原文654321(只是举例)即可。登录时,完全可以使用654321作为登陆密码,欺骗过应用系统的验签。

暴力枚举法

字典法

彩虹表法

H(X):生成信息摘要的哈希函数,比如MD5,比如SHA256。

R(X):从信息摘要转换成另一个字符串的衰减函数(Reduce)。其中R(X)的定义域是H(X)的值域,R(X)的值域是H(X)的定义域。但要注意的是,R(X)并非H(X)的反函数。

通过交替运算H和R若干次,可以形成一个原文和哈希值的链条。假设原文是aaaaaa,哈希值长度32bit,那么哈希链表就是下面的样子:

这个链条有多长呢?假设H(X)和R(X)的交替重复K次,那么链条长度就是2K+1。同时,我们只需把链表的首段和末端存入哈希表中:

给定信息摘要:920ECF10

如何得到原文呢?只需进行R(X)运算:

R(920ECF10) = kiebgt

查询哈希表可以找到末端kiebgt对应的首端是aaaaaa,因此摘要920ECF10的原文“极有可能”在aaaaaa到kiebgt的这个链条当中。

接下来从aaaaaa开始,重新交替运算R(X)与H(X),看一看摘要值920ECF10是否是其中一次H(X)的结果。从链条看来,答案是肯定的,因此920ECF10的原文就是920ECF10的前置节点sgfnyd。

需要补充的是,如果给定的摘要值经过一次R(X)运算,结果在哈希表中找不到,可以继续交替H(X)R(X)直到第K次为止。

给定信息摘要:FB107E70

经过多次R(X),H(X)运算,得到结果kiebgt

通过哈希表查找末端kiebgt,可以找出首端aaaaaa

但是,FB107E70并不在aaaaaa到kiebgt的哈希链条当中,这就是R(X)的碰撞造成的。

这个问题看似没什么影响,既然找不到就重新生成一组首尾映射即可。但是想象一下,当K值较大的时候,哈希链很长,一旦两条不同的哈希链在某个节点出现碰撞,后面所有的明文和哈希值全都变成了一毛一样的值。

这样造成的后果就是冗余存储。原本两条哈希链可以存储 2K个映射,由于重复,真正存储的映射数量不足2K。

2004年,王小云教授提出了非常高效的MD5碰撞方法。

2009年,冯登国、谢涛利用差分攻击,将MD5的碰撞算法复杂度进一步降低。

几点补充:

对于单机来说,暴力枚举法的时间成本很高,字典法的空间成本很高。但是利用分布式计算和分布式存储,仍然可以有效破解MD5算法。因此这两种方法同样被黑客们广泛使用。

—————END—————

漫画:如何破解MD5算法相关推荐

  1. 漫画:如何破解MD5算法?

    来自:梦见(微信号:dreamsee321) 在之前的漫画中,我们介绍了MD5算法的基本概念和底层原理,没看过的小伙伴们可以点击下面的链接: 漫画:什么是MD5算法? 这一次,我们来讲解如何破解MD5 ...

  2. 安全架构-md5算法介绍

    安全架构-md5算法介绍 安全架构知识,我们必不可少离不开的就是md5,包括接口签名,文件摘要,密码加密等等.本文介绍md5算法. 文章目录 安全架构-md5算法介绍 一.md5是什么? 二.特点 三 ...

  3. 漫画:什么是MD5算法?

    来自:梦见(微信号:dreamsee321) 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按 ...

  4. MD5算法可以破解么?为什么?网上有在线破解是怎么回事?

    答:MD5算法不可以破解. 因为MD5是单向散列函数,输入任意长度的信息,经过处理,输出为128位的信息:不同的输入得到的不同的结果:根据128位的输出结果不可能反推出输入的信息.所以不能从密文(散列 ...

  5. (摘录)MD5算法研究与破解

    md5的全称是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory for computer science和rsa data secur ...

  6. MD5算法已经被破解

    MD5算法已经被破解 发表: babyfrog 时间: 2004/09/04 19:55:19 发信人: bluemyosotis (抽筋的天使), 信区: SDU 标 题: 密码学领域重大发现:山东 ...

  7. 石破天惊! MD5算法被破解!

    按:MD5不安全了?SHA不安全了?HASH完了?一大早来到办公室,无意中看到这么一条新闻,继而在网上搜索了一个多小时,没有找到王教授这篇文章的原文.只看到山大几十分钟前发表的这篇新闻.期待各位IT同 ...

  8. 彩虹表破解开机密码、MD5算法等的原理

    http://www.91ri.org/7593.html  自己发到91ri的,博客备份下. 前言 或许对于大多数人来说,实际中并不需要了解这些理论,能够使用现成的工具就行,但是我个人觉得了解了这些 ...

  9. 漫画:什么是MD5算法

    转载自 玻璃猫 程序员小灰 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按照规则,把参数名和 ...

最新文章

  1. Django Web开发学习笔记(4)
  2. Codeforces 524F And Yet Another Bracket Sequence 哈希
  3. 庆祝杭州移动电视诞生一周年
  4. boost::multiprecision模块complex128相关的测试程序
  5. mysql快捷创建数据库_mysql数据库快速入门(1)
  6. lambda表达式java_Lambda表达式Java教程
  7. php页面底部信息居中,css底部如何局中?css三种居中方法
  8. GARFIELD@10-16-2004
  9. Lesson 2 Gradient Desent
  10. 一些在网上搜集的奇奇怪怪的bat代码。。。仅供参考!小心中招!
  11. C# OpenXml组件
  12. cas1584803-67-7|花菁染料齐岳试剂
  13. 如何正确关闭TCP连接
  14. java找不到文件_Java常见问题之javac Hello.java找不到文件的解决方法
  15. python取值范围到无穷大_python的特殊数字类型(无穷大、无穷小等)
  16. 炒美股-史考特证券开户流程
  17. 激光切割机的原理是什么?(激光切割机的结构是什么样的)
  18. laravel项目,解决Whoops, looks like something went wrong.
  19. win10java下载_win10 下JDK10的下载安装与环境变量配置
  20. vue 已知三角形的两边求斜边长度以及角度,如图

热门文章

  1. C++ class实现二叉树(完整代码,附非递归遍历)
  2. C++ using namespace 命名空间的定义与使用
  3. 合并k个有序链表 python_leetcode第23题-合并K个有序链表
  4. word List 43
  5. 用信号量解决进程的同步与互斥
  6. 思维--找规律--Codeforces Round #645 (Div. 2) c题
  7. CF364B. Free Market
  8. Max Sum Plus Plus HDU - 1024
  9. 动态区间第k小:树状数组套权值线段树
  10. 模板:割点、桥与双连通