MD5 是一种 128 位哈希算法,由科学家 Ronald L. Rivest 在 1990 年代初期创建。 缩写 MD5 代表消息摘要版本 5。
MD5 加密基于散列法,它涉及形成“指纹”或“总和”以进一步验证其真实性。 使用此方法,您可以验证信息的完整性以及密码哈希的存储。
MD5历史
消息摘要算法 (MD5) 的历史始于 1991 年,当时麻省理工学院教授 Ronald L. Rivest 报告了一种新算法的创建,该算法取代了过时的 MD4。 至于 MD4,正如德国密码学家 Hans Dobbertin 后来所写的那样,确实发现了很多缺点。
Rivest 在 RFC 1321 中描述了新的 MD5 算法。
该算法的工作由研究人员 Bert den Boer 和 Anton Bosselars 继续进行,他们在 1993 年证明了 MD5 中伪冲突的可能性,此时不同的初始化向量可以与相同的消息摘要匹配。
此外,在 1996 年,Hans Dobbertin 声称在 MD5 中发现了碰撞。 那时,更多首选的散列算法为人所知,例如 RIPEMD-160 加密散列函数 - 由 Hans Dobbertin、Anton Bosselars 和 Bart Prenel 开发,Whirlpool - 由 Vincent Raymen 和 Paulo Barreto 开发,以及 SHA-1 加密散列算法。
由于 MD5 中的哈希大小(128 位)相对较小,因此有人谈论过生日攻击的可能性。 由 Jean-Luc Cook 于 2004 年发起的 MD5CRK 项目旨在研究使用生日攻击的算法的漏洞。 但是,五个月后的 2004 年 8 月 17 日,由于赖雪佳领导的一组中国密码学家发现了算法中的漏洞,该项目被缩减。
2005 年 3 月,数学家和密码学家 Benne de Weger、Arjen Lenstra 和 Wang Xiaoyun 创建了两个具有相同散列和不同公钥的 X.509 文档。
一年后,即 2006 年 3 月,捷克密码学家 Vlastimil Klima 发布了一种算法,您可以在一分钟内在一台简单的计算机上确定碰撞。 该算法被称为“隧道”方法。
作为对工作成果的分析,2008 年,美国国土安全部国家网络安全管理局 (US-CERT) 的部门建议参与开发的每个人软件、网站以及网络用户,停止使用 MD5 算法,无论其应用目的如何。 之所以提出这样的建议,是因为他在研究过程中表现出的不可靠性。
2010 年 12 月,中国密码学家谢涛和冯登国发现了 512 位(一个块)的消息冲突。 以前,仅在长度为两个块或更多的消息中发现冲突。 后来,马克史蒂文斯通过发布具有相同 MD5 哈希值的区块取得了类似的结果。 他还开发了一种算法来获得这种类型的碰撞。
最后一个终结 MD5 算法发展历史的文件是征求意见稿——RFC 6151(RFC 是由互联网工程委员会 (IETF) 制定的官方文件,它描述了特定的规范技术),它实际上将 MD5 识别为不安全的哈希算法。 该文档建议放弃它,选择 SHA-2 系列加密算法作为替代方案。
所讨论的 MD5 算法被认为是最早用于检查文件完整性和在 Web 应用程序数据库中存储密码的算法标准之一。
但事实上,相对简单的功能、较短的输出长度和执行的操作的简单性,是该算法的优点,也决定了它的缺点——MD5是指容易被黑客攻击且具有低度的算法防止生日攻击。