亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于RISC-V的防御側(cè)信道攻擊AES軟件實(shí)現(xiàn)方案

        2021-11-02 11:48:36焦芃源殷樹娟李翔宇
        微處理機(jī) 2021年5期

        焦芃源,殷樹娟,李翔宇,李 涵

        (1.北京信息科技大學(xué)理學(xué)院,北京100192;2.清華大學(xué)微電子學(xué)研究所,北京100084)

        1 引言

        隨著信息技術(shù)的飛速發(fā)展,信息的安全傳輸與存儲問題也備受關(guān)注。高級加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES)是美國國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)在2001年發(fā)布的一種分組加密算法,能夠滿足現(xiàn)代密碼學(xué)中對加密算法的計(jì)算安全性的要求[1],目前已廣泛應(yīng)用于信息加密傳輸與存儲。側(cè)信道分析攻擊[2]是利用密碼設(shè)備在進(jìn)行加密算法運(yùn)行期間的能量消耗、時(shí)間差異、電磁輻射等信息,根據(jù)算法中間值與操作之間的相關(guān)性進(jìn)行密鑰破譯的技術(shù)。其中,能量側(cè)信道分析是一種成本較低的攻擊技術(shù)。未加防護(hù)的AES算法在嵌入式處理器中的軟件實(shí)現(xiàn)已被證明是可以破解的。焦鉻等人[3]針對未加防護(hù)的AES算法設(shè)計(jì)了能量相關(guān)性分析平臺并成功完成了攻擊。諸多防御側(cè)信道攻擊的對策也隨之出現(xiàn)。此類防御對策可分為隱藏對策和掩碼對策兩類,均以消除密碼設(shè)備的能量消耗與加密算法運(yùn)行密鑰及敏感操作的相關(guān)性為目標(biāo)[4]。隱藏對策通過對密碼設(shè)備進(jìn)行特殊構(gòu)建,使得密碼設(shè)備在各個(gè)時(shí)鐘周期的能量消耗隨機(jī)化或均等化,以此消除相關(guān)性。吳鏡聰[5]研究了基于隱藏對策的雙軌邏輯和混沌觸發(fā)器電路的AES算法硬件防護(hù)方案。掩碼對策則通過對算法運(yùn)行中間值添加隨機(jī)掩碼的方式使得中間值變得隨機(jī)化,從而消除相關(guān)性。苑志剛[6]研究了抵抗功耗攻擊的掩碼AES算法在硬件上的實(shí)現(xiàn)方案,但其硬件防護(hù)方案靈活性較低,可移植性受硬件環(huán)境制約。在已有成果基礎(chǔ)上,此處使用掩碼對策,基于RISC-V架構(gòu)嵌入式處理器,嘗試實(shí)現(xiàn)一套全掩碼保護(hù)的AES算法的軟件方案。

        2 AES算法結(jié)構(gòu)

        AES算法的明文分組和密鑰長度為128比特。每個(gè)明文分組的加密由10輪操作完成。每輪操作又分為SubBytes(字節(jié)替代,也稱為S盒操作)、Shift Rows(行移位)、MixColumns(列混淆)和AddRound Key(輪密鑰加)四類基本操作。在進(jìn)行每輪操作時(shí),將每個(gè)明文分組看作4×4的16字節(jié)狀態(tài)矩陣參與運(yùn)算。其中,SubBytes操作可以通過查詢一個(gè)16×16的S盒來完成,即將狀態(tài)矩陣的每個(gè)字節(jié)的高4位和低4位看作S盒坐標(biāo)來完成字節(jié)替換;ShiftRows操作通過將狀態(tài)矩陣的第i行循環(huán)左移i-1個(gè)字節(jié)來完成;Mixclomuns操作通過將狀態(tài)矩陣左乘一個(gè)常數(shù)矩陣來完成;AddRoundKey操作即狀態(tài)矩陣的每個(gè)字節(jié)與密鑰矩陣相應(yīng)字節(jié)的異或運(yùn)算。在進(jìn)行各輪操作之前,還需要進(jìn)行密鑰的擴(kuò)展,將128比特的密鑰分為32位的4組初始密鑰參與10輪加密操作前的AddRoundKey操作,由這4組初始密鑰再通過密鑰編排算法生成40組擴(kuò)展密鑰參與10輪的加密操作。

        3 全掩碼AES方案軟件實(shí)現(xiàn)

        掩碼對策要求算法運(yùn)行過程中的中間值始終處于被掩碼的狀態(tài)。對中間數(shù)據(jù)加掩碼可以采用布爾掩碼的方式。布爾掩碼即對算法中間值與掩碼進(jìn)行異或運(yùn)算。密碼算法中的線性函數(shù)使用布爾掩碼很容易實(shí)現(xiàn)。AES算法中的ShiftRows、MixClolumns與AddRoundKey均為線性操作,因此均適合使用與掩碼異或的方式來實(shí)現(xiàn)防護(hù)。SubBytes操作是8位字節(jié)輸入輸出的非線性運(yùn)算,可使用查表的方式實(shí)現(xiàn)。但是使用掩碼對查表操作進(jìn)行防護(hù)時(shí)需要構(gòu)造一個(gè)形如Sm:Sm(in⊕m)=S(in)⊕m的掩碼型的查找表,即滿足輸入字節(jié)in加掩碼m后查Sm表的值等于輸入字節(jié)查S表的值再加掩碼。這種查表的方式需要針對每一個(gè)掩碼值生成一次“Sm”,運(yùn)算性能非常低。

        另一種實(shí)現(xiàn)SubBytes運(yùn)算的方式是使用有限域分解。AES算法中的每一個(gè)8位字節(jié)均可以看作為有限域GF(28)中的元素[7],SubBytes操作在有限域上的實(shí)現(xiàn)可以看作是一個(gè)兩步的變換:對輸入GF(28)元素求乘法逆元和對逆元進(jìn)行仿射變換。

        一個(gè)GF(28)元素的求逆運(yùn)算可以分解為GF(24)元素的加法、求逆、乘法以及平方倍乘運(yùn)算。GF(24)元素的平方倍乘運(yùn)算可以分解為GF(22)元素的加法、平方和倍乘運(yùn)算。GF(22)元素的乘法分解為GF(2)元素的加法、乘法和倍乘運(yùn)算。通過這樣的變換,GF(28)元素的求逆這一非線性運(yùn)算即可被轉(zhuǎn)換為一系列的線性運(yùn)算,以此可以使用布爾掩碼完成對SubBytes運(yùn)算的防護(hù)。

        設(shè)SubBytes運(yùn)算的輸入字節(jié)A是輪加密過程中的一個(gè)中間值,掩碼為M,經(jīng)M掩碼后的A記作A。對A求乘法逆元得到A-1;仿射變換后輸出字節(jié)的掩碼為M'。根據(jù)文獻(xiàn)[8]中的有限域分解法,有:

        式中,M=M1Y16+M0Y,M1=m11X4+m10X。

        此外,被掩碼后的中間值會參與到子域中乘法等非線性運(yùn)算中,運(yùn)算后的結(jié)果將不是均勻分布的,從而使得防護(hù)失效。因此在求逆過程中需要在一些非線性運(yùn)算的結(jié)果加上獨(dú)立的掩碼。在本方案中,對GF(28)元素求逆結(jié)果的掩碼M進(jìn)行同樣的變換得到校正掩碼M'。

        整體掩碼防護(hù)方案流程如圖1所示。在C語言下AES輸入128比特的明文和初始密鑰,使用兩個(gè)unsigned char數(shù)組來存放。首先進(jìn)行密鑰編排生成子密鑰。為加快加密過程的速度,程序采用預(yù)先離線生成子密鑰的方法。定義KeyExpansion()函數(shù)實(shí)現(xiàn)密鑰的編排。44組子密鑰均為32位寬,且10輪加密中每輪使用到的4組子密鑰均由前一輪加密使用的4組密鑰派生得到,故可采用一個(gè)循環(huán)次數(shù)共10次的for循環(huán)來實(shí)現(xiàn)密鑰的派生。循環(huán)開始前定義一個(gè)有44個(gè)unsigned int變量的數(shù)組keyA來存放子密鑰,并使用掩碼mk對各組子密鑰進(jìn)行異或加掩碼。密鑰編排完成后執(zhí)行10輪加密前的初始密鑰加操作。因?yàn)榧用茌喓瘮?shù)中有字節(jié)操作,所以使用unsigned char數(shù)組作為AES狀態(tài)的數(shù)據(jù)結(jié)構(gòu)。

        圖1 系統(tǒng)總體方案

        初始密鑰加操作前先將含有16字節(jié)的狀態(tài)矩陣進(jìn)行操作,將含有16個(gè)unsigned char變量的一維明文數(shù)組和存放4組初始密鑰的一維數(shù)組分別放入二維數(shù)組state和k中,然后逐字節(jié)執(zhí)行異或操作。該異或操作被封裝在AddRoundkey()函數(shù)中,函數(shù)的參數(shù)為初始密鑰、二維數(shù)組形式的明文和初始值為0的前一操作輸出掩碼。因?yàn)橛捎诿荑€本身是帶有掩碼的,這使得異或后的狀態(tài)矩陣也處于被掩碼保護(hù)的狀態(tài)。初始密鑰加操作的輸出掩碼為mk。

        在后續(xù)10輪的輪密鑰加操作也使用AddRoundKey函數(shù)實(shí)現(xiàn),與初始密鑰加操作不同的是,第1~9輪輪密鑰加函數(shù)參數(shù)中前一操作輸出掩碼的值為列混淆輸出掩碼mc1'、mc2'、mc3'、mc4'。第10輪輪密鑰加操作后需要還原出真實(shí)的密文,由于第10輪加密不包含列混淆操作,因此將第10輪輪子密鑰掩碼與前一操作輸出掩碼異或后的之傳入函數(shù)從而消除最終加密密文的掩碼。

        初始密鑰加操作后執(zhí)行9輪的四個(gè)基本加密操作。SubBytes操作使得狀態(tài)字節(jié)的掩碼由mk變?yōu)閙k'。在C實(shí)現(xiàn)中,定義函數(shù)SubByte()來實(shí)現(xiàn)該功能。SubBytes()函數(shù)的參數(shù)為存放狀態(tài)矩陣的二維數(shù)組state、輸入掩碼mk,Q和輸出掩碼mk'。SubBytes函數(shù)內(nèi)使用for循環(huán)完成對狀態(tài)矩陣的每一個(gè)字節(jié)進(jìn)行GF(28)求逆和仿射變換的遍歷。其中GF(28)求逆過程中使用到對8位字節(jié)中1位、2位和4位的數(shù)據(jù)的運(yùn)算。故使用三種包含兩個(gè)位域成員的結(jié)構(gòu)體表示GF(28)、GF(24)、GF(22)元素。

        處理過程中涉及到GF(24)元素的求逆、異或、平方倍乘和GF(22)元素的求逆(平方)、異或、乘法、倍乘運(yùn)算。因此將這些操作封裝為7個(gè)函數(shù)供調(diào)用。各運(yùn)算流程由圖2給出。

        圖2 各算法計(jì)算流程

        在此定義函數(shù)ShiftRows()。函數(shù)的參數(shù)只有表示狀態(tài)矩陣的二維數(shù)組state。函數(shù)體內(nèi)使用一個(gè)for循環(huán)遍歷數(shù)組的每一行,并將每一行的4個(gè)unsigned char類型元素左移24、16、8、0位。將移位后的數(shù)據(jù)的進(jìn)行按位或運(yùn)算拼接,轉(zhuǎn)換為一個(gè)unsigned int類型的元素,接著對該元素進(jìn)行循環(huán)左移位,再分別右移24,16,8,0位并轉(zhuǎn)換為unsigned char類型的4個(gè)元素完成ShiftRows操作。在第1~9輪加密中,由于列混合會導(dǎo)致不同行的混合,使可能具有相同掩碼的行的防護(hù)失效,故在ShiftRows操作之后對狀態(tài)矩陣執(zhí)行重掩碼的操作。

        定義函數(shù)Remasking()。函數(shù)參數(shù)為表示狀態(tài)矩陣的二維數(shù)組state、狀態(tài)矩陣各行需要加的掩碼mc1、mc2、mc3和mc4以及SubByte操作的輸出掩碼mk'。在Remasking()函數(shù)體中使用for循環(huán)遍歷數(shù)組每一行,對各行元素分別通過異或相互獨(dú)立的掩碼mc1、mc2、mc3和mc4,再通過異或消去mk',以保證在整個(gè)過程中不出現(xiàn)未加掩碼的中間值。執(zhí)行重掩碼之后可以進(jìn)行MixCloumns操作,即對狀態(tài)矩陣左乘一個(gè)4×4常量矩陣。

        定義MixColumns()函數(shù)。函數(shù)參數(shù)為表示狀態(tài)矩陣的二維數(shù)組state、狀態(tài)矩陣各行掩碼mc1、mc2、mc3、mc4和MixColumns操作輸出掩碼mc1'、mc2'、mc3'、mc4'。函數(shù)體使用一個(gè)二維數(shù)組來表示該常量矩陣。因?yàn)榻?jīng)過MixColumns運(yùn)算的狀態(tài)矩陣與相同變換的掩碼異或后才能得出正確的運(yùn)算結(jié)果,因此,將各行掩碼mc1、mc2、mc3、mc4組成一個(gè)4×4矩陣也左乘常量矩陣得出MixColumns操作的輸出掩碼mc1'、mc2'、mc3'、mc4'。

        4 方案測試結(jié)果分析

        設(shè)計(jì)方案使用嵌入式C語言完成S盒的有限域分解和整體AES算法掩碼防護(hù)的程序設(shè)計(jì),并使用一款嵌入式開發(fā)板運(yùn)行該軟件實(shí)現(xiàn)。該嵌入式開發(fā)板具有一個(gè)32位的RISC-V架構(gòu)的處理器,并使用RISC-V交叉編譯工具鏈進(jìn)行程序的編譯運(yùn)行。AES軟件實(shí)現(xiàn)代碼采用AES-128標(biāo)準(zhǔn)文檔中提供的明文和密鑰樣例作為測試數(shù)據(jù),并根據(jù)標(biāo)準(zhǔn)文檔中提供的密文為加密結(jié)果的正確性做驗(yàn)證。

        程序運(yùn)行使用的明文、密鑰和加密后的密文如表1所示。測試給出的加密結(jié)果與AES標(biāo)準(zhǔn)文檔樣例的結(jié)果相同。

        表1 AES-128測試結(jié)果(16進(jìn)制表示)

        5 結(jié)束語

        針對能量側(cè)信道攻擊對未加防護(hù)的AES算法帶來的威脅,采用防御能量側(cè)信道攻擊的布爾掩碼作為對策。對算法中的線性操作進(jìn)行布爾掩碼防護(hù),且針對非線性運(yùn)算使用布爾掩碼過于復(fù)雜的問題,將非線性S盒運(yùn)算進(jìn)行有限域分解為線性運(yùn)算并利用掩碼保護(hù)。通過在一個(gè)嵌入式RISC-V處理器上運(yùn)行了該掩碼方案的軟件實(shí)現(xiàn),驗(yàn)證了方案的正確性與可行性。

        亚洲欧美日韩在线中文一| 开心五月激情综合婷婷色| 亚洲日本va午夜在线影院| 99re国产电影精品| 九一精品少妇一区二区三区| 人成午夜大片免费视频77777| 久久精品人人爽人人爽| 亚洲精品中文字幕观看| 中文字幕文字幕视频在线| 一本无码中文字幕在线观| 人人妻人人澡人人爽欧美二区| 精品视频专区| 国产诱惑人的视频在线观看| 国产精品免费看久久久无码| 亚洲永久精品ww47| 国产美女a做受大片免费| 国产自拍91精品视频| 久久天堂综合亚洲伊人hd妓女| 国产一级做a爱免费观看| 视频精品亚洲一区二区| 黄色av亚洲在线观看| 少妇丰满大乳被男人揉捏视频| 亚洲精品黄网在线观看| 国产精品午夜福利亚洲综合网| 日韩 无码 偷拍 中文字幕| 九月婷婷人人澡人人添人人爽| 911国产在线观看精品| 国产色av一区二区三区| 亚洲国产精品无码久久98| 午夜成人理论无码电影在线播放 | 久久日日躁夜夜躁狠狠躁| 无遮挡又爽又刺激的视频| 国产一区二区三区韩国| 99青青草视频在线观看| 免费va国产高清大片在线| 国产女人18一级毛片视频 | 日韩极品在线观看视频| 娜娜麻豆国产电影| 欧美精品久久久久久久久| 亚洲一级天堂作爱av| 欧美大屁股xxxx高潮喷水 |