基于MD5算法的文件完整性检测系统分析及设计
2019-11-12◆靳燕
◆靳 燕
(山西大学商务学院信息学院 山西 030031)
随着互联网技术的快速发展,人们已经逐渐进入了全面信息化时代,信息技术已渗透在社会生产和生活的方方面面,人们的生活和工作方式也因此发生了巨大的变化。信息技术是一把双刃剑,可以成为网络作案的工具。非法窃取隐私信息、破坏网络服务系统等,保护重要信息不被泄露和破坏,是极为重要的。密码学综合了数学科学,电子通信技术以及计算机科学等多个领域的学科知识,在提供数据的安全性、保密性、完整性上发挥着重要的作用。本文详细分析了MD5算法的原理,设计文件完整性检测模型,并在QT环境中编程实现。使用测试文件进行系统功能测试,以验证模型设计的有效性。
1 MD5算法
1.1 算法简介
美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)在MD4算法的基础上,于1992年设计出更为趋于成熟的MD5算法[1-2]。使用该算法可以将任意长度的文本转换为一个固定长度的字符串。由于同一文件产生出相同字符串的概率极小,可将该字符串视为该文件的摘要信息。文件的完整性检测是比较文件前后两次的摘要值是否相同,如果被篡改,摘要值将发生变化,因此可以有效检测出文件是否完整。
1.2 算法执行过程
MD5算法以任意长度的消息作为输入,进行比特填充和补足长度后,按512比特为单位进行处理,输出一个长度为128比特的字符串,称该字符串为消息摘要。
(1)比特填充
MD5算法先要对输入的消息进行比特填充,使其比特长度模512为448。如果输入的消息长度正好是模512为448,则填充512个二进制数[3],显然,需要填充的二进制数的个数范围为:1~512。填充方法为:第一个二进制位为1,其余全部为0。示意图见图1所示。
图1 MD5算法的比特填充示意图
(2)填加长度信息
在填充数据的后面附加一个以64位二进制表示的原始消息的长度值。如果消息长度值超出了64位二进制数所能表示的范围,只保留低位的64位,超出部分截去。最终,处理后得到的消息是512比特的整数倍,字节长度表示为N*512+448+64=(N+1)*512。示意图见图2所示。
图2 MD5算法的填加长度信息示意图
(3)主处理过程
将上述处理后的消息,按512比特大小进行分块,每个数据块再按每组32比特进行分组,分得16组。
步骤1:输入第一个数据块(512比特),按每32比特为单位,依次存入M[k]中,k=0,1,2,..,15。
步骤2:使用四个缓冲器(A,B,C,D)来计算消息摘要,每个缓冲器都是4个字节共32位的寄存器,空间大小与每个单位组M[k]一致。使用下列初值对A、B、C、D进行初始化。
A=0X01234567 B=0X89abcdef
C=0Xfedcba98 D=0X76543210
步骤3:该部分主要完成压缩处理,是主处理过程的核心。压缩处理有四层运算(每层16次迭代),四层运算结构相同。每次运算的输入都是当前要处理的512比特的数据块(已分为16组的M[k])和四个缓存器(A、B、C、D)。每层都对缓存器的内容进行更新,而且每层使用的逻辑函数不同,分别表示为:F、G、H、I;第四层的输出与第一层的输入相加得到压缩函数的输出。每层处理描述如下:
第一层运算,执行16次:
a=FF(a,b,c,d,M[k],s,T[i])=b+((a+F(b,c,d)+M[k]+T[i])<<
第二层运算,执行16次:
a=GG(a,b,c,d,M[k],s,T[i])=b+((a+G(b,c,d)+M[k]+T[i])<<
第三层运算,执行16次:
a=HH(a,b,c,d,M[k],s,T[i])=b+((a+H(b,c,d)+M[k]+T[i])<<
第四层运算,执行16次:
a=II(a,b,c,d,M[k],s,T[i])=b+((a+I(b,c,d)+M[k]+T[i])<<
在上述运算过程描述中,<<
&是按位与运算,|是按位或运算,~是按位取反运算,^是按位异或运算。以第二层运算为例,示意图见图3所示。
图3 MD5算法的第二层压缩处理示意图
按上述步骤将所有数据块处理完成。
(4)结果输出
所有的512位的数据块都处理完后,最后一个数据块的输出便是128位的消息摘要值。
1.3 算法分析
(1)算法特性分析
算法的输入为任意长度的消息[4],记为M,经算法处理后得到消息的摘要值,记为h,这一处理过程记为:h=MD5(M)。MD5算法具有哈希函数的相应性质,主要体现在:①可以接受任意长度的消息M,经处理产生一个固定长度的输出h。②任意给定消息M,计算M的摘要值h很容易。③任意给定摘要值h,找到满足MD5(M)=h的M很难,计算上不可行,称为算法的单向性。④任意给定消息M,找到不等于M的M’,使MD5(M)=MD5(M’),计算上不可行,称为弱抗冲突性。⑤找到任意消息对(M,N),满足MD5(M)=MD5(N),这在计算上是不可行的,称为强抗冲突性。
(2)算法安全性分析
两个不同的消息M和M’,如果具有相同的摘要值,就称之为碰撞,MD5的安全性分析需要从碰撞入手。在MD5算法的特性分析中,抗冲突性强调了寻找具有相同摘要值的消息在计算上是不可行的,但这在理论上却是成立的。MD5算法的输入是任意长度的消息,通过处理映射到固定长度的128位二进制数上,显然这种映射无法做到一一对应,因此,碰撞是无法避免的。
分析MD5算法的安全性,是分析其在抗碰撞性上的强弱,或称为抗冲突性的强弱。MD5算法具有单向性,在碰撞测试中,无法由摘要值推导出消息,只能尝试选取一个消息,计算摘要值是否发生了碰撞。MD5算法的输出为128比特,若采用强力攻击法,找到一个消息M,使其具有和给定h相同的摘要值,计算难度为2128。
研究如何破译MD5算法,就是构建理论模型来加速构造碰撞对。若采用生日攻击法[5],寻找有相同摘要值的两个消息,需要尝试264次,按2.6GHz的计算频率推算时间大约为225年。2004年,王小云教授将碰撞尝试减少至242次。2009年,冯登国和谢涛利用差分攻击,将碰撞尝试次数进一步降低到221,按2.6GHZ的计算频率,大约为8秒。
为进一步提高MD5算法的安全性,在实际应用中,对MD5算法进行了改良,如:MD5加盐、SHA-1等。
2 文件完整性检测模型
2.1 文件完整性定义
网络安全的五大目标为:保密性、完整性、不可否认性、可控性和可用性。完整性强调了信息在存储或传输过程中流向不能变,内容不能变。认证技术是保证信息完整性和有效性的重要手段。认证技术包括实体认证和消息认证。消息认证就是验证消息的完整性,即验证消息在传输或存储过程中未被窜改、重放或延迟等。这些消息可以是存储在主机系统上的重要数据和重要文件,也可以是即时通信的会话信息等。消息认证也称文件完整性检测[6]。
2.2 文件完整性面临的常见威胁
各类网络安全事件都可能对文件完整性造成威胁,如:计算机病毒、木马、消息伪造、会话劫持等人为破坏。设备硬件故障、网络故障等非人为因素。
2.3 文件完整性检测模型
根据MD5算法特点,当消息发生改变时,摘要值也会发生变化,且其单向性保证了计算的不可逆。在接受MD5算法的安全性能的前提下,可以将其用于文件完整性检测,检测模型见图4所示。
图4 文件完整性检测模型
3 系统功能分析
为了进行文件完整性检测,同时保证系统的广大用户群,系统需要提供默认检测功能和检测建议。文件包括:系统重要文件集、用户自定义文件集、已下载文件集。对于本地重要文件,为防止篡改,应当事先计算文件摘要值,并妥善保存;对于待传输的文件,为防止传输过程中被篡改,可在传输前计算摘要值。
系统的主要模块包括:(1)文件选定模块:关于系统重要文件或文件夹的选定,用户可以使用默认选项,由程序决定,也可自行选择。关于用户重要文件或文件夹的选定,由用户通过界面操作来完成。(2)文件摘要计算模块:程序计算选定文件的摘要值并保存。(3)文件完整性检测模块:用户根据需要对选定的文件进行完整性检测。对于系统的重要文件,推荐在新程序安装后或每天的固定时间进行完整性检测。用户的重要文件,推荐在每天的固定时间进行完整性检测。程序设计时,将推荐做为选项提供给用户。该模块的检测结果一方面显示给用户,另一方面要存储到日志文件中。(4)更新文件摘要值:当被保护的文件被合法操作后,需要重新计算文件摘要值,在此模块计算完成后进行更新。(5)日志查看模块:用户可以按时间查阅日志情况,包括检测的文件名、文件格式、存储路径、检测时间和检测结果等。
4 系统设计与功能测试
4.1 开发技术简介
选用C++作为系统开发语言,使用QT框架设计系统界面。QT是一个跨平台的C++GUI应用框架,主要提供窗口部件集,具有面向对象、便于扩展等优点,利于系统功能设计与开发。
4.2 数据库设计
MySQL是一款关系型数据库,具有开发成本低,占用空间小,处理速度快等优点。根据系统功能,设计出四个实体:用户实体(用户id、用户名、密码、权限)、目录实体(目录名、目录路径、文件数)、文件实体(用户id、文件名、MD5摘要值,更新时间)和日志实体(日志id、用户id、日志路径、创建时间、文件名)。
4.3 系统功能测试
系统提供用户注册和登录界面,只有注册用户才可使用系统功能,用户登录成功后,进入系统主界面,提供五个操作选项:文件选定、文件摘要计算、文件完整性检测、更新文件摘要值、日志查看。
在文件选定操作中,提供了选定文件夹进行文件保护的功能,用户只需给出待保护的文件夹,由程序决定对哪些文件进行检测保护。考虑文件夹的文件数量情况,在用户没有做特定文件的保护要求的情况下,文件夹中的.jpg,.png,.mov,.avi等图片和视频文件默认不做保护检测,因此,在文件摘要计算模块,扫描选定的文件夹时,这些文件会跳过。
本文选择三个文件依次进行摘要值计算,并通过修改文件内容进行完整性检测,前后两次摘要值见表1~表3所示,由于摘要值较原始摘要值发生变化,成功给出检测结果。
表1 test.doc文件摘要信息
表2 index.html文件摘要信息
表3 myprog.cpp文件摘要信息
5 结束语
本文设计的文件完整性检测系统,提供了默认选定功能,用户无须具备安全知识即可轻松保护重要文件。日志功能利于后期查看文件破坏的规律,进一步找出极易受攻击破坏的重要文件,对进一步的文件保护提供指导。
MD5算法除了可进行文件完整性检测外,还可广泛应用于数字签名、密码保护等领域,从密码分析的角度来看,MD5算法易受攻击,但其较强的综合性能使得依旧有很多优势。在MD5算法的多年应用中,对其进行的攻击并不总是有效的,整体来讲,MD5算法仍然是比较安全的。