APP下载

报文摘要算法MD5的分析与改进

2014-12-13汪勋亮赵春霞郭剑辉

数字技术与应用 2014年8期

汪勋亮++赵春霞++郭剑辉

摘要:MD5算法在数据加密方面有着广泛的应用,但是它无法抵御查字典攻击和差分等攻击。为此本文介绍了报文摘要算法MD5和Base64算法,以及在两种算法的基础上提出了MD5的改进算法,以应对以上被攻击的缺陷。

关键词:报文摘要算法 Hash函数 Base64算法 改进算法 字典攻击

中图分类号:TP393.08 文献标识码:A 文章编号:1007-9416(2014)08-0117-03

1 概述

随着信息化的高速发展,人们对信息安全的需求接踵而至。我们经常需要一种措施来保护我们的数据,防止被一些怀有不良用心的人所看到或者破坏。人才竞争、市场竞争、金融危机、敌特机构等都给企事业单位的发展带来巨大风险,内部窃密、黑客攻击、无意识泄密等窃密手段成为了人与人之间、企业与企业之间、国与国之间的安全隐患。因此,在客观上就需要一种强有力的安全措施来保护机密数据不被窃取或篡改。解决这个问题的方式就是通过数据加密。进几年来各大知名网站相继爆出数据库密码被黑,造成上千万用户的用户密码丢失,由于大部分用户的很多网站的账号密码由此带来的危害是不可预测的。所以对数据进行加密就显得非常必要。

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

普遍认为MD5是很安全,因为暴力破解的时间是一般人无法接受的。实际上如果把用户的密码MD5处理后再存储到数据库,其实是很不安全的。因为用户的密码是比较短的,而且很多用户的密码都使用生日,手机号码,身份证号码,电话号码等等。或者使用常用的一些吉利的数字,或者某个英文单词。如果把常用的密码先MD5处理,把数据存储起来,然后再跟你的MD5结果匹配,这时就有可能得到明文。

2 MD5算法和Base64算法原理

MD5算法过程:

MD5算法可以简要的叙述为:MD5是以512位分组来进行处理输入的信息,而且每一个分组同时又被划分成16个32位的子分组,经过一系列的处理后,它的输出同时由四个32位分组进行组成,然后将这四个32位分组进行级联后将生成一个128位的散列值。

(1)填充:如果输入信息的长度(bit)对512求余后得到结果不等于448,那么就需要填充使得对512求余的结果为448。填充的办法是填充一个1和n个0。填充结束后,信息的长度就变成了N*512+448(bit)。

(2)记录信息的长度:用64位大小来存储填充前信息的长度。把这64位加在第一步所计算结果的后面,这样信息的长度大小就变成了N*512+448+64=(N+1)*512位。

(3)装入标准的幻数(四个整数):标准的幻数(物理顺序)是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。如果在程序中定义应该是(A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L)。

(4)四轮循环运算:循环的次数是分组的个数(N+1):

1)将每一512字节细分成16个小组,每个小组64位(8个字节);

2)先认识四个线性函数(&是与,|是或,~是非,^是异或):

F(X,Y,Z)=(X&Y)|((~X)&Z)

G(X,Y,Z)=(X&Z)|(Y&(~Z))

H(X,Y,Z)=X^Y^Z

I(X,Y,Z)=Y^(X|(~Z))

3)设Mj表示消息的第j个子分组(从0到15),<<

FF(a,b,c,d,Mj,s,ti)表示a=b+((a+F(b,c,d)+Mj+ti)<<

GG(a,b,c,d,Mj,s,ti)表示a=b+((a+G(b,c,d)+Mj+ti)<<

HH(a,b,c,d,Mj,s,ti)表示a=b+((a+H(b,c,d)+Mj+ti)<<

II(a,b,c,d,Mj,s,ti)表示a=b+((a+I(b,c,d)+Mj+ti)<<

4)四轮运算;

5)每轮循环后,将A,B,C,D分别加上a,b,c,d,然后进入下一循环。

Base64算法过程[5]:

根据Base64编码的原理,先将输入信息转化为二进制流,然后每次取出其中的6位,与标准编码表对照,找到相应的ASCI字符,最后将取出的字符转化为输出即可得编码流。

具体实现步骤如下:

(1)取编码表值方法。

将字符转化为6位二进制数据流。

1)从标准编码表的第一个字符开始;

2)如果要查找的字符和标准编码表的当前字符相等,则返回 字符所在的位置,作为返回数据流,退出循环;否则,取标准编码表中的下一个字符;

3)重复第"重复第2步骤,直到找到这样的字符或到达标准编码表的尾部;

