由于计算机网络" title="网络">网络具有系统复杂性、资源共享、边界不可知、传输信息的路由不确定性、电磁辐射等原因使其本身的安全性很低[1]。网络在我国起步比较晚,一些与网络相关的技术还不成熟,在现有的许多网络中至今还在传输裸信息。据调查[2],目前我国企业采用信息加密的仅8%。即使传输经过加密的数据,大多采用的是传统密码体制。由此看来,网络的安全系数一般都比较小。数据加密是确保计算机网络重要的安全机制,但是,利用公钥体制,尤其是利用RSA" title="RSA">RSA算法的实用加密解密软件系统很少。因此,对网络传输的数据加密和解密进行深入研究,开发出适用于网络环境下的信息加密解密系统" title="加密解密系统">加密解密系统很有意义。
网络加密的方式主要有链路加密、端对端加密[3]。端对端加密的工作仅在目的节点和源节点进行,所以成本低、使用灵活。本文采用这种方式,其处于网络OSI模型的应用层或表示层。
1公钥密码体制" title="公钥密码体制">公钥密码体制
公钥密码体制的基本思想是:密钥分为加密密钥E,解密密钥D和公钥M。加密密钥E和公钥M可以公开,D不能公开。加密时采用以E,M为参数的函数f1(E,M)进行加密,解密时采用以D,M为参数的函数f2(D,M)进行解密。
在传统密码体制的算法中,知道了加密过程,则可以推出解密过程。而在公钥密码体制的算法中,即使知道了加密过程,也不可能推出解密过程。迄今为止发明的公钥密码体制的算法容易用数学术语来描述的,而他的保密强度是建立在一种特定的已知数学问题求解困难性这个假设上的。因而计算加密密钥E,公钥M和解密密钥D需要特殊的算法和步骤。以确保不能从加密密钥E和公钥M推导出解密密钥D。
RSA体制是一种新型公钥密码体制[4]。该公钥密码体制以数论为基础,其原理是:求2个大素数的乘积很容易实现,但将一个大的合数分解成2个大素数很难实现。RSA加密和解密运算的数学表达式为:
C=XE(mod M)
X=CD(mod M)
其中:X为明文,C为密文,(0 (1)M是2个大素数P,Q的乘积,从而M的欧拉数φ(M)=(P-1)×(Q-1)。
(2)D是大于P,Q的并与φ(M)互素的正整数。
(3)E是D关于φ(M)的乘逆。即ED=1 mod(φ(M))。
满足以上3个条件,(E,M)便可作公钥对,(D,M)作密钥对。
例如:P=101,Q=113,那么M=P×Q=11 413,φ(M)=(P-1)×(Q-1)=100×112=11 200,与φ( M)互素的整数E有无数个,因此,假设E=3 533,根据公式ED=1mod(φ(M)),求得D =6 597。假设明文X=9 726,那么加密时密文C=9 7263 533mod (11 413)=5 7 61,在解密时明文Y=5 7616 597mod(11 413)=9 726。因此只要加密密钥E,解密密钥D和公共密钥M选择正确,加密前的明文X和解密后的明文Y一定是相同的。
2系统设计
网络信息加密解密系统包含2个主要部分,主机程序和客机程序。主机程序具有以下功能:密钥参数的选择、对文件的加密解密、加解密文件的校验、修改用户密码;而客机程序则只有一个加密模块和用户重置加密密钥E和公钥M。显然客机程序只能进行加密,所用的密钥都是由主机程序的密钥选择模块给出的,而解密密钥D则只有主机程序用户个人知道。通过这种方法,在任意一个计算机网络内部,某节点A上运行主机程序,而与该节点通信的节点B上运行客机程序。如果B有重要的数据往A发送,则该节点就用A节点所发布的加密密钥E和公钥M为参数对重要数据进行加密,然后再将加密后的数据发送到A,由于这些数据都经过特殊的处理,不用再为数据的安全而担心。然后A用相应的D和M对数据进行解密,还原出相应的数据。当一个网络的许多高级用户之间需要频繁地互相传递信息,并且还要求高级用户既能够对需要发送的数据加密,也能够对收到的经过加密的数据进行解密。这就要求在网络的高级用户的计算机上运行网络信息加密解密系统的主机程序。
该系统的设计分为密钥选择模块、文件加密模块、文件解密模块、数据验证模块、修改密码模块、系统简介模块和退出系统模块等7大模块。
3程序的模块设计
3.1密钥选择模块的设计
选择RSA密码体制的密钥对主要是确定E,D,M。因为密钥对的选择不能随意产生,且P,Q的位数越多,攻破该密码体制所需时间也越长,系统就越安全。但位数越多,速度也越慢。该模块可以让用户自己来选择素数位数。
为方便用户,该模块不需用户直接输入2个大的素数P、Q的值,而是输入他们的邻近似任意数,然后由计算机根据特定的算法在邻近值附近找。得到2个大素数后,也得到公钥M=P×Q,从而也得到M的欧拉数φ(M)=(P-1)×(Q-1)。
大于P,Q并和φ(M)互素的数有无数个,所以依旧采用由用户输入邻近值,系统在其附近寻找一个满足条件的整数E(其中用欧几里德算法判断E是否与φ(M)互素),得到加密密钥E之后,将进行寻找密钥的最后一步:求出解密密钥D,这可以根据式ED=1 mo d(φ(M))求得。
经过以上3个步骤,计算机辅助产生密钥对的工作结束。随后,计算机会提示是否将新产生的参数值更新为系统默认的参数值。用户有两种选择,更新和不更新。
3.2加密模块的设计
文件在计算机里是以“0”、“1”的形式存储,一定的二进制比特流将表示一定大小的十进制整数。例如: 二进制比特流“10101010”将表示十进制170,因此从文件的开始处按顺序读取一定位数的二进制比特流,并且这一定位数二进制比特流表示的十进制数X(X必须小于M)。经过RSA的加密运算得到密文C=XE(mod M)。C是一个十进制的数(0≤C≤M),然后将十进制的数C写到目标文件。
3.3解密模块的设计
解密运算为X"=CD(mod M)。解密模块和加密模块原理基本相同,只是从文件里读取需要解密的数据时必须与经过加密算法后写入目标文件时的数据相同。这一点是系统能否正确运行的前提条件。例如:如果将数据1 819加密后得到2 867,在解密时,你从 文件中读出来的数必须是2 867,否则经过解密算法后得到的十进制数X"与加密时从文件里读出的X不相同,从而导致数据丢失。加密模块和解密模块是系统的核心模块。
3.4数据验证模块设计
数据验证模块是用户对自己本人计算机上的本地文件进行加密和解密用的。如果多人共同使用一台计算机最好的方法就是用自己的加密密钥E和公钥M为参数对数据加密,然后用相应的解密密钥D和公钥M对加密后的数据进行解密。再将加密前的源文件和解密后的目标文件相比较。如果相同,则删除加密前的源文件和解密后的目标文件,而只保留经过加密后的文件。这样其他用户就无法查看该文件。需要这些数据时,进入网络信息加密解密系统,输入合适的解密密钥D和公共密钥M,将文件恢复。
3.5修改用户密码模块设计
为了保证本系统的安全性,只有本软件的合法用户才能进入网络信息加密解密系统。在软件开始运行时要求用户输入用户密码,如果用户3次输入不正确,将终止系统的正常运行。当用户输入密码泄露后,可以通过修改用户密码模块来解决。
该模块也采用RSA算法设计,系统的合法用户必须知道该模块正确的解密密钥、公钥和用户密码,才能进入系统。否则系统将拒绝进入。
由于解密密钥、公钥和用户密码可以随时更改,这就增加了非法用户进入系统的难度,将系统的不安全系数降至最低,从而保证系统的安全。
4结语
Java是新一代的网络编程语言,他有良好的移植性、面向对象、安全性和交互性比较高,因 此,上述各个模块的设计全部采用Java编写。
网络传输信息加密解密系统经在实际网络环境 下测试表明:安装简单、人机界面良好、保密性高、实用性强、可对任何类型的文件加密解 密。
参考文献
[1]陈 运.信息加密原理[M].成都:电子科技大学出版社,1990
[2]张 周.我国企业开始重视网络安全[J].计算机世界A9版,2000,( 3)
[3]张文政,孟庆志.通信保密技术[J]. 计算机应用,1998,(6):25-28
[4] 王 勇.RSA公开密匙密码体制的密匙生成研究[J].计算机应用研究,1998,(3):34 -37
作者:
金 冉1,蒋 艳2
(1.浙江万里学院 计算机系浙江 宁波315100;
2.西坞中学浙江 奉化315505)