崔慶森, 王爍宇, 李翰堂, 賈裕民
(西藏大學 信息科學技術學院, 西藏 拉薩 850000)
2023 年3 月2 日,中國互聯(lián)網絡信息中心(China Internet Network Information Center,CNNIC) 在北京發(fā)布第51 次《中國互聯(lián)網網絡發(fā)現(xiàn)狀況統(tǒng)計報告》,在報告中顯示在信息通信業(yè)方面,截至12 月,我國的5G 基站總數(shù)達到231 萬,占移動基站總數(shù)的21.3%,網民用網環(huán)境持續(xù)改善[1]。 2019 年,西藏網民數(shù)量達212 萬,互聯(lián)網普及率已達61%;2022 年,4G 信號覆蓋雪域高原,5G 技術飛速發(fā)展普及,5G 終端用戶數(shù)達108 萬戶。 信息技術的進步,直接帶動西藏數(shù)字產業(yè)快速發(fā)展,網絡帶來便利的同時也帶來了許多網絡安全問題, 又由于西藏地區(qū)位于中國西南邊陲,不僅需要加強用戶移動通信安全意識,而且采取信息加密的手段以保護信息安全。
目前, 網絡安全常用的數(shù)據(jù)加密算法分為對稱加密算法和非對稱加密算法。 對稱加密算法通常用于對敏感數(shù)據(jù)等信息進行加密,常見的對稱加密算法有DES、3DES、AES等,其中AES 加密算法的出現(xiàn)替代了DES,3DES 算法由于其計算密鑰時間過長以及加密效率不高等原因基本不再使用,DES 算法目前有對密鑰進行擴展及左右交換通信運算[2]和引入非對稱密碼體系的思想對其進行改進[3]。AES算法由于具有良好的適應性、 低存儲空間以及密鑰的靈活性等可以滿足對于數(shù)據(jù)信息加密和傳輸?shù)亩喾N要求[4],以及在AES 的基礎上改進的輕量型AES 加密算法用于數(shù)據(jù)傳輸中[5]。 目前,非對稱型加密算法RSA 加密算法廣泛地應用于數(shù)據(jù)加密中, 如飛參數(shù)據(jù)加密中的應用, 通過RSA 算法保護各種型號飛機試飛數(shù)據(jù)[6];農業(yè)物聯(lián)網數(shù)據(jù)的加密方式的應用,通過RSA 加密算法,以2048 位構建公鑰和私鑰的鑰匙對, 從本質上解決數(shù)據(jù)在傳輸過程中的安全問題[7]。
藏漢雙語即時通信系統(tǒng)實現(xiàn)藏語和漢語之間的無障礙通道功能, 客戶端會根據(jù)用戶的語言習慣自動將語言進行轉化,藏族用戶與漢族用戶進行通信時,藏族用戶發(fā)送藏語信息, 而客戶端可以將藏語信息翻譯為漢語信息方便漢族用戶進行閱讀, 漢族用戶發(fā)送漢語信息藏族用戶可以同理接受到藏語信息。 并且在信息傳輸過程中采用RSA 加密,防止了不法分子進行劫持或者監(jiān)聽。
RSA 加 密 算 法 是Ron Rivest、Adi Shamir 和Leonard Adleman 于1977 年共同提出的一種加密算法,而RSA 為他們三人姓氏開頭字母拼在一起組成的。RSA 算法是一種非對稱加密算法,主要是依靠于分解大素數(shù)的因數(shù)分解暫時沒有高效的算法,從提出至今已40 余年,經歷了各種攻擊的考驗,被普遍認為是目前最優(yōu)秀的公鑰方案之一。
RSA 公開密鑰密碼體制是一種使用不同的加密密鑰和解密密鑰,在公開密鑰密碼體制中,加密密鑰PK 公開而解密密鑰SK 進行保密,同時加密算法和解密算法進行公開,解密密鑰SK 由加密密鑰PK 決定,但是無法通過PK 推算出解密密鑰SK。 如表1 所示。
RSA 加密過程中, 利用生成的RSA 生成的公鑰(n,e)進行加密,需要加密的數(shù)據(jù)為m,其密文c 為:
而解密過程則根據(jù)私鑰(n,d)進行解密,則對密文c的明文m 還原為:
在日常通信過程中,由于中文的UTF-8 編碼轉換為十進制編號,再進行加密解密運算會存在超過編程語言的取值范圍的情況, 根據(jù)模運算的分配律對大整數(shù)運算進行優(yōu)化,利用遞歸函數(shù)實現(xiàn)RSA 加密解密過程[8]。 RSA 加密算法目前被破解的最長RSA 密鑰為768 個二進制位,為了防止暴力破解,對于模數(shù)n 選擇很大,即使按照每秒一百萬次的計算頻率,512 位的模數(shù)破解時長需要8 個月[9],即使被破解后,信息已經失去時效性,在RSA 加密算法程序中的鑰匙對的長度采用了1024 位,目前安全性得到了保證。
基于RSA 加密算法藏漢雙語即時通信系統(tǒng)的實現(xiàn)主要分為以下三個功能模塊的實現(xiàn):
RSA 加密算法程序實現(xiàn)的第一步需要創(chuàng)建鑰匙對,Java 提供了統(tǒng)一的java.security 框架來規(guī)范安全加密。 非對稱密鑰的生成可以通過java.security 中的KeyPairGenerator 生成一個1024 位的KeyPair 鑰匙對, 用Base64 編碼將鑰匙對轉換為字符串, 并將公鑰和私鑰存于Map RSA 加密和解密過程為利用公鑰進行加密、 私鑰進行解密,由于RSA 算法對數(shù)據(jù)的長度有限制,不能超過公鑰或私鑰的模數(shù)長度減去11 個字節(jié),通過調用自定義rsaSplitCodec 方法將數(shù)據(jù)分段進行加密或解密操作,并拼接成一個完整的字節(jié)數(shù)組。rsaSplitCodec 方法需要傳遞四個參數(shù),如表2 所示。 表2 rsaSplitCodec 方法傳參 rsaSplitCodec 方法根據(jù)操作模式和密鑰長度計算出最大的數(shù)據(jù)塊大小。如果是解密模式,最大塊大小等于密鑰長度除以8;如果是加密模式,最大塊大小等于密鑰長度除以8 減去11。 循環(huán)遍歷要加密或解密的數(shù)據(jù),每次取出最大塊大小的數(shù)據(jù),并調用cipher 對象的doFinal 方法進行加密或解密操作, 將結果寫入ByteArrayOutput-Stream 對象中,返回字節(jié)數(shù)組。根據(jù)返回的字節(jié)數(shù)組通過Base64 編碼轉換為字符串。 通過Java 程序實現(xiàn)RSA 加密解密過程,例如對字符串“今天下午有個會議需要您參加”進行加密,系統(tǒng)會創(chuàng)建一個鑰匙對, 公鑰節(jié)選一部分如“MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDzS9TQtlA2J5H 7JB”,私鑰節(jié)選一部分如“MIICdgIBADANBgkqhkiG9w0B AQEFAASCAmAwggJcAgEAAoGBAP”,采用的加密方式為公鑰加密——私鑰解密,加密后的密文為“kOUiLMHv7L4 D82b_BBtZYUWJ-i9MSTxTlfnLlN9hKTAXBrrCy-jm1U7Sf IjSF9T1Nr1rm4PhOMQZnXsC0ppsZME37Bp3NqGGGisVVl 0pnqK9n_qXuInUDKKFPUnzLmOoIIAsml9gV18XpDbQ3G RrTmwrbjdJauHer0DmQrn3kq8”, 即使在傳輸過程中被截取,沒有私鑰也無法進行破解。 藏漢雙語即時通信系統(tǒng)采用C/S(client/server)的架構,server 布置在Ubuntu 系統(tǒng)Docker 上,client 連接server 通過多線程實現(xiàn)雙工通信。 為防止信息在傳輸過程中被劫持,在客戶端設置了公鑰加密,用戶在接收加密數(shù)據(jù)后,客戶端根據(jù)加密數(shù)據(jù)將密文與私鑰分離,在客戶端進行解密。 Java 對基于TCP 通信協(xié)議的網絡提供良好的封裝,為客戶端提供了Socket 類和服務器端的ServerSocket 類,通過Socket 產生的IO 流進行網絡通信。 開發(fā)TCP 通信服務器首先定義一個List 集合儲存當前全部在線的Socket 通道,并注冊服務器占用端口;然后用主線程不斷循環(huán)接收客戶端的Socket 連接, 每一個客戶端的Socket管道交給一個獨立的子線程進行負責讀取; 最后創(chuàng)建獨立線程處理Socket, 將接收到的字節(jié)流轉發(fā)到對應的Socket 管道,如果在此過程出現(xiàn)異常則提示客戶端下線。客戶端根據(jù)IP 地址與端口號進行連接,一個線程用于接收服務器信息,一個線程用于向服務器發(fā)送信息。連接服務器之后在結束本次服務前禁止再次進行連接, 重新連接服務器時啟用另一個線程的功能。 加密通信系統(tǒng)用戶在登陸連接成功后, 在信息輸入框中輸入需要發(fā)送到信息, 可以通過按鍵加密對需要發(fā)送到信息進行加密處理, 成功發(fā)送后信息呈現(xiàn)在對方用戶的信息顯示區(qū),再通過解密按鈕即可以解密查看信息,程序測試結果如圖1 所示。 圖1 加密通信演示 藏漢雙語互譯采用了訊飛開放平臺的機器翻譯2.0 niutrans WebAPI 接口, 將源語種文字轉化為目標語種文字,本通信系統(tǒng)采用的為漢語(cn)與藏語(ti)的互譯。 在JavaFX 中實例化一個ComboBox 對象用于用戶選擇自己的 語 種, 通 過ComboBox.getSelectionModel().getSelectedItem()獲取用戶選擇語言類型,接收方可以根據(jù)自己的語言類型, 自動將接收到文本信息由源語種轉化為目標語種文字。藏漢互譯通信如圖2 所示,通過兩個客戶端模擬漢語用戶與藏語用戶之間的通信情況, 例如漢語用戶對藏語用戶發(fā)送“你好”,在藏語用戶界面中顯示為藏語“”。 同時測試了信息加密后的傳輸,仍然可以成功進行互譯,如示例中漢語發(fā)送“對新工作感覺如何”,藏語解密后為“”。 圖2 藏漢雙語互譯加密通信示例 本文中的加密通信系統(tǒng)的圖形化界面采用JavaFX,相對于Java.Swing 與AWT 開發(fā)界面效率更高,JavaFX 只需要搭建一個Stage,界面跳轉通過Scene 切換,對于Scene可以通過代碼和SceneBuilder 進行創(chuàng)建。 由于JRE 和JDK 完整集成了JavaFX API 接口,JavaFX 支持跨平臺。同時,Java 庫中的API 均可以在JavaFX 中調用, 所以JavaFX 適合用于聯(lián)網應用的開發(fā)[10]。 登錄注冊功能所采用的數(shù)據(jù)庫為MS SQL Server,MS SQL Server 部署在Docker 中,user 表主要字段有賬號(主鍵)、密碼、創(chuàng)建時間。 登錄功能主要根據(jù)Java 數(shù)據(jù)庫查詢,注冊功能主要是基于Java 數(shù)據(jù)庫寫入功能實現(xiàn),返回結果通過Alert 進行提示。 各個界面通過primaryStage.setTitle 設置Stage 標題。 如圖3 所示。 圖3 登錄注冊界面 通信主界面左上角顯示當前登錄用戶, 用戶通過輸入IP 地址和端口號進行連接,系統(tǒng)返回信息和通信交互的信息顯示在信息顯示區(qū)中, 所發(fā)送的信息均輸入在信息輸入區(qū)中,最下方可以切換展語言,對信息進行加密解密,以及發(fā)送和退出按鈕。 綜上所述,本文基于RSA 加密算法,利用JavaFX 搭建的通信系統(tǒng)圖形化界面,通過java.Security、java.net 和java.io 等實現(xiàn)加密通信功能, 并通過訊飛開放平臺的機器翻譯2.0 niutrans WebAPI 接口實現(xiàn)了藏漢雙語互譯,并將服務器和數(shù)據(jù)庫布置在Ubuntu 系統(tǒng)的Docker 上模擬真實環(huán)境,系統(tǒng)完備,具有一定的實用性價值。
2.2 加密通信功能實現(xiàn)

2.3 藏漢雙語互譯功能實現(xiàn)

3 搭建圖形化界面
3.1 登錄注冊界面

3.2 通信界面
4 結束語