4)如果未找到,则返回错误;否则返回该字符在标准编码表位置,输出该数据作为数据流。

(2)Base64编码方法。

将取编码表值方法得到的二进制数据流转化为 Base64 编码流。

1)分配要转化的二进制数据流所需位空间,并将该二进制数据流装入到位空间内;

2)取出其中的6位,并将6位转化成整型,得出整型数值n;

3)在标准编码表中,找到该整型数值n所对应的字符,即Table[n];

4)取出该字符,作为输出Base64编码流;

5)重复第(2)步骤,直到所有的二进制数据流被取空;

6)返回编码的Base64数据流。

(3)Base64解码方法:

将得到的Base64编码流转化为二进制数据流。

1)取出Base64编码流的一个字符;

2)将这字符通过取编码表值,转化成6位二进制数据流;

3)重复第"重复第2步骤,直到所有的Base64编码流被取空;

4)返回解码的二进制数据流。

3 改进算法描述

目前对于网站系统或者信息管理系统来说,传统的MD5算法的应用主要是针对于用户的口令进行加密处理。一般情况下,在用户的密码复杂度不足或者是一般时,会有多种方法对其加密后的密码进行破解的。从以下几个方面对MD5算法进行改进:

(1)对已经进行MD5加密后的密文进行打乱重新排列,是的破解者无法重得到的密码直接破解密码;得到产生结果为32位的密文时对32拆封4组,每组8位,然后对这4组进行重排或者每组组内进行重排。

(2)对已经进行MD5加密后的密文进行二次加密处理;当得到MD5密文的时候在结合Base64的改进算法[6]对此密文进行二次加密。

(3)对每次MD5加密后得到不同的动态MD5密文;对得到的MD5密文中间不同的位置插入当前加密的系统时间的Base64加密密文,从而迷惑解密者。

综合以上几个方面的改进思想,改进的算法步骤如下:

(1)首先对明文进行MD5加密,如明文为:hello;加密结果和通过在线查询结果如图1、图2。

可以看出复杂度不高的密码经过md5加密是可以通过在线的进行破解,我们把md5加密的结果分割成四部分,分别为:5d41402a、bc4b2a76、b9719d91、1017c592。

(2)生成当前的系统时间,并对系统的时间用改进后的Base64算法进行加密,如图3所示。

然后去除最后的空白补填在分成两组:MTAtMDgxM、zowM zo1OQ。

(3)对步骤(1)的分组进行重排得到1017c592bc4b2a765d4 1402ab9719d91,在对重排后的密文进行二次Base64加密得到:MTAxN2M1OTJiYzRiMmE3NjVkNDE0MDJhYjk3MTlkOTE=。

(4)对步骤(3)得到的二次加密密文进行分组:MTAxN2M1OTJ、iYzRiMmE3Nj、VkNDE0MDJhY、jk3MTlkOTE=,然后把步骤(2)生成的Base64密文分组插入其中得到最终的密文:MTAxN2M1O TJMTAtMDgxMiYzRiMmE3NjzowMzo1OQVkNDE0MDJhYjk3MTlkOTE=

(5)在自身系统登录验证的时候要经过去除动态干扰的那部分密文才可以进行验证。

4 结语

由于现在的破解MD5解密的网站是对大量明文进行加密然后把相应的明文-密码记录存储在数据库中,然后直接通过查询密文就可以直接获取明文密码,所以普通密码的MD5的破解是完全可以实现的。本文研究了一个典型的单向散列算法MD5,并在此算法和Base64的改进算法的基础上进行改进、使得加密后的密文更加复杂,不在可能通过简单的解密网站进行破解,系统自身的登陆验证也需要通过一定的规则生成密文后在经过一定的处理去除动态干扰的部分密文才能进行验证。所以本文提示的MD5改进算法大大提高了原算法的安全性。

参考文献

[1]RIVEST R.The MD5 Message-Digest Algorithm[S].RFC 1321.MIT Laboratory for Computer Science and RSA DATA Security,Inc.April 1992.

[2]FREED N .RFC2045,Multipurpose Internet mail extensions[S/OL].[2011-12-01].http://rfc.net/rfc2045.Html.

[3]周荣华.散列函数密码分析的研究[D].武汉:华中科技大学,2006:51-54.

[4]吴建军,柏传慧.使用MD5保护Web应用安全.计算机安全,2003(10):45-48.

[5]韩宇贞,朱华生.基于Base64编码的数据加密技术.南昌水专学报,2002(12):39-40.

[6]姚峰.Java平台中Base64编码/解码算法的改进.计算机应用与软件,2008(12):164-165.

