微型机与应用
MICROCOMPUTER & ITS APPLICATIONS
2000　No.19　No.1　P.39-41




Java与混沌加密
路骏
摘 要： 在TCP/IP协议为基础的Internet网络上，利用Java语言的平台无关特性和混沌加密技术的动态性和多样性，在开放的Web网络环境中构造一个动态同步的浏览器/服务器混沌加密应用模型。 
关键词： 混沌加密 JavaApple 浏览器/服务器
　　InternetInternet网每天为用户提供大量的信息服务。由于Internet网的基础协议TCP/IP不是一种安全的协议，未经特别加密的信息在网络上传送时，都直接暴露在整个网络上。现代高性能的计算机，运行自动分析和截获程序每秒可以搜索数百万个底码，对传统的加密算法构成严重的压力。信息领域急切希望拥有更安全方便、有效的信息保护手段。近几年来，混沌保密通信的研究被许多学者关注，并提出了许多加密方法。
　　混沌有许多奇异的特性，如：吸引性、自相似性、对初值敏感等特性，非常适合用作加密系统。
　　Java语言是SUN公司1995年才推出的一种新型网络语言，它的平台无关特性和内嵌的网络功能，特别适合网络应用。Java语言编写网络加密程序可以很好的解决异构环境中的运行问题。由于TCP/IP协议在安全上的先天不足，Java与混沌加密技术的融合更显示出独特的优势。
　　本文结合这2种新技术，编写了混沌加密客户端JavaApplet和Java安全服务器程序。只要从网络上用标准的浏览器登录到Web服务器上，内嵌的JavaApplet程序就会自动下载运行，并与安全服务器自动建立加密连接，提供动态同步的混沌加密传输。
1 混沌及加密原理
1.1 混沌概述
　　混沌是一种复杂的动力学行为，按混沌定义可以有不同的分类方法，按照动力学系统的性质，可以分为4种类型：第一类为时间混沌；第二类为空间混沌；第三类为时空混沌；第四类为功能混沌。其中，第一种类型已有比较充分的研究，洛仑兹混沌就属于第一类。其它3种类型尚处于起步阶段，正待大力发展。
　　混沌加密的理论依据是：混沌的自相似性，使得局部选取的混沌密匙集，在分布形态上都与整体相似。混沌系统对初始状态高度的敏感性、复杂的动力学行为、分布上不符合概率统计学原理，使混沌系统难以重构和预测。目前只能在特殊的条件下对一些混沌系统进行重构，从理论上还没有较好的一般性方法。
　　利用混沌同步实现保密通信是近年来竞争最激烈的应用研究领域。
1.2 Lorenz混沌加密实现
　　混沌是一种确定系统，除了用物理系统可以实现外，混沌的数学模型也适合用计算机来实现混沌迭代运算。本文采用计算机实现混沌系统，可以回避构造物理同步混沌系统时面临的技术难题。在普通的PC机上就可实现，可以直接用于计算机网络的加密应用。
　　计算机系统中可以精确的重现混沌迭代系统的所有启动状态，可以用计算机进程同步的思想实现混沌迭代系统的同步算法。启动参数和同步策略就是密码。这是物理学混沌模型不具备的特点，所以不需要使用复杂的物理混沌同步/控制方法。
　　本文选择学术上研究较充分的洛仑兹混沌吸引子，来实现1个动态混沌同步加密系统。洛仑兹用下面的方程组描述大气运动模型。迭代过程在一定的参数范围内没有稳定解，也不离散，而是像吸引在1个区域周围，进入了一种混沌状态。
　　取初值x＝1，y＝1，z＝1，a＝10，b＝28，c＝8/3时，这个迭代过程处于混沌状态。图1是经过10000次迭代后的Lorenz吸引子x，z的相空间图。图2是X的时间谱。其中x，y，z，a，b，c都是实数。
　　　　　　　　　　　　　　　　（1）

图1 Lorenz混沌吸引子的x，z相空间图

