装备软件状态标识的消息认证码*
2015-11-28陈策姜晓辉胡勇
陈策,姜晓辉,胡勇
(解放军63961部队,北京100012)
装备软件状态标识的消息认证码*
陈策,姜晓辉,胡勇
(解放军63961部队,北京100012)
消息认证技术中的散列函数可以产生与消息内容紧密相关的消息认证码,可以据此对装备中的软件进行状态标识。通过Visual C++与C#混合编程,建立了基于MD5算法的消息认证的实验系统,并进行了内容相关性、抗碰撞与软件状态标识实验。结果表明,与当前普遍采用的软件版本号实现软件版本状态管理相比,消息认证码可以避免人为疏忽所造成的装备软件状态管理的失效,是一种有效的装备软件状态标识的技术手段。
软件版本标识,消息认证,散列函数,软件状态管理
0 引言
在当前软件版本管理中,通常采用<major>.<minor>.<build>.<revision>4部分的方式对软件版本进行标识,如某指控系统中空情处理软件构件用0.2.0.0标识。通过版本标识,软件开发者、管理者以及最终的产品用户可以从标识中获知软件的状态变化信息,实现对软件的有序维护和升级[1-3]。软件的版本标识与管理确保了软件发布过程的可重复性、可控制性和可跟踪性,但以上述形式所标识的软件版本信息有其固有的缺陷,由于版本标识同软件本身的内容无关,当软件内容发生变化后,由于配置管理员的疏忽,可能会忘记或者没有按照预定的规则更新软件版本标识,从而造成软件配置管理的失效,在现实中存在着大量的由于版本控制疏忽所导致的软件失效。
在网络安全中,为防止信息在传输和存储过程中可能遭受的攻击和破坏,会采用消息认证技术来验证信息的真实性和完整性,消息认证技术所采用的消息认证码与信息内容紧密相关,信息内容一个字节的变化都会引起消息认证码的变化,这很好地契合了软件版本标识需要与软件内容相关的要求。本文采用消息认证的方法对软件进行版本标识,使软件的版本标识与软件内容紧密相关,软件中任何一个字节内容的变化都必将引起软件版本标识的变更,为软件配置管理的有效实施提供了技术上的保障。基于消息认证技术的软件状态标识方法为装备软件的状态管理提供了一种有效的技术手段,可以确保软件状态管理的有序实施。
1 消息认证技术
消息认证技术可以防止攻击者对系统的主动攻击,消息认证主要达到两个目标:一是验证消息的真实性,二是验证消息的完整性。实现消息认证需要用认证函数对消息生成某种形式的认证标志,可以使用消息加密、消息认证码和hash函数3种方法来产生认证函数,消息加密和消息认证码采用共享密钥加密算法产生消息的认证标志,hash函数是不使用加密的认证方法。由于加密算法软件运算速度慢、硬件费用高、算法专利保护和出口限制等因素,人们更倾向于使用hash函数实现消息的认证。
1.1散列函数
hash函数又称哈希函数或散列函数,其功能是将一个任意长度的消息变换为一个较短的固定长度的输出串,该固定长度的输出串与消息的所有比特相关,常称为消息的hash值、散列值或消息摘要。对于特定的数据而言,其hash值是唯一的,一旦数据发生变化,则对应的“数字指纹”也会发生变化。设M是所有可能消息m的集合,Y是由所有可能的消息摘要y形成的有限集,则把从无限集M到有限集Y的映射称为一个hash函数。
hash函数应满足如下6个特性[4-6]:①输入消息的长度应没有限制,hash函数应能作用于任何大小的数据分组;②hash函数作用于任意长度的消息后得到固定长度的输出;③对任意给定的消息m,计算y=h(m)比较容易,适合用软硬件快速实现;④对任意给定的消息m,消息摘要y与m的每一比特信息高度相关,只要改变消息m的任意一位或多位,摘要值就会发生显著改变,此性质被称为hash函数的雪崩性;⑤对任意给定的消息m,找到满足y=h(m)的消息m是困难的,即hash求逆在计算上是不可行的,这是hash函数的单向性;⑥对任意给定的消息m,找到另一个不同的消息m',使得h(m)=h(m')在计算上是不可行的,这是hash函数的抗碰撞性。
1.2MD5算法
hash函数中比较有名的是MD5算法,该算法以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列处理后,算法的输出由4个32位分组组成,将这4个32位分组级联后将生成一个128位共16个字节的摘要值。图1给出了MD5算法的总体实现过程。
图1 MD5算法的总体实现过程
算法首先需要对信息进行填充,使其位长度对512求余的结果等于448。因此,信息的位长度将被扩展至N×512+448,即N×64+56个字节,N为一个非负整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,再在这个结果后面附加一个以64位共8个字节的二进制表示的填充前信息长度。信息填充后被分解为长度为512位的N+1个信息分组,每个信息分组为64个字节,将4个字节表示为一个整数,则每个信息分组包含16个整数。算法开始时,设置4个被称作链接变量的整数参数,分别为:A、B、C、D,为这4个链接变量设置初始值后,就开始进入算法的循环运算,循环的次数是信息中信息分组的数目,每次循环针对信息分组mi进行,循环前先将上面4个链接变量复制到另外4个变量中:A到a,B到b,C到c,D到d,然后对信息分组mi所包含的16个整数Xj(j=0~15)执行经压缩函数f的压缩处理。压缩函数f由4轮,每轮16步组成,具体算法可参见文献[6]。
1.3算法的实现
利用MD5算法建立消息认证的实验系统,验证MD5算法在生成消息认证码中的有效性,实验系统MD5算法模块采用Visual C++编写,人机交互界面采用Visual Studio 2010 C#.net实现,之所以要编写MD5算法模块与人机交互界面分开不同语言实现的实验系统,是因为Visual C++编写算法模块更为容易,C#.net编写人机交互界面更为容易,另外,也是为了验证.net中不同语言间集成的方便性[7]。
由于需要消息认证的文件会很大,可能无法一次性地把文件内容全部读到缓存区中,在实现文件的消息认证时,采取每次读取最多1 024个字节的方法进行摘要值更新。打开文件后,每次读取1 024个字节进行压缩,当读完文件后,关闭文件指针,进行信息内容的填充,在所填充信息的第56个字节处附加8个字节表示的位长度信息,更新最后填充的64个字节,最后产生16个字节的消息认证码。在消息认证算法中,核心是更新压缩update的算法模块,在该模块中要不断取出一个分组64个字节进行压缩,update输入需要压缩的数据包和数据包长度,方法内部实现对输入数据包的压缩,当数据包不是64个字节的整数倍时,对于最后一个不足64个字节的包,需要留到下一次再使用update压缩时用补齐64个字节再进行压缩。该算法的流程如图2所示。
图2 更新压缩update的算法流程
首先计算上次使用update压缩时有无留下的未被压缩处理的数据包内容,未被压缩处理的数据内容必定为小于64个字节的数据包;计算留下的未被压缩处理的数据包长度index及需要补充的长度partLen=64-index;判断输入数据包的长度是否大于需要补充的长度,如果大于需要补齐的长度则补齐后进行transform压缩运算,然后将输入数据包剩余的数据包取64个字节的整数倍的数据进行每64个字节一个循环的transform压缩运算,最后将余下不足64个字节的数据包作为预留,等到下次再进入update方法时处理。
2 装备软件状态标识的实验
为了对MD5消息认证算法进行验证,至少需要验证两个方面的内容,一是需验证所产生的消息认证码与信息内容紧密相关,二是需验证所产生的消息认证码具有超强的抗碰撞性。
2.1内容相关性实验
根据软件测试用例设计中等价类划分和边界值分析的原则,分别生成具有1个字节、55个字节、56个字节、64个字节、2 013个字节、2 014个字节、2 112个字节的文件,针对每种长度的文件,将文件中最后一个字节内容由0x00改为0x01,检查这些文件所产生的消息认证码。图3所示为本文所编写的消息认证实验程序及实验结果。
图3 MD5算法消息认证码的验证程序
实验结果表明,这14个长度或内容均有所区别的文件所生成的消息认证码均不相同,即使文件只有1个字节的差别,所生成的消息认证码也会发生显著变化,这符合散列函数的雪崩特性。
2.2抗碰撞性实验
为进一步验证算法所具有的抗碰撞性,设计实验对计算机中各目录存在的文件进行消息认证码的生成,检验是否有相同的消息认证码出现,理论上MD5算法要产生碰撞至少需要25 616个文件才有可能产生一次碰撞,即使每个文件只占1个字节的大小,信息量都是非常大的。在实际应用中,操作系统中会安装多个软件,利用本人的办公计算机对MD5算法进行抗碰撞实验,计算机中的系统盘C盘中已经安装了20余个软件,共有文件108 487个,文件数达10万之多,占用空间33.9 GB。图4为抗碰撞实验程序。
图4 MD5算法的抗碰撞实验程序
经实验后,所有具有相同认证码的文件,或者是同一文件但不同目录,或者是不同文件但内容相同,如果将文件的全路径也作为文件信息的一部分,经实验后,所有文件的消息认证实验后,所有文件的消息认证码则均不相同。实验结果表明:MD5消息认证算法的抗碰撞实验表明:将消息认证码作为文件的版本状态控制信息是合适的。
2.3利用消息认证码实现软件状态标识
表1 BattleBook.exe各版本消息认证码实验结果
选取一实际的软件,对其主程序BattleBook.exe的不同版本进行消息认证码生成,表1列出了消息认证码的实验结果。表中的文件版本标识是BattleBook.exe资源区中所写的标识,在Visual studio 2010中用资源编辑器的方式打开BattleBook.exe后,可以看到在Block Header中具有FileVersion字段,该字段是一个字符串,在编程时由开发人员修改,这就会由于开发人员的疏忽而忘记在修改了程序后修改该字段值,导致主程序BattleBook.exe的文件版本标识即使程序已发生变化,但文件版本标识却没有跟着变化。从文件修订的日期来看,显然文件的版本应不同。如果用文件版本标识加版本日期的方法是否就能明确标识一个文件的版本呢?答案也是否定的,因为版本日期是计算机根据时间所生成的,同样不会跟内容相关。表中不同版本的5个BattleBook.exe,其消息认证码各不相同,用消息认证码的方式来标识文件版本就可以避免人为的疏忽所造成的版本状态无法管理的混乱。利用Visual studio 2010,可以用资源编辑器的方式打开BattleBook. exe并修改FileVersion的字段值,将该字段值由字符串“1.0.0.1”修改为相应的消息认证码,这样就可以标识出不同版本的程序。
3 结束语
消息认证技术是网络安全中的一项重要技术,可以实现对消息的完整性和真实性认证,用消息认证码对装备软件进行版本标识可以更有效地实现软件的状态管理,本文所实现的算法和实验系统充分证明了这一点,在微软.Net框架中已经用强命名规则实现了这一理念,在装备软件状态控制方面,迫切需要将这种技术加以应用。本文所实现的软件状态标识还只能利用Visual studio 2010资源编辑器将所生成的消息认证码加入软件的主程序中,后续的工作是进一步研究软件信息的组成,尤其是操作系统中可执行文件的格式,自动将消息认证码注入到软件主执行程序中,同时进一步研究利用软件中的消息认证码进行装备软件状态认证的方法和开发装备软件状态认证系统,确保将陆军装备科研订购部装备软件管理规定所要求的装备软件状态管理落到实处。
[1]刘燕秋,勉玉静,赵文耘.软件配置管理中版本管理技术研究[J].计算机工程与应用,2003,21(7):68-71.
[2]张为.现代软件开发的过程管理方法研究[J].计算机工程与科学,2003,25(2):99-103.
[3]倪晓峰,赵文耘,张捷.构件软件配置管理以及其版本控制技术研究[J].计算机工程与应用,2005,23(2):94-96.
[4]邓元庆,龚晶,石会.密码学简明教程[M].北京:清华大学出版社,2011:144-146.
[5]肖皇培,张国基.基于Hash函数的报文鉴别方法[J].计算机工程,2007,33(6):101-103.
[6]张裔智,赵毅,汤小斌.MD5算法研究[J].计算机科学,2008,35(7):295-297.
[7]Troelsen A.Pro C#and the.Net 4 Platform[M].Ituring Press,2011:86-98.
Message Authentication Code of Equipment Software Status Identification
CHEN Ce,JIANG Xiao-hui,HU Yong
(63961 Troops of PLA,Beijing 100012,China)
Hash function of message authentication technology can produce the message authentication code which closely related to the content of message,by this way,equipment software status can be identified.Through the Visual c++and c#hybrid programming,message authentication experiment system based on MD5 algorithm is established,content correlation,impact resistance and software status identification experiment are executed.The results show that message authentication code can avoid the failure of equipment software status management caused by human negligence compared to software version number generally used to realize software version management and messageauthenticationcodeisakindofeffectivetechnologyofequipmentsoftwarestatus identification.
software version identification,message authentication,hash function,software status management
TP311.52
A
1002-0640(2015)08-0169-04
2014-06-15
2014-07-27
军队科研计划基金资助项目(ZLC12501)
陈策(1975-),男,山西万荣人,博士、副研究员。研究方向:软件工程,软件测试。