崔庆森, 王烁宇, 李翰堂, 贾裕民
(西藏大学 信息科学技术学院, 西藏 拉萨 850000)
2023 年3 月2 日,中国互联网络信息中心(China Internet Network Information Center,CNNIC) 在北京发布第51 次《中国互联网网络发现状况统计报告》,在报告中显示在信息通信业方面,截至12 月,我国的5G 基站总数达到231 万,占移动基站总数的21.3%,网民用网环境持续改善[1]。 2019 年,西藏网民数量达212 万,互联网普及率已达61%;2022 年,4G 信号覆盖雪域高原,5G 技术飞速发展普及,5G 终端用户数达108 万户。 信息技术的进步,直接带动西藏数字产业快速发展,网络带来便利的同时也带来了许多网络安全问题, 又由于西藏地区位于中国西南边陲,不仅需要加强用户移动通信安全意识,而且采取信息加密的手段以保护信息安全。
目前, 网络安全常用的数据加密算法分为对称加密算法和非对称加密算法。 对称加密算法通常用于对敏感数据等信息进行加密,常见的对称加密算法有DES、3DES、AES等,其中AES 加密算法的出现替代了DES,3DES 算法由于其计算密钥时间过长以及加密效率不高等原因基本不再使用,DES 算法目前有对密钥进行扩展及左右交换通信运算[2]和引入非对称密码体系的思想对其进行改进[3]。AES算法由于具有良好的适应性、 低存储空间以及密钥的灵活性等可以满足对于数据信息加密和传输的多种要求[4],以及在AES 的基础上改进的轻量型AES 加密算法用于数据传输中[5]。 目前,非对称型加密算法RSA 加密算法广泛地应用于数据加密中, 如飞参数据加密中的应用, 通过RSA 算法保护各种型号飞机试飞数据[6];农业物联网数据的加密方式的应用,通过RSA 加密算法,以2048 位构建公钥和私钥的钥匙对, 从本质上解决数据在传输过程中的安全问题[7]。
藏汉双语即时通信系统实现藏语和汉语之间的无障碍通道功能, 客户端会根据用户的语言习惯自动将语言进行转化,藏族用户与汉族用户进行通信时,藏族用户发送藏语信息, 而客户端可以将藏语信息翻译为汉语信息方便汉族用户进行阅读, 汉族用户发送汉语信息藏族用户可以同理接受到藏语信息。 并且在信息传输过程中采用RSA 加密,防止了不法分子进行劫持或者监听。
RSA 加 密 算 法 是Ron Rivest、Adi Shamir 和Leonard Adleman 于1977 年共同提出的一种加密算法,而RSA 为他们三人姓氏开头字母拼在一起组成的。RSA 算法是一种非对称加密算法,主要是依靠于分解大素数的因数分解暂时没有高效的算法,从提出至今已40 余年,经历了各种攻击的考验,被普遍认为是目前最优秀的公钥方案之一。
RSA 公开密钥密码体制是一种使用不同的加密密钥和解密密钥,在公开密钥密码体制中,加密密钥PK 公开而解密密钥SK 进行保密,同时加密算法和解密算法进行公开,解密密钥SK 由加密密钥PK 决定,但是无法通过PK 推算出解密密钥SK。 如表1 所示。
RSA 加密过程中, 利用生成的RSA 生成的公钥(n,e)进行加密,需要加密的数据为m,其密文c 为:
而解密过程则根据私钥(n,d)进行解密,则对密文c的明文m 还原为:
在日常通信过程中,由于中文的UTF-8 编码转换为十进制编号,再进行加密解密运算会存在超过编程语言的取值范围的情况, 根据模运算的分配律对大整数运算进行优化,利用递归函数实现RSA 加密解密过程[8]。 RSA 加密算法目前被破解的最长RSA 密钥为768 个二进制位,为了防止暴力破解,对于模数n 选择很大,即使按照每秒一百万次的计算频率,512 位的模数破解时长需要8 个月[9],即使被破解后,信息已经失去时效性,在RSA 加密算法程序中的钥匙对的长度采用了1024 位,目前安全性得到了保证。
基于RSA 加密算法藏汉双语即时通信系统的实现主要分为以下三个功能模块的实现:
RSA 加密算法程序实现的第一步需要创建钥匙对,Java 提供了统一的java.security 框架来规范安全加密。 非对称密钥的生成可以通过java.security 中的KeyPairGenerator 生成一个1024 位的KeyPair 钥匙对, 用Base64 编码将钥匙对转换为字符串, 并将公钥和私钥存于Map RSA 加密和解密过程为利用公钥进行加密、 私钥进行解密,由于RSA 算法对数据的长度有限制,不能超过公钥或私钥的模数长度减去11 个字节,通过调用自定义rsaSplitCodec 方法将数据分段进行加密或解密操作,并拼接成一个完整的字节数组。rsaSplitCodec 方法需要传递四个参数,如表2 所示。 表2 rsaSplitCodec 方法传参 rsaSplitCodec 方法根据操作模式和密钥长度计算出最大的数据块大小。如果是解密模式,最大块大小等于密钥长度除以8;如果是加密模式,最大块大小等于密钥长度除以8 减去11。 循环遍历要加密或解密的数据,每次取出最大块大小的数据,并调用cipher 对象的doFinal 方法进行加密或解密操作, 将结果写入ByteArrayOutput-Stream 对象中,返回字节数组。根据返回的字节数组通过Base64 编码转换为字符串。 通过Java 程序实现RSA 加密解密过程,例如对字符串“今天下午有个会议需要您参加”进行加密,系统会创建一个钥匙对, 公钥节选一部分如“MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDzS9TQtlA2J5H 7JB”,私钥节选一部分如“MIICdgIBADANBgkqhkiG9w0B AQEFAASCAmAwggJcAgEAAoGBAP”,采用的加密方式为公钥加密——私钥解密,加密后的密文为“kOUiLMHv7L4 D82b_BBtZYUWJ-i9MSTxTlfnLlN9hKTAXBrrCy-jm1U7Sf IjSF9T1Nr1rm4PhOMQZnXsC0ppsZME37Bp3NqGGGisVVl 0pnqK9n_qXuInUDKKFPUnzLmOoIIAsml9gV18XpDbQ3G RrTmwrbjdJauHer0DmQrn3kq8”, 即使在传输过程中被截取,没有私钥也无法进行破解。 藏汉双语即时通信系统采用C/S(client/server)的架构,server 布置在Ubuntu 系统Docker 上,client 连接server 通过多线程实现双工通信。 为防止信息在传输过程中被劫持,在客户端设置了公钥加密,用户在接收加密数据后,客户端根据加密数据将密文与私钥分离,在客户端进行解密。 Java 对基于TCP 通信协议的网络提供良好的封装,为客户端提供了Socket 类和服务器端的ServerSocket 类,通过Socket 产生的IO 流进行网络通信。 开发TCP 通信服务器首先定义一个List 集合储存当前全部在线的Socket 通道,并注册服务器占用端口;然后用主线程不断循环接收客户端的Socket 连接, 每一个客户端的Socket管道交给一个独立的子线程进行负责读取; 最后创建独立线程处理Socket, 将接收到的字节流转发到对应的Socket 管道,如果在此过程出现异常则提示客户端下线。客户端根据IP 地址与端口号进行连接,一个线程用于接收服务器信息,一个线程用于向服务器发送信息。连接服务器之后在结束本次服务前禁止再次进行连接, 重新连接服务器时启用另一个线程的功能。 加密通信系统用户在登陆连接成功后, 在信息输入框中输入需要发送到信息, 可以通过按键加密对需要发送到信息进行加密处理, 成功发送后信息呈现在对方用户的信息显示区,再通过解密按钮即可以解密查看信息,程序测试结果如图1 所示。 图1 加密通信演示 藏汉双语互译采用了讯飞开放平台的机器翻译2.0 niutrans WebAPI 接口, 将源语种文字转化为目标语种文字,本通信系统采用的为汉语(cn)与藏语(ti)的互译。 在JavaFX 中实例化一个ComboBox 对象用于用户选择自己的 语 种, 通 过ComboBox.getSelectionModel().getSelectedItem()获取用户选择语言类型,接收方可以根据自己的语言类型, 自动将接收到文本信息由源语种转化为目标语种文字。藏汉互译通信如图2 所示,通过两个客户端模拟汉语用户与藏语用户之间的通信情况, 例如汉语用户对藏语用户发送“你好”,在藏语用户界面中显示为藏语“”。 同时测试了信息加密后的传输,仍然可以成功进行互译,如示例中汉语发送“对新工作感觉如何”,藏语解密后为“”。 图2 藏汉双语互译加密通信示例 本文中的加密通信系统的图形化界面采用JavaFX,相对于Java.Swing 与AWT 开发界面效率更高,JavaFX 只需要搭建一个Stage,界面跳转通过Scene 切换,对于Scene可以通过代码和SceneBuilder 进行创建。 由于JRE 和JDK 完整集成了JavaFX API 接口,JavaFX 支持跨平台。同时,Java 库中的API 均可以在JavaFX 中调用, 所以JavaFX 适合用于联网应用的开发[10]。 登录注册功能所采用的数据库为MS SQL Server,MS SQL Server 部署在Docker 中,user 表主要字段有账号(主键)、密码、创建时间。 登录功能主要根据Java 数据库查询,注册功能主要是基于Java 数据库写入功能实现,返回结果通过Alert 进行提示。 各个界面通过primaryStage.setTitle 设置Stage 标题。 如图3 所示。 图3 登录注册界面 通信主界面左上角显示当前登录用户, 用户通过输入IP 地址和端口号进行连接,系统返回信息和通信交互的信息显示在信息显示区中, 所发送的信息均输入在信息输入区中,最下方可以切换展语言,对信息进行加密解密,以及发送和退出按钮。 综上所述,本文基于RSA 加密算法,利用JavaFX 搭建的通信系统图形化界面,通过java.Security、java.net 和java.io 等实现加密通信功能, 并通过讯飞开放平台的机器翻译2.0 niutrans WebAPI 接口实现了藏汉双语互译,并将服务器和数据库布置在Ubuntu 系统的Docker 上模拟真实环境,系统完备,具有一定的实用性价值。2.2 加密通信功能实现
2.3 藏汉双语互译功能实现
3 搭建图形化界面
3.1 登录注册界面
3.2 通信界面
4 结束语