摘要:针对网络通信中的窃听、重放等安全问题,本文设计了一种公钥加密方法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.
推荐访问: 网络通信 混合 加密技术