[7]柏银,李志蜀,朱兴东.MD5算法及其在远程身份认证中的应用[J].四川大学学报:自然科学版,2006,43(2):205-309.endprint

1)分配要转化的二进制数据流所需位空间,并将该二进制数据流装入到位空间内;

2)取出其中的6位,并将6位转化成整型,得出整型数值n;

3)在标准编码表中,找到该整型数值n所对应的字符,即Table[n];

4)取出该字符,作为输出Base64编码流;

5)重复第(2)步骤,直到所有的二进制数据流被取空;

6)返回编码的Base64数据流。

(3)Base64解码方法:

将得到的Base64编码流转化为二进制数据流。

1)取出Base64编码流的一个字符;

2)将这字符通过取编码表值,转化成6位二进制数据流;

3)重复第"重复第2步骤,直到所有的Base64编码流被取空;

4)返回解码的二进制数据流。

3 改进算法描述

目前对于网站系统或者信息管理系统来说,传统的MD5算法的应用主要是针对于用户的口令进行加密处理。一般情况下,在用户的密码复杂度不足或者是一般时,会有多种方法对其加密后的密码进行破解的。从以下几个方面对MD5算法进行改进:

(1)对已经进行MD5加密后的密文进行打乱重新排列,是的破解者无法重得到的密码直接破解密码;得到产生结果为32位的密文时对32拆封4组,每组8位,然后对这4组进行重排或者每组组内进行重排。

(2)对已经进行MD5加密后的密文进行二次加密处理;当得到MD5密文的时候在结合Base64的改进算法[6]对此密文进行二次加密。

(3)对每次MD5加密后得到不同的动态MD5密文;对得到的MD5密文中间不同的位置插入当前加密的系统时间的Base64加密密文,从而迷惑解密者。

综合以上几个方面的改进思想,改进的算法步骤如下:

(1)首先对明文进行MD5加密,如明文为:hello;加密结果和通过在线查询结果如图1、图2。

可以看出复杂度不高的密码经过md5加密是可以通过在线的进行破解,我们把md5加密的结果分割成四部分,分别为:5d41402a、bc4b2a76、b9719d91、1017c592。

(2)生成当前的系统时间,并对系统的时间用改进后的Base64算法进行加密,如图3所示。

然后去除最后的空白补填在分成两组:MTAtMDgxM、zowM zo1OQ。

(3)对步骤(1)的分组进行重排得到1017c592bc4b2a765d4 1402ab9719d91,在对重排后的密文进行二次Base64加密得到:MTAxN2M1OTJiYzRiMmE3NjVkNDE0MDJhYjk3MTlkOTE=。

(4)对步骤(3)得到的二次加密密文进行分组:MTAxN2M1OTJ、iYzRiMmE3Nj、VkNDE0MDJhY、jk3MTlkOTE=,然后把步骤(2)生成的Base64密文分组插入其中得到最终的密文:MTAxN2M1O TJMTAtMDgxMiYzRiMmE3NjzowMzo1OQVkNDE0MDJhYjk3MTlkOTE=

(5)在自身系统登录验证的时候要经过去除动态干扰的那部分密文才可以进行验证。

4 结语

由于现在的破解MD5解密的网站是对大量明文进行加密然后把相应的明文-密码记录存储在数据库中,然后直接通过查询密文就可以直接获取明文密码,所以普通密码的MD5的破解是完全可以实现的。本文研究了一个典型的单向散列算法MD5,并在此算法和Base64的改进算法的基础上进行改进、使得加密后的密文更加复杂,不在可能通过简单的解密网站进行破解,系统自身的登陆验证也需要通过一定的规则生成密文后在经过一定的处理去除动态干扰的部分密文才能进行验证。所以本文提示的MD5改进算法大大提高了原算法的安全性。

参考文献

[1]RIVEST R.The MD5 Message-Digest Algorithm[S].RFC 1321.MIT Laboratory for Computer Science and RSA DATA Security,Inc.April 1992.

[2]FREED N .RFC2045,Multipurpose Internet mail extensions[S/OL].[2011-12-01].http://rfc.net/rfc2045.Html.

[3]周荣华.散列函数密码分析的研究[D].武汉:华中科技大学,2006:51-54.

[4]吴建军,柏传慧.使用MD5保护Web应用安全.计算机安全,2003(10):45-48.

[5]韩宇贞,朱华生.基于Base64编码的数据加密技术.南昌水专学报,2002(12):39-40.

[6]姚峰.Java平台中Base64编码/解码算法的改进.计算机应用与软件,2008(12):164-165.

[7]柏银,李志蜀,朱兴东.MD5算法及其在远程身份认证中的应用[J].四川大学学报:自然科学版,2006,43(2):205-309.endprint

