摘要:針對網絡通信中的竊聽、重放等安全問題,本文設計了一種公鑰加密方法RSA與傳統加密方法AES相結合的混合密鑰加密方案,以保證網絡通信中數據的保密性,本方案已在Java平臺下進行測試和實現。
關鍵詞:網絡安全;數據加密;Java;AES;RSA
中圖分類號:TP311 文獻標識碼: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 引言
網絡安全是指網絡系統的硬件、軟件及其系統中的數據受到保護,不因偶然的或者惡意的原因而遭受到破壞、更改、泄露,系統連續可靠正常地運行,網絡服務不中斷。 網絡安全從其本質上來講就是網絡上的信息安全。為了保證信息安全不受侵犯,可以采用多種技術,如加密技術、訪問控制技術、認證技術以及安全審計技術等。但迄今為止,最重要的網絡與通信自動化安全中工具是加密。廣泛使用的兩種加密形式是傳統加密和公鑰加密。本文將兩種加密形式相結合,在Java環境下使用 AES和 RSA加密算法對數據進行加密和解密。
2 數據加密技術概述
加密是從明文到密文的變換過程。計算機上數據的加、解密變換是由密鑰控制實現的。根據加、解密過程使用的密鑰是否相同,可將現代密碼技術分為對稱加密算法和公鑰加密算法兩類。對稱加密算法中,加、解密使用的密鑰相同,加、解密速度快,算法簡便高效,密鑰簡短,但其安全性完全依賴于密鑰。而密鑰管理是對稱密碼的一個嚴重瓶頸。在公鑰加密算法中,加、解密使用不同的密鑰,幾乎不可能從一個密鑰推導出另一個密鑰,它適應于網絡開放性要求,密鑰管理簡單,但算法復雜,加、解密效率低。
目前常用的對稱加密技術有DES、3DES和AES。DES是舊的加密標準,它的密匙長度為56位,加密強度較低已被認為不是安全的加密技術。3DES是對DES的改進,對明文用一個不同的DES密匙進行DES加密、解密和再加密,這樣可以提高加密強度。AES是新的加密標準,它是DES的替代者,它的密鑰長度有128、192和256三種,目前還沒有被人攻破。目前使用的非對稱加密技術主要有RSA和ECC,其中1024位的 RSA是目前使用最為廣泛的非對稱加密技術。本文將在Java平臺下將AES與RSA相結合對網絡通信中數據進行混合加密。
3 Java中的數據加密類
由于Java一開始就是面向網絡應用的,它十分重視數據的安全性,在 JDK 1.1中就已支持 DES加密技術,在 JDK1.5中支持 DES、3DES、AES等對稱加密技術,在非對稱加密技術方面支持 RSA技術,在 Java還可以安裝其它公司的加密包,使用 “SunJCF”所不支持的其它加密算法,因此Java在電子商務中得到了廣泛的應用。Java中的與數據加密相關的類與方法主要有:
1) KeyGenerator類用于獲得各類對稱加密技術的密鑰,主要方法有:
getlnstance(“加密算法字符串”),用于設置要獲得的密鑰的加密算法init()化對稱加密的密匙對象;
generateKey(),從對稱加密的密鑰對象中取得密鑰;
2) KeyPairGenerator類用于獲得非對稱加密技術的密鑰。主要方法有:
getInstance(“非對稱加密算法字符串”),用于設置要獲得的密鑰的加密算法;
initialize(“密鑰長度”),用于初始化非對稱加密的密鑰對象 ;
generateKeyPair(),返回非對稱加密密鑰對;
getPublic(),從非對稱密鑰對中取得公鑰;
getPrivate(),從非對稱密鑰組中用于取得私鑰;
3) Cipher類是Java加密的主要類,用于按一定的算法對數據進行加密、解密、包裝和返包裝。主要方法有:
getlnstance(“加密算法字符串”),用于設置要使用的加密算法;
Init(“類型”,密鑰),按提供的類型和密匙初始化加密對象;
getBLockSize(),用于返回加密算法的輸入分組長度;
getOutputSize(),用于返回加密算法的輸出分組長度;
update(inBytes,blockSize,outBytes),對 inBytes進行加密或解密處理,并將處理結果輸出到 outBytes中;
doFinal(),對要不足分組長度的數據進行填充處理;
4 基于RSA與AES的混合加密方案
4.1 混合加密通信模型
本文設計的混合加密方案利用公鑰加密(RSA)傳輸對稱加密密鑰,用對稱密碼(AES)進行數據通信,本方案綜合對稱加密的加密快和公鑰加密密鑰分發簡單的優點,解決了通信中的效率和安全問題。本混合加密方案的通信過程可分為公鑰加密傳輸對稱密鑰和對稱加密傳輸數據兩個階段。基于混合加密的安全通信模型如圖1所示。
4.2 混合加密通信流程
1) 公鑰加密傳輸對稱密鑰K。公鑰加密傳輸對稱密鑰的通信流程如下 :
第一步,發送方和接收方分別在本地生成自己的密鑰對(公鑰PK和私鑰SK),安全保存SK,公開發布PK;
第二步,通過檢索公鑰目錄,發送方獲得接收方的PK;
第三步,發送方生成對稱密鑰K;
第四步,發送方用接收方的PK加密K得到C ,將 C 發給接收方;
第五步,接收方用自己SK解密C,獲得密鑰K。
這樣,收發雙方擁有共享密鑰K,安全地完成了密鑰的分發。
2) 對稱加密進行數據通信。收發雙方利用共享密鑰K進行數據通信的流程如下 :
第一步,發送方用K加密消息P得到密文C;
第二步,發送方將C發送給接收方;
第三步,接收方用K解密C獲得消息P,即可獲得消息原文,從而實現數據的保密通信。
當一個密鑰K被安全分發后,在安全期內,混合加密系統利用密鑰 K進行對稱密碼通信。當由于K被泄露或過了K的有效期需要更換密鑰時,才再次利用公鑰密碼分發新的密鑰 K。
5 混合加密方案的Java實現
5.1 使用公鑰加密分發對稱密鑰加密的實現
方案中采用 RSA 分發對稱密鑰,公鑰密碼分發對稱密鑰的實現過程如下:
1) 公鑰(RSA)密鑰對的生成。實現代碼為:
KeyPairGenerator keyGen=KeyPairGenerator.getlnstance(“ RSA”);
//創建密鑰對生成器,指定RSA加密算法
SecureRandom random=new SecureRandom( ); //生成隨機數
keyGen.initialize(1024,random); //初始化密鑰生成器
KeyPair keyPair=keyGen.generateKeyPair0; //生成密鑰對
SecretKey prk= keyPair.generateKey( ); //獲得私鑰
PublicKey pbk= keyPair.readObject( ); //獲得公鑰
2) 創建對稱密鑰。實現代碼為:
//讀取自己的公鑰和私鑰
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”);//創建密鑰協定對象
ka.init(prk);//初始化密鑰協定對象
Ka.doPhase(pbk,true);//執行密鑰協定
byte[] b=ka.generateSecret();//生成密鑰
5.2 對稱密鑰加密進行數據通信的實現
利用公鑰密鑰加密傳輸的對稱密鑰就可進行保密通信。對稱加密通信的具體流程如下:
Ciper cp= Ciper.getInstance(“AES”);//創建密鑰器
Cp.inti(Ciper.ENCRYPT_MODE,dd.aesKey());//初始化密鑰器
FileInputStream sin=new FileInputStream(args[0]); //獲取待加密數據
FileOutputStream fos=new FileOutputStream(args[1]);
CiperOutputStream cout=new CiperOutputStream(fos,cp); //創建加密輸出流
While(((b=in.read())!=-1) {cout.write(b);} //寫輸出流
6 系統測試與分析
本加密方案使用公鑰加密來實現對稱密鑰的交換,使用對稱加密來加密通信數據,既有對稱加密系統的處理速度,又解決了對稱加密系統中密鑰交換的難題,從而兼顧了通信中的效率和安全問題,且在Java平臺上實現該方案,使本加密方案具有與平臺無關性、安全、方便的特點。但本方案只能解決網絡通信中數據的保密性問題,對于數據完整性與不可否認性,還需要采用數字簽名、數字摘要等方案來解決。
7 結束語
網絡安全是保障網絡應用的基礎,經過對各種加密方法的分析,本文提出了一套混合數據加密方法,來保證網絡中通信信息的安全。事實上,網絡安全是一個綜合性的課題,需要各個方面的努力,以及安全技術的不斷進步。相信在21世紀,網絡信息安全的地位將更加重要,網絡信息安全必然隨著網絡應用的發展而不斷發展。
參考文獻:
[1] William Stallings著.Cryptography and Network Security Principles and Practices[M]Fourth Edition.北京:電子工業出版社,2006.135-150,259-267.
[2] 聊斯漢.密碼學與計算機網絡安全[M].北京:清華大學出版社,2001.
[3] 景旭.基于混合加密的即時通訊系統設計與實現[J].西北農林科技大學學報,2007.