MD5算法在口令认证中的安全性改进

2012-04-29 00:44王志中
电脑知识与技术 2012年2期
关键词:安全性

王志中

摘要:该文介绍了MD5算法在口令认证中的加密技术及存在的安全隐患,重点介绍了提高MD5加密算法应用安全性应采取的具体措施和方法。

关键词:MD5;口令认证;安全性

中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)02-0296-02

MD5的全称是Message Digest 5(信息摘要算法版本5),20世纪90年代初由MIT Laboratory for ComputerScience和RSA Data Secu? rity Inc的Ronald L.Rivest开发出来[1]。它是将一段任意长度报文,即数据文件,文本文件或者二进制文件,通过一系列算法压缩成一段128位的信息摘要。MD5算法的本质是一种哈希函数,并且具有不可逆的特性,即无法通过信息摘要来恢复原始的文件,利用MD5技术来存储账号的安全信息而不是直接存储可以保证即便黑客入侵系统得到高权限账号信息也无法破解密码[2]。2004年王小云教授提出了破解MD5的方法。2008年12月31日,美国和欧洲的联合研究团队在柏林召开的25C3安全大会上公布,他们利用200台索尼PlayStation 3组成的超级计算网络破解了用于安全网页数字签名的MD5加密算法。这些研究成果进一步证明,使用MD5进行数字签名、口令认证可能不再安全,近年来,云计算技术的迅猛发展,对MD5加密算法的安全性也提出了更高的要求。提高MD5应用的安全性迫在眉睫,本文就如何提高MD5在口令认证中的安全性提出了一些可行措施和方法。

1 MD5算法在口令认证中的验证机制

MD5算法的具体描述可参见文献[1]。MD5在数据的机密性方面的应用是利用它的单向加密性,即不可逆性[3]。现如今,BBS,电子邮箱,博客等服务都需要保存用户信息,这些信息对于服务提供者和用户来说都是极为重要的,特别是高权限的用户信息。一般情况下是在数据库中建立一个用于存放用户信息的表,这个表中至少有账号、密码及权限级别三个字段,当用户登录时,系统把用户输入的密码进行MD5 Hash运算,然后与保存在文件系统中的MD5值进行比较,来验证输入的密码是否正确。通过这样的步骤,系统可以在不需要知道用户密码明码的情况下就能验证用户登录系统的合法性,使用户密码具有较高的安全性。

下面是系统登录认证ASP.NET简要函数及实现:

1)打开命名空间:

using System.Web.Security;

2)在用户注册界面,简要代码:

Regist(UserID.Text,FormsAuthentication.HashPasswordForStoringInConfigFile(Password.Text,"MD5"));

其中UserID.Text表示用户ID,即注册登录帐号,Password.Text表示注册密码,Regist实现将账号和加密后的密码字符串存储到数据库中。

3)在登录界面,简要代码:

Check(UserID.Text,FormsAuthentication.HashPasswordForStoringInConfigFile(Password.Text,"MD5"));

其中UserID.Text表示注册成功用户ID,即已经存在的登录帐号,Password.Text表示登录用户的密码,Check实现用户输入的账号和加密后的密码与数据库中的帐号密码是否匹配。

2 MD5算法在数据安全应用中的隐患

对上述验证方法常用的攻击方法是入侵账号服务器,得到数据库中的资料之后就可以用任意权限账号访问该网站。

对于普通强度的口令加密,可以通过以下四种方式进行破解:

1)在线查询密码。一些在线的MD5值查询网站提供MD5密码值的查询,输入MD5密码值后,如果在数据库中存在,那么可以很快获取其密码值。如管理员密码是“admin888”,其MD5值是“7fef6171469e80d32c0559f88b377245”,放到cmd5.com上,不到1秒钟即可得到原文。

2)使用MD5破解工具。网络上有许多针对MD5破解的专用软件,通过设置字典来进行破解。

3)通过社会工程学来获取或者重新设置用户的口令。

4)随着云计算技术的迅猛发展,MD5算法被暴力破解的代价和成本大幅下降,在2010年亚马逊EC2推出集群GPU运算服务,每一个GPU提供了甚至超过每秒100万兆次的双精度浮点计算的超高的性能。通过GPU实例的数百个内核并行处理能力,工作负载可以被大大加速[4]。在暴力破解MD5算法方面,GPU的速度比四核CPU快数百倍。

