曾鐘靜昕,甘 剛
(成都信息工程大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,四川 成都 610225)
密碼算法運(yùn)行時(shí)都需要一個(gè)外界載體即加密設(shè)備,以保障數(shù)據(jù)的安全操作。而在密碼算法中,有些操作是和密鑰位相關(guān)的,執(zhí)行這個(gè)操作引起的功耗曲線也和密鑰位相關(guān)。根據(jù)電子電路相關(guān)理論可知,加密設(shè)備在運(yùn)行時(shí),必然會(huì)有一些時(shí)間、能量消耗,或電磁輻射之類的相關(guān)物理信息泄漏,即側(cè)信道泄露。這種利用側(cè)信道泄漏來獲取密鑰信息的攻擊技術(shù)就是側(cè)信道攻擊(Side Channel Attack,SCA)[1-3]。由于在實(shí)際情況中,攻擊者進(jìn)行密鑰攻擊時(shí)往往采集的真實(shí)能量曲線數(shù)量有限,因此出現(xiàn)了將神經(jīng)網(wǎng)絡(luò)與側(cè)信道攻擊相結(jié)合的方法,使其更高效地利用有限的能量曲線[4-5],以此來提升側(cè)信道攻擊成功率。
無監(jiān)督學(xué)習(xí)的聚類算法可以通過提取數(shù)據(jù)中的特征點(diǎn)來發(fā)現(xiàn)數(shù)據(jù)間的相關(guān)性并自動(dòng)對(duì)數(shù)據(jù)進(jìn)行分組。從側(cè)信道攻擊的角度看,特征點(diǎn)應(yīng)該叫“興趣點(diǎn)”,興趣點(diǎn)的選擇對(duì)后續(xù)攻擊的成功與否至關(guān)重要。近年來已有大量實(shí)驗(yàn)研究將特征選擇或特征提取算法應(yīng)用到側(cè)信道中,以達(dá)到降低計(jì)算法復(fù)雜度和提高成功率的目的。
2012 年,Batina 等人[6]將主成分分析(Principal Component Analysis,PCA)應(yīng)用于側(cè)信道攻擊,這種方法不僅減小了數(shù)據(jù)量,而且在抑制能量信息中噪聲信息的同時(shí)還降低了計(jì)算的時(shí)間復(fù)雜度,使得能量分析攻擊的適用性更強(qiáng),成功率更高。Heyszl 等人[7]在2013 年首次提出了在水平側(cè)信道攻擊的背景下使用聚類算法,通過主成分分析降低測(cè)量數(shù)據(jù)的相關(guān)性,并利用K-means 聚類算法攻擊加密算法,實(shí)現(xiàn)了橢圓曲線標(biāo)量乘法(Elliptic Curve Scalar Multiplication,ECSM)的密鑰位恢復(fù)。2014 年,Prein 等人[8]利用聚類的結(jié)果,將均值差異最大的點(diǎn)作為興趣點(diǎn),并對(duì)興趣點(diǎn)進(jìn)行第二次聚類,之后Prein 等人[9]又提出了基于Fuzzy K-means 算法的聚類攻擊方法,結(jié)合無監(jiān)督學(xué)習(xí)、最大似然估計(jì)和模板攻擊恢復(fù)出了RSA算法的密鑰。2020 年,Perin 等人[10]提出了一種基于水平攻擊和神經(jīng)網(wǎng)絡(luò)技術(shù)的聚類攻擊框架。該框架利用了2018 年荷蘭Nascimento 等人[11]提出的水平聚類攻擊框架的前2 個(gè)步驟,即聚類泄漏分析(Clustering Leakage Assessment,CLA)和初始密鑰恢復(fù)(Key Recovery,KR),首先劃分波形段使得一個(gè)波形段對(duì)應(yīng)密鑰一個(gè)比特位,對(duì)波形段同一位置進(jìn)行聚類并計(jì)算聚類結(jié)果得到一條SOST 泄漏分析波形,然后提取其波形較高位位置作為興趣點(diǎn)作聚類攻擊,得到初始密鑰恢復(fù)結(jié)果,再借鑒生成式對(duì)抗網(wǎng)絡(luò)GAN的思想構(gòu)建交互式神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),以此糾正了部分錯(cuò)誤得到最終密鑰恢復(fù)結(jié)果,提高了聚類攻擊準(zhǔn)確率,并使用該框架成功攻擊了帶有防護(hù)的ECC 算法。但該方法采用了低識(shí)別率的模型對(duì)數(shù)據(jù)進(jìn)行標(biāo)注,導(dǎo)致初始聚類攻擊的準(zhǔn)確率較低,需要進(jìn)一步糾正錯(cuò)誤密鑰。2022 年,蘇沛源等人[12]提出了一種基于卷積自編碼器特征提取的方法,并通過實(shí)驗(yàn)對(duì)該表面粗糙度預(yù)測(cè)方法進(jìn)行了驗(yàn)證,最終實(shí)現(xiàn)了較高精確度的精確預(yù)測(cè)。隨后,周梓馨等人[13]提出了一種基于自注意力機(jī)制的深度學(xué)習(xí)側(cè)信道攻擊模型SADLSCA,旨在解決基于深度學(xué)習(xí)的側(cè)信道攻擊模型訓(xùn)練過程中存在的快速過擬合、梯度消失和收斂速度慢的問題。該方法以全局視角來提取興趣點(diǎn),減少了攻擊成功所需的能跡數(shù)量。
目前,仍有大量研究在探索側(cè)信道攻擊中預(yù)處理興趣點(diǎn)選擇算法對(duì)攻擊準(zhǔn)確率的影響[14-15],但一般都將預(yù)處理與攻擊視作2 個(gè)獨(dú)立模塊,為有效地提高神經(jīng)網(wǎng)絡(luò)聚類攻擊的數(shù)據(jù)標(biāo)注識(shí)別率和攻擊準(zhǔn)確率,且可以更好地匹配后續(xù)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行誤差糾正的過程,本文提出一種采用卷積自編碼器對(duì)側(cè)信道能量曲線數(shù)據(jù)進(jìn)行處理優(yōu)化的興趣點(diǎn)選擇方法,以提高側(cè)信道中的無監(jiān)督學(xué)習(xí)攻擊能力。
公鑰解密算法就是接收者用自已的私鑰對(duì)收到的發(fā)送者使用接收者的公鑰加密得到的密文進(jìn)行解密還原成原始消息。
表1 對(duì)SM2 公鑰解密算法過程中涉及的一些符號(hào)進(jìn)行簡(jiǎn)單說明。
表1 符號(hào)說明
接收方用自已的私鑰對(duì)收到的密文C=C1||C2||C3進(jìn)行解密,用戶B解密過程包括以下步驟[16]:
步驟1從密文C中取出比特串C1,根據(jù)要求將C1的數(shù)據(jù)類型轉(zhuǎn)換為橢圓曲線上的點(diǎn),驗(yàn)證C1是否在橢圓曲線上,若不是則報(bào)錯(cuò)并退出。
步驟2計(jì)算橢圓曲線點(diǎn)S=[h]C1,判斷S是否是橢圓曲線上的點(diǎn),若不是則報(bào)錯(cuò)并退出。
步驟3計(jì)算[dB]C1=(x2,y2),根據(jù)要求將坐標(biāo)x2、y2的數(shù)據(jù)類型轉(zhuǎn)換為比特串。
步驟4計(jì)算t= KDF(x2||y2,klen),判斷t是否為全0比特串,若是則報(bào)錯(cuò)并退出。
步驟5從密文C中取出比特串C2,計(jì)算M′ =C2⊕t。
步驟6計(jì)算u= Hash(x2||M′||y2),判斷哈希結(jié)果u是否與C中比特串C3相等,若不等則報(bào)錯(cuò)并退出。
步驟7輸出明文M′。
算法具體流程如圖1所示。
圖1 SM2解密算法流程圖
本文以步驟3 中運(yùn)用私鑰進(jìn)行橢圓曲線多倍點(diǎn)運(yùn)算(見算法1)為攻擊點(diǎn),假設(shè)1≤k<N,P是橢圓曲線E上階為N的點(diǎn),k為正整數(shù),P的k倍點(diǎn)為Q,即k個(gè)P相加:
算法1橢圓曲線多倍點(diǎn)運(yùn)算
側(cè)信道攻擊是一種利用物理信息(如執(zhí)行時(shí)間、能量消耗、電磁輻射)進(jìn)行密鑰恢復(fù)的技術(shù),它最初由Kocher[17]在1996 年提出的,隨后受到廣泛應(yīng)用,成為密碼學(xué)研究中不可或缺的一環(huán)。根據(jù)攻擊者所利用的介質(zhì)或信息種類不同,側(cè)信道攻擊可以分為多種形式,包括能量分析攻擊[18]、電磁分析攻擊、計(jì)時(shí)攻擊、模板攻擊[19-20]以及故障注入攻擊[21-22]等。能量分析的概念于1999 年被Kocher 等人[23]提出,該方法在攻擊過程中不需要破壞密碼設(shè)備,通過利用密碼芯片執(zhí)行過程中泄露的能量信息即可獲取中間值,從而進(jìn)行密鑰恢復(fù),屬于非入侵式。能量分析主要包括簡(jiǎn)單能量分析(Simple Power Analysis,SPA)[24-25]、差分能量分析(Differential Power Analysis,DPA)[26-27]、相關(guān)性能量分析(Correlation Power Analysis,CPA)[28-30]等。
簡(jiǎn)單能量分析就是通過觀察加密操作與能量消耗之間的關(guān)系,直接從測(cè)量的能量曲線中分析得到密鑰信息。當(dāng)算法執(zhí)行時(shí),電路狀態(tài)隨著時(shí)間的變化而變化,比如數(shù)據(jù)存取、算術(shù)或邏輯運(yùn)算等操作對(duì)應(yīng)著不同的狀態(tài)。如果把電路運(yùn)行周期對(duì)應(yīng)不同狀態(tài)劃分為不同的時(shí)間段,那么在每個(gè)不同狀態(tài)的電路能量消耗都不相同。其本質(zhì)上是對(duì)能量曲線中的各波形段進(jìn)行分析,猜測(cè)在某時(shí)間內(nèi)執(zhí)行的特定指令以及指令中涉及的一些秘密參數(shù)。
相關(guān)性能量分析[31-32]采用了統(tǒng)計(jì)學(xué)的方法,計(jì)算密碼算法運(yùn)行時(shí),使用猜測(cè)密鑰獲取的中間結(jié)果的漢明重量或漢明距離與實(shí)際的能量數(shù)據(jù)之間的相關(guān)性,以此來恢復(fù)密鑰,相關(guān)系數(shù)最高的即對(duì)應(yīng)猜測(cè)正確的密鑰。
差分能量分析[33]與相關(guān)性能量分析方法類似,它主要是利用不同的明文輸入對(duì)應(yīng)不同的能量曲線,結(jié)合統(tǒng)計(jì)分析和糾錯(cuò)技術(shù),從大量的能量曲線分布差異中進(jìn)行推斷,找出使得差異最大的中間結(jié)果,最終實(shí)現(xiàn)對(duì)密鑰的恢復(fù),無需了解加密的具體細(xì)節(jié)。與SPA 相比具有更高的攻擊強(qiáng)度,對(duì)密碼芯片造成的安全威脅更大。
卷積自編碼器(Convolutional Auto-Encoder,CAE)是一種無監(jiān)督的人工神經(jīng)網(wǎng)絡(luò),可以最大化信息并最小化重構(gòu)誤差,其作用是對(duì)輸入信息進(jìn)行特征學(xué)習(xí)。學(xué)習(xí)過程就是把輸入信息作為學(xué)習(xí)目標(biāo),將輸入信息壓縮為一種低維隱藏空間表示,然后重構(gòu)這種表示作為輸出。自編碼器由2 個(gè)部分組成:編碼器(Encoder)和解碼器(Decoder)。編碼器是將輸入信息壓縮為隱藏空間表示,即編碼特征Code;解碼器則是對(duì)隱含層特征Code進(jìn)行重構(gòu),如圖2所示。
圖2 自編碼器網(wǎng)絡(luò)結(jié)構(gòu)
卷積自編碼器與傳統(tǒng)自編碼器非常相似,其主要區(qū)別在于卷積自編碼器采用卷積方式對(duì)輸入信號(hào)進(jìn)行線性變換,即使用卷積層代替全連接層,其權(quán)重是共享的,原理和自編碼器一樣,對(duì)輸入的數(shù)據(jù)特征進(jìn)行下采樣以提供較小維度的隱藏層特征表示,并強(qiáng)制自編碼器學(xué)習(xí)特征的壓縮版本,重建過程就是基于隱藏編碼的基本圖像塊的線性組合。
假設(shè)有卷積核W1和偏置b1,激活函數(shù)ReLU表示為f1,輸入數(shù)據(jù)x經(jīng)卷積操作后生成特征圖h,計(jì)算公式為:
對(duì)特征圖h進(jìn)行反卷積操作得到重構(gòu)數(shù)據(jù)?,反卷積核為W2,偏置為b2,激活函數(shù)通常為Sigmoid 函數(shù),表示為f2,計(jì)算公式為:
對(duì)輸入樣本x與根據(jù)特征重構(gòu)出的結(jié)果?使用均方誤差計(jì)算,得到最終卷積自編碼器的誤差值,n表示輸入數(shù)據(jù)的維度,計(jì)算公式為:
本文實(shí)驗(yàn)環(huán)境所使用的卷積自編碼器及攻擊代碼都基于Python Keras 庫(kù)編寫,實(shí)驗(yàn)數(shù)據(jù)由Riscure Power tracer、LeCroy Oscilloscope 和嵌入式芯片智能卡對(duì)無防護(hù)措施的SM2 解密算法執(zhí)行時(shí)產(chǎn)生的能量曲線進(jìn)行采集,采樣頻率為50 MHz,采樣點(diǎn)數(shù)為1000 萬,觸發(fā)電壓為1.5 V,側(cè)信道能量曲線數(shù)據(jù)處理軟件使用Inspector 2022。
根據(jù)橢圓曲線多倍點(diǎn)運(yùn)算原理可以知道其主要是進(jìn)行倍點(diǎn)和倍加運(yùn)算(算法1 中步驟2~步驟5),在本文實(shí)驗(yàn)中,假設(shè)能跡曲線長(zhǎng)度為L(zhǎng),每一次倍加或倍點(diǎn)操作被劃分為一條波形段,放大并觀察能量曲線波形可以劃分出波形段,如圖3 中虛線所示。圖3 展示了示波器上采集到的部分能量曲線圖,橫軸表示算法的運(yùn)行時(shí)間,縱軸表示運(yùn)行過程中泄漏的能量,實(shí)驗(yàn)中每條波形段數(shù)據(jù)包含10000個(gè)樣本點(diǎn)。
圖3 能量曲線圖
可以將樣本和波形段用一個(gè)矩陣T表示:
矩陣T的每一行都是一條波形段代表一個(gè)波形段操作Oi,n是波形段中的樣本點(diǎn)數(shù),l是波形段個(gè)數(shù),即操作執(zhí)行次數(shù),也是算法1(步驟2~步驟5)中的迭代數(shù)。
攻擊是否成功很大程度上取決于興趣點(diǎn)的選擇。興趣點(diǎn)是指?jìng)?cè)信道能量數(shù)據(jù)中包含最多泄露信息的點(diǎn),從信息泄露的角度來看,不同信息產(chǎn)生的能量差異越大,信息泄露就越強(qiáng)烈,即泄漏分析曲線出現(xiàn)明顯尖峰。所以選擇興趣點(diǎn)的基本原則是:選擇能量曲線上對(duì)不同信息表現(xiàn)出能量差異較大的地方,也就是說選擇泄漏分析能量曲線中峰值較大的位置。在聚類攻擊的訓(xùn)練中,根據(jù)不同的“操作”將能量曲線分為不同的組別,選擇各分組間能量差異較大處的樣本點(diǎn),即興趣點(diǎn),使得聚類結(jié)果更準(zhǔn)確。
不同于常規(guī)的興趣點(diǎn)選擇方式,本文采用卷積自編碼器來提取興趣點(diǎn),編碼的過程就是對(duì)每條波形段進(jìn)行卷積操作,得到一個(gè)包含數(shù)據(jù)特征的低維向量,即編碼后的波形段數(shù)據(jù),也就是樣本點(diǎn)集合這些樣本點(diǎn)就是選擇出來的興趣點(diǎn),其中m代表編碼后一條波形段中的樣本點(diǎn)數(shù)。實(shí)驗(yàn)所使用的卷積自編碼器網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)如圖2 所示,輸入是經(jīng)過預(yù)處理的波形段能量曲線矩陣T,輸出是經(jīng)過編碼解碼操作的重構(gòu)波形段能量曲線矩陣T′。其中編碼器每層包含1 個(gè)卷積層和1 個(gè)池化層,卷積層所使用的卷積核大小為3、步長(zhǎng)為1,激活函數(shù)為ReLU,過濾器個(gè)數(shù)分別為16和8,池化層大小為2,步長(zhǎng)為2。
為了驗(yàn)證該方法對(duì)興趣點(diǎn)的選擇是否合理可行,本文對(duì)編碼前后的能量曲線進(jìn)行了泄漏分析,結(jié)果如圖4 和圖5 所示。圖4 是編碼前對(duì)10000 個(gè)樣本點(diǎn)進(jìn)行泄漏分析的曲線圖,可以看出只有中間極個(gè)別的少數(shù)樣本點(diǎn)具有極高的泄漏,而圖5 中顯示的是針對(duì)編碼后得到的140 個(gè)樣本點(diǎn)進(jìn)行泄漏分析的曲線圖,可以看出縱軸泄漏指標(biāo)均大于0.5,超過半數(shù)在1 以上。經(jīng)對(duì)比可以得出結(jié)論,編碼后的數(shù)據(jù)較編碼前的數(shù)據(jù)保留了一定程度的泄漏且具有較好降噪效果,驗(yàn)證了采用卷積自編碼器對(duì)能量曲線數(shù)據(jù)進(jìn)行編碼訓(xùn)練后可以提取出更大范圍的精確興趣點(diǎn)。
圖4 預(yù)處理前泄漏分析
圖5 預(yù)處理后泄漏分析
將經(jīng)過卷積自編碼后的曲線樣本點(diǎn){ }t1:l,j作為輸入,對(duì)每條波形段的同一位置j進(jìn)行聚類,將波形段劃分為2 個(gè)不同類別,本文使用K-means 算法對(duì)波形段樣本中的某處興趣點(diǎn)進(jìn)行了聚類,結(jié)果如圖6所示。
圖6 K-means 聚類結(jié)果圖
整個(gè)實(shí)驗(yàn)的重點(diǎn)在于如何確定每個(gè)聚類中心代表什么類別或操作,即數(shù)據(jù)標(biāo)簽為0還是1,解決方案是基于對(duì)能量曲線數(shù)據(jù)本身的分析來界定。對(duì)比分析發(fā)現(xiàn)倍點(diǎn)操作對(duì)應(yīng)波形段能量曲線平均值振幅大于點(diǎn)加操作對(duì)應(yīng)波形段能量曲線平均值振幅,因此在每一次聚類算法初始化時(shí)就根據(jù)其振幅從聚類樣本中選擇最大和最小樣本來作為初始聚類中心,這樣就保證了聚類后μ1>μ2。
為了找到最佳的卷積自編碼器結(jié)構(gòu),本文還做了對(duì)不同聚類算法和不同網(wǎng)絡(luò)結(jié)構(gòu)的一些對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表2 所示,并采用了傳統(tǒng)提取興趣點(diǎn)方法(SOST)對(duì)相同數(shù)據(jù)完成了攻擊實(shí)驗(yàn),準(zhǔn)確率為82%。觀察表2 可以發(fā)現(xiàn)添加一層Batch Normalization 層大約可增加2.86%的準(zhǔn)確率,且當(dāng)同時(shí)采用Max Pooling 池化層和Fuzzy K-means 聚類算法時(shí)準(zhǔn)確率最高可達(dá)到97.02%,而采用傳統(tǒng)提取興趣點(diǎn)方法的攻擊準(zhǔn)確率只有82%。
表2 不同網(wǎng)絡(luò)結(jié)構(gòu)攻擊準(zhǔn)確率對(duì)比
這是因?yàn)閭?cè)信道攻擊中的數(shù)據(jù)往往還存在一定程度的噪聲和背景干擾,添加Batch Normalization 層使得輸入的特征歸一化,增加了卷積自編碼器模型的魯棒性和泛化能力,而Max Pooling 池化層可以提取出數(shù)據(jù)中的重要特征,有助于產(chǎn)生更加有針對(duì)性的特征表示。同時(shí),F(xiàn)uzzy K-means 算法能夠更好地處理具有模糊性質(zhì)的數(shù)據(jù),它允許每個(gè)數(shù)據(jù)點(diǎn)屬于多個(gè)聚類中心,而不只是一個(gè)。這一特性使得采用Fuzzy K-means 算法相較于K-means 算法對(duì)側(cè)信道攻擊中的聚類分析具有更高的準(zhǔn)確率。
本文采用了文獻(xiàn)[9]中提出的方法對(duì)波形段集合中每個(gè)位置j進(jìn)行聚類,對(duì)每個(gè)位置聚類之后將會(huì)得到一組聚類結(jié)果,但每組結(jié)果可能存在一定的錯(cuò)誤位,需要將它們組合以獲得最終結(jié)果。本文采用文獻(xiàn)[8]中提出的多數(shù)決定方法來估計(jì)最終結(jié)果,用多個(gè)位置的不同聚類結(jié)果來糾正錯(cuò)誤的標(biāo)簽分類。
接下來便是最終的密鑰恢復(fù)環(huán)節(jié)了,首先將聚類得到的每個(gè)標(biāo)簽按照對(duì)應(yīng)的波形段順序依次排列,然后根據(jù)算法1 中所描述的,將單獨(dú)的倍點(diǎn)操作化為比特位0,倍點(diǎn)操作和點(diǎn)加操作一起化為比特位1,便可恢復(fù)出密鑰。
在側(cè)信道攻擊過程中,興趣點(diǎn)的選擇和提取很大程度上決定了攻擊的成功與否,當(dāng)提取出足夠有效的興趣點(diǎn)時(shí)可以很好地構(gòu)造攻擊模型。本文提出將卷積自編碼器結(jié)合聚類算法用于側(cè)信道分析中,并對(duì)SM2解密算法中的私鑰多倍點(diǎn)運(yùn)算成功實(shí)現(xiàn)了攻擊,實(shí)驗(yàn)結(jié)果驗(yàn)證了該方法的有效性和可行性。后續(xù)將結(jié)合卷積自編碼器進(jìn)行深度嵌入神經(jīng)網(wǎng)絡(luò)聚類模型的研究,以減小誤差,提高聚類攻擊的成功率,從而對(duì)芯片安全提出更高的要求。