摘要:針對網(wǎng)絡(luò)通信中的竊聽、重放等安全問題,本文設(shè)計了一種公鑰加密方法RSA與傳統(tǒng)加密方法AES相結(jié)合的混合密鑰加密方案,以保證網(wǎng)絡(luò)通信中數(shù)據(jù)的保密性,本方案已在Java平臺下進行測試和實現(xiàn)。
關(guān)鍵詞:網(wǎng)絡(luò)安全;數(shù)據(jù)加密;Java;AES;RSA
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2009)05-1077-02
Technique of Mixed Cryptography and its Application in Network and Communication Security
Yang Li-li
(Department of Mathematics and Computer Science,Zhanjiang 5243000, China)
Abstract: To prevetent from the attacking of listening and replaying,and strengthen the safety in network communication. A scheme of mixed crypography is brought forward, and the principle of the scheme is that before transmitted,the data is encrypted using AES,and the Key of AES is encrypted using RSA. The scheme is tested and implemented by Java language.
Keywords: network security; data crptography; Java; AES; RSA
1 引言
網(wǎng)絡(luò)安全是指網(wǎng)絡(luò)系統(tǒng)的硬件、軟件及其系統(tǒng)中的數(shù)據(jù)受到保護,不因偶然的或者惡意的原因而遭受到破壞、更改、泄露,系統(tǒng)連續(xù)可靠正常地運行,網(wǎng)絡(luò)服務(wù)不中斷。 網(wǎng)絡(luò)安全從其本質(zhì)上來講就是網(wǎng)絡(luò)上的信息安全。為了保證信息安全不受侵犯,可以采用多種技術(shù),如加密技術(shù)、訪問控制技術(shù)、認證技術(shù)以及安全審計技術(shù)等。但迄今為止,最重要的網(wǎng)絡(luò)與通信自動化安全中工具是加密。廣泛使用的兩種加密形式是傳統(tǒng)加密和公鑰加密。本文將兩種加密形式相結(jié)合,在Java環(huán)境下使用 AES和 RSA加密算法對數(shù)據(jù)進行加密和解密。
2 數(shù)據(jù)加密技術(shù)概述
加密是從明文到密文的變換過程。計算機上數(shù)據(jù)的加、解密變換是由密鑰控制實現(xiàn)的。根據(jù)加、解密過程使用的密鑰是否相同,可將現(xiàn)代密碼技術(shù)分為對稱加密算法和公鑰加密算法兩類。對稱加密算法中,加、解密使用的密鑰相同,加、解密速度快,算法簡便高效,密鑰簡短,但其安全性完全依賴于密鑰。而密鑰管理是對稱密碼的一個嚴(yán)重瓶頸。在公鑰加密算法中,加、解密使用不同的密鑰,幾乎不可能從一個密鑰推導(dǎo)出另一個密鑰,它適應(yīng)于網(wǎng)絡(luò)開放性要求,密鑰管理簡單,但算法復(fù)雜,加、解密效率低。
目前常用的對稱加密技術(shù)有DES、3DES和AES。DES是舊的加密標(biāo)準(zhǔn),它的密匙長度為56位,加密強度較低已被認為不是安全的加密技術(shù)。3DES是對DES的改進,對明文用一個不同的DES密匙進行DES加密、解密和再加密,這樣可以提高加密強度。AES是新的加密標(biāo)準(zhǔn),它是DES的替代者,它的密鑰長度有128、192和256三種,目前還沒有被人攻破。目前使用的非對稱加密技術(shù)主要有RSA和ECC,其中1024位的 RSA是目前使用最為廣泛的非對稱加密技術(shù)。本文將在Java平臺下將AES與RSA相結(jié)合對網(wǎng)絡(luò)通信中數(shù)據(jù)進行混合加密。
3 Java中的數(shù)據(jù)加密類
由于Java一開始就是面向網(wǎng)絡(luò)應(yīng)用的,它十分重視數(shù)據(jù)的安全性,在 JDK 1.1中就已支持 DES加密技術(shù),在 JDK1.5中支持 DES、3DES、AES等對稱加密技術(shù),在非對稱加密技術(shù)方面支持 RSA技術(shù),在 Java還可以安裝其它公司的加密包,使用 “SunJCF”所不支持的其它加密算法,因此Java在電子商務(wù)中得到了廣泛的應(yīng)用。Java中的與數(shù)據(jù)加密相關(guān)的類與方法主要有:
1) KeyGenerator類用于獲得各類對稱加密技術(shù)的密鑰,主要方法有:
getlnstance(“加密算法字符串”),用于設(shè)置要獲得的密鑰的加密算法init()化對稱加密的密匙對象;
generateKey(),從對稱加密的密鑰對象中取得密鑰;
2) KeyPairGenerator類用于獲得非對稱加密技術(shù)的密鑰。主要方法有:
getInstance(“非對稱加密算法字符串”),用于設(shè)置要獲得的密鑰的加密算法;
initialize(“密鑰長度”),用于初始化非對稱加密的密鑰對象 ;
generateKeyPair(),返回非對稱加密密鑰對;
getPublic(),從非對稱密鑰對中取得公鑰;
getPrivate(),從非對稱密鑰組中用于取得私鑰;
3) Cipher類是Java加密的主要類,用于按一定的算法對數(shù)據(jù)進行加密、解密、包裝和返包裝。主要方法有:
getlnstance(“加密算法字符串”),用于設(shè)置要使用的加密算法;
Init(“類型”,密鑰),按提供的類型和密匙初始化加密對象;
getBLockSize(),用于返回加密算法的輸入分組長度;
getOutputSize(),用于返回加密算法的輸出分組長度;
update(inBytes,blockSize,outBytes),對 inBytes進行加密或解密處理,并將處理結(jié)果輸出到 outBytes中;
doFinal(),對要不足分組長度的數(shù)據(jù)進行填充處理;
4 基于RSA與AES的混合加密方案
4.1 混合加密通信模型
本文設(shè)計的混合加密方案利用公鑰加密(RSA)傳輸對稱加密密鑰,用對稱密碼(AES)進行數(shù)據(jù)通信,本方案綜合對稱加密的加密快和公鑰加密密鑰分發(fā)簡單的優(yōu)點,解決了通信中的效率和安全問題。本混合加密方案的通信過程可分為公鑰加密傳輸對稱密鑰和對稱加密傳輸數(shù)據(jù)兩個階段?;诨旌霞用艿陌踩ㄐ拍P腿鐖D1所示。
4.2 混合加密通信流程
1) 公鑰加密傳輸對稱密鑰K。公鑰加密傳輸對稱密鑰的通信流程如下 :
第一步,發(fā)送方和接收方分別在本地生成自己的密鑰對(公鑰PK和私鑰SK),安全保存SK,公開發(fā)布PK;
第二步,通過檢索公鑰目錄,發(fā)送方獲得接收方的PK;
第三步,發(fā)送方生成對稱密鑰K;
第四步,發(fā)送方用接收方的PK加密K得到C ,將 C 發(fā)給接收方;
第五步,接收方用自己SK解密C,獲得密鑰K。
這樣,收發(fā)雙方擁有共享密鑰K,安全地完成了密鑰的分發(fā)。
2) 對稱加密進行數(shù)據(jù)通信。收發(fā)雙方利用共享密鑰K進行數(shù)據(jù)通信的流程如下 :
第一步,發(fā)送方用K加密消息P得到密文C;
第二步,發(fā)送方將C發(fā)送給接收方;
第三步,接收方用K解密C獲得消息P,即可獲得消息原文,從而實現(xiàn)數(shù)據(jù)的保密通信。
當(dāng)一個密鑰K被安全分發(fā)后,在安全期內(nèi),混合加密系統(tǒng)利用密鑰 K進行對稱密碼通信。當(dāng)由于K被泄露或過了K的有效期需要更換密鑰時,才再次利用公鑰密碼分發(fā)新的密鑰 K。
5 混合加密方案的Java實現(xiàn)
5.1 使用公鑰加密分發(fā)對稱密鑰加密的實現(xiàn)
方案中采用 RSA 分發(fā)對稱密鑰,公鑰密碼分發(fā)對稱密鑰的實現(xiàn)過程如下:
1) 公鑰(RSA)密鑰對的生成。實現(xiàn)代碼為:
KeyPairGenerator keyGen=KeyPairGenerator.getlnstance(“ RSA”);
//創(chuàng)建密鑰對生成器,指定RSA加密算法
SecureRandom random=new SecureRandom( ); //生成隨機數(shù)
keyGen.initialize(1024,random); //初始化密鑰生成器
KeyPair keyPair=keyGen.generateKeyPair0; //生成密鑰對
SecretKey prk= keyPair.generateKey( ); //獲得私鑰
PublicKey pbk= keyPair.readObject( ); //獲得公鑰
2) 創(chuàng)建對稱密鑰。實現(xiàn)代碼為:
//讀取自己的公鑰和私鑰
FilelnputStream fis=new FileInputStream(args[0]);
ObjectInputStream obj=new FileObjectlnputStream(fis);
PublicKey pbk=(PublicKey)obj.readObject();
FilelnputStream f= new FileInputStream (args[1]);
ObjectlnputStream ob=new ObjectlnputStream (f);
PrivateKey prk=(PrivateKey)ob.readObject();
KeyAgreement ka=KeyAgreement.getlnstance(“RSA”);//創(chuàng)建密鑰協(xié)定對象
ka.init(prk);//初始化密鑰協(xié)定對象
Ka.doPhase(pbk,true);//執(zhí)行密鑰協(xié)定
byte[] b=ka.generateSecret();//生成密鑰
5.2 對稱密鑰加密進行數(shù)據(jù)通信的實現(xiàn)
利用公鑰密鑰加密傳輸?shù)膶ΨQ密鑰就可進行保密通信。對稱加密通信的具體流程如下:
Ciper cp= Ciper.getInstance(“AES”);//創(chuàng)建密鑰器
Cp.inti(Ciper.ENCRYPT_MODE,dd.aesKey());//初始化密鑰器
FileInputStream sin=new FileInputStream(args[0]); //獲取待加密數(shù)據(jù)
FileOutputStream fos=new FileOutputStream(args[1]);
CiperOutputStream cout=new CiperOutputStream(fos,cp); //創(chuàng)建加密輸出流
While(((b=in.read())!=-1) {cout.write(b);} //寫輸出流
6 系統(tǒng)測試與分析
本加密方案使用公鑰加密來實現(xiàn)對稱密鑰的交換,使用對稱加密來加密通信數(shù)據(jù),既有對稱加密系統(tǒng)的處理速度,又解決了對稱加密系統(tǒng)中密鑰交換的難題,從而兼顧了通信中的效率和安全問題,且在Java平臺上實現(xiàn)該方案,使本加密方案具有與平臺無關(guān)性、安全、方便的特點。但本方案只能解決網(wǎng)絡(luò)通信中數(shù)據(jù)的保密性問題,對于數(shù)據(jù)完整性與不可否認性,還需要采用數(shù)字簽名、數(shù)字摘要等方案來解決。
7 結(jié)束語
網(wǎng)絡(luò)安全是保障網(wǎng)絡(luò)應(yīng)用的基礎(chǔ),經(jīng)過對各種加密方法的分析,本文提出了一套混合數(shù)據(jù)加密方法,來保證網(wǎng)絡(luò)中通信信息的安全。事實上,網(wǎng)絡(luò)安全是一個綜合性的課題,需要各個方面的努力,以及安全技術(shù)的不斷進步。相信在21世紀(jì),網(wǎng)絡(luò)信息安全的地位將更加重要,網(wǎng)絡(luò)信息安全必然隨著網(wǎng)絡(luò)應(yīng)用的發(fā)展而不斷發(fā)展。
參考文獻:
[1] William Stallings著.Cryptography and Network Security Principles and Practices[M]Fourth Edition.北京:電子工業(yè)出版社,2006.135-150,259-267.
[2] 聊斯?jié)h.密碼學(xué)與計算機網(wǎng)絡(luò)安全[M].北京:清華大學(xué)出版社,2001.
[3] 景旭.基于混合加密的即時通訊系統(tǒng)設(shè)計與實現(xiàn)[J].西北農(nóng)林科技大學(xué)學(xué)報,2007.