因此简单的MD5加密是没有办法达到绝对的安全的,因为普通的MD5加密有多种暴力破解方式,因此如果想要保证信息系统安全,必须提高MD5在口令认证等方面的安全性。

3提高MD5口令认证安全性的措施和方法

提高MD5在口令认证等方面的安全性可以采用对MD5加密过程进行变换,或使用增加自定义算法、增强加密信息进行干涉等方法,使MD5密文数据库中信息不再是单纯的MD5加密信息。

3.1改变MD5加密次数

这种变换方法的具体做法是对—个需要加密的数据进行N次MD5运算,具体运算多少次可由管理员确定。如前面所说的密码“admin888”我们把它再MD5加密一次,即md5(md5(admin888)),得到的值再拿到cmd5.com上去破解,过了数个小时,仍没有破解成功。此外,多次的MD5并不会过分影响脚本性能与速度。将密码admin888用md5加密了1000次,结果为“79cbb81f5a6eb616b6897f61e7c76380”,其执行时间0.00805997848511秒,测试结果显示,基本上属于正常范围。

3.2密文分割

此类方法是将用户密码进行一次MD5加密得到M,将密文M分为左右两个64 bit的分组,并分别进行MD5加密,得到相应的密文,以M1和M2表示,再将M1和M2为先后连接成一个字符串,并对行MD5加密,最后得到密文。

3.3增加自定义加密算法

此类方法首先使用自定义加密算法对用户密码进行加密得到密文,然后再对密文进行MD5加密得到MD5密文。

自定义算法千变万化,下面假定用户密码为“password”为例进行说明。假设,密钥为“1”。将“password”中每个字符与“1”分别异或就得到新的密文“q`rrvse”。

3.4增强加密信息

在加密过程的—个步骤中,附加—个字符串,干涉被加密的数据。例如假定密码为“admin”,处理时在尾部添加密码的逆序变为“adminnimda”,然后进行MD5加密,经过这样的处理之后可以有效降低密码被破解的可能性。

3.5修改MD5算法

MD5中的4个常数,A、B、C、D四个缓冲区寄存器,它们的初始值是:

a = 0x67452301

b = 0xEFCDAB89

c = 0x98BADCFE

d = 0x10325476

MD5的算法过程主要是一些异、或、求模等的运算。实际上,只要把初始值进行稍微改变,比如只改变其中一位,不必改动算法的其它部分,就产生自己的新MD5散列算法[5]。现在我们将a = 0x67452301改为a = 0x67452302,这样我们就得到了一个全新的MD5算法,即使数据库被下载,仍可以放心地使用。

即使用户密码数据暴露,那么上述讨论的MD5变换算法就可以极大地增加破解用户密码的难度,从而提高MD5算法应用的安全性。

4结束语

虽然王小云教授公布了破解MD5算法的报告,宣告该算法不再安全,但MD5算法在信息安全领域仍占有重要地位。通过一些有效的安全措施和方法,如通过MD5多次加密和算法变形等,能够显著提升密码保护及口令认证的安全性。我们在实际运用中需要结合自身实际,掌握一些适合自己的方法。

参考文献:

[1] Rivest R.The MD5 Message-Digest Algorithm[S].RFC 1321,April 1992.

[2] WANG XIAO-YUN,YUHONG-BO.How to breakMD5 and other hash functions[C].Advances in Cryptology-EURO-CRYFr2005,LNCS 3494.Heidelberg:Springer-Verlag,2005:19-35.

[3]陈世伟,金晨辉.MD5碰撞攻击中的充要条件集[J].软件学报,2009,20(6):1617-1624.

[4]亚马逊.EC2推出集群GUP运算服务[EB/OL].http://cloud.csdn.net/a/20101117/282076.html

[5]张越,陈跃,刘林飞.改进MD5码增强网站密码安全性[J].当代医学,2009(2)

猜你喜欢
安全性
两款输液泵的输血安全性评估
新染料可提高电动汽车安全性
既有建筑工程质量安全性的思考
某既有隔震建筑检测与安全性鉴定
基于安全性需求的高升力控制系统架构设计
加强广播电视信息安全性的思考
网约车安全性提高研究
注意药酒服用的安全性
基于ASP网站的安全性研究与实现
田间施用灭幼脲在桃中的残留安全性评估