一種流水線結(jié)構(gòu)的sm4算法實(shí)現(xiàn)系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及SM4算法實(shí)現(xiàn)領(lǐng)域,特別是一種流水線結(jié)構(gòu)的SM4算法實(shí)現(xiàn)系統(tǒng)。
【背景技術(shù)】
[0002] 2012年中國(guó)國(guó)家密碼管理局公布了 SM4算法標(biāo)準(zhǔn),SM4算法具有良好的速度、功耗 和安全性優(yōu)勢(shì),無(wú)論是對(duì)無(wú)限局域網(wǎng)產(chǎn)業(yè)還是對(duì)于商用密碼研究都有重要的意義。但是隨 著手持設(shè)備、智能卡的普及和信息的快速傳播對(duì)SM4算法硬件電路的運(yùn)算速度、功耗提出 了更高的要求,另外,差分功耗分析技術(shù)對(duì)密碼電路具有實(shí)施簡(jiǎn)單攻擊成功率高的特點(diǎn),因 此對(duì)SM4算法硬件電路的安全性也提出了更高的要求。
[0003] SM4算法的輪函數(shù)運(yùn)算電路實(shí)現(xiàn),包括輸入數(shù)據(jù)異或運(yùn)算、S盒非線性置換運(yùn)算、 線性變換運(yùn)算操作以及輸出數(shù)據(jù)異或運(yùn)算,其中,S盒非線性置換運(yùn)算電路的在整個(gè)算法電 路的功耗、速度與安全性方面起著關(guān)鍵性的作用。傳統(tǒng)的S盒置換運(yùn)算電路實(shí)現(xiàn)方法有查 表法和復(fù)合域方法,查表法邏輯簡(jiǎn)單容易實(shí)現(xiàn)且具有較高的運(yùn)算速度,但是因?yàn)槠鋵?shí)現(xiàn)需 要較大硬件資源消耗不利于整體算法電路的流水線實(shí)現(xiàn);復(fù)合域方法具有很小的硬件資源 消耗,利于算法電路的流水線實(shí)現(xiàn)以及抗差分功耗分析攻擊,但是其電路的延時(shí)和功耗較 大,同樣不利于算法電路在應(yīng)用于手持設(shè)備的智能卡或嵌入式系統(tǒng)中的使用。另外,為了提 高算法電路的抗差分功耗分析攻擊能力,固定掩碼和乘法掩碼成為常見(jiàn)的防御手段,但是 固定掩碼方法需要存儲(chǔ)大量的掩碼數(shù)據(jù)以及算法電路運(yùn)算修正項(xiàng),而且該方法已經(jīng)開(kāi)始被 新的攻擊手段攻破,乘法掩碼可以抵抗差分功耗分析攻擊,但是并不能抵抗零值攻擊。
[0004] SM4算法電路的整體結(jié)構(gòu)實(shí)現(xiàn),由于SM4分組密碼為電子密碼本(ECB)工作模式, 因此SM4算法電路多利用單輪迭代結(jié)構(gòu)或輪級(jí)流水線結(jié)構(gòu)實(shí)現(xiàn)。當(dāng)采用單輪迭代結(jié)構(gòu)時(shí), 其算法電路只需要較小的硬件資源消耗,但是對(duì)應(yīng)的數(shù)據(jù)處理速度較慢,不能滿足現(xiàn)在數(shù) 據(jù)的高速傳輸。當(dāng)采用輪級(jí)流水線結(jié)構(gòu)時(shí),其電路可以具有較高的數(shù)據(jù)處理速度,但是相應(yīng) 的硬件資源消耗較大。
[0005] 為了更好地滿足現(xiàn)有嵌入式系統(tǒng)或智能卡的發(fā)展,提高SM4算法電路在運(yùn)算速 度、功耗和安全性方面的性能,從SM4算法的輪函數(shù)部分和整體架構(gòu)部分兩個(gè)方面提出一 種新型的的SM4算法電路成為迫在眉睫的任務(wù)。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明解決的技術(shù)問(wèn)題是:克服現(xiàn)有技術(shù)的不足,提供了一種功耗低、抗差分功耗 分析攻擊、運(yùn)算速度快且實(shí)現(xiàn)面積小的流水線結(jié)構(gòu)的SM4算法實(shí)現(xiàn)結(jié)構(gòu)。
[0007] 本發(fā)明的技術(shù)解決方案是:一種流水線結(jié)構(gòu)的SM4算法實(shí)現(xiàn)系統(tǒng),包括控制模塊、 輸入緩沖模塊、內(nèi)部四級(jí)流水輪函數(shù)模塊、常數(shù)生成運(yùn)算模塊、存儲(chǔ)模塊、輸出緩沖模塊,其 中
[0008] 控制模塊,監(jiān)測(cè)并接收外界發(fā)送的使能信號(hào),當(dāng)接收到使能信號(hào)時(shí)獲取并解析模 式控制信號(hào),
[0009] 如果是加密運(yùn)算模式控制信號(hào),則控制輸入緩沖模塊接收外部輸入的128位原始 明文數(shù)據(jù)及32位隨機(jī)掩碼數(shù)據(jù),控制內(nèi)部四級(jí)流水輪函數(shù)模塊從存儲(chǔ)模塊讀取第i次加密 輪函數(shù)運(yùn)算所需的輪函數(shù)子密鑰數(shù)據(jù),其中,i = 1,2, 3…32且初值為1 ;
[0010] 如果是解密運(yùn)算模式控制信號(hào),則控制輸入緩沖模塊接收外部輸入的128位原始 密文數(shù)據(jù)及32位隨機(jī)掩碼數(shù)據(jù),控制內(nèi)部四級(jí)流水輪函數(shù)模塊從存儲(chǔ)模塊讀取第j次解密 輪函數(shù)運(yùn)算所需的輪函數(shù)子密鑰數(shù)據(jù),其中,j = 1,2,3…32且初值為1 ;
[0011] 如果是密鑰擴(kuò)展運(yùn)算模式控制信號(hào),則控制輸入緩沖模塊接收外部輸入的128位 原始密鑰及32位隨機(jī)掩碼數(shù)據(jù),使能常數(shù)生成模塊在外部基準(zhǔn)系統(tǒng)時(shí)鐘Clk控制下每四個(gè) 周期將常數(shù)生成模塊生成的32位常數(shù)子密鑰數(shù)據(jù)送至內(nèi)部四級(jí)流水輪函數(shù)模塊;
[0012] 輸入緩沖模塊,在控制模塊的控制下,采用32位數(shù)據(jù)總線輸入方式接收外部輸入 的128位原始密鑰及32位隨機(jī)掩碼數(shù)據(jù)并送至內(nèi)部四級(jí)流水輪函數(shù)模塊;
[0013] 在控制模塊的控制下,采用32位數(shù)據(jù)總線輸入方式接受外部輸入128位原始明文 數(shù)據(jù)以及32位隨機(jī)掩碼數(shù)據(jù)并送至內(nèi)部四級(jí)流水輪函數(shù)模塊;
[0014] 在控制模塊的控制下,采用32位數(shù)據(jù)總線輸入方式接受外部輸入128位原始密文 數(shù)據(jù)以及32位隨機(jī)掩碼數(shù)據(jù)并送至內(nèi)部四級(jí)流水輪函數(shù)模塊;
[0015] 內(nèi)部四級(jí)流水輪函數(shù)模塊,接收輸入緩沖模塊發(fā)送的128位原始密鑰及32位隨機(jī) 掩碼數(shù)據(jù)、常數(shù)生成模塊發(fā)送的一組32位常數(shù)后,取128位原始密鑰中的高96位依次分為 三組32位數(shù)據(jù),該三組32位數(shù)據(jù)與32位隨機(jī)掩碼數(shù)據(jù)、32位常數(shù)共五組數(shù)據(jù)進(jìn)行異或運(yùn) 算得到32位的第一密鑰擴(kuò)展運(yùn)算中間數(shù)據(jù),將第一密鑰擴(kuò)展運(yùn)算中間數(shù)據(jù)依次分為四組8 位數(shù)據(jù)并分別送至四個(gè)8輸入8輸出非線性S盒得到32位的第二密鑰擴(kuò)展運(yùn)算中間數(shù)據(jù), 然后將第二密鑰擴(kuò)展運(yùn)算中間數(shù)據(jù)進(jìn)行線性變換后與128位原始密鑰中的低32位、32位隨 機(jī)掩碼數(shù)據(jù)共三組數(shù)據(jù)進(jìn)行異或運(yùn)算,完成一次輪函數(shù)運(yùn)算并得到一個(gè)32位的輪函數(shù)子 密鑰數(shù)據(jù),所述的輪函數(shù)運(yùn)算共進(jìn)行32次,得到32個(gè)輪函數(shù)子密鑰數(shù)據(jù)并送至存儲(chǔ)模塊存 儲(chǔ);
[0016] 接收輸入緩沖模塊發(fā)送的128位的原始明文數(shù)據(jù)及32位隨機(jī)掩碼數(shù)據(jù),從存儲(chǔ)模 塊選擇并讀取地址為i的輪函數(shù)子密鑰數(shù)據(jù),將128位原始明文數(shù)據(jù)中的高96位依次分為 三組32位數(shù)據(jù)后,該三組32位數(shù)據(jù)與32位隨機(jī)掩碼數(shù)據(jù)、32位的輪函數(shù)子密鑰數(shù)據(jù)共五 組數(shù)據(jù)進(jìn)行異或運(yùn)算得到32位的第一加密運(yùn)算中間數(shù)據(jù),將第一加密運(yùn)算中間數(shù)據(jù)分為 四組8位數(shù)據(jù)并分別送至四個(gè)8輸入8輸出非線性S盒得到32位的第二加密運(yùn)算中間數(shù) 據(jù),然后將該第二加密運(yùn)算中間數(shù)據(jù)進(jìn)行線性變換后與128位原始明文數(shù)據(jù)中的低32位、 32位隨機(jī)掩碼數(shù)據(jù)共三組數(shù)據(jù)進(jìn)行異或運(yùn)算,得到32位的第三加密運(yùn)算中間數(shù)據(jù),將該第 三加密運(yùn)算中間數(shù)據(jù)作為高32位與原始明文數(shù)據(jù)的高96位合并生成128位的輪函數(shù)加密 結(jié)果數(shù)據(jù),作為第i+Ι次加密輪函數(shù)運(yùn)算的128位的原始明文數(shù)據(jù),完成第i次加密輪函數(shù) 運(yùn)算,i = i+Ι,重復(fù)上述加密輪函數(shù)運(yùn)算直至i = 32,將第32次輪函數(shù)運(yùn)算得到的128位 結(jié)果數(shù)據(jù)進(jìn)行高低位變換后作為加密結(jié)果數(shù)據(jù)并送至輸出緩沖模塊;
[0017] 接收輸入緩沖模塊發(fā)送的128位的原始密文數(shù)據(jù)及32位隨機(jī)掩碼數(shù)據(jù),從存儲(chǔ)模 塊選擇并讀取地址為33-j的輪函數(shù)子密鑰數(shù)據(jù),將128位原始明文數(shù)據(jù)中的高96位依次 分為三組32位數(shù)據(jù),該三組32位數(shù)據(jù)與32位隨機(jī)掩碼數(shù)據(jù)、32位輪函數(shù)子密鑰數(shù)據(jù)共五 組數(shù)據(jù)進(jìn)行異或運(yùn)算得到32位的第一解密運(yùn)算中間數(shù)據(jù),將第一解密運(yùn)算中間數(shù)據(jù)分為 四組8位數(shù)據(jù)并分別送至四個(gè)8輸入8輸出非線性S盒得到32位的第二解密運(yùn)算中間數(shù) 據(jù),然后將第二解密運(yùn)算中間數(shù)據(jù)進(jìn)行線性變換后與128位原始密文數(shù)據(jù)中的低32位、32 位隨機(jī)掩碼數(shù)據(jù)共三組數(shù)據(jù)進(jìn)行異或運(yùn)算,得到一個(gè)32位的第三解密運(yùn)算中間數(shù)據(jù),將第 三解密運(yùn)算中間數(shù)據(jù)作為高32位與原始密文數(shù)據(jù)的高96位合并生成128位的輪函數(shù)解密 結(jié)果數(shù)據(jù),作為第j+Ι次加密輪函數(shù)運(yùn)算的128位的原始密文數(shù)據(jù),完成第j次解密輪函數(shù) 運(yùn)算,j = j+Ι,重復(fù)上述解密輪函數(shù)運(yùn)算直至j = 32,將第32次輪函數(shù)運(yùn)算得到的128位 結(jié)果數(shù)據(jù)進(jìn)行高低位變換后作為解密結(jié)果數(shù)據(jù)并送至輸出緩沖模塊;
[0018] 存儲(chǔ)模塊,接收內(nèi)部四級(jí)流水輪函數(shù)模塊發(fā)送的32個(gè)輪函數(shù)子密鑰數(shù)據(jù),并以各 個(gè)輪函