1、12009 年全国技工教育和职业培训优秀教研成果评选活动参评论文基于 MD5 二重加密的安全技术探讨摘 要: MD5 加密算法由于高效、能跨平台使用,所以在数字签名、电子商务、信息加密等领域中被广泛应用,但已被提出若干破的算法。本文针对这个情况,提出并讨论了基于 MD5 的二重加密安全技术,通过对两个著名的在线网站的测试,证明了该技术用于各种基于 ASP、PHP 的 Web 应用程序中存储账户密码的优越性及安全性、简单可行性。关键词: MD5;二重加密;安全21 引言随着计算机网络的高速发展和服务的日趋完善,网络上流通的信息量呈几何级数增加。其中就有:论坛、聊天室、内容管理系统等。为了有效地保
2、护、存储、管理和使用网上的私有信息,MD5、 SHA 等数据加密技术被广泛应用于网络领域。但 Wang Xiaoyun 等(2005)给出了 MD5 能产生碰撞的一个充分条件集,并首次成功对 MD5 进行了碰撞攻击。本文要研究的是如何在原有 MD5 算法的基础上,使用简单易用的二重加密技术来充分发挥 MD5 的作用,同时大大提高信息的安全性。2 基于 MD5 二重加密的安全技术的提出2.1 MD5 算法描述MD5 的全称是 Message-digest Algorithm 5(信息-摘要算法) ,用于确保信息传输完整一致。在 90 年代初由 Ronald L. Rivest 提出。它的作用是让
3、大容量信息在用数字签名软件签署私人密匙前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数) 。MD5的主要优点在于:MD5 面向的是32位的电脑,其能单向、极难逆的字符串变换算法;原文的微小变化,得到的摘要将大相径庭。近年来,出现了若干MD5 破解算法,但多为概率性破解,算法只对部分信息集合适用,其实际影响要远小于它的理论意义,因此MD5仍是当前数字签名、加密等技术领域比较安全、有广泛应用的算法。M D5 是一种采用单向加密的不可逆加密算法,MD5 算法的应用主要是针对用户的注册登录,用户在注册时所提交的信息(密码)是利用 MD5 算法加3密之后再保存到数据库中,这样
4、可以简单防止用户密码的泄露,有效地保护了系统的安全。在用户进行登录时,为了身份验证,必须对输入的密码重新进行MD5 加密,然后再与数据库中的信息进行比对,相同便可进入系统。2.2 基于 ASP、PHP 的 Web 应用程序的安全现状自从微软推出了 ASP 后,它以其强大的功能,简单易学的特点而受到广大Web 开发人员的喜欢。 ASP 由于使用了组件对象模型即 COM 组件,所以它会变的十分强大,但是这样的强大由于 Windows NT 系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,那么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失。由于 PHP 本身的
5、代码开放所以它的代码在许多工程师手中进行了检测,同时它与 Apache 编译在一起的方式也可以让它具有灵活的安全设定。所以到现在为止,PHP 具有了公认的安全性能。而事实是该类网站极易被攻击,存在较大的安全隐患,先来看一组采集于2009 年 4 月下旬的相关数据:1、选取知名网站“中国被黑站点统计系统” (www.zone-)如图 1所示,从中看到共有纪录 60067 条,说明目前已被提交的被黑站点就有 6 万个,从中可以看出用 ASP 开发的网站占绝大多数, PHP 次之,JSP 少量。4图 1 www.zone- 上最近的统计结果2、在知名搜索引擎“谷歌” ()上以“ASP ”作为关键字进
6、行搜索,约有 2,400,000,000 项符合 ASP 的查询结果,搜索用时 0.04 秒。再以关键字“PHP”进行搜索,约有 9,710,000,000 项符合 PHP 的查询结果,搜索用时 0.04 秒。而以关键字“JSP”进行搜索约有 656,000,000 项符合 JSP 的查询结果,搜索用时 0.04 秒。这些数据再次说明在目前的三大主流 Web 动态网站技术当中,ASP 和 PHP 占据大量市场份额,实际情况亦是如此。ASP 和 PHP虽然应用广泛,而其安全性却相对较差。在各种各样的动态网站中都存在着许多漏洞,比如:SQL 注入、XSS、 Access 数据库被非法下载等。此类漏
7、洞导致了许多的网站被入侵者攻破,从而数据库被盗取,这些数据库里面有着大量的敏感资料,其中就包括密码,目前这些密码绝大多数都是经 MD5 加密过一次的,这样入侵者即使得到数据库,也无法立即得出里面的密码,这时就需要对 MD5 进行破解,目前普遍采用的方法有两种,第一种是本地破解,另一种是在线破解,而具体的破解方式又主要包括暴力破解及字典破解。2.3 常见对单次 MD5 算法的攻击方法常见对单次 MD5 的攻击方法有:5(1) 穷举法。MD5 的输出是一个 128 位的数。攻击者只知道这个输出结果,他要想得到输入 m 或另一个输出 m,使得 H( m) = H( m) (H 为 hash 函数)
8、,用一台每秒运算达 10 亿次的机器也要运算 1. 0731022 年。因此是不可行的。(2) 生日攻击法。这是应用概率统计法来对 MD5 进行攻击,即试图找到一对不同的输入,经过 hash 函数后产生相同的输出。这样的输入称为匹配对。给定 hash 函数的 n 个输入和 k 个可能的输出。共有 n(n -1) /2 个输入对。对每个输入对来说,两个输入产生相同输出的概率是 1/k。这样若输入对数目达到k/2,那么就有 50%的概率得到一个匹配对。在 nsqrt (k)的情况下就会有较大的概率得到这样的输入匹配对。在 MD5 中就需要尝试 264 次。如果用每秒运算达 10 亿次的机器也得花费
9、 58 年。显然这样的做法是不可行的,因此 MD5算法相对来说是十分安全的。此外,网络上有以下一些主流破解方式:比如 MD5Crack v4.1 是“阿呆”开发的一个专门用于本地破解使用 MD5 加密过的密码的工具,其破解速度相当快,在 Windows XP SP3、AMD4000+ 、 1G 内存的计算环境下,遍历整个 8位纯数字密码空间只需要大约 45 秒,即在这段时间内任何以生日作为其密码(例如 19870902)的都将被解出。对其性能进行简单分析如下:98/90478296,即大约每秒可猜测 5 万次,这种速度在字典攻击模式下对于目前的大多数密码都是相当有威胁的。而远程破解则更具威胁,
10、下面就列举两个最为广泛的用于在线破解单次 MD5 密码的网站:(1)。该站的自我简介为“本站 4T 硬盘已经上线,共有 md5记录 457,354,352,282 条,宇宙第一,且还在不断增长中,已包含 12 位及 12 位以下数字、8 位字母、全部 7 位及以下字母加数字等组合,并针对国内用户做6了大量优化,例如已经包含所有手机号码、全国部分大中城市固定电话号码、百家姓、常用拼音等大量组合,另加入了大型网站真实会员密码数据 100 万条。本站数据量大,查询速度快,同时支持 16 位及 32 位密码查询。通过对 10 万会员的真实动网论坛样本数据的测试,本站对于动网论坛密码的命中率达到 83%
11、。全国独此一家。本站仍在不断扩大数据,不断扩大免费查询范围,保证数据量和免费查询量世界第一,世界最稳定,世界最快速” 。进行测试如下:将初始密码为“123456”输入后,得到的查询结果为:MD5(123456,32) = e10adc3949ba59abbe56e057f20f883e,MD5(123456,16) = 49ba59abbe56e057,大部分网站数据库中存储的将是该部分密码,见图 2 所示: 图 2 上使用单次 MD5 算法加密的结果但是,若将进行单次 MD5 加密后得到的对应密码如“e10adc3949ba59abbe56e057f20f883e”输入网站进行查询,将会很
12、快破解出对应的原始密码是“123456” ,见图 3。图 3 上使用单次 MD5 算法加密后被破解的结果(2)www.xmd5.org。该站的自我简介为“本站是国内 MD5 在线破解的权威站点。快速,准确,免费,稳定,同时提供 16 位以及 32 位 MD5 在线加密解密破解服务!此种破解方式的速度更是惊人,任何弱密码(例如:生日、手机号)都将瞬间被解出” 。如把数据库中存放的密码7“93c8ce1a2c75c149c9d095a0d74ce2e9”用该网站解密后,短短几秒种后就被破解,得到结果为“wuzhou” 。2.4 基于 MD5 的二重加密安全技术2.4.1 算法描述由以上叙述可以看
13、到,以上的各种威胁主要有关于密码的安全存储,经过研究与分析,本文提出一种改进密码存储方案- MD5 二重加密安全技术,这种方案能大大提高密码存储的安全性,其实现方式相当简单,只需对目前网站普遍所使用的 MD5 单次加密进行一次迭代即可,例如:在网站开发代码中把md5(“待加密的密码“)改为 md5(md5(“待加密的密码“),即 MD5 二重加密。实现方法主要有三种,如下:(1)网站开发者或者在被截获的网站源代码中,在所有原来单次 MD5 加密的部分代码进行修改,通常该部分代码会在“用户注册” 、 “用户/管理员登录”页码出现。而网络登录验证用户是否合法,都是采取从表单得到用户输入的密码,然后
14、用 MD5 加密后与数据库里的相应内容进行比较。(2)利用递归的思想,对单次 MD5 加密算法进行一次递归,实现 MD5 算法的迭代加密。这个方法也较易实现,易于被一般程序员掌握。(3)直接修改原来的 MD5 算法,实现二重加密。2.4.2 算法测试(1)利用笔者开发的小工具“MD5 值计算工具 ”,首次计算出原始密码为“123456”经过单次 MD5 加密后的密码为“E10ADC3949BA59ABBE56E057F20F883E”,与 得到的结果仅仅是字母的大小写不同而已(为了看得更清楚,该小工具特意显示成大写字8母) ,结果如图 4 所示。图 4 将密码“123456”使用小工具进行单
15、次 MD5 加密的结果(2)将单次 MD5 加密后的结果进行再次 MD5 加密,即二重加密,结果如图5 所示。图 5 二重 MD5 加密的结果(3)将二次加密得到的结果“F59BD65F7EDAFB087A81D4DCA06C4910”即存入数据库中的结果,输入,结果如图 6 所示。图 6 进行二次 MD5 加密后较难被破解此图说明了二重 MD5 加密已经足够安全。实验证明,即使用户使用的密码为 123456 这样的弱密码,使用此种方案9存储,则以上破解方法将完全无效,因为以上破解方法都是基于 MD5 单次加密这个基础上的,同时目前也几乎没有针对 MD5 二重加密进行破解的网站及工具,这样,用
16、户密码的安全性就有了很大的提高。再者所增加消耗的计算资源也不多,毕竟密码验证在网站浏览中所占的比例极少,一个用户可能看一天的网页,却不可能登录几十次。同时,进行二重加密的情况下,网站的数据库容量并没有因此而增加,基本保持持平。但是破解者的工作量将大大增加,一定程度上提高了安全性。3 结语综上所述,MD5 二重加密安全技术作为一种改进的密码存储方案是可行的、更安全的,相对于目前的 MD5 单次加密技术有着很大的优越性。将其应用于各种基于 ASP、PHP 的 Web 应用程序中存储账户密码是一项非常好的安全措施,且技术简单,易于被人们掌握。参考文献1 张裔智,赵毅,汤小斌.MD5 算法研究J.计算机科学,2008,35(7):295-297.2 张浩华,齐维毅,赵子夫,等.基于JAVA 技术的MD5 加密算法的设计与实现J. 沈阳师范大学学报(自然科学版),2009,27(1):75-77.3 陈士伟,金晨辉.产生MD5 碰撞的新的充分条件集J.电子与信息学报,2009,31(3):740-744.