网上申请犬证相对于书面申请有许多优点,但因为缺乏安全,一直没有很好的运用。为有效地防止对电子申请书的篡改,减少出错率,可以将网络安全技术应用到系统中。PKI、数字签名、MD5等技术应用在网上申请犬证系统中,将很大程度地提高信息的安全强度。
MD5是20世纪90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L.Rivest开发,经由MD2、MD3和MD4发展而来,其本质就是一种哈希函数,并且具有不可逆的特性,即无法通过信息摘要来恢复原始的文件。其典型应用之一是利用其加密的不可逆性来加密用户密码,之二是验证信息的完整性,如果使用MD5加密,整个文件将产生一个唯一的md5信息摘要,如果在以后传播这个文件的过程中,只要文件被篡改,信息摘要值就不相同。因为它具有以下特性:原始信息只要改变一点点,哪怕是几比特,对应的消息摘要也会改变很大。
MD5算法描述:
1.MD5算法先对输入的数据进行补位,使其位长对512求余的结果等于448。即数据扩展至K*512+448位,也就是K*64+56个字节,K为整数。具体补位操作是补一个1,然后补0至满足上述需求。
2.在第一步的结果后附加一个以64位二进制表示填充前信息的长度。经过这两步处理,现在的信息字节长度等于N×512+448+64=(N+1)×512,正好是512的整数倍。
3.设置四个32位链接变量,A=0x6745 2301;B=0xHEFCDAB89;C=0x98BADCFE;D=0x10325476,进入算法的四轮循环运算。循环的次数是信息中512位的信息分组的数目。在将上面的四个链接变量复制到另外四个变量中如:A到a,B到b,C到c,D到d。
4.主循环有四轮,每一轮进行16次操作共计64次操作。以下是每次操作中用到的四个非线性函数:
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))。其中&、|、~和∧分别为:与、或、非和异或。MD5算法经四轮循环运算并将结果进行级联,最后生成摘要。
通常情况下,使用Hash函数进行散列运算对消息进行加密,得出信息的验证码,再对验证码进行加密操作,得出数字签名。最常用的是RSA数字签名体制。
其过程可分为密钥生成、签名算法和验证算法3部分。
1.密钥生成
1)选取两个大素数p和q,计算n=pq(公开),φ(n)=(p-1)(q-1),φ(n)为n的欧拉函数。
2)随机选取正整数e,满足1 3)计算d,满足de≡1(modφ(n)) 签名者的公钥为{n,e},私钥为{p,q,d}。 2.签名算法 设消息为x,则x的RSA签名是y=xd(mod n)。 3.验证算法 当接收者收到签名(x,y)后,计算x’=ye(mod n)。 如果x=x’,则y是x的RSA签名。 数字签名的特点是它代表了文件的特征,文件如果发生改变,数字签名的值也将发生变化。不同的文件将得到不同的数字签名。 在系统中还使用了PKI技术。公钥基础设施(Public Key Infrastructure,PKI)是一个用公钥概念和技术实施和提供安全服务的具有普适性的安全基础设施。 PKI是一种新的安全技术,它由权威认证机关(CA)、数字证书库、密钥备份及恢复系统、证书撤销列表、应用接口等基本构成,构建PKI也围绕这五大系统来构建。 MD5是一种被广泛使用的一种算法,特别是在用户密码方面。因为许多用户密码比较简单,所以攻击者能在很短的时间内破解。王小云教授在2004年召开的国际密码学年会(Crypto 2004)上做了破解MD5算法的报告,发表了一篇《散列(哈希)函数MD4、MD5、HAVAL-128和RIPEMD中的碰撞》论文,引起了很大的反响。文献[4]中的作者可以在短时间内获得MD5函数多个碰撞的算法(即不同的明文产生相同的Hash函数值),这就导致MD5在使用中会有很大的危险。为了保证系统的安全,本文对MD5的使用进行了改进。 在.NET中,System.Security.Cryptography类中包含一系列能够实现对称和非对称加密、创建哈希值等的函数,使用md5.ComputeHash()函数可以得到MD5值。在网上申请犬证系统中,用户模块中有两个部分用到了MD5。 1.对于用户模块中的用户密码进行MD5加密改进。改进方法为:1)在用户注册时,分别对用户密码和当前系统时间进行MD5加密,得到的密文A和B,位数各为32位。2)用截取函数取A中前16位,B后16位,得到32位的MD5值C。3)对C进行MD5加密得到的值D存入数据库。 通过这种方法,即使进入数据库得到了密码值并进行破译也不能得到真正的密码值,这样能够提高网站的安全性。 用户登录验证密码时,具体做法是:1)对用户输入的密码和数据库中的用户注册时间进行MD5计算得到A’和B。2)用截取函数获得A’中前16位和B中的前16位,得到C’。3)对C’进行MD5加密得到D’,如果D=D’,则C=C’,A=A’,用户登录成功。 2.用户上传文件模块中使用了MD5加密。当用户填写好申请表格后要上传到服务器端,为了防止黑客篡改文档中的信息则采用MD5数字摘要算法来保证文档中的信息没有被篡改。虽然在保证文件的原始完整性的方法有缺陷,但是在实际中,要伪造有特定含义的申报文件与原始文件具有相同的数字摘要的可能性非常非常小,可以说是几乎不太可能的(这点是由王小云的破解算法决定的)。因此用MD5来保证申报文件不被篡改还是有应用价值的。具体步骤如下:a)引用System.Security.Cryptography类;b)用File.ReadAllBytes(FilePath)语句来读取文件中的信息;c)调用md5.ComputeHash(data)函数计算数字摘要M;d)将M值作为文件名保存至数据库中;e)审核员打开文件时重新读取文件并再次调用MD5函数计算数字摘要M’;f)比较M与M’,如相等,则进行审核,如不等,则说明数据被破坏,反馈给用户让其重新上传申报文件。 流程图如图1所示。 1.审核员采用数字证书模式进行登录。首先要配置IIS,安全套接字节(SSL)是一套提供身份验证、保密性和数据完整性的加密技术。配置好双向SSL后,即要求客户端证书。WEB后台可以通过客户端证书获取管理员身份,从而替代传统的用户名和口令,也提高了安全性。对于某个CA,其颁发的所有证书都有一个唯一的、不重复的证书序列号,可以利用证书序列号来识别不同的用户。 本文采用在SQL SERVER 2008中创建审核员表,其中就可以用证书序列号字段来获取其身份和权限。当审核员登录系统时,将被要求选择使用的证书。系统从证书中获取证书属性,与数据库中管理员表中的证书序列号字段进行查询,如果匹配就能登录界面,如不能就弹出出错信息。 在.NET中用Request.ClientCertificate()函数来获取CA证书的属性,包括证书序列号等字段。 2.数字签名。审核员对审核结果采用私钥进行签名并保存在数据库中,以防止纠纷的产生。数字签名功能本系统中使用微软的CAPICOM组件来实现。Windows操作系统为我们提供了先进的加密体系模型CryptoAPI,但使用其完成一些通常的操作(如:加密、签名)仍然是相当复杂的。而CAPICOM组件,封装了上述的复杂操作,使你只需要调用一两个函数,就可以完成指定的功能。所以本系统用SignData()函数进行数字签名,用VerifySignature()函数进行验证,简单、实用。 随着网络技术的发展,网络安全技术越来越重要。基于PKI的网络安全系统的设计已经广泛地被使用。本文讨论了PKI、数字签名等技术的基本原理和在网上申请犬证系统中的具体应用,并通过改进MD5码的算法,生成适合自己的MD5算法,再运用二次加密,使得网站的安全性进一步增强,具有一定的应用价值。随着密码科学和软硬件技术发展,网络安全技术必将发挥越来越大的作用。当然,我们还需要注意系统本身的安全,如防火墙、访问控制、代码安全等。 [1]张艳.RSA数字签名算法在电子病历中的应用[J].微计算机应用,2010,31(1):79-80. [2]Rivest R.The MD5 Message-Digest Algorithm[S].RFC 1321,April 1992. [3]何大可,彭代渊,唐子虎等.现代密码学[M].北京:人民邮电出版社,2009. [4]Wang Xiaoyun,Feng Dengguo,Lai Xuejia,et a1.Collisions for hash functions MD4,MD5,HAVAL-128 and RIPEMD[C].Cryptology ePrint Archive:Report 2004,1999,Aug.2004. [5]孙维国,李浩然.MD5算法在数据安全中的应用及安全性分析[J].微计算机应用,2010,31(10):66-69. [6]胡景浩.在网站安全性应用中对MD5码的改进[A].第三届全国软件测试会议与移动计算、栅格、智能化高级论坛论文集,2009.三、PKI
四、在.NET中对MD5码的改进
五、数字证书、数字签名在系统中的运用
六、结束语