20
2005
11

md5算法简介

md5的全称是message-digest algorithm 5(信息-摘要算法),在90年代初由
mit laboratory for computer science和rsa data security inc的ronald l.
rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签
名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串
变换成一定长的大整数)。不管是md2、md4还是md5,它们都需要获得一个随机长度
的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但md2
的设计与md4和md5完全不同,那是因为md2是为8位机器做过设计优化的,而md4和md5
却是面向32位的电脑。这三个算法的描述和c语言源代码在internet rfcs 1321中有
详细的描述(http://www.ietf.org/rfc/rfc1321.txt),这是一份最
权威的文档,由ronald l. rivest在1992年8月向ieft提交。

  rivest在1989年开发出md2算法。在这个算法中,首先对信息进行数据补位,使
信息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾。并且根
据这个新产生的信息计算出散列值。后来,rogier和chauvaud发现如果忽略了检验
和将产生md2冲突。md2算法的加密后结果是唯一的--既没有重复。

  为了加强算法的安全性,rivest在1990年又开发出md4算法。md4算法同样需要填
补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod 512 =
448)。然后,一个以64位二进制表示的信息的最初长度被添加进来。信息被处理成
512位damg?rd/merkle迭代结构的区块,而且每个区块要通过三个不同步骤的处理。
den boer和bosselaers以及其他人很快的发现了攻击md4版本中第一步和第三步的漏
洞。dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到md4完整版
本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得
到相同的加密后结果)。毫无疑问,md4就此被淘汰掉了。

  尽管md4算法在安全上有个这么大的漏洞,但它对在其后才被开发出来的好几种
信息安全加密算法的出现却有着不可忽视的引导作用。除了md5以外,其中比较有名
的还有sha-1、ripe-md以及haval等。

  一年以后,即1991年,rivest开发出技术上更为趋近成熟的md5算法。它在md4的
基础上增加了"安全-带子"(safety-belts)的概念。虽然md5比md4稍微慢一些,但却
更为安全。这个算法很明显的由四个和md4设计有少许不同的步骤组成。在md5算法中,
信息-摘要的大小和填充的必要条件与md4完全相同。den boer和bosselaers曾发现md5
算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结
果了。

  van oorschot和wiener曾经考虑过一个在散列中暴力搜寻冲突的函数
(brute-force hash function),而且他们猜测一个被设计专门用来搜索md5冲突的
机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个
冲突。但单从1991年到2001年这10年间,竟没有出现替代md5算法的md6或被叫做其他
什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响md5的安全性。
上面所有这些都不足以成为md5的在实际应用中的问题。并且,由于md5算法的使用不
需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。但即便是应用
在绝密领域内,md5也不失为一种非常优秀的中间技术),md5怎么都应该算得上是非
常安全的了。

算法的应用

  md5的典型应用是对一段信息(message)产生信息摘要(message-digest),
以防止被篡改。比如,在unix下有很多软件在下载的时候都有一个文件名相同,文件
扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:

   md5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461

  这就是tanajiya.tar.gz文件的数字签名。md5将整个文件当作一个大文本信息,
通过其不可逆的字符串变换算法,产生了这个唯一的md5信息摘要。如果在以后传播
这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下
载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算md5时就会发
现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个
第三方的认证机构,用md5还可以防止文件作者的"抵赖",这就是所谓的数字签名
应用。

  md5还广泛用于加密和解密技术上。比如在unix系统中用户的密码就是以md5
(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户
输入的密码计算成md5值,然后再去和保存在文件系统中的md5值进行比较,进而确定
输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就
可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限
的用户知道,而且还在一定程度上增加了密码被破解的难度。

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。