图2 Lorenz混沌吸引子X的时间谱
　　方程组（1）对任1个或几个参数充分敏感。即参数极微小的变动都可以使其后的混沌序列产生无法预测的变化。因此混沌加密的实质是用它难以预测的变化趋势来加密，而不是用1个难猜的数。
　　混沌系统的初始状态的数值，即可作为密钥。x，y，z通过某种合成算法就能生成动态密匙，在本文中，取x，y，z的代数和作密匙。如果要从这个和数分解出3个实数，有无穷多种分法。用二进制表示这个数，就得到了1个混沌分布的0，1序列。这种混沌分布的0，1序列可以用来加密任何数字信息。如数字化的文本、语音、视频等信息。
　　密匙产生后，就可以用各种标准的加密方法进行加密运算，如DES算法。为了便于实现和评估，采用了对称密码体制下的流式加密算法，作为加/解密算法。加密强度，主要取决于密匙流算法，早期的流式加密算法都采用伪随机产生式来产生密匙流。相关分析法可以有效地分析并重构伪随机序列，实现破译。现在用混沌系统替换伪随机产生式，破坏关相关分析的适用条件，使加密算法得到加强。表达式如（2）（3）
　　加密：Y＝G（t）X　　（2）
　　解密：X＝G（t）Y　　（3）
　　G（t）就是前面所述的混沌密匙生成算法。X是明文流，Y是密文流。
　　基于混沌非线性反馈控制原理，在混沌系统中吸入非线性反馈控制项，将加密后的密文反馈到这个控制项中，对后续的混沌状态进行扰动，使密文的每一部分都混沌相关，实现误差传播特性。对密文破译的任何误差都会被混沌系统充分放大传播，进一步提高了加密强度。表达式如（4）（5）。
　　加密：Yn＋1＝G（t，g（Yn））X　　（4）
　　解密：X＝G（t，g（Yn－1））Yn　　（5）
　　改进后的Lorenz混沌方程组（2）如下：
　　　　　　　　　　　　　　　（2）
　　实验证明，增加反馈后，Lorenz系统表现出新的动力学特征，但仍然保持稳定的混沌状态，可以确保加密算法的可靠。
2 Java和Applet
2.1 浏览器/服务器应用模型
　　Applet是Java语言的子集，Applet程序可以内嵌在HTML主页中，和主页一起下载到客户的计算机上，在浏览器内的虚拟机上运行。这样就可以让浏览器作为虚拟计算机，运行Applet编写的网络客户程序，实现与平台无关的网络客户前端。这种应用模型称之为浏览器/服务器应用模型。为防止恶意的Applet程序攻击用户的本地系统或窃取信息，Applet程序的运行受到虚拟机严格的安全检查和控制。
　　基于浏览器/服务器模型可以建立一种三层应用体系。即：客户端、中间服务器、应用服务器。加密服务可以设在中间服务器上，将加密与应用分开，客户端不能直接访问应用服务器，必须通过安全代理。应用服务器可以得到充分保护。中间服务器可以代理用户从多个受保护的应用服务器得到应用服务，客户端无需关心细节。客户端得以简化，适合在网络上迁移。可以用Applet编写客户端，Web服务器提供公共下载服务。由用户动态下载，在浏览器中运行。Applet程序会自动管理与服务器的通信。网络用户只要安装使用1个浏览器程序，就可以得到各种网络服务。不必考虑地位位置、运行环境、程序升级等问题。
2.2 线程与通信
　　Java支持多线程机制，它将资源分配单位和调度单位分离，进程作为资源分配单位，在进程内继续细分为线程。1个线程就是执行程序代码的1个线索，进程内的所有线程都共享该进程的资源和环境，每个线程只有很少量的私有数据域，所以线程之间的调度开销要远比进程的开销小。
　　Java内建了TCP/IP Socket网络协议的支持，可以方便地建立可靠的网络连接。但是Java提供的传输方法都是同步的。即，传输操作没有执行完时，不会返回。为了能有效接收随机发来的消息，并能同时处理并发事件，就要用多线程机制建立监听线程、发送线程以及事件处理线程。实现异步通信和并发处理。
2.3 Java混沌对象与混沌线程
　　混沌加密运算是保密通信的关键。Java的对象封装特性可以将混沌运算所需的参数和算法封装在一起，需要加密的地方只要创建一个混沌对象就可以很好的应用和管理，1个加密系统中可以根据需要，创建多个混沌对象。运行有混沌对象的线程就是混沌线程。加密服务器要为每一个客户服务线程创建1个混沌线程和混沌加密对象。客户端要有与之对应的线程和对象。
　　加密通信时，双方的混沌运算状态必须同步。这种同步方法与物理的混沌同步控制方法不同，很适合计算机系统实现。
3 加密方法和协议
　　加密可以分为应用级加密和分层加密2种。应用级加密是在应用程序代码中嵌入加密运算，直接将输入信息加密变换后用普通传输方法传送。应用算法和加密算法混合在一起，难以维护和修改，不符合分层和面向对象的思想，结构性和维护性差。唯一的好处是允许程序员对特定的数据作特别处理。另一种方法是分层加密。应用层与加密层分离，互不影响。
　　在编程实现中可采用3层模型。用Java的对象继承特性，通过继承InputStream/OutputStream 2个抽象类，派生出混沌加密类SafeInputStream、SafeOutputStream，重载其中的write（）/read（）方法，将加密代码嵌入。使混沌加密对象插接在应用层和Socket传输层之间，形成一个透明的加密层，应用层和传输层都感觉不到加密层的存在。2个系统的修改和维护互不干扰。这种透明加密层可用于任何一种使用Socket连接协议的网络安全应用。如：网络会议、JDBC数据库访问的加密保护、动态视频/音频的加密、电子交易系统等。
4 ChatApplet/Server实现
　　这是一个用Java语言编写的简单的动态混沌加密Internet网络安全会议系统，它实现了前文所叙述的混沌对象，混沌线程同步，透明加密Stream层，以及身份验证，多线程Applet/Server等全部特性。程序分为Server和Client 二部分。Server作为1个Java Application运行在Web Server上。Client方是1个Applet程序，嵌在HTML主页中，由用户下载运行。
　　如图3所示，用户ChatAppletA，B，C，D在不同的地方，都连入了Internet。会晤时，用户在各自本地的计算机上用浏览器访问加密Web会议服务器，ChatApplet会随同主页一起被下载，在浏览器的虚拟机中运行，并连接服务器。连接在ChatServer的用户发出信息时，用自己的密匙加密后发送到ChatServer，ChatServer用相应的密匙解密后再用其它客户各自的密匙分别加密后再转发出去。这样就实现了加密交谈。

