么丽颖
(黑龙江信息技术职业学院)
MD5算法的分析和改进
么丽颖
(黑龙江信息技术职业学院)
首先研究了MD5算法,并总结了MD5算法的特点及性能,在研究MD5算法的基础之上,提出了MD5改进加密算法.最后,对MD5算法与MD5改进算法对应于相关数据、性能进行了比较.
网络安全;加密;MD5算法;MD5改进算法;实时性
目前,信息化的高速发展为工作和生活带来的便利和影响是日新月异的.但随着信息化发展,网络信息的安全隐患也时刻存在.如何确保信息传递的安全性,这是信息化建设过程中必须要探索解决的问题.在Web访问方式中,认证和加密是两个最重要的分支.认证是为了确保信息通信的合法性、完整性和安全性,而加密的作用在于保证通信过程中信息的私有性,防止敌方获取保密信息.MD5加密验证的安全系数是相当高的,很多论坛等网络应用平台将用户名及密码通过MD5加密后保存.
加密算法的两个重要指标是加密强度和速度.加密强度是算法的基本性能,是算法抵抗各种恶意攻击的能力,即算法的可靠性和安全性.在大多数应用中,在保证一定加密强度的前提下,加密/解密的速度是最重要的性质,尤其是对于要求较高速度的应用.加密速度在根本上由算法本身的设计过程及步骤决定.该文在研究MD5算法的基础上,提出了提高MD5算法速度的MD5改进算法,使之更适用于实时性要求较高的场合.
单向散列函数也称Hash(哈希)函数,是现代密码学的基础.散列函数的思想是把输入的不定长度的报文转变成特定长度的报文摘要(叫做散列值).而单向散列函数是单向功能的散列函数,从输入的不定长度的报文值(预映射值)可轻易地计算其散列值,但要从其散列值反向得到一个特定值却不可行的,即处理过程是不可逆的.散列函数的标准是无冲突性,即难于生成两个预映射的值,计算得到相同的散列值.通常,预映射值的某个位或若干位的改变,将引起散列值中大部分位的改变.散列函数是公开的,处理过程也是公开的,单向散列函数的安全性是它的单向性及不可逆性.已知一个散列值,要找到其预映射值,不论是在计算上、还是时间上是不可行的,所以,把单向散列函数作为构成“指纹”的一种有效方法.散列函数可用于数字签名、消息的完整性验证、消息来源的查证等.常见的散列算法有 MD5,SHA -1.Snefru 等.
MD5算法的全称是Message-Digest algorithm 5(信息-摘要算法),MD5是一种不可逆的算法,即对生成的密文求逆,对应着无穷个逆.它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).在一般的情况下,MD5为一种非常优秀的中间技术,甚至可应用在绝密领域内,MD5应该是非常安全的了.
MD5算法是将任意长度的输入信息经过复杂的线性变换,生成一个唯一的长为128位(bits)的散列值,也称为数字指纹.通过MD5加密的数据具有相当高的可靠性,其主要特点有:
(1)加密单向性
MD5是采用单向加密的加密算法,单向加密是相对双向加密而言的.双向加密是加密算法中最常见的,它将明文数据加密为不可直接理解的密文数据.然后,在需要的时候,可以使用一定的解密算法将这些加密以后的密文解密为原始的明文数据.而MD5单向加密刚好相反,是不可逆加密.即只能对数据进行加密,不能对加密以后的密文进行解密.
(2)数字指纹性
MD5的数字指纹性主要有两点含义,一是任意两段明文数据,加密以后的信息不能是相同的,就如指纹一样,不同的人有不同的指纹,即具有唯一性;另一点是任意一段明文数据,经过加密以后其结果永远是不变的,即静态加密.前者的意思是不可能有任意两段明文加密以后得到相同的密文.后者的意思是如果加密特定的数据,得到的密文一定是相同的.
(3)安全性
由于MD5是采用单向不可逆加密,所以采用MD5加密的数据具有很高的安全性.不同的输入数据A,B,C分别经MD5算法加密后有各自不同的、静态的密文,且加密过程是单向不可逆的.加密后的信息就是被他人恶意窃取,也不会泄漏信息本身的真正含义.
把生要信息,例如考试系统的系统管理员的口令,先通过MD5加密模块加密,然后把加密后的信息用于应用中,这样就能有效地保证原始数据的安全性.正因为MD5具有这些特点,使得MD5的应用非常广泛.
首先按MD5算法对输入的数据进行填充,即数据扩展至k*512+448比特,k为整数,留出64比特在后面使用.然后,附加输入的数据长度,即用前一步留出的64比特填充数据的原始长度.这两步执行完,数据的长度为512的倍数.假设扩展后的数据长度为L*512比特,将扩展后的数据以512比特为单位进行分组,用Y0,Y1,… ,YL-1表示;同样,每一分组 Yq(q=0,1,… ,L-1)以32比特为单位,可表示为M[0…15].
再定义四个分别用于四轮变换的函数.
设Mj表示消息的第 j个子分组(从0到15),<<<s表示循环左移s位,则四种操作为:
其中,定义四个MD5基本的按位操作函数:a,b,c为 32 位整数.
之后,将扩展后的数据以分组为单位进行处理.
在MD5算法中,每轮的输入为当前处理的分组Yq和128比特的缓存区ABCD,每一轮进行16步运算操作,四轮中分别以不同的顺序使用分组中的16个字,其中,第一轮以字的初始顺序使用,第二轮至第四轮分别对字的顺序进行置换,以新的顺序使用16个字.
为了提高MD5算法的运算速度,使之适用于实时性要求较高的场合,需要降低其运算复杂度.主要思想就是减少迭代次数.首先按MD5算法对消息进行分组,在后续的处理中,对于其中的每一个分组,分为16个32位字,主循环共分四轮.四轮中分别以不同的顺序使用报文分组中的4个字:
在第一轮里,子分组 M[k1](k1=1,2,3,4)参与第一个非线性函数 F(x,y,z)=(x&y)|((~x)&z)的运算.
在第二轮里,子分组 M[k2](k2=6,7,8,9)参与第二个非线性函数 G(x,y,z)=(x&z)|(y&(~z))的运算.
在第三轮里,子分组 M[k3](k3=11,12,13,14)参与第三个非线性函数 H(x,y,z)=x^y^z的运算.
在第四轮里,子分组 M[k4](k4=0,5,10,15)参与第四个非线性函数 I(x,y,z)=y^(x|(~z))的运算.
下面是主循环的全部16步操作,每个函数后面的注释为原算法中相对应的操作步次.
下面对MD5算法与MD5改进算法对应于某些数据进行比较,如表1所示.
表1 MD5算法与MD5改进算法的比较
从表1中可以看出,运算操作步数减少了,算法复杂度降低了,所以速度比原来提高了.是通过在每一轮不重复计算相同的消息子分组来实现的.对MD5算法改进之后,有以下几点变化.
(1)改变了第2轮到第4轮的非线性函数初始变量输入形式.
(2)每步操作的循环位移量各不相同,且均为唯一的.
(3)由于下标取值不连续,使常数Ti之间更不相似.
(4)操作数目由64步降为16步,以此提高算法的运算速度.
最后,A,B,C,D 连续存放,共 16个字节,128位.按十六进制依次输出这个16个字节.
MD5改进算法处理过程逻辑如图1所示.
该文研究了一个典型的单向散列算法(MD5算法),在MD5的基础之上,提出了MD5的改进算法.MD5的改进算法把MD5算法分组主循环的全部64步操作缩减为16步操作,给出了每一步对应原算法中的操作步次.并给出了MD5改进算法处理过程逻辑图.MD5的改进算法在保证一定加密强度的前提下,提高MD5算法的运算速度,降低其运算复杂度,使之适用于实时性要求较高的场合.
[1]彭曙蓉,章兢,杨文忠.MD5算法在消除重复网页算法中的应用.电脑知识与技术(学术交流),2005(10):34-37.
[2]陈淳鑫,阎光.MD5算法在B/S结构下口令验证中的应用.微型机与应用,2005,24(2):32 -35.
[3]吴建军,柏传慧.使用MD5保护Web应用安全.计算机安全,2003(10):45-48.
[4]李丹.龙毅宏.MD5算法破解对实际应用的影响.信息安全与通信保密,2005(4):49-52.
[5]李霞.MD5加密算法浅析及应用.运城学院学报,2005,23(5):26-29.
图1 MD5改进算法处理过程逻辑
Analysis and Improvement of MD5 Algorithm
Yao Liying
(Heilongjing Infotech Profession College)
At first,MD5 algorithm is researched,and the characteristic and capability of the MD5 are summaried in the paper.The improved MD5 algorithm is put forward based on the research of the MD5.At last,the contrast between MD5 algorithm and the improved MD5 algorithm in related datum and capability are put forward.
Network security;Encryption;MD5 algorithm;The improved MD5 algorithm;Real-Time
2011-06-14
(责任编辑:黄永辉)