1)分配要转化的二进制数据流所需位空间,并将该二进制数据流装入到位空间内;

2)取出其中的6位,并将6位转化成整型,得出整型数值n;

3)在标准编码表中,找到该整型数值n所对应的字符,即Table[n];

4)取出该字符,作为输出Base64编码流;

5)重复第(2)步骤,直到所有的二进制数据流被取空;

6)返回编码的Base64数据流。

(3)Base64解码方法:

将得到的Base64编码流转化为二进制数据流。

1)取出Base64编码流的一个字符;

2)将这字符通过取编码表值,转化成6位二进制数据流;

3)重复第"重复第2步骤,直到所有的Base64编码流被取空;

4)返回解码的二进制数据流。

3 改进算法描述

目前对于网站系统或者信息管理系统来说,传统的MD5算法的应用主要是针对于用户的口令进行加密处理。一般情况下,在用户的密码复杂度不足或者是一般时,会有多种方法对其加密后的密码进行破解的。从以下几个方面对MD5算法进行改进:

(1)对已经进行MD5加密后的密文进行打乱重新排列,是的破解者无法重得到的密码直接破解密码;得到产生结果为32位的密文时对32拆封4组,每组8位,然后对这4组进行重排或者每组组内进行重排。

(2)对已经进行MD5加密后的密文进行二次加密处理;当得到MD5密文的时候在结合Base64的改进算法[6]对此密文进行二次加密。

(3)对每次MD5加密后得到不同的动态MD5密文;对得到的MD5密文中间不同的位置插入当前加密的系统时间的Base64加密密文,从而迷惑解密者。

综合以上几个方面的改进思想,改进的算法步骤如下:

(1)首先对明文进行MD5加密,如明文为:hello;加密结果和通过在线查询结果如图1、图2。

可以看出复杂度不高的密码经过md5加密是可以通过在线的进行破解,我们把md5加密的结果分割成四部分,分别为:5d41402a、bc4b2a76、b9719d91、1017c592。

(2)生成当前的系统时间,并对系统的时间用改进后的Base64算法进行加密,如图3所示。

然后去除最后的空白补填在分成两组:MTAtMDgxM、zowM zo1OQ。

(3)对步骤(1)的分组进行重排得到1017c592bc4b2a765d4 1402ab9719d91,在对重排后的密文进行二次Base64加密得到:MTAxN2M1OTJiYzRiMmE3NjVkNDE0MDJhYjk3MTlkOTE=。

(4)对步骤(3)得到的二次加密密文进行分组:MTAxN2M1OTJ、iYzRiMmE3Nj、VkNDE0MDJhY、jk3MTlkOTE=,然后把步骤(2)生成的Base64密文分组插入其中得到最终的密文:MTAxN2M1O TJMTAtMDgxMiYzRiMmE3NjzowMzo1OQVkNDE0MDJhYjk3MTlkOTE=

(5)在自身系统登录验证的时候要经过去除动态干扰的那部分密文才可以进行验证。

4 结语

由于现在的破解MD5解密的网站是对大量明文进行加密然后把相应的明文-密码记录存储在数据库中,然后直接通过查询密文就可以直接获取明文密码,所以普通密码的MD5的破解是完全可以实现的。本文研究了一个典型的单向散列算法MD5,并在此算法和Base64的改进算法的基础上进行改进、使得加密后的密文更加复杂,不在可能通过简单的解密网站进行破解,系统自身的登陆验证也需要通过一定的规则生成密文后在经过一定的处理去除动态干扰的部分密文才能进行验证。所以本文提示的MD5改进算法大大提高了原算法的安全性。

参考文献

[1]RIVEST R.The MD5 Message-Digest Algorithm[S].RFC 1321.MIT Laboratory for Computer Science and RSA DATA Security,Inc.April 1992.

[2]FREED N .RFC2045,Multipurpose Internet mail extensions[S/OL].[2011-12-01].http://rfc.net/rfc2045.Html.

[3]周荣华.散列函数密码分析的研究[D].武汉:华中科技大学,2006:51-54.

[4]吴建军,柏传慧.使用MD5保护Web应用安全.计算机安全,2003(10):45-48.

[5]韩宇贞,朱华生.基于Base64编码的数据加密技术.南昌水专学报,2002(12):39-40.

[6]姚峰.Java平台中Base64编码/解码算法的改进.计算机应用与软件,2008(12):164-165.

[7]柏银,李志蜀,朱兴东.MD5算法及其在远程身份认证中的应用[J].四川大学学报:自然科学版,2006,43(2):205-309.endprint