黄加华
摘要:在计算机网络高速发展的今天,人们对网络安全也越来越重视,也对通信网安全的技术要求日趋紧迫。本文主要介绍了网络信息数据加密的MD5算法,并对MD5算法的原理进行研究分析,通过LabVIEW程序开发实现对数据信息执行MD5加密和应用。
关键词:通信网安全;MD5;LabVIEW;加密
随着互联网通信的高速发展,以及互联网相关服务的日益完善,在网络上传递的信息量也几乎是几何数量级的增加;同时人们的网络安全意识也不断的提高,所以,为了更加有效地处理、存储、管理、使用和保护在互联网上传递的私有信息,大多是采用报文摘要加密的方式对信息加密,这不仅可以节省加密的时间,而且可以节省报文传输、处理和存储的开销,MD5(MessageDigestAlgorithm5)作为当前主流的数据的加密技术被广泛地应用于通信中。
LabVIEW在仪器仪表控制,工业自动化控制、模块化仪器、虚拟仪器和DAQ数据采集上,都广泛使用。结合在工程项目中,对于数据的安全性同样越来越引起重视,因此,将其两者的优势相结合,即可实现对工业控制和自动化测试相关数据的加密,提高数据的安全性。
一、MD5简介及其原理
在90年代初,信息摘要算法是由Mit Laboratory for Computer Science和Rsa Data Security Inc的Ron Rivest研制出来的,其全称是Messagedigest algorithm 5(简称为MD5),经由MD2和MD3以及MD4,一代代发展而来。
MD5是一种消息摘要算法(Message Digest Algorithm),因此,MD5算法是通过任意长度的信息(Message)作为数据输入,经过算法运算,产生出一个128bit(16byte)的报文摘要(Fingerprint or Message Digest)。由此可见,要由两个不同的信息产生相同报文的概率是相当小的,反而言之,一个给定的报文摘要想要逆向地产生回原始的信息的难度便可想而知。
MD5算法可以简述为:第一步,对于输入进来的信息,以512位的分组来处理,同时,又把每一个分组划分为16个32位的子分组;第二步,对信息进行一系列的循环算法运算,然后,输出由四個32位分组组成的结果;第三步,再將这结果级联运算,最后生成一个128位的散列值。其整体流程如图1所示:
采用MD5报文摘要算法产生报文的全过程包含以下五个步骤:
第一步:补位。
对于输入进来的信息,首先对数据信息进行补位,然后对信息数据的长度(单位为:byte)进行64取余数,使得取余的结果是56,即Length=N*64+56(字节),同时N是一个大于等于0的正整数。此外,不管任何情况下,补位的操作始终是要执行的,即使信息数据的长度Length对64取余的结果已是56。
补位的具体操作为:首先,在输入进来的数据信息的后面补充一个1;然后,对数据信息补0已达到满足Length=N*64+56条件时,才停止对数据信息进行用0补充,由此,可看出数据信息最少要补充1位,最多可达512位。即相当于补充了一个0X80的字节,再补充值为0的字节。到这一步,数据信息总共补充的字节数为0~63个。
第二步:附加数据长度。
在第一步的输出结果后面再附加用一个64位的整数表示数据的原始长度(单位为:bit),附加的数据在第一步补位后的数据的后面,同时,要求该数字的8个字节是以按低位的在前、高位在后的顺序进行附加。
附加数据长度的具体操作为:假设数据的原始长度为L。第一步,换算为两个32位数来表示L,第二步,取L的低64位;经过对数据的附加,新的数据的长度则刚好为512位的倍数,即此时的数据长度是16个字节(32位)的整数倍数。
经过第一步和第二步对数据信息的处理,那么数据信息的位长则为:N*512+448+64=(N+1)*512,从算式中可看出,处理后的数据长度恰好是512的整数倍。
注:64位整数是输入数据的原始长度,而不是填充字节后的长度。
第三步:初始化MD5参数。
用一个4个32位整数变量(A、B、C、D)来计算报文摘要,该整数变量被称作链接变量(Chaining Variable)的整数参数。A、B、C、D分别是32位的寄存器,每一个变量都被初始化为一个以十六进制数表示的数值,并且数值表示是低位在前面,高位在后:A=0x01234567;B=0x89ABCDEF;C=0xFEDCBA98;D=0x76543210。每一个变量给出的数值都是高字节存于内存的低地址,低字节存于内存的高地址,即大端字节序,所以,在程序中变量A、B、C、D的值分别为A=0x67452301;B=0xEFCDAB89;C=0x98BADCFE;D=0x10325476。
注:低位的字节在前面指的是Little Endian平台上内存内存的供应商中字节的排列方式。
第四步:处理分组数据。
每一个分组都是需要将上述的四个链接变量赋值到另外四个变量中,即A赋值到a,B赋值到b,C赋值到c,D赋值到d;而从第二个分组开始,链接变量则成为上一分组的运算结果,即a 赋值到A, b 赋值到B, c赋值到C, d 赋值到D。
MD5和MD4的差别在于,MD5的主循环有四轮,MD4仅有三轮。具体的循环操作为:第一轮需要执行16次的操作,每次操作选取a、b、c、d四个变量中的三个作一次非线性函数运算,然后将运算结果加上剩下的一个变量,那么,原来的一个子分组和一个常数,再将所运算得到的结果向左循环移位一个不定的数,然后,加上a、b、c、d四个变量中的一个,最后,用最终的结果取代a、b、c、d四个变量中的一个。
下列是每次操作使用的四个非线性函数(每轮一个,每轮循环都很相似):
注:若X、Y、Z的对应位是独立并且均匀的,则得到的结果的每一位也是独立且均匀的。函数F是逐位运算的函数,即如果X,那么Y,否则Z。函数H是逐位奇偶操作符。
假设Mj是消息数据的第j个子分组(从0到15);常数ti是4294967296*|sin(i)|的整数部分(i=1~64)。
注:(4294967296=232),
则定义:
完成上述的四轮运算后,再在原基础上对a、b、c、d分别加上A、B、C、D,即a = a + A,b = b + B,c = c + C,d = d + D,然后,再用下一分组数据继续执行上述循环算法。
第五步:输出报文摘要
经过前面四步的处理,最后输出的数据信息应该是a、b、c、d的级联,一共16个字节,128位,同样按照十六进制数依次输出这16个字节,即低位字节开始,高位字节结束。
二、MD5的LabVIEW实现
根据MD5报文摘要的加密原理,现已字符串“hjh”为例。该字符串在内存中表示为:68 6A 68(从左到右为低地址到高地址),信息长度为24bit,即0x18。对数据进行补位,填充到448位,即56字节,则结果为:686A 6880 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000,而剩下的64位,即8字节填充前信息位长,按照小端字节填充剩下的8字节,则结果为:686A 6880 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1800 0000 0000 0000。接着对该数据进行是初始化A、B、C、D四个变量,将该64字节填充后的数据分成16个小组(在程序中则是对应的16个数组),则结果为:M0:686A 6880;(该显示为内存中的顺序,是按照小端字节序原则,对应数组M0的值为0x80686A68);M1:00000000;……M14:18000000;M15:00000000。
经过分组数据处理后,a、b、c、d的值分别为0xB525EF18;0x21B77990;0xE440000A;0x5A5A5E8C,则在内存中为:a:18EF25B5;b:9079B721;c:0A0040E4;d:8C5E5A5A。所以,字符串“hjh”經過MD5报文摘要算法后,最终的MD5的值为:18EF25B59079B7210A0040E48C5E5A5A。
经过实例,则更加详细说明了MD5算法的整体流程。在自动化控制和测试的工程上多使用的LabVIEW编程语言, MD5加密广泛使用于工程上的各个领域,所以,通过LabVIEW来实现MD5报文摘要算法。
总体的编程流程都是按照MD5算法的整体流程,通过五个步骤实现对数据的MD5加密,程序的五个步骤如图2所示。
经过步骤一对信息补位,对信息附加数据长度的程序如图3所示。
在步骤一和步骤的操作后,对MD5参数进行初始化处理,实现了初始化后的数据,执行四轮的四个非线性函数,共执行64步。程序如图4所示。
在对MD5进行初始化后,再通过对分组数据进行处理后,对输出的数据进行级联后,输出MD5值。程序如图5所示。
通过MD5的算法流程的原理,采用LabVIEW图形化的G语言实现MD5加密。
三、MD5应用
经过对MD5原理的阐述和实践,MD5算法就是对任意长度的数据消息执行运算,从而计算得到一个128位长度的“报文摘要”。在我们实际应用中,主要是利用了他这一原理来实现。因为两个不同的数据或文件要产生相同的报文摘要,或者通过给定的报文摘要来恢复原始的数据或文件是不可实现的。所以,MD5算法在当前通信信息传输等领域广泛应用。
(一)信息摘要
对数据信息产生信息摘要应该是MD5算法的典型应用,通过信息摘要以防止数据信息被篡改。MD5算法不仅可以将一个文字信息加密,而且可以将整个文件当作一个大文本信息,通过MD5这不可逆的字符串变换算法,产生一个唯一的MD5信息摘要。
(二)数字签名
就像世界上找不到两片相同的树叶一样,每个人都有自己独一无二的指纹。同样的道理,MD5算法可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的MD5值,如果你将该文件传递给别人,当别人通过某种手段修改了文件中的任何内容,只要你重新对该文件执行MD5算法时,那么你就会发现这两个MD5值是不相同,所以,就可以判定该文件不是原始文件,已被篡改。
(三)文件校验
在互联网时代,应用软件作为我们使用最广泛的,通常我们在某些软件网站上,就会看到软件信息中有MD5值,它的主要作用就是当我们下载该软件后,对下载回来的软件做一次MD5校验,如果运算出来的MD5和网站上的MD5值一致,那么就可以确定我们下载的软件就是网站上的软件;若MD5值不一致,则说明下载的软件并非我们想要的。软件下载站、论坛数据库、系统文件安全等方面都采用MD5算法来进行文件校验。
(四)登陆认证
MD5算法还广泛地用在软件的登陆认证上。用户在创建密码时,软件通过MD5算法将用户的登陆密码运算成MD5值,并存储与数据库或文件系统中。当用户再次登录软件时,软件会把用户当前输入的密码再次进行MD5运算,得到的MD5值再去和保存在数据库或文件系统中的MD5值进行比较,从而确定用户输入的密码是否正确。
四、总结
如今,互联网作为庞大的信息共享系统的载体,网络安全作为互联网中一个综合性的课题,不仅仅在立法、管理、技术等方面上,还在信息和数据的安全等问题上。MD5作为互联网安全的一小部分,但是,MD5在当代的意义也是不可小觑的。通过采用仪器自动控制领域成熟的编程平台LabVIEW,使得MD5算法安全应用于此领域,也在提高趋向工业自动化和工业4.0安全的发展和重视。
参考文献:
[1]王育民,刘建伟.通信网的安全—理论与技术[M].西安电子科技大学出版社,2013.
[2]段钢.加密与解密[M].电子工业出版社,2008.
[3]戴栋,杨颖.基于虚拟仪器的网络测控技术研究[J].科技风,2011(22):21.
[4]Rivest R.The MD5 messagedigest lgorithm[EB/OL].1995.