◆李玉广 余庆丰
(61764部队 海南 572000)
基于Java的加密通信平台设计
◆李玉广 余庆丰
(61764部队 海南 572000)
本文针对信息安全问题日益突出的现状,设计了一种基于Java的加密通信平台。该平台利用RSA、DES以及AES等加密算法对短消息通信和文件传输进行加密,保证数据的保密性;同时,具有文件签名认证功能。多种加密算法的结合,较好地保证了信息传输的安全性和完整性。
加密通信;加密算法;信息传输
信息作为一种资源,具有普遍性、共享性、增值性、可处理性以及多效用性等特征,使其对于人类具有特别重要的意义[1]。信息安全的概念在二十世纪经历了一个漫长的历史阶段,90年代以来得到了深化[2]。进入21世纪,随着计算机技术的发展,信息安全的重要性不断凸显。信息安全的实质就是保护信息系统或信息网络中的信息资源免受各种类型的威胁、干扰以及破坏[3]。目前主要通过加密方法对信息进行处理,达到保证信息的保密性和完整性的目的[4]。
数据在存储、处理和交换等环节中,都存在泄密、截收、窃听、窜改以及伪造的可能性[4]。通过对多种加密算法的分析和研究,实现了集成化的加密通信平台,以满足数据保密性和完整性的客观需求。
在本设计中,主要完成基于socket的点对点通信及文件传输、对称和非对称通信加密、对称和非对称文件传输加密、文件签名认证等内容。
1.1 方案设计
图1 主要模块关系结构
主要模块的层次关系如图1所示,各模块的主要功能:
(1)trans.cipher:负责实现加解密相关的功能,具体来说即实现AES,DES,RSA三种加解密算法,向外提供相关API。
(2)trans.control:通过调用trans.cipher,trans.config,trans.control,trans.thread,trans.util的相关API,负责软件的主要业务逻辑,响应trans.view所捕获的界面用户操作。
(3)trans.thread:负责实现用于socket通信的监听线程和连接线程。
(4)trans.util:负责向其他包提供常用基础功能,如字节数组操作。
(5)trans.view:负责软件界面结构布局及用户输入响应。
1.2 关键模块实现
(1)trans.cipher.AsymEncryptor负责实现非对称加解密功能,主要方法说明:
①encrypt/decrypt/sign/authenticate,实现对byte数组的加解密、签名认证功能。
②getPubkey/getPrivkey,从密钥中获取密钥。
(2)trans.cipher.SymEncryptor负责实现对称加解密功能。
(3)trans.thread.ConnectionThread.run是连接线程的具体实现,该线程既负责响应来自用户的输入事件也负责不断的从socket中读取数据。
(4)trans.control.MainControl.doSendFile主要负责通过socket来传输一个文件,传输时先对文件进行相应的加密操作。文件的签名发送与此类似,不再重复。
(5)Trans.util.ByteArrayUtil为实现基于socket的文件传输,通过在字节流前加入特定标识的方式来区分文件和普通消息。然而,实现这样的设计前提是对字节数组进行灵活的前缀添加,子序列查找等操作。为此实现了ByteArrayUtil类来支持此类功能。在该类的方法中,值得一提的是字节数组中子序列查找的算法,为了提高效率,在此运用了KMP匹配算法。
1.3 程序运行
用eclipse中的打包工具将程序打包为可运行的JAR文件。安装java虚拟机,版本至少为1.6以上,双击sec.jar即可执行程序。
主要包括用户登录及建立连接,设置加密方式,传输消息或文件,设置解密方式,解密消息或文件,RSA密钥管理,RSA签名认证等环节。
图2 登录角色选择
2.1 用户登录及建立连接
(1)输入用户名,进行登录并选择角色(服务端或客户端)。
(2)服务端指定监听端口进行监听。客户端指定服务端的IP地址和端口号来建立连接。
图3 登录参数设置
2.2 设置加密方式及密钥
(1)在通信窗口中选择“Settings” — “Encrypt”—“AES”或“D ES”,之后在弹出的窗口中输入密钥,其中AES密钥为16位,D ES为8位。
(2)如果是RSA加密方式,在通信窗口中选择“Settings”—“E ncrypt”—“RSA”,按提示指定对方公钥文件所在位置。
2.3 消息和文件通信
(1)建立连接后,出现通信窗口,可以通过send按钮进行消息通信,如果没有选择加解密方式则进行明文通信,否则按照相应的方式进行加解密。
(2)建立连接后,可在通信窗口中选择“File”—“Encrypt a f ile and send”将一个文件按指定好的加密方式进行加密传输,如果未指定加密方式则传输明文文件。接收方接收到文件时会弹出提示窗口,点击receive将文件保存到本地。
2.4 设置解密方式
(1)如果是AES或DES解密,在通信窗口中选择“Settings”—“Decrypt”—“AES”或”DES”,并输入密钥。
(2)如果是RSA解密,选择“Settings”—“Decrypt”—“RSA”,按提示指定自己的私钥文件。选中消息密文,点击decrypt按钮可将解密该消息。
2.5 解密消息或文件
(1)对消息进行解密须选中接收到的加密消息,点击decryp t按钮即可显示明文,如图4所示。
图4 解密消息
(2)对文件进行解密选择“File”—“Decrypt a file and save As”,指定原加密文件以及明文文件存放地址即可,如图5所示。
图5 解密文件
2.6 RSA密钥管理
(1)生成RSA密钥对
如果用户尚没有密钥文件,选择“RSA Key Manager”—“Ge nerate Key Pair”,生成密钥对后通过“Save Public”和“Save Privat e”来保存相应的密钥文件,如图6所示。
图6 生成RSA密钥对
(2)发送RSA公钥文件
生成自己的RSA密钥对后,应将公钥文件发送给对方。选择“File”—“Send my Public Key File”,发送自己的公钥文件。这时对方会收到文件到达通知,点击receive进行接收并存放到本地。
2.7 RSA文件签名认证
(1)设置己方私钥
选择“Settings” —“Sign/Authenticate ”— “Set my private key”指定己方的私钥文件。
(2)文件签名并传输
设置好私钥后,选择“File”—“Sign a File and Send”来对一个文件进行签名并发送。
(3)设置对方公钥
选择“Settings” —“Sign/Authenticate ”—“Set Your Public key”指定对方的公钥文件。
(4)文件认证并传输
设置好私钥后,选择“File”—“Authenticate a File and Save As”来对一个文件进行认证并另存。
3.1 测试环境
操作系统:Windows XP SP3 32位。Java虚拟机版本:1.6.21
加解密相关jar包:javax.crypto.*
3.2 功能测试
(1)消息加密传输与解密(DES算法)
发送方Bob设定加密方式为DES,密钥“12345678”,将消息“THIS IS ENCRYPTED”加密后发送。接收方Alice设定解密方式为DES,密钥“12345678”,将收到的密文进行解密,得到正确的明文,如图7所示。
图7 消息加密传输与解密
(2)密钥对生成与公钥的传输
双方先通过RSA密钥管理生成各自的密钥对,并分别将自己的公钥发送给对方。密钥生成和公钥的发送接收过程都能正确完成,如图8所示。
图8 密钥对生成与公钥的传输
(3)文件加密传输与解密(RSA算法)
在应用场景2的基础上,Alice选择加密类型为RSA并指定Bob的公钥文件,选择文件1.txt进行加密发送,Bob能正确接收到加密后的1.txt。Bob设置解密类型为RSA并指定自己的私钥,对1.txt进行解密能得到正确的明文文件,如图9所示。