图3 工作机理
4.1 ChatApplet的实现
　　ChatApplet 是客户端Applet程序，它嵌在主页中，下载后自动运行，要求用户输入户名和密码，自动按前文所述的方法与ChatServer加密服务器建立动态混沌加密连接，并验证用户身份。
　　ChatApplet有2个线程。子线程负责监听服务器发来的消息，将收到的消息解密变换后，显示在对话框中。Applet主线程由浏览器创建，主线程负责处理GUI事件，响应用户的输入信息，加密后发往服务器。
4.2 ChatServer的实现
　　ChatServer也是1个多线程的程序，主线程ChatServer负责监听连接请求，每收到1个客户请求后就创建1个ServerThread线程和相应的混沌加密对象。主要代码如下：
while（true）{
　　Socket clientSocket＝serSocket．accept（）；
　　LogPackage startKey＝new LogPackage（）；
　　Server Threadst＝new
　　ServerThread（clientSocket，m＿theads，startKey）；
　　st．setID（nID＋＋）；
　　new Thread（st）．start（）；}
　　加密连接的建立、身份验证和具体的服务功能都由ServerThread完成。如果会议室有N个用户在会谈，ChatServer就要创建N个对应的ServerThread，这些线程负责监听和解密各自用户发来的消息，并向其它的用户加密转发。
　　ChatServer必须用Application模式编写，Applet程序访问系统资源会受到严格的限制，不能用于编写服务器程序。
5 讨论和展望
　　本文探讨了在Web网上，JavaApplet客户与Java服务器之间的混沌线程之间的动态同步加密通信等问题。并利用Java语言对象封装和分层流技术实现了透明加密层，实现了分层传输协议和面向对象的设计思想。
　　混沌以及超混沌在加密领域的独特优势吸引了世界上许多学者和学术团体对它深入的研究，混沌科学正得到迅速的发展。利用Java成功开创的平台无关性思想，结合这两种新技术构造出的平台无关性加密运行环境，将会为计算机网络信息保护开辟新的应用。
路骏（中科院安徽光学精密机械研究所230031）
参考文献
1，Kim J H，Stringer J．Applied Chaos．JOHN WILEY ＆ SONS INC，1992
2，Weber J．Java 1．1使用大全．北京：电子工业出版社，1998
收稿日期：1999－08－19
