孫曉麗,郭 艷,李 寧,宋曉祥
(中國人民解放軍陸軍工程大學,江蘇 南京 210007)
古希臘時期,人們嘗試使用簡單的加密方法對信息進行加密,以此來防止信息被竊取。隨著時代的進步與發(fā)展,人們對個人信息的保密問題變得越來越重視。密碼學以密碼通信的研究為目的,通過對傳輸信息進行加密,防止第三方對信息的竊取[1]。密碼技術的多樣性為信息加密和信息安全提供了多樣選擇。密碼技術因其能夠在潛在威脅的環(huán)境中保證通信的安全獲得了更多關注,廣泛應用于軍事通信保密、數(shù)據(jù)加密以及信息保密等方面。
明文和密文是一組存在復雜映射關系的數(shù)據(jù)對,密碼破譯是要找到密文所對應的明文。神經(jīng)網(wǎng)絡的出現(xiàn)為密碼理論提供了全新的思路,促成了神經(jīng)密碼學的發(fā)展[1],同時神經(jīng)網(wǎng)絡也成為保密通信的一種新的實現(xiàn)途徑。傳統(tǒng)密碼破譯技術基于窮舉法、字典法等,需要大規(guī)模完全數(shù)據(jù)庫進行嘗試實現(xiàn),需要耗費大量的時間,效率低下。而基于神經(jīng)網(wǎng)絡實現(xiàn)密碼破譯,規(guī)避了傳統(tǒng)密碼破譯方式的弊端。利用神經(jīng)網(wǎng)絡解決密碼破譯問題的關鍵在于尋找一種合適的神經(jīng)網(wǎng)絡。
文獻[2-3]使用簡單BP神經(jīng)網(wǎng)絡分別對橢圓曲線密碼和公鑰密碼進行破譯。文獻[4]提出了一種新的神經(jīng)網(wǎng)絡結構——生成式對抗網(wǎng)絡(GAN)。文獻[5]在此基礎上提出了一種新的模型——PassGAN,并將此網(wǎng)絡應用于密碼猜測的問題上,改變了利用傳統(tǒng)破譯工具進行字典學習破譯的弊端。文獻[6]受CycleGAN的啟發(fā),提出了一種新的網(wǎng)絡——CipherGAN,并對vigerene密碼進行破譯,取得了較好效果。以上幾種算法都證明所提模型在字符級密碼破譯方面有優(yōu)異效果,但GAN模型的超參數(shù)對模型效果有較大影響。因此,需要找到一個合適的網(wǎng)絡,使其能夠高效、穩(wěn)定地實現(xiàn)密碼破譯。
明文和密文是一組存在復雜映射關系的數(shù)據(jù)對,通過對其學習得到映射關系,與序列處理問題類似,因此可以使用合適的序列處理模型[7-11]解決密碼破譯問題。
基于此,本文采用一種基于深度學習的密碼破譯方法。首先,文章采用詞嵌入的編碼方式對輸入數(shù)據(jù)進行編碼,從而將明文和密文轉化為可學習的存在某種內在關系的數(shù)據(jù)對,使其在確定數(shù)據(jù)輸入形式的同時,保留序列之間的相關信息。其次,充分利用seq2seq(sequence to sequence)模型[12]實現(xiàn)多對多的特點進行網(wǎng)絡學習,成功解決了明文密文長度匹配的問題。最后,使用多表置換密碼的不同加密算法驗證了模型的性能。仿真結果表明,無論哪種加密方式,所用模型都具有很好的破譯效果,破譯的準確率高達99%。本文所提的破譯方法對研究其他密碼破譯問題具有重要的參考意義。
seq2seq模型是一類端到端的算法框架,即序列到序列的轉換模型框架,在機器翻譯、自動應答等應用場景上經(jīng)常出現(xiàn)。
Seq2Seq由編碼器-解碼器[13](Encoder-Decoder)框架實現(xiàn)。Seq2seq模型包含3部分——編碼器、解碼器和固定長度的語義向量(Context Vector),如圖1所示。從圖1可以看到,編碼是將源序列轉化為一個長度固定的語義向量,而解碼的過程是將語義向量轉化為目標序列。其中,語義向量中間語義編碼是編碼器最后一個時間步的狀態(tài),以此作為整個句子的語義向量。
圖1 seq2seq結構
Seq2seq模型可以解決一對多、多對多的問題,將其應用于密碼破譯中,即無論明文密文的長度是否相等,理論上都可以實現(xiàn)密碼的破譯,有利于將模型推廣到其他加密算法。
數(shù)據(jù)以何種形式輸入網(wǎng)絡,成為網(wǎng)絡設計的又一問題。因此,結合現(xiàn)有的編碼形式,摒棄獨熱碼(One-hot)編碼方式,選擇詞嵌入(Word Embedding)[13]的方式處理數(shù)據(jù)。在數(shù)據(jù)量較大的情況下,使用One-hot編碼會造成較大的空間浪費,且One-hot編碼會導致序列相關信息的缺失。詞嵌入的方式可以通過網(wǎng)絡學習詞嵌入矩陣存儲數(shù)據(jù)的相關信息,能夠更多地保留源序列的特征值。訓練網(wǎng)絡的過程中,每個嵌入的向量都會更新。使用詞嵌入進行編碼,可以發(fā)現(xiàn)很多字符與字符之間的相似性,且能夠可視化字符之間的關系。相較下,選擇詞嵌入的方式處理數(shù)據(jù)更貼近需求。詞嵌入能夠把一個維數(shù)為所有詞的數(shù)量的高維空間嵌入到一個維數(shù)低得多的連續(xù)向量空間中,每個單詞或詞組被映射為實數(shù)域上的向量。結構如圖2所示。
圖2 詞嵌入關系
維吉尼亞密碼(Vigenere)是使用一系列凱撒密碼組成密碼字母表的加密算法,屬于多表密碼的一種簡單形式。
自動密鑰密碼(Autokey Cipher)也是多表替換密碼,與維吉尼亞密碼密碼類似,但使用不同的方法生成密鑰。通常來說,它比維吉尼亞密碼更安全。自動密鑰密碼主要有2種:關鍵詞自動密鑰密碼和原文自動密鑰密碼。
Enigma是通過enigma機產(chǎn)生的一種多表替換密碼,明文密文之間的相互轉換需要對應相同的轉子初始位置。相較于vigenere和autokey,enigma的生成過程更復雜。enigma是一種復式置換密碼。
本文選擇3種安全程度不同的置換密碼進行實驗,以此證明所用模型的正確性。
本文采用基于seq2seq的算法解決密碼破譯問題,通過對現(xiàn)有明文密文對的分析,學習明文密文對之間復雜的映射關系,從而實現(xiàn)對密文的破譯。本文中,編碼器與解碼器均采用傳統(tǒng)的遞歸神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)實現(xiàn),具體采用GRU神經(jīng)單元搭建模型的架構。
模型的編碼器和解碼器的運算過程分別表示為:
其中,f和g都是激活函數(shù),其中g函數(shù)一般為softmax函數(shù)。
Seq2seq模型能夠很好地解決一對多、多對多的問題,能夠很好地適應明文密文的長度。模型結構如圖3所示。
圖3 模型結構
由結構圖圖3可以看出,需要對現(xiàn)有密文進行處理,采用詞嵌入的方式對其進行編碼處理,并在訓練過程中對其進行更新,從而得到合適的詞嵌入矩陣。
本文所用模型的seq2seq算法過程如下:
輸入:已知的密文
輸出:產(chǎn)生的明文
1.對密文進行編碼,編碼方式為詞嵌入;
2.編碼后的數(shù)據(jù)輸入編碼器,得到語義向量C;
3.對語義向量進行解碼,經(jīng)過softmax層輸出得到解碼后的明文;
4.使用負最大似然求loss,并求出訓練過程的準確率;
5.loss.backward()。
seq2seq算法描述了seq2seq模型的訓練過程。在此過程中,語義向量C通常為編碼器最后一個隱藏節(jié)點或者多個隱藏節(jié)點的加權和。本文實驗中,采用最后一個隱藏節(jié)點作為語義向量C。解碼器在t時刻的隱藏狀態(tài)h(t)由t-1時刻的隱藏狀態(tài)h(t-1)、輸出y(t-1)以及語義向量C共同決定。在解碼器的輸出端增加softmax層,輸出采用輸出概率最大的方式,有效提高了準確率。
實驗中,編碼器與解碼器中的神經(jīng)網(wǎng)絡單元都選用GRU,激勵函數(shù)選用線性整流(Rectified Linear Unit,ReLu)函數(shù)。本文在NVIDIA TITAN X上進行實驗。
在訓練網(wǎng)絡的過程中,選擇了一種有條件的teacher-forcing訓練模式,即達到一定條件后,使用真實的目標輸出作為下一個輸入,而不是直接使用解碼器猜測的結果作為下一個輸入。使用teacherforcing能夠使得模型收斂更快,且有限定條件的使用teacher-forcing能夠避免不穩(wěn)定情況的出現(xiàn),從而達到更好的效果。
在訓練過程中需要記錄訓練的準確率,對準確率的計算方式定義如下:
其中,δi表示第i組輸出的明文是否與目標值一致,即使僅有一位不相同也不能將其視為一致。若一致記為1,而num_testset表示測試集的大小。
由于實驗所用的訓練數(shù)據(jù)較多,本實驗中設定批量大小為512。在隱藏節(jié)點選取問題上,需要通過大量實驗確定其個數(shù),實驗結果如圖4所示,以autokey密碼為例進行實驗確定節(jié)點數(shù)。
由圖4可以看出,在不同節(jié)點數(shù)情況下,準確率隨迭代次數(shù)的增加而升高,當準確率達到一定程度時,保持穩(wěn)定;隨著節(jié)點數(shù)的增加,網(wǎng)絡的收斂速度越來越快,網(wǎng)絡的穩(wěn)定性越來越高;低節(jié)點數(shù)時,訓練過程存在較多波動;隨著節(jié)點數(shù)的增加,網(wǎng)絡的訓練越來越穩(wěn)定。在選定節(jié)點數(shù)時,應綜合考慮準確率、穩(wěn)定性以及收斂速度。因此,從仿真結果可以明顯看出,當節(jié)點數(shù)為512時,網(wǎng)絡的穩(wěn)定性和收斂速度均為最優(yōu),但是其準確率相較節(jié)點數(shù)位256時偏低。綜合考慮,選定節(jié)點數(shù)為256最合適。
確定節(jié)點數(shù)后,對模型進行訓練。訓練過程中,在不同加密算法下,準確率、誤差函數(shù)隨迭代次數(shù)的變化圖如圖5、圖6和圖7所示。
圖5 Autokey數(shù)據(jù)集節(jié)點數(shù)為256時準確率、誤差與迭代步數(shù)的關系
圖6 Vigenere數(shù)據(jù)集節(jié)點數(shù)為256時準確率、誤差與迭代步數(shù)的關系
圖7 Enigma數(shù)據(jù)集節(jié)點數(shù)為256時準確率、誤差與迭代步數(shù)的關系
由圖5、圖6和圖7可以看出,在不同加密算法的情況下,模型的準確率和誤差函數(shù)的變化是同步的。準確率隨迭代次數(shù)的增加而升高,誤差函數(shù)的變化則與之相反;訓練過程中,模型具有很高的穩(wěn)定性;訓練過程的準確率高達100%。
表1為在不同加密算法的情況下,測試階段的破譯準確率。在訓練好的、對訓練數(shù)據(jù)的破譯率高達100%的模型下,對未知明文的密文進行破譯。
表1 三種加密算法破譯準確率
由表1可以明顯看出,針對3種不同的加密算法,該模型能夠很好地實現(xiàn)破譯功能,準確率高達99%,說明seq2seq模型在字符級密碼破譯方面有較為優(yōu)異的效果。
信息的安全問題受到越來越多的關注,信息的加解密問題成為當今研究的熱點。相較于傳統(tǒng)的密碼破譯方法,基于深度學習的密碼破譯方法更高效,且一個合適的模型可以推廣到更多的加密算法上。因此,本文采用一種基于seq2seq模型的深度學習密碼破譯方法,首次將seq2seq模型應用于密碼破譯問題,將密碼破譯問題轉換為序列處理問題。模型中,采用詞嵌入的方式對數(shù)據(jù)進行處理,摒棄one-hot編碼浪費信息、占用大空間的弊端,充分利用密文之間的相互關系。以3種不同的多表置換密碼對模型進行檢驗,仿真結果顯示,該模型在3種多表置換密碼的破譯問題中準確率高達99%,證明在字符級密碼破譯方面具有較為優(yōu)異的效果。
但是,本文采用較為簡單的加密算法對模型進行檢驗,為了更好地證明其在字符級密碼破譯方面的效果,下一步需要對復雜的字符級加密算法進行檢驗,并對其在字符級加密算法中進行推廣。