譚一曲
摘要:在現(xiàn)代信息化社會里,如何對計算機網(wǎng)絡(luò)公文通信中的內(nèi)容進行驗證,以保證安全可靠,已經(jīng)成為一個急需解決的問題。該文先分析了網(wǎng)絡(luò)公文通信中遇到的各種安全問題,接著具體討論了用消息摘要、數(shù)字簽名及數(shù)字認證等技術(shù)確保網(wǎng)絡(luò)公文通信安全的設(shè)計方法,并在公文通信系統(tǒng)上實現(xiàn)了身份認證和數(shù)字簽名的應(yīng)用。
關(guān)鍵詞:身份認證;數(shù)字簽名;數(shù)字證書;公鑰
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2012)35-8377-02
在現(xiàn)代信息化社會里,如何對計算機網(wǎng)絡(luò)公文通信中的內(nèi)容進行驗證,以保證更安全可靠,已經(jīng)成為一個急需解決的問題。
計算機網(wǎng)絡(luò)公文通信所面臨的威脅具有以下幾種形式:
1)偽裝:入侵者假冒合法用戶發(fā)送另類信息;2)篡改:入侵者篡改發(fā)送方發(fā)送的信息,導(dǎo)致接收方接收錯誤;3)否認:發(fā)送方否認所發(fā)送的信息,導(dǎo)致接收方無法提供證據(jù);4)泄露:信息被第三方竊取與利用。
通過研究與實踐,在某地方政府公文傳遞系統(tǒng)的設(shè)計上采用消息摘要、數(shù)字簽名及認證等技術(shù)解決了上述問題。
1用消息摘要技術(shù)實現(xiàn)消息的完整性
消息摘要的目的是防止與識別數(shù)據(jù)信息被篡改,以實現(xiàn)消息的完整性。數(shù)據(jù)信息的同一消息計算兩次消息摘要,如果結(jié)果相同,則數(shù)據(jù)信息沒有被篡改,否則則可證明數(shù)據(jù)已經(jīng)被篡改,不可采用。
在公文傳遞系統(tǒng)中,利用Java提供的計算消息摘要的封裝類:java.security.MessageDigest,調(diào)用getInstance()方法函數(shù),就可實現(xiàn)數(shù)據(jù)信息的消息摘要。方法函數(shù)將用到兩個主要算法,即MD5和SHA-1。一旦創(chuàng)建了MessageDigest對象,就可以利用函數(shù)update()和digest()進行數(shù)據(jù)的聚集與計算。本系統(tǒng)中采用讓用戶對用戶名和信息欄中的數(shù)據(jù)信息計算消息摘要的方法,以識別和消除被篡改的數(shù)據(jù)信息。
2簡便數(shù)字簽名方法
消息摘要技術(shù)可以保證數(shù)據(jù)信息沒有被篡改,但接收者無法確定數(shù)據(jù)信息是否確實是某部門(或某人)發(fā)來的。簡便數(shù)字簽名方法可用來解決這一問題。數(shù)字簽名采用非對稱加密技術(shù),發(fā)送者使用私鑰加密數(shù)據(jù)信息,產(chǎn)生消息摘要,接收者使用發(fā)送者的公鑰解密消息摘要以驗證簽名是否屬實。由于私鑰只有加密者才有,因此如果接收者用某個公鑰解密了某個消息摘要,就可以確定這段消息摘要必是對應(yīng)的私鑰持有者發(fā)來的。
例如,甲、乙雙方通信時,甲把數(shù)據(jù)信息的消息摘要用自己的私鑰加密(即簽名),然后把數(shù)據(jù)信息及簽名后的消息摘要一起發(fā)送給乙,乙方使用甲的公鑰解密消息摘要(這一過程同時確認了發(fā)送數(shù)據(jù)的部門或人,又可以解密消息摘要),然后通過解密后的消息摘要能驗證數(shù)據(jù)是否被修改。
2.1使用私鑰進行數(shù)字簽名
1)先指定算法調(diào)用signature類的getInstance(),生成signature對象;2)用簽名者的私鑰初始化對象;3)將要簽名的數(shù)據(jù)信息傳入對象;4)用對象的sign()方法生成對數(shù)據(jù)的數(shù)字簽名。
2.2使用公鑰驗證數(shù)字簽名
1)先指定算法調(diào)用signature類的getInstance(),生成signature對象;2)用簽名者的公鑰初始化對象;3)將要驗證的數(shù)據(jù)信息傳入對象;4)用對象的verify方法驗證字節(jié)數(shù)組signature是否為對應(yīng)數(shù)據(jù)信息的數(shù)字簽名,如果是則返回true,否則返回false。
3數(shù)字證書
使用數(shù)字簽名的前提是數(shù)據(jù)信息接收方確信驗證簽名時(用發(fā)送者的私鑰加密消息摘要)所用的公鑰是簽名者的,但是可能有人制造假公鑰,為了識破假公鑰,可采用數(shù)字證書技術(shù)。
數(shù)字證書含有兩部分數(shù)據(jù):一部分是對應(yīng)主體(單位或個人)的信息,另一部分是這個主體所對應(yīng)的公鑰,即數(shù)字證書保存了主體和它的公鑰一一對應(yīng)關(guān)系。如何判斷數(shù)字證書等內(nèi)容的真實性呢?由于有效的數(shù)字證書必須經(jīng)過權(quán)威CA的簽名,所以可以通過權(quán)威CA驗證數(shù)字證書的真實性,然后再在數(shù)字證書上使用CA的私鑰簽名。因權(quán)威的CA公鑰在操作系統(tǒng)中已安裝,當(dāng)接收用戶收到數(shù)字證書后,會用相應(yīng)的CA公鑰驗證該證書的簽名,根據(jù)非對稱加密的原理,如果該證書不是權(quán)威CA簽名的,將不能通過驗證,若通過驗證,即可證明此證書含的信息(發(fā)信人的公鑰和信息)是無誤的,便可以通過該證書內(nèi)容的公鑰來確認數(shù)據(jù)是發(fā)送者發(fā)來的。
3.1證書創(chuàng)建
java中的keytool.exe可以用來創(chuàng)建數(shù)字證書,所有的數(shù)字證書是以一條一條的形式存入證書庫中的,每一條都有它自己的別名,并以各自的形式存入證書庫中的,每一條證書包含該證書的公鑰、私鑰和對應(yīng)的數(shù)字證書的信息。證書可以導(dǎo)出數(shù)字證書文件,數(shù)字證書文件只包括主體信息與對應(yīng)的公鑰。本系統(tǒng)使用的是J2SDK提供的keytool工具默認的密鑰庫和算法,分別創(chuàng)建權(quán)威認證機構(gòu)CA和用戶證書,并將所創(chuàng)建的證書從密鑰庫中導(dǎo)出。
3.2證書簽發(fā)
該過程是CA驗證用戶的身份,并用其私鑰簽署用戶的數(shù)字證書。被CA簽名的證書將被信任和使用。證書創(chuàng)建過程如下:
1)設(shè)置兩個常量,用MD5withRSA簽署證書的算法和證書的有效期,有效期設(shè)置為一年;
2)主要工作在函數(shù)main()中完成。需要傳遞的參數(shù)是keystore、CA證書和私鑰的別名、待簽發(fā)的證書的別名以及存放證書的上一級證書的別名;
3)獲得用于讀取keystore和密鑰的口令,再利用用戶提供的口令和keystore文件名讀取keystore;
4)從keystore中讀入CA的私鑰和證書;
5)按照CA的格式創(chuàng)建一個X509CerImpl類,用它保存證書的發(fā)布者,然后簽發(fā)一個新證書;
6)創(chuàng)建一個X509CerInfo類,用它來保存CA證書的詳細信息;
7)獲取待簽的證書和私鑰,在keystore中創(chuàng)建一個新的實體,也要為新的證書創(chuàng)建一個X509CerInfo類;
8)設(shè)定新證書的有效期,然后根據(jù)當(dāng)前時間創(chuàng)建新的序列號。對于給定的CA,保持唯一確定的序列號非常重要,故程序要保證產(chǎn)生的序列號不會重復(fù)。然后設(shè)定新證書的發(fā)布者,即是這里的CA,最后將算法信息放入證書;
9)用CA的私鑰簽署該證書;
10)把新證書放入keystore,并將keystore存放到文件系統(tǒng)中。
通過以上步驟便可實現(xiàn)CA對用戶證書的簽署,將CA簽署的證書導(dǎo)出,以供系統(tǒng)提取數(shù)字證書與相關(guān)信息之用。
4結(jié)束語
該數(shù)字簽名的方法與技術(shù)已應(yīng)用在某地方政府的網(wǎng)絡(luò)公文通信系統(tǒng)中,通過使用消息摘要、數(shù)字簽名和數(shù)字認證,公文收發(fā)雙方可以防止消息被篡改,確認對方身份的真實性,同時可以防止對方的否認。公文通信系統(tǒng)的試運行證明完全達到了以上目的。
公文通信中安全性的設(shè)計有多種方法,該文所述方法與已有的其他方法比較,該文方法充分利用了已有的安全設(shè)計技術(shù)與軟件成果,形成與實現(xiàn)了模塊化鏈接,結(jié)構(gòu)分明,代碼簡潔,維護與擴充方便。
參考文獻:
[1]彭鈺,徐俊杰,朱曦,等.基于Petri網(wǎng)的公文流轉(zhuǎn)工作流的建模[J].計算機與數(shù)字工程,2006(3).
[2]劉明臻,魏長軍.OA系統(tǒng)公文流轉(zhuǎn)模塊的設(shè)計和實現(xiàn)[J].吉林師范大學(xué)學(xué)報:自然科學(xué)版,2008(2).
[3]王芳,李光明,郭文強.基于ZEN的公文流轉(zhuǎn)痕跡保留的實現(xiàn)[J].商場現(xiàn)代化,2009(14).
[4]楊麗娜,魏永紅.JAVA語言程序設(shè)計[M].西安:西安交通大學(xué)出版社,2010.