網(wǎng)上申請犬證相對于書面申請有許多優(yōu)點,但因為缺乏安全,一直沒有很好的運用。為有效地防止對電子申請書的篡改,減少出錯率,可以將網(wǎng)絡(luò)安全技術(shù)應(yīng)用到系統(tǒng)中。PKI、數(shù)字簽名、MD5等技術(shù)應(yīng)用在網(wǎng)上申請犬證系統(tǒng)中,將很大程度地提高信息的安全強度。
MD5是20世紀(jì)90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L.Rivest開發(fā),經(jīng)由MD2、MD3和MD4發(fā)展而來,其本質(zhì)就是一種哈希函數(shù),并且具有不可逆的特性,即無法通過信息摘要來恢復(fù)原始的文件。其典型應(yīng)用之一是利用其加密的不可逆性來加密用戶密碼,之二是驗證信息的完整性,如果使用MD5加密,整個文件將產(chǎn)生一個唯一的md5信息摘要,如果在以后傳播這個文件的過程中,只要文件被篡改,信息摘要值就不相同。因為它具有以下特性:原始信息只要改變一點點,哪怕是幾比特,對應(yīng)的消息摘要也會改變很大。
MD5算法描述:
1.MD5算法先對輸入的數(shù)據(jù)進(jìn)行補位,使其位長對512求余的結(jié)果等于448。即數(shù)據(jù)擴展至K*512+448位,也就是K*64+56個字節(jié),K為整數(shù)。具體補位操作是補一個1,然后補0至滿足上述需求。
2.在第一步的結(jié)果后附加一個以64位二進(jìn)制表示填充前信息的長度。經(jīng)過這兩步處理,現(xiàn)在的信息字節(jié)長度等于N×512+448+64=(N+1)×512,正好是512的整數(shù)倍。
3.設(shè)置四個32位鏈接變量,A=0x6745 2301;B=0xHEFCDAB89;C=0x98BADCFE;D=0x10325476,進(jìn)入算法的四輪循環(huán)運算。循環(huán)的次數(shù)是信息中512位的信息分組的數(shù)目。在將上面的四個鏈接變量復(fù)制到另外四個變量中如:A到a,B到b,C到c,D到d。
4.主循環(huán)有四輪,每一輪進(jìn)行16次操作共計64次操作。以下是每次操作中用到的四個非線性函數(shù):
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算法經(jīng)四輪循環(huán)運算并將結(jié)果進(jìn)行級聯(lián),最后生成摘要。
通常情況下,使用Hash函數(shù)進(jìn)行散列運算對消息進(jìn)行加密,得出信息的驗證碼,再對驗證碼進(jìn)行加密操作,得出數(shù)字簽名。最常用的是RSA數(shù)字簽名體制。
其過程可分為密鑰生成、簽名算法和驗證算法3部分。
1.密鑰生成
1)選取兩個大素數(shù)p和q,計算n=pq(公開),φ(n)=(p-1)(q-1),φ(n)為n的歐拉函數(shù)。
2)隨機選取正整數(shù)e,滿足1 3)計算d,滿足de≡1(modφ(n)) 簽名者的公鑰為{n,e},私鑰為{p,q,d}。 2.簽名算法 設(shè)消息為x,則x的RSA簽名是y=xd(mod n)。 3.驗證算法 當(dāng)接收者收到簽名(x,y)后,計算x’=ye(mod n)。 如果x=x’,則y是x的RSA簽名。 數(shù)字簽名的特點是它代表了文件的特征,文件如果發(fā)生改變,數(shù)字簽名的值也將發(fā)生變化。不同的文件將得到不同的數(shù)字簽名。 在系統(tǒng)中還使用了PKI技術(shù)。公鑰基礎(chǔ)設(shè)施(Public Key Infrastructure,PKI)是一個用公鑰概念和技術(shù)實施和提供安全服務(wù)的具有普適性的安全基礎(chǔ)設(shè)施。 PKI是一種新的安全技術(shù),它由權(quán)威認(rèn)證機關(guān)(CA)、數(shù)字證書庫、密鑰備份及恢復(fù)系統(tǒng)、證書撤銷列表、應(yīng)用接口等基本構(gòu)成,構(gòu)建PKI也圍繞這五大系統(tǒng)來構(gòu)建。 MD5是一種被廣泛使用的一種算法,特別是在用戶密碼方面。因為許多用戶密碼比較簡單,所以攻擊者能在很短的時間內(nèi)破解。王小云教授在2004年召開的國際密碼學(xué)年會(Crypto 2004)上做了破解MD5算法的報告,發(fā)表了一篇《散列(哈希)函數(shù)MD4、MD5、HAVAL-128和RIPEMD中的碰撞》論文,引起了很大的反響。文獻(xiàn)[4]中的作者可以在短時間內(nèi)獲得MD5函數(shù)多個碰撞的算法(即不同的明文產(chǎn)生相同的Hash函數(shù)值),這就導(dǎo)致MD5在使用中會有很大的危險。為了保證系統(tǒng)的安全,本文對MD5的使用進(jìn)行了改進(jìn)。 在.NET中,System.Security.Cryptography類中包含一系列能夠?qū)崿F(xiàn)對稱和非對稱加密、創(chuàng)建哈希值等的函數(shù),使用md5.ComputeHash()函數(shù)可以得到MD5值。在網(wǎng)上申請犬證系統(tǒng)中,用戶模塊中有兩個部分用到了MD5。 1.對于用戶模塊中的用戶密碼進(jìn)行MD5加密改進(jìn)。改進(jìn)方法為:1)在用戶注冊時,分別對用戶密碼和當(dāng)前系統(tǒng)時間進(jìn)行MD5加密,得到的密文A和B,位數(shù)各為32位。2)用截取函數(shù)取A中前16位,B后16位,得到32位的MD5值C。3)對C進(jìn)行MD5加密得到的值D存入數(shù)據(jù)庫。 通過這種方法,即使進(jìn)入數(shù)據(jù)庫得到了密碼值并進(jìn)行破譯也不能得到真正的密碼值,這樣能夠提高網(wǎng)站的安全性。 用戶登錄驗證密碼時,具體做法是:1)對用戶輸入的密碼和數(shù)據(jù)庫中的用戶注冊時間進(jìn)行MD5計算得到A’和B。2)用截取函數(shù)獲得A’中前16位和B中的前16位,得到C’。3)對C’進(jìn)行MD5加密得到D’,如果D=D’,則C=C’,A=A’,用戶登錄成功。 2.用戶上傳文件模塊中使用了MD5加密。當(dāng)用戶填寫好申請表格后要上傳到服務(wù)器端,為了防止黑客篡改文檔中的信息則采用MD5數(shù)字摘要算法來保證文檔中的信息沒有被篡改。雖然在保證文件的原始完整性的方法有缺陷,但是在實際中,要偽造有特定含義的申報文件與原始文件具有相同的數(shù)字摘要的可能性非常非常小,可以說是幾乎不太可能的(這點是由王小云的破解算法決定的)。因此用MD5來保證申報文件不被篡改還是有應(yīng)用價值的。具體步驟如下:a)引用System.Security.Cryptography類;b)用File.ReadAllBytes(FilePath)語句來讀取文件中的信息;c)調(diào)用md5.ComputeHash(data)函數(shù)計算數(shù)字摘要M;d)將M值作為文件名保存至數(shù)據(jù)庫中;e)審核員打開文件時重新讀取文件并再次調(diào)用MD5函數(shù)計算數(shù)字摘要M’;f)比較M與M’,如相等,則進(jìn)行審核,如不等,則說明數(shù)據(jù)被破壞,反饋給用戶讓其重新上傳申報文件。 流程圖如圖1所示。 1.審核員采用數(shù)字證書模式進(jìn)行登錄。首先要配置IIS,安全套接字節(jié)(SSL)是一套提供身份驗證、保密性和數(shù)據(jù)完整性的加密技術(shù)。配置好雙向SSL后,即要求客戶端證書。WEB后臺可以通過客戶端證書獲取管理員身份,從而替代傳統(tǒng)的用戶名和口令,也提高了安全性。對于某個CA,其頒發(fā)的所有證書都有一個唯一的、不重復(fù)的證書序列號,可以利用證書序列號來識別不同的用戶。 本文采用在SQL SERVER 2008中創(chuàng)建審核員表,其中就可以用證書序列號字段來獲取其身份和權(quán)限。當(dāng)審核員登錄系統(tǒng)時,將被要求選擇使用的證書。系統(tǒng)從證書中獲取證書屬性,與數(shù)據(jù)庫中管理員表中的證書序列號字段進(jìn)行查詢,如果匹配就能登錄界面,如不能就彈出出錯信息。 在.NET中用Request.ClientCertificate()函數(shù)來獲取CA證書的屬性,包括證書序列號等字段。 2.數(shù)字簽名。審核員對審核結(jié)果采用私鑰進(jìn)行簽名并保存在數(shù)據(jù)庫中,以防止糾紛的產(chǎn)生。數(shù)字簽名功能本系統(tǒng)中使用微軟的CAPICOM組件來實現(xiàn)。Windows操作系統(tǒng)為我們提供了先進(jìn)的加密體系模型CryptoAPI,但使用其完成一些通常的操作(如:加密、簽名)仍然是相當(dāng)復(fù)雜的。而CAPICOM組件,封裝了上述的復(fù)雜操作,使你只需要調(diào)用一兩個函數(shù),就可以完成指定的功能。所以本系統(tǒng)用SignData()函數(shù)進(jìn)行數(shù)字簽名,用VerifySignature()函數(shù)進(jìn)行驗證,簡單、實用。 隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)安全技術(shù)越來越重要?;赑KI的網(wǎng)絡(luò)安全系統(tǒng)的設(shè)計已經(jīng)廣泛地被使用。本文討論了PKI、數(shù)字簽名等技術(shù)的基本原理和在網(wǎng)上申請犬證系統(tǒng)中的具體應(yīng)用,并通過改進(jìn)MD5碼的算法,生成適合自己的MD5算法,再運用二次加密,使得網(wǎng)站的安全性進(jìn)一步增強,具有一定的應(yīng)用價值。隨著密碼科學(xué)和軟硬件技術(shù)發(fā)展,網(wǎng)絡(luò)安全技術(shù)必將發(fā)揮越來越大的作用。當(dāng)然,我們還需要注意系統(tǒng)本身的安全,如防火墻、訪問控制、代碼安全等。 [1]張艷.RSA數(shù)字簽名算法在電子病歷中的應(yīng)用[J].微計算機應(yīng)用,2010,31(1):79-80. [2]Rivest R.The MD5 Message-Digest Algorithm[S].RFC 1321,April 1992. [3]何大可,彭代淵,唐子虎等.現(xiàn)代密碼學(xué)[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算法在數(shù)據(jù)安全中的應(yīng)用及安全性分析[J].微計算機應(yīng)用,2010,31(10):66-69. [6]胡景浩.在網(wǎng)站安全性應(yīng)用中對MD5碼的改進(jìn)[A].第三屆全國軟件測試會議與移動計算、柵格、智能化高級論壇論文集,2009.三、PKI
四、在.NET中對MD5碼的改進(jìn)
五、數(shù)字證書、數(shù)字簽名在系統(tǒng)中的運用
六、結(jié)束語