劉節(jié)威,王 鋼,顏培志,方一格,荊 浩
(1.內(nèi)蒙古工業(yè)大學(xué) 數(shù)據(jù)科學(xué)與應(yīng)用學(xué)院,內(nèi)蒙古 呼和浩特 010051;2.內(nèi)蒙古工業(yè)大學(xué) 信息化建設(shè)與管理中心,內(nèi)蒙古 呼和浩特 010051;3.內(nèi)蒙古工業(yè)大學(xué) 信息工程學(xué)院,內(nèi)蒙古 呼和浩特 010051)
在商用密碼應(yīng)用安全性評估工作中,要求對采用商用密碼技術(shù)、產(chǎn)品和服務(wù)集成建設(shè)的網(wǎng)絡(luò)和信息系統(tǒng)密碼應(yīng)用的合規(guī)性與正確性進(jìn)行評估[1]。分析與識別安全系統(tǒng)所采用的密碼算法,對于評估信息系統(tǒng)安全性、密碼使用合規(guī)性與正確性、中間人攻擊等方面有著重要的現(xiàn)實意義。同時,密碼算法識別是開展密碼分析的前提條件,也是密碼分析的一個重要組成部分。無論是對信息系統(tǒng)或網(wǎng)絡(luò)設(shè)備中商用密碼算法的應(yīng)用合規(guī)性進(jìn)行評估還是開展密碼分析工作,對密文進(jìn)行密碼算法識別都是至關(guān)重要的前提。目前對密碼算法的識別方向主要有兩個:(1)逆向分析技術(shù)[2-4];(b)唯密文特征識別技術(shù)。在密評工作中,由于密碼算法應(yīng)用合規(guī)性檢測多采用逆向分析技術(shù),存在耗時和安全性等問題,利用唯密文特征識別密碼算法可以緩解上述問題的存在。同時,唯密文方法是目前主流的研究方向,也是本文所采用的方法。
由于密碼輪函數(shù)、密鑰長度和加密結(jié)構(gòu)等加密條件的不同,明文經(jīng)過不同密碼算法加密而來的密文在空間分布上也會存在差異,且加密后的密文數(shù)據(jù)也并未達(dá)到真正的隨機性,彼此之間尚存微小差異。因此可通過提取密文數(shù)據(jù)隱藏的特征關(guān)系作為密碼算法識別的依據(jù)。雖然利用統(tǒng)計學(xué)的方法對古典密碼算法進(jìn)行識別取得了不錯的成績,但對現(xiàn)代密碼算法識別工作卻收效甚微[5]。隨著機器學(xué)習(xí)在其他領(lǐng)域的成熟應(yīng)用發(fā)展,其逐漸被研究者引入密碼算法識別任務(wù)中。利用機器學(xué)習(xí)算法對唯密文開展密碼算法識別可以將其視為模式識別問題,通過某種方式對密文提取特征,并對提取到的密文特征進(jìn)行選擇和機器學(xué)習(xí)模型訓(xùn)練,最終識別出其所屬的密碼算法。當(dāng)前常見的密文特征提取方式有:(1)NIST隨機性測試返回p_value特征值[6-7];(2)特定字符、字節(jié)或比特的熵;(3)特定字符、字節(jié)或比特的概率;(4)將密文看成可變長的文檔向量[8];(5)以上幾種特征提取方式組合[9-10]。本文采用NIST隨機性測試方法提取密文特征,通過分析特征分布情況選擇合適的隨機性測試方法。
如今,將機器學(xué)習(xí)方式運用到密碼算法識別領(lǐng)域的研究日漸增多。2010年,Kuncheva等人[11]對DES、IDEA、RC2、AES共4種分組密碼算法進(jìn)行識別,研究了8種機器學(xué)習(xí)模型在密碼算法識別中的效果。2011年,Manjula等人[12]基于決策樹算法,對11種加密算法進(jìn)行識別,識別的密碼體制包括分組密碼、公鑰密碼、序列密碼與古典密碼。2012年,Chou等人[13]設(shè)計了基于支持向量機的識別模型,對ECB模式與CBC模式下的AES、DES、RC4三種分組密碼算法生成的密文進(jìn)行加密算法識別。2015年,吳楊等人[6]基于NIST的隨機性測試方法,選取三種測試方法設(shè)計密文特征,對AES、DES、3DES、Camellia、SM4五種分組密碼算法使用K-mean聚類算法進(jìn)行兩兩聚類。2018年,黃良韜等人[9]綜合已有的密碼算法識別研究成果,給出了密碼算法識別系統(tǒng)的一個形式化定義,然后對古典密碼、流密碼、分組密碼、公鑰密碼四種體制,通過簇分和單分兩個階段劃分識別階段,然后基于隨機森林算法進(jìn)行分層識別。同年,趙志誠等人[14]結(jié)合隨機性測試方法、比特熵和不定長文本向量等方法,設(shè)計密文特征,將Grain-128密碼算法分別與11種其他對稱密碼算法進(jìn)行了兩兩區(qū)分。2019年,趙志誠等人[7]基于NIST隨機性測試標(biāo)準(zhǔn)重新設(shè)計密文特征提取方法,基于隨機森林算法完成對AES、DES、3DES、IDEA、Blowfish和Camellia六種分組密碼算法的兩兩區(qū)分實驗。2021年,紀(jì)文桃等人[15]針對分組密碼算法進(jìn)行識別,利用三種隨機測試方法對密文提取特征,訓(xùn)練C4.5決策樹分類模型將商密SM4算法與國際主要標(biāo)準(zhǔn)分組密碼算法進(jìn)行兩兩識別。同年,曹莉茹[16]使用隨機性測試方法選擇密文特征,使用深度學(xué)習(xí)方法對密碼算法體制進(jìn)行識別,分別將BP神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)算法應(yīng)用于密碼算法識別任務(wù)中,確定了合適的網(wǎng)絡(luò)參數(shù),構(gòu)建相應(yīng)的密碼算法識別分類器,對8種密碼算法進(jìn)行識別。
分組密碼算法是現(xiàn)代密碼學(xué)中的一個重要研究分支,其誕生和發(fā)展有著廣泛的實用背景和重要的理論價值,同樣在眾多網(wǎng)絡(luò)設(shè)備和信息系統(tǒng)中廣泛應(yīng)用,針對國產(chǎn)商用分組密碼算法SM4開展識別研究,對密評工作也具有促進(jìn)作用。目前,在密碼算法識別領(lǐng)域很少有研究者主要針對國產(chǎn)商用密碼進(jìn)行識別研究,且研究選擇識別的加密算法沒有考慮密鑰長度等影響識別效果的變量信息。同時,深度學(xué)習(xí)技術(shù)因其擁有處理和分析大量復(fù)雜數(shù)據(jù)的能力,在圖像、自然語言處理和加密流量識別等眾多領(lǐng)域取得顯著成果,其研究對人工智能技術(shù)的發(fā)展意義重大?;诖?,本文提出了一種基于自動編碼器(Autoencoder,AE)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)結(jié)合的分組密碼算法識別方案,利用NIST隨機性方法提取密文潛在的整體和局部特征,研究識別的密碼算法是在盡量控制密鑰長度一致的基礎(chǔ)上選擇,對商密SM4算法與AES、Camellia、DES、IDEA分組密碼算法進(jìn)行兩兩區(qū)分識別。
密碼算法識別首先要提取密文特征,然后通過各類密文特征之間的差異進(jìn)行分類。據(jù)此,本文首先使用NIST隨機性測試方法對密文數(shù)據(jù)提取特征,然后對特征進(jìn)行數(shù)據(jù)預(yù)處理生成規(guī)則的灰度圖,以便后續(xù)卷積神經(jīng)網(wǎng)絡(luò)完成分類識別任務(wù)。在特征提取階段,選擇組內(nèi)頻率測試、最長1游程測試和二元矩陣秩測試等9種方法體現(xiàn)密文數(shù)據(jù)整體特征,選擇非重疊模板匹配方法體現(xiàn)密文數(shù)據(jù)局部特征。由于局部特征維度與整體特征維度不匹配,使用自動編碼器對局部特征降維,然后對整體特征和降維后的局部特征融合處理生成對應(yīng)的灰度特征圖,之后將它們輸入到卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練。該方法的結(jié)構(gòu)如圖1所示。
圖1 基于自動編碼器和卷積神經(jīng)網(wǎng)絡(luò)的密碼算法識別模型
由于NIST隨機性測試眾多方法對序列的整體或局部隨機性均有針對性的測試,針對這一特性,本文將整體和局部特征融合共同作為密文特征來突出各種加密算法密文之間的差異性。同樣,選擇合適的隨機性測試方法反映密文整體特征也是至關(guān)重要的。通過對各類加密算法的密文文件進(jìn)行特征分布統(tǒng)計分析,選擇了9種隨機性測試方法反映密文整體特征,分別是頻率測試(Frequency test)、組內(nèi)頻率測試(Frequency test within a block)、游程測試(Runs test)、最長1游程測試(Longest run of ones test)、二元矩陣秩測試(Binary matrix rank test)、離散傅里葉變換測試(Discrete Fourier transform test)、序列測試(Serial test)、近似熵測試(Approximate entropy test)、累加和測試(Cumulative sums test)。而反映密文局部特征的方法選擇的則是非重疊模塊匹配測試(Non overlapping template matching test)。
在待提取特征的密文文件統(tǒng)一大小的基礎(chǔ)上,將密文文件分割為數(shù)份固定大小的二進(jìn)制密文塊,分別基于上述10種隨機性測試方法提取密文特征。密碼算法集合為M={m1,m2,m3,…,mk},其中k代表密碼算法的數(shù)量。每種密碼算法mi分別加密明文文件F得到密文文件C,每個密文文件Ci分割為一定數(shù)量等長的密文塊Cij。每個密文塊Cij基于反映密文文件整體特征的9種隨機性方法提取特征,可得特征向量Afeaij={Afeaij_1,Afeaij_2,…,Afeaij_d};基于反映密文局部特征的非重疊模塊匹配測試方法提取特征,可得特征向量Bfeaij={Bfeaij_1,Bfeaij_2,…,Bfeaij_q}。在對特征向量Afeaij和Bfeaij融合之前,首先需要對Bfeaij進(jìn)行數(shù)據(jù)降維處理。
自動編碼器[17]是一種無監(jiān)督機器學(xué)習(xí)算法,其基本思想是直接使用一層或者多層的神經(jīng)網(wǎng)絡(luò)對輸入數(shù)據(jù)進(jìn)行關(guān)系映射,得到輸出向量作為從輸入數(shù)據(jù)中提取的特征。自動編碼器廣泛用于數(shù)據(jù)降維[18]和特征學(xué)習(xí)[19],與主成分分析(PCA)算法相比,自動編碼器具有更好的靈活性和處理非線性特征的能力。圖2所示為三層自動編碼器模型,從圖中可以看出自動編碼器分為三部分:輸入層、隱藏層和輸出層。其中輸入層向隱藏層的低維映射被稱為編碼器,得到輸入數(shù)據(jù)的高效表征;從隱藏層到輸出層的高維映射被稱為解碼器,對輸入數(shù)據(jù)進(jìn)行重構(gòu)。一般情況下隱藏層的維度比輸入層的維度要小,由于隱藏層抽取了輸入層的有效信息,因此自動編碼器可用于數(shù)據(jù)降維[20]。由于2.1節(jié)中特征向量Bfeaij維度過高且Afeaij維度過低,如果未經(jīng)過任何降維處理直接融合特征向量,就會造成兩個特征向量維度不匹配的問題。在分類模型訓(xùn)練過程中,高維度特征向量會壓制低維度向量,導(dǎo)致訓(xùn)練效果不理想。
圖2 三層自動編碼器模型
為了將密文整體和局部特征更高效地融合,使用自動編碼器對特征向量Bfeaij降維。以處理16 KB密文塊為例,自動編碼器模型包括1個輸入層、4個線性隱藏層+激活層、1個輸出層,如圖3所示。
圖3 自動編碼器模型
卷積神經(jīng)網(wǎng)絡(luò)[21]由于善于提取數(shù)據(jù)局部特征和下采樣特性,相比其他機器學(xué)習(xí)模型更適合處理特征維度較高和具有空間特征的數(shù)據(jù),如圖像、文本和本文中使用的密文數(shù)據(jù)空間特征。不同結(jié)構(gòu)的加密算法生成的密文文件在空間分布上存在信息差異性,這種空間信息差異性很難用傳統(tǒng)機器學(xué)習(xí)算法分析,故本文使用卷積神經(jīng)網(wǎng)絡(luò)對密碼算法展開識別研究。卷積神經(jīng)網(wǎng)絡(luò)識別模型如圖4所示,以16 KB密文塊為例,包括一個輸入層、三個卷積+最大池化連接層、兩個全連接層以及一個輸出層,其中輸入層為預(yù)處理過之后的灰度特征圖。
圖4 卷積神經(jīng)網(wǎng)絡(luò)識別模型
基于卷積神經(jīng)網(wǎng)絡(luò)模型的識別方案,具體流程如下:
(1)訓(xùn)練階段
①隨機抽取密碼算法已知的一組密文文件C1,C2,…,Cs,其中s為文件個數(shù);
②對每個密文文件Ci按固定大小分割為二進(jìn)制密文塊Ci1,Ci2,…,Cit,其中t為密文塊個數(shù);
③對密文塊Cij數(shù)據(jù)內(nèi)容進(jìn)行特征提取,得到兩組特征向量Afeaij和Bfeaij,對Bfeaij特征降維,然后融合特征向量Afeaij和Bfeaij得到feaij={feaij-1,feaij-2,…,feaij-d},其中d為特征維數(shù),其維數(shù)由具體選擇的采集方式確定;
④每個密文文件組成一個大小為t×d的特征矩陣,轉(zhuǎn)換為灰度特征圖;
⑤s個密文文件則構(gòu)成s個灰度特征圖且特征標(biāo)簽已知為Lab={lab1,lab2,…,labs},每個密文文件構(gòu)成二元組(feai,labi);
⑥將帶標(biāo)簽的數(shù)據(jù)(feai,labi)提交到神經(jīng)網(wǎng)絡(luò)分類算法,進(jìn)行分類模型的訓(xùn)練。
(2)測試階段
①從網(wǎng)絡(luò)設(shè)備或信息系統(tǒng)中獲取密文文件。對一個待識別的密文文件C按固定大小分割為二進(jìn)制密文塊,對每個密文塊進(jìn)行特征提取和特征降維,拼接每個密文塊的特征向量feai,得到一個二維矩陣并轉(zhuǎn)換為灰度特征圖。
②將灰度特征圖輸入到在訓(xùn)練階段訓(xùn)練好的分類器模型中,模型給出密碼算法識別結(jié)果,即密碼算法標(biāo)簽lab。
本文實驗使用OpenSSL和GmSSL密碼庫工具中實現(xiàn)的SM4、AES、Camellia、DES和IDEA密碼算法加密明文文件,使用NIST隨機性測試工具包提取密文特征,以PyTorch深度學(xué)習(xí)框架和PyCharm軟件為模型訓(xùn)練環(huán)境,實驗測試環(huán)境如表1所示。
表1 實驗測試環(huán)境
明文數(shù)據(jù)來源于網(wǎng)上爬取的圖片,將所有圖片拼接成大小為1 024 MB的明文文件,再將其平均分割為2 000份小文件,每份大小均為512 KB。設(shè)置對應(yīng)的固定密鑰和分組密碼ECB工作模式,每份小文件經(jīng)過不同密碼算法加密后獲得對應(yīng)的密文文件共計10 000份。對實驗數(shù)據(jù)灰度特征圖進(jìn)行隨機抽樣訓(xùn)練,隨機抽樣70%作為訓(xùn)練集,其余30%作為測試集,以10折重復(fù)隨機抽樣數(shù)據(jù)集的平均準(zhǔn)確率作為識別效果的度量值。后續(xù)模型訓(xùn)練階段和測試階段都是在此基礎(chǔ)上完成。有關(guān)各類密碼算法的設(shè)置情況和實現(xiàn)方式如表2所示。
表2 5種加密算法的具體參數(shù)列表
10種隨機性測試方法的參數(shù)設(shè)置對返回值p_value的大小和數(shù)量均有影響。表3為實驗所用隨機性測試方法的參數(shù)設(shè)置情況[22],未說明實驗取參均使用NIST隨機性測試包默認(rèn)設(shè)置。
表3 10種隨機性測試參數(shù)范圍列表
為了驗證密文塊大小對實驗效果是否有影響,本文采用兩種密文分塊方案,分別將密文文件劃分為32塊和128塊,則密文文件大小為16 KB和4 KB。對每種分塊方案的密文塊分別記為和,密文文件提取特征生成32×32維和128×128維的特征灰度圖。圖5和圖6所示分別為基于某種加密算法的和密文塊方案的特征灰度圖。
圖5 C3ij2密文塊方案特征灰度圖
圖6 C1ij28密文塊方案特征灰度圖
完成以上工作,將得到的特征灰度圖輸入到卷積神經(jīng)網(wǎng)絡(luò)模型中訓(xùn)練分類。首先將商密SM4算法 與AES、Camellia、DES、IDEA算 法 之 間 兩 兩 區(qū) 分識別,其準(zhǔn)確率都在80%以上,如表4所示。
表4 SM4與4種分組密碼算法識別準(zhǔn)確率
表5 DES與4種分組密碼算法識別準(zhǔn)確率
DES算法與其他算法識別準(zhǔn)確率均在85%以上,具有較高的識別準(zhǔn)確率,這說明密鑰長度不同確實會影響密碼算法之間識別的效果。研究識別的密碼算法在密鑰長度一致的基礎(chǔ)上,與其他相關(guān)文獻(xiàn)相比,本文提出的基于自動編碼器和卷積神經(jīng)網(wǎng)絡(luò)的密碼算法識別方案取得了不錯的準(zhǔn)確率和穩(wěn)定性,對比結(jié)果如表6所示。
表6 分組密碼算法識別方案對比
本文利用NIST隨機性方法對密文文件提取整體和局部特征,使用自動編碼器對數(shù)據(jù)降維,提出一種基于自動編碼器和卷積神經(jīng)網(wǎng)絡(luò)模型的分組密碼算法識別方案。所選密碼算法在控制密鑰長度這一變量的基礎(chǔ)上開展研究,實驗結(jié)果表明,密鑰長度不同的兩種分組密碼算法,識別準(zhǔn)確率相對較高,說明算法密鑰長度不同對識別結(jié)果的準(zhǔn)確率確實有影響。同時,SM4與其他算法兩兩識別的準(zhǔn)確率可達(dá)80%之上,DES與其他算法兩兩識別的準(zhǔn)確率可達(dá)85%之上。本文主要針對分組密碼ECB工作模式進(jìn)行識別研究,在后續(xù)的工作中,將嘗試對CBC、CFB等復(fù)雜工作模式開展研究,對多種不同密鑰長度的密碼算法進(jìn)行識別,優(yōu)化密文特征選擇和特征處理過程。同時,對國產(chǎn)商用序列密碼體制和公鑰密碼體制識別展開研究。