本發(fā)明涉及密碼算法硬件實現(xiàn)
技術(shù)領(lǐng)域:
,特別是涉及一種SM4算法的掩碼方法及裝置。
背景技術(shù):
:SM4算法是國家商用密碼管理辦公室公布的分組密碼算法,是目前應(yīng)用最廣泛的中國自主設(shè)計的分組密碼算法,該算法目前在智能卡和USBKey中逐步得到應(yīng)用,并且考慮到運算效率的問題,基本通過硬件實現(xiàn)的方式。在智能卡、USBKey等應(yīng)用中,加密算法不僅要保證協(xié)議和數(shù)學(xué)算法的安全性,更重要的是保證實際使用中加密電路運行時的功耗或者電磁信息不會被旁路分析方法利用,造成安全威脅。對于SM4算法來說,能量攻擊可以通過輪運算中間值的相關(guān)性獲取密鑰,因此需要使用能夠抵抗能量攻擊的硬件設(shè)計方法。掩碼技術(shù)是當(dāng)前常用的抵抗能量攻擊的方法之一。通過在明文或密鑰上增加隨機(jī)的掩碼,使得加密算法的中間值是不可預(yù)知的,從而達(dá)到抗能量攻擊的目的?,F(xiàn)有的針對SM4算法的掩碼方法,通常是通過每輪引入隨機(jī)掩碼,使易受攻擊的輪運算中間結(jié)果所帶的掩碼值不同,從而有效抵抗能量攻擊。具體地,在引入下一輪的隨機(jī)掩碼前,需要使用前一輪的掩碼對該前一輪輸出的結(jié)果先進(jìn)行脫掩,而后才能使用該下一輪引入的隨機(jī)掩碼對脫掩后的結(jié)果進(jìn)行加掩。由于脫掩會出現(xiàn)真實的中間值信息,因此容易導(dǎo)致能量的泄露,不能抵抗能量攻擊。技術(shù)實現(xiàn)要素:為解決上述技術(shù)問題,本發(fā)明實施例提供了一種SM4算法的掩碼方法及裝置,用于解決每輪引入隨機(jī)掩碼的掩碼方法中出現(xiàn)真實中間值信息導(dǎo)致的能量的泄露的問題,技術(shù)方案如下:一種SM4算法的掩碼方法,包括:獲取輸入的帶掩碼的明文、隨機(jī)掩碼、輪密鑰;對所述帶掩碼的明文、所述隨機(jī)掩碼以及所述輪密鑰中的第一輪密鑰進(jìn)行輪函數(shù)的第一輪運算,獲得第一輪密文和第一輪掩碼;對所述第一輪密文、所述第一輪掩碼以及所述輪密鑰中的第二輪密鑰進(jìn)行所述輪函數(shù)的第二輪運算,獲得第二輪密文和第二輪掩碼,依此實現(xiàn)所述輪函數(shù)的N輪運算,N為大于1的正整數(shù);將所述第N輪運算輸出的第N輪密文與第N輪掩碼進(jìn)行異或運算,將運算結(jié)果作為所述SM4算法的輸出??蛇x地,對所述帶掩碼的明文、所述隨機(jī)掩碼以及所述輪密鑰中的第一輪密鑰進(jìn)行輪函數(shù)的第一輪運算,包括:按照比特由高到低的順序,將組成所述帶掩碼的明文的比特劃分成M組,以得到M組帶掩碼的子明文,所述M組帶掩碼的子明文的比特數(shù)相同;按照比特由高到低的順序,將組成所述隨機(jī)掩碼的比特劃分成M組,以得到M組子隨機(jī)掩碼,所述M組子隨機(jī)掩碼的比特數(shù)相同;對后M-1組子明文、所述第一輪密鑰進(jìn)行所述帶掩碼的明文的第一輪運算中的合成置換運算,所述后M-1組子明文為所述M組帶掩碼的子明文在所述帶掩碼的明文中比特位低的M-1組子明文;對后M-1組子隨機(jī)掩碼進(jìn)行所述隨機(jī)掩碼的第一輪運算中的合成置換運算,所述后M-1組子隨機(jī)掩碼為所述M組子隨機(jī)掩碼在所述隨機(jī)掩碼中比特位低的M-1組子隨機(jī)掩碼;將所述帶掩碼的明文的合成置換運算的結(jié)果與除所述后M-1組子明文之外的子明文取異或運算,將異或運算的結(jié)果作為所述第一輪密文,將所述隨機(jī)掩碼的合成置換運算的結(jié)果與除所述后M-1組子隨機(jī)掩碼之外的子隨機(jī)掩碼取異或運算,將異或運算的結(jié)果作為所述第一輪掩碼??蛇x地,所述合成置換運算包括非線性變換,所述非線性變換通過帶掩碼的S盒實現(xiàn);所述帶掩碼的S盒的運算,包括:接收第一輪密文的中間值和第一輪掩碼的中間值,所述第一輪密文的中間值為所述后M-1組子明文與所述第一輪密鑰取異或運算的結(jié)果,所述第一輪掩碼中間值為所述后M-1組子隨機(jī)掩碼取異或運算的結(jié)果;對所述第一輪密文的中間值和所述第一輪掩碼的中間值進(jìn)行仿射變換和求逆運算,并將所述仿射變換和求逆運算后的結(jié)果作為所述S盒的輸出。可選地,對所述第一輪密文的中間值和所述第一輪掩碼的中間值進(jìn)行仿射變換矩陣和求逆運算,包括:利用第一仿射變換矩陣,分別對所述第一輪密文的中間值和所述第一輪掩碼的中間值,進(jìn)行有限域GF(28)上的第一次仿射變換運算,得到帶掩碼的S盒輸出和掩碼輸出;對所述帶掩碼的S盒輸出和所述掩碼輸出,分別進(jìn)行復(fù)合域GF(((22)2)2)上的取逆運算,得到帶掩碼的取逆輸出和掩碼取逆輸出;利用第二仿射變換矩陣,分別對所述帶掩碼的取逆輸出和所述掩碼取逆輸出,進(jìn)行有限域GF(28)上的第二次仿射變換運算,并將所述第二次仿射變換運算的結(jié)果作為所述S盒的輸出??蛇x地,對所述帶掩碼的S盒輸出和所述掩碼輸出分別進(jìn)行復(fù)合域GF(((22)2)2)上的取逆運算,包括:使用第一正規(guī)基,分別將所述帶掩碼的S盒輸出和所述掩碼輸出,表示為有限域GF(24)中的一次線性多項式,所述第一正規(guī)基中的元素為常量屬于有限域GF(24)的二次不可約多項式的根,所述有限域GF(24)中的一次線性多項式的系數(shù)屬于有限域GF(24);依據(jù)所述帶掩碼的S盒輸出、在有限域GF(24)中的一次線性多項式及所述掩碼輸出在有限域GF(24)中的一次線性多項式,將所述帶掩碼的S盒輸出與所述掩碼輸出的和的取逆,用有限域GF(24)中的元素與第一參數(shù)表示,所述第一參數(shù)用于對所述有限域GF(24)中的元素取逆;將用有限域GF(24)中的元素與第一參數(shù)表示的所述和的取逆,用第一輸出和第二輸出表示,所述第一輸出和所述第二輸出為第一函數(shù)的因變量,所述第一函數(shù)的自變量為將所述第一參數(shù)分解成的第一子參數(shù)和第二子參數(shù),對所述第一子參數(shù)和第二子參數(shù)的和的取逆運算的結(jié)果為所述第一輸出和第二輸出之和;將用所述第一輸出和所述第二輸出表示的所述和的取逆,分解成第一部分和第二部分,并將第一部分作為所述帶掩碼的取逆輸出,將第二部分作為所述掩碼取逆輸出;使用第二正規(guī)基,將所述第一子參數(shù)和所述第二子參數(shù),分別表示為有限域GF(22)中的一次線性多項式,所述第二正規(guī)基中的元素為常量屬于有限域GF(22)的二次不可約多項式的根,所述有限域GF(22)中的一次線性多項式的系數(shù)屬于有限域GF(24);依據(jù)所述第一子參數(shù)和所述第二子參數(shù)在有限域GF(22)中的一次線性多項式,將對所述第一參數(shù)的取逆用有限域GF(22)中的元素與第二參數(shù)表示,所述第二參數(shù)用于對所述有限域GF(22)中的元素取逆;將用有限域GF(22)中的元素與第二參數(shù)表示的第一參數(shù)的取逆,用第三輸出和第四輸出表示,所述第三輸出和所述第四輸出為第二函數(shù)的因變,所述第二函數(shù)的自變量為將所述第二參數(shù)分解成的第三子參數(shù)和第四子參數(shù),對所述第三子參數(shù)和第四子參數(shù)的和的取逆運算的結(jié)果,為所述第三輸出和第四輸出之和;將用所述第三輸出和所述第四輸出表示的第一參數(shù)的取逆,分解成第三部分和第四部分,并將第三部分作為對所述第一輸出,將第四部分作為所述第二輸出;使用第三正規(guī)基,將所述第三子參數(shù)和所述第四子參數(shù)分別表示為有限域GF(2)中的一次線性多項式,所述第三正規(guī)基中的元素為常量屬于有限域GF(2)的二次不可約多項式的根,所述有限域GF(2)中的一次線性多項式的系數(shù)屬于有限域GF(2);依據(jù)所述第三子參數(shù)和所述第四子參數(shù)在有限域GF(2)中的一次線性多項式,將對所述第二參數(shù)的取逆用有限域GF(2)中的元素表示,并最終得到對所述第二參數(shù)取逆的結(jié)果為,第三子參數(shù)的負(fù)一次與所述第四子參數(shù)的負(fù)一次的和;取所述第三輸出為所述第三子參數(shù)的負(fù)一次,所述第四輸出為所述第四子參數(shù)的負(fù)一次;根據(jù)為所述第三子參數(shù)的負(fù)一次的第三輸出及為所述第四子參數(shù)的負(fù)一次的第四輸出,計算所述第三部分和第四部分,以得到所述第一輸出和所述第二輸出;根據(jù)計算得到的第一輸出和第二輸出,計算所述第一部分和第二部分,并將計算得到第一部分作為所述帶掩碼的取逆輸出,將計算得到的第二部分作為所述掩碼取逆輸出。一種SM4算法的掩碼裝置,包括:獲取模塊,用于獲取輸入的帶掩碼的明文、隨機(jī)掩碼、輪密鑰;第一輪運算模塊,用于對所述帶掩碼的明文、所述隨機(jī)掩碼以及所述輪密鑰中的第一輪密鑰進(jìn)行輪函數(shù)的第一輪運算,獲得第一輪密文和第一輪掩碼;第二輪運算模塊,用于對所述第一輪密文、所述第一輪掩碼以及所述輪密鑰中的第二輪密鑰進(jìn)行所述輪函數(shù)的第二輪運算,獲得第二輪密文和第二輪掩碼,依此實現(xiàn)所述輪函數(shù)的N輪運算,N為大于1的正整數(shù);第一輸出模塊,用于將所述第N輪運算輸出的第N輪密文與第N輪掩碼進(jìn)行異或運算,將運算結(jié)果作為所述SM4算法的輸出??蛇x地,所述第一輪運算模塊,包括:第一劃分模塊,用于按照比特由高到低的順序,將組成所述帶掩碼的明文的比特劃分成M組,以得到M組帶掩碼的子明文,所述M組帶掩碼的子明文的比特數(shù)相同;按照比特由高到低的順序,將組成所述隨機(jī)掩碼的比特劃分成M組,以得到M組子隨機(jī)掩碼,所述M組子隨機(jī)掩碼的比特數(shù)相同;第二劃分模塊,用于對后M-1組子明文、所述第一輪密鑰進(jìn)行所述帶掩碼的明文的第一輪運算中的合成置換運算,所述后M-1組子明文為所述M組帶掩碼的子明文在所述帶掩碼的明文中比特位低的M-1組子明文;合成置換運算模塊,用于對后M-1組子隨機(jī)掩碼進(jìn)行所述隨機(jī)掩碼的第一輪運算中的合成置換運算,所述后M-1組子隨機(jī)掩碼為所述M組子隨機(jī)掩碼在所述隨機(jī)掩碼中比特位低的M-1組子隨機(jī)掩碼;異或運算模塊,用于將所述帶掩碼的明文的合成置換運算的結(jié)果與除所述后M-1組子明文之外的子明文取異或運算,將異或運算的結(jié)果作為所述第一輪密文,將所述隨機(jī)掩碼的合成置換運算的結(jié)果與除所述后M-1組子隨機(jī)掩碼之外的子隨機(jī)掩碼取異或運算,將異或運算的結(jié)果作為所述第一輪掩碼??蛇x地,所述合成置換運算包括非線性變換,所述非線性變換通過S盒的運算模塊實現(xiàn);所述S盒的運算模塊,包括:接收模塊,用于接收第一輪密文的中間值和第一輪掩碼的中間值,所述第一輪密文的中間值為所述后M-1組子明文與所述第一輪密鑰取異或運算的結(jié)果,所述第一輪掩碼中間值為所述后M-1組子隨機(jī)掩碼取異或運算的結(jié)果;第二輸出模塊,用于對所述第一輪密文的中間值和所述第一輪掩碼的中間值進(jìn)行仿射變換和求逆運算,并將所述仿射變換和求逆運算后的結(jié)果作為所述S盒的輸出??蛇x地,所述第二輸出模塊,包括:第一仿射變換模塊,用于利用第一仿射變換矩陣,分別對所述第一輪密文的中間值和所述第一輪掩碼的中間值,進(jìn)行有限域GF(28)上的第一次仿射變換運算,得到帶掩碼的S盒輸出和掩碼輸出;取逆模塊,用于對所述帶掩碼的S盒輸出和所述掩碼輸出,分別進(jìn)行復(fù)合域GF(((22)2)2)上的取逆運算,得到帶掩碼的取逆輸出和掩碼取逆輸出;第二仿射變換模塊,用于利用第二仿射變換矩陣,分別對所述帶掩碼的取逆輸出和所述掩碼取逆輸出,進(jìn)行有限域GF(28)上的第二次仿射變換運算,并將所述第二次仿射變換運算的結(jié)果作為所述S盒的輸出??蛇x地,所述取逆模塊,包括:第一表示模塊,用于使用第一正規(guī)基,分別將所述帶掩碼的S盒輸出和所述掩碼輸出,表示為有限域GF(24)中的一次線性多項式,所述第一正規(guī)基中的元素為常量屬于有限域GF(24)的二次不可約多項式的根,所述有限域GF(24)中的一次線性多項式的系數(shù)屬于有限域GF(24);第二表示模塊,用于依據(jù)所述帶掩碼的S盒輸出、在有限域GF(24)中的一次線性多項式及所述掩碼輸出在有限域GF(24)中的一次線性多項式,將所述帶掩碼的S盒輸出與所述掩碼輸出的和的取逆,用有限域GF(24)中的元素與第一參數(shù)表示,所述第一參數(shù)用于對所述有限域GF(24)中的元素取逆;第三表示模塊,用于將用有限域GF(24)中的元素與第一參數(shù)表示的所述和的取逆,用第一輸出和第二輸出表示,所述第一輸出和所述第二輸出為第一函數(shù)的因變量,所述第一函數(shù)的自變量為將所述第一參數(shù)分解成的第一子參數(shù)和第二子參數(shù),對所述第一子參數(shù)和第二子參數(shù)的和的取逆運算的結(jié)果為所述第一輸出和第二輸出之和;第一分解模塊,用于將用所述第一輸出和所述第二輸出表示的所述和的取逆,分解成第一部分和第二部分,并將第一部分作為所述帶掩碼的取逆輸出,將第二部分作為所述掩碼取逆輸出;第四表示模塊,用于使用第二正規(guī)基,將所述第一子參數(shù)和所述第二子參數(shù),分別表示為有限域GF(22)中的一次線性多項式,所述第二正規(guī)基中的元素為常量屬于有限域GF(22)的二次不可約多項式的根,所述有限域GF(22)中的一次線性多項式的系數(shù)屬于有限域GF(24);第五表示模塊,用于依據(jù)所述第一子參數(shù)和所述第二子參數(shù)在有限域GF(22)中的一次線性多項式,將對所述第一參數(shù)的取逆用有限域GF(22)中的元素與第二參數(shù)表示,所述第二參數(shù)用于對所述有限域GF(22)中的元素取逆;第六表示模塊,用于將用有限域GF(22)中的元素與第二參數(shù)表示的第一參數(shù)的取逆,用第三輸出和第四輸出表示,所述第三輸出和所述第四輸出為第二函數(shù)的因變,所述第二函數(shù)的自變量為將所述第二參數(shù)分解成的第三子參數(shù)和第四子參數(shù),對所述第三子參數(shù)和第四子參數(shù)的和的取逆運算的結(jié)果,為所述第三輸出和第四輸出之和;第二分解模塊,用于將用所述第三輸出和所述第四輸出表示的第一參數(shù)的取逆,分解成第三部分和第四部分,并將第三部分作為對所述第一輸出,將第四部分作為所述第二輸出;第七表示模塊,用于使用第三正規(guī)基,將所述第三子參數(shù)和所述第四子參數(shù)分別表示為有限域GF(2)中的一次線性多項式,所述第三正規(guī)基中的元素為常量屬于有限域GF(2)的二次不可約多項式的根,所述有限域GF(2)中的一次線性多項式的系數(shù)屬于有限域GF(2);第八表示模塊,用于依據(jù)所述第三子參數(shù)和所述第四子參數(shù)在有限域GF(2)中的一次線性多項式,將對所述第二參數(shù)的取逆用有限域GF(2)中的元素表示,并最終得到對所述第二參數(shù)取逆的結(jié)果為,第三子參數(shù)的負(fù)一次與所述第四子參數(shù)的負(fù)一次的和;確定模塊,用于取所述第三輸出為所述第三子參數(shù)的負(fù)一次,所述第四輸出為所述第四子參數(shù)的負(fù)一次;第一計算模塊,用于根據(jù)為所述第三子參數(shù)的負(fù)一次的第三輸出及為所述第四子參數(shù)的負(fù)一次的第四輸出,計算所述第三部分和第四部分,以得到所述第一輸出和所述第二輸出;第二計算模塊,根據(jù)計算得到的第一輸出和第二輸出,計算所述第一部分和第二部分,并將計算得到第一部分作為所述帶掩碼的取逆輸出,將計算得到的第二部分作為所述掩碼取逆輸出。本發(fā)明實施例所提供的技術(shù)方案,在輪函數(shù)的N輪運算中,除第一輪運算外,每一輪運算所需的掩碼均通過與該輪運算相鄰的上一輪運算的輸出得到,即,除第一輪運算外的每一輪運算無需引入新的隨機(jī)掩碼,因此,采用本申請的方案無需對N輪運算的中間值進(jìn)行脫掩,從而實現(xiàn)了對能量攻擊的抵抗。進(jìn)一步地,由于僅在第一輪運算時需要輸入隨機(jī)掩碼,后續(xù)每一輪運算所需的掩碼均可以通過與該輪運算相鄰的上一輪運算的輸出得到,因此,本申請的技術(shù)方案所需要的隨機(jī)掩碼少。附圖說明為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例所提供的一種SM4算法的掩碼方法一種流程示意圖;圖2為本發(fā)明實施例所提供的一種SM4算法的掩碼方法的另一種流程示意圖;圖3為本發(fā)明實施例所提供的對第一輪密文的中間值和第一輪掩碼的中間值進(jìn)行仿射變換矩陣和求逆運算的一種流程示意圖;圖4為本發(fā)明實施例所提供的對帶掩碼的S盒輸出和掩碼輸出分別進(jìn)行復(fù)合域GF(((22)2)2)上的取逆運算的一種流程示意圖;圖5為當(dāng)M取4時實現(xiàn)SM4算法的掩碼的方法的原理圖;圖6為本發(fā)明實施例所提供的一種SM4算法的掩碼的裝置的一種結(jié)構(gòu)示意圖;圖7為本發(fā)明實施例所提供的一種SM4算法的掩碼的裝置的另一種結(jié)構(gòu)示意圖;圖8為本發(fā)明實施例所提供的第二輸出模塊的一種結(jié)構(gòu)示意圖;圖9為本發(fā)明實施例所提供的取逆模塊的一種結(jié)構(gòu)示意圖。具體實施方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。本申請發(fā)明人,在對現(xiàn)有技術(shù)中提供的SM4算法的掩碼方法的研究過程中發(fā)現(xiàn),由于每輪運算都需要輸入隨機(jī)掩碼,并且每輪引入的隨機(jī)掩碼不能保證完全相同,因此在引入下一輪的隨機(jī)掩碼前,需要使用前一輪的掩碼先進(jìn)行脫掩,而脫掩會出現(xiàn)真實的中間值信息,因此容易導(dǎo)致能量的泄露,不能抵抗能量攻擊。本申請的方案,在輪函數(shù)的N輪運算中,除第一輪運算外,每一輪運算所需的掩碼均通過與該輪運算相鄰的上一輪運算的輸出得到,因此,采用本申請的方案無需對N輪運算的中間值進(jìn)行脫掩,從而實現(xiàn)了對能量攻擊的抵抗。請參閱圖1,圖1為本申請實施例提供的SM4算法的掩碼方法的一種實現(xiàn)流程圖,該方法包括:步驟S101、獲取輸入的帶掩碼的明文、隨機(jī)掩碼、輪密鑰。所述帶掩碼的明文通過將輸入的明文與所述隨機(jī)掩碼進(jìn)行異或運算得到,具體地,在獲取輸入的帶掩碼的明文、隨機(jī)掩碼、輪密鑰之前,還包括:將輸入的明文與所述隨機(jī)掩碼取異或運算,得到所述帶掩碼的明文。其中,輸入的明文可以為128比特,輸入的隨機(jī)掩碼可以為32-128比特。步驟S102、對所述帶掩碼的明文、所述隨機(jī)掩碼以及所述輪密鑰中的第一輪密鑰進(jìn)行輪函數(shù)的第一輪運算,獲得第一輪密文和第一輪掩碼。步驟S103、對所述第一輪密文、所述第一輪掩碼以及所述輪密鑰中的第二輪密鑰進(jìn)行所述輪函數(shù)的第二輪運算,獲得第二輪密文和第二輪掩碼,依此實現(xiàn)所述輪函數(shù)的N輪運算,N為大于1的正整數(shù)。在實際運算中,N可以為32,當(dāng)然不限于此。步驟S104、將所述第N輪運算輸出的第N輪密文與第N輪掩碼進(jìn)行異或運算,將運算結(jié)果作為所述SM4算法的輸出。本發(fā)明實施例所提供的技術(shù)方案,在輪函數(shù)的N輪運算中,除第一輪運算外,每一輪運算所需的掩碼均通過與該輪運算相鄰的上一輪運算的輸出得到,即,除第一輪運算外的每一輪運算無需引入新的隨機(jī)掩碼,因此,采用本申請的方案無需對N輪運算的中間值進(jìn)行脫掩,從而實現(xiàn)了對能量攻擊的抵抗。進(jìn)一步地,由于僅在第一輪運算時需要輸入隨機(jī)掩碼,后續(xù)每一輪運算所需的掩碼均可以通過與該輪運算相鄰的上一輪運算的輸出得到,因此,本申請的技術(shù)方案所需要的隨機(jī)掩碼少。請參閱圖2,圖2為本申請實施例提供的SM4算法的掩碼方法的另一種實現(xiàn)流程圖,該方法包括:步驟S201、獲取輸入的帶掩碼的明文、隨機(jī)掩碼、輪密鑰。步驟S202、按照比特由高到低的順序,將組成所述帶掩碼的明文的比特劃分成M組,以得到M組帶掩碼的子明文,所述M組帶掩碼的子明文的比特數(shù)相同。本實施例中,M為大于1的正整數(shù)。在實際應(yīng)用中,帶掩碼的明文的比特可以為128比特,M為可以為4,從而,本步驟S202可以表述為,按照比特由高到低的順序,將帶掩碼的明文的128比特劃分成4組32比特的子明文,如劃分后的子明文可以表示為X′i、X′i+1、X′i+2、X′i+3,X′i中的比特在帶掩碼的明文中的比特位>X′i+1中的比特在帶掩碼的明文中的比特位>X′i+2中的比特在帶掩碼的明文中的比特位>X′i+3中的比特在帶掩碼的明文中的比特位。步驟S203、按照比特由高到低的順序,將組成所述隨機(jī)掩碼的比特劃分成M組,以得到M組子隨機(jī)掩碼,所述M組子隨機(jī)掩碼的比特數(shù)相同。本實施例中,M為大于1的正整數(shù)。在實際應(yīng)用中,隨機(jī)掩碼的比特可以為32~128比特,M為可以為4,從而,本步驟S203可以表述為,按照比特由高到低的順序,將隨機(jī)掩碼的比特劃分成4組子隨機(jī)掩碼,如劃分后的子隨機(jī)掩碼可以表示為Mi、Mi+1、Mi+2、Mi+3,Mi中的比特在帶掩碼的明文中的比特位>Mi+1中的比特在帶掩碼的明文中的比特位>Mi+2中的比特在帶掩碼的明文中的比特位>Mi+3中的比特在帶掩碼的明文中的比特位。需要說明的是,本實施例并不限定步驟S202、步驟S203的執(zhí)行順序,即可以先執(zhí)行步驟S202后執(zhí)行步驟S203,也可以先執(zhí)行步驟S203,后執(zhí)行步驟S202。步驟S204、對后M-1組子明文、所述第一輪密鑰進(jìn)行所述帶掩碼的明文的第一輪運算中的合成置換運算。其中,所述后M-1組子明文為所述M組帶掩碼的子明文在所述帶掩碼的明文中比特位低的M-1組子明文。以M為4舉例說明步驟S204,當(dāng)M為4時,實現(xiàn)該步驟的公式為:T'(X'i+1,X'i+2,X'i+3,rki);其中,T'為合成置換運算,X'i+1,X'i+2,X'i+3為后三組子明文,rki為第一輪輪密鑰,i表示輪運算的輪數(shù)。步驟S205、對后M-1組子隨機(jī)掩碼進(jìn)行所述隨機(jī)掩碼的第一輪運算中的合成置換運算。其中,所述后M-1組子隨機(jī)掩碼為所述M組子隨機(jī)掩碼在所述隨機(jī)掩碼中比特位低的M-1組子隨機(jī)掩碼。以M為4舉例說明步驟S204,當(dāng)M為4時,實現(xiàn)該步驟的公式為:T'(Mi+1,Mi+2,Mi+3);其中,T'為合成置換運算,Mi+1,Mi+2,Mi+3為后三組子隨機(jī)掩碼,i表示輪運算的輪數(shù)。步驟S206、將所述帶掩碼的明文的合成置換運算的結(jié)果與除所述后M-1組子明文之外的子明文取異或運算,將異或運算的結(jié)果作為所述第一輪密文,將所述隨機(jī)掩碼的合成置換運算的結(jié)果與除所述后M-1組子隨機(jī)掩碼之外的子隨機(jī)掩碼取異或運算,將異或運算的結(jié)果作為所述第一輪掩碼。以M為4舉例說明步驟S206,當(dāng)M為4時,實現(xiàn)該步驟的公式為:{Xi′⊕T′(Xi+1′,Xi+2′,Xi+3′,rki),Mi⊕T′(Mi+1,Mi+2,Xi+3)};]]>其中,表示異或運算,i表示輪運算的輪數(shù)。步驟S204及步驟S205中的合成置換運算包括非線性變換τ'和線性變換L,線性變換L的輸入為非線性變換τ'的輸出,非線性變換τ'通過帶掩碼的S盒實現(xiàn)。以下以M取4、輸入帶掩碼的明文為128比特和隨機(jī)掩碼為32~128比特為例,說明S盒的實現(xiàn):S盒的輸入為第一輪密文的中間值和第一輪掩碼的中間值,第一輪密文的中間值為后3組子明文與所述第一輪密鑰取異或運算的結(jié)果,所述第一輪掩碼中間值為所述后3組子隨機(jī)掩碼取異或運算的結(jié)果;其中,設(shè)后3組子明文與所述第一輪密鑰取異或運算的結(jié)果用A'表示、設(shè)后3組子隨機(jī)掩碼取異或運算的結(jié)果用MI表示,則A'、MI的取值公式分別為:A′=(a0′,a1′,a2′,a3′)=(Xi+1′⊕Xi+2′⊕Xi+3′⊕rki);]]>MI=(m0,m1,m2,m3)=(Mi+1⊕Mi+2⊕Mi+3).]]>S盒的輸出為對所述第一輪密文的中間值和所述第一輪掩碼的中間值進(jìn)行仿射變換和求逆運算的結(jié)果。設(shè)S盒的輸出為{B,'M'},則{B′,M′}=(b0′,m0′},{b1′,m1′},{b2′,m2′}{b3′,m3′})=τ′(A′,M)=(Sbox′(a0′,m0),Sbox′(a1′,m1),Sbox′(a2′,m2),Sbox′(a3′,m3)).]]>進(jìn)一步地,線性變換L的輸出為:{C′,M′}=L(B,′M′)={B⊕B(<<<2)⊕B(<<<10)⊕B(<<<18)⊕B(<<<24),M′⊕M′(<<<2)⊕M′(<<<10)⊕M′(<<<18)⊕M′(<<<24)};]]>C',M″分別為帶掩碼的明文的合成置換運算的結(jié)果及隨機(jī)掩碼的合成置換運算的結(jié)果,即:T'(X′i+1,X′i+2,X′i+3,rki)=C',T'(Mi+1,Mi+2,Mi+3)=M″;{Xi+4′,Mi+4}={Xi′⊕C′,Mi⊕M′′}.]]>可選地,對所述第一輪密文的中間值和所述第一輪掩碼的中間值進(jìn)行仿射變換矩陣和求逆運算,如圖3所示,包括:步驟S301、利用第一仿射變換矩陣,分別對所述第一輪密文的中間值和所述第一輪掩碼的中間值,進(jìn)行有限域GF(28)上的第一次仿射變換運算,得到帶掩碼的S盒輸出和掩碼輸出。設(shè)第一輪密文中間值為x',第一輪掩碼的中間值為m,帶掩碼的S盒輸出為y',掩碼輸出為n,則:y'=TA1*x'+TC1;n=TA1*m。其中TA1為8*8的仿射變換矩陣,TC1為列向量,具體值如下:TA1=0000010001010001010000110111000111101000100000100101010000100110,]]>TC1=(11000010)T。步驟S302、對所述帶掩碼的S盒輸出和所述掩碼輸出,分別進(jìn)行復(fù)合域GF(((22)2)2)上的取逆運算,得到帶掩碼的取逆輸出和掩碼取逆輸出。設(shè)帶掩碼的取逆輸出為z',掩碼取逆輸出為n',其中:(z',n')=f(y',n);f(y',n)表示GF(28)上的有限域運算,滿足以下兩個條件:①(z'+n')=(y'+n)-1,其中GF(28)上的求逆運算所對應(yīng)的8次不可約多項式為:g(x)=x8+x7+x6+x5+x4+x2+1。②計算時不出現(xiàn)未經(jīng)掩碼的中間結(jié)果。步驟S303、利用第二仿射變換矩陣,分別對所述帶掩碼的取逆輸出和所述掩碼取逆輸出,進(jìn)行有限域GF(28)上的第二次仿射變換運算,并將所述第二次仿射變換運算的結(jié)果作為所述S盒的輸出。設(shè)S盒的輸出為s',m's'=TA2*z'+C2;m'=TA2*n'。其中,TA2為8*8的仿射變換矩陣,C2為列向量,具體值如下:TA2=0011101100000010001111111111001110111010011100010101010001000000;]]>C2=(11010011)T。從而能夠得到S盒的最終輸出S(x)=S(x'+m)=s'+m'??蛇x地,對所述帶掩碼的S盒輸出和所述掩碼輸出分別進(jìn)行復(fù)合域GF(((22)2)2)上的取逆運算,如圖4所示,包括:步驟S401、使用第一正規(guī)基,分別將所述帶掩碼的S盒輸出和所述掩碼輸出,表示為有限域GF(24)中的一次線性多項式,所述第一正規(guī)基中的元素為常量屬于有限域GF(24)的二次不可約多項式的根,所述有限域GF(24)中的一次線性多項式的系數(shù)屬于有限域GF(24)。本實施例中,帶掩碼的S盒輸出為y',掩碼輸出為n;使用第一正規(guī)基[Y16,Y]來表示GF(28)域上的元素,其中Y和Y16是不可約多項式r(y)=y(tǒng)2+y+v,v∈GF(24)的一組根,那么y',n可以表示為:y'=y(tǒng)′1Y16+y'0Y,n=n1Y16+n0Y;其中,y′i,ni∈GF(24),(i=0,1)。步驟S402、依據(jù)所述帶掩碼的S盒輸出、在有限域GF(24)中的一次線性多項式及所述掩碼輸出在有限域GF(24)中的一次線性多項式,將所述帶掩碼的S盒輸出與所述掩碼輸出的和的取逆,用有限域GF(24)中的元素與第一參數(shù)表示,所述第一參數(shù)用于對所述有限域GF(24)中的元素取逆。設(shè)第一參數(shù)為a,在GF(28)/GF(24)上的求逆可以表示為:(y′+n)-1=(a-1(y0′+n0))Y16+(a-1(y1′+n1))Y;a=(y0′+n0)(y1′+n1)+(y0′+n0+y1′+n1)2v=(y0′y1′+(y0′+y1′)2v)+y1′n0+y0′n1+(n0n1+(n0+n1)2v).]]>其中a,v∈GF(24)。步驟S403、將用有限域GF(24)中的元素與第一參數(shù)表示的所述和的取逆,用第一輸出和第二輸出表示,所述第一輸出和所述第二輸出為第一函數(shù)的因變量,所述第一函數(shù)的自變量為將所述第一參數(shù)分解成的第一子參數(shù)和第二子參數(shù),對所述第一子參數(shù)和第二子參數(shù)的和的取逆運算的結(jié)果為所述第一輸出和第二輸出之和。設(shè)第一輸出為b',第二輸出為t',a',t分別為第一子參數(shù)和第二子參數(shù),(b',t')=h(a',t),b',t',a',t∈GF(24),(b'+t')=a-1=(a'+t)-1,(y'+n)-1=((b'+t')(y'0+n0))Y16+((b'+t')(y′1+n1))Y(1)步驟S404、將用所述第一輸出和所述第二輸出表示的所述和的取逆,分解成第一部分和第二部分,并將第一部分作為所述帶掩碼的取逆輸出,將第二部分作為所述掩碼取逆輸出。設(shè)帶掩碼的取逆輸出為z',掩碼取逆輸出為n';將公式(1)分解成兩部分,得到z'和n';z'=((b'+t')y'0+b'n0)Y16+((b'+t')y′1+b'n1)Y,z'∈GF(28)(2)n'=t'n0Y16+t'n1Y,n'∈GF(28)(3)步驟S405、使用第二正規(guī)基,將所述第一子參數(shù)和所述第二子參數(shù),分別表示為有限域GF(22)中的一次線性多項式,所述第二正規(guī)基中的元素為常量屬于有限域GF(22)的二次不可約多項式的根,所述有限域GF(22)中的一次線性多項式的系數(shù)屬于有限域GF(24)。使用第二正規(guī)基[Z16,Z]來表示GF(24)域上的元素,其中Z和Z4是不可約多項式s(z)=z2+z+ρ,ρ∈GF(22)的一組根。那么a',t可以表示為:a'=a′1Z4+a'0Z,t=t1Z4+t0Z,其中,a′i,ti,b′i,t′i∈GF(22),(i=0,1)。步驟S406、依據(jù)所述第一子參數(shù)和所述第二子參數(shù)在有限域GF(22)中的一次線性多項式,將對所述第一參數(shù)的取逆用有限域GF(22)中的元素與第二參數(shù)表示,所述第二參數(shù)用于對所述有限域GF(22)中的元素取逆。設(shè)第二參數(shù)為c,則實現(xiàn)步驟S406的公式為:(a'+t)-1=(c-1(a'0+t0))Z4+(c-1(a′1+t1))Z;c=(a'0a′1+(a'0+a′1)2ρ)+a′1t0+a'0t1+(t0t1+(t0+t1)2ρ)。其中c,ρ∈GF(22)。步驟S407、將用有限域GF(22)中的元素與第二參數(shù)表示的第一參數(shù)的取逆,用第三輸出和第四輸出表示,所述第三輸出和所述第四輸出為第二函數(shù)的因變,所述第二函數(shù)的自變量為將所述第二參數(shù)分解成的第三子參數(shù)和第四子參數(shù),對所述第三子參數(shù)和第四子參數(shù)的和的取逆運算的結(jié)果,為所述第三輸出和第四輸出之和。設(shè)第三輸出為d',第四輸出為k',第三子參數(shù)為c',第四子參數(shù)為k,則:(d',k')=g(c',k),使得(d'+k')=c-1;(a'+t)-1=((d'+k')(a'0+t0))Z4+((d'+k')(a′1+t1))Z(4)步驟S408、將用所述第三輸出和所述第四輸出表示的第一參數(shù)的取逆,分解成第三部分和第四部分,并將第三部分作為對所述第一輸出,將第四部分作為所述第二輸出。將公式(4)分解成兩部分,得到:b'=((d'+k')a'0+d't0))Z4+((d'+k')a′1+d't1))Z,b'∈GF(24)(5)t'=k't0Z4+k't1Z,t'∈GF(24)(6)步驟S409、使用第三正規(guī)基,將所述第三子參數(shù)和所述第四子參數(shù)分別表示為有限域GF(2)中的一次線性多項式,所述第三正規(guī)基中的元素為常量屬于有限域GF(2)的二次不可約多項式的根,所述有限域GF(2)中的一次線性多項式的系數(shù)屬于有限域GF(2)。使用第三正規(guī)基[W2,W]來表示GF(22)域上的元素,其中W和w2是不可約多項式t(w)=w2+w+1的一組根,那么c',k可以表示為:設(shè)c'=c1'w2+c'0w,k=k1w2+k0w。步驟S410、依據(jù)所述第三子參數(shù)和所述第四子參數(shù)在有限域GF(2)中的一次線性多項式,將對所述第二參數(shù)的取逆用有限域GF(2)中的元素表示,并最終得到對所述第二參數(shù)取逆的結(jié)果為,第三子參數(shù)的負(fù)一次與所述第四子參數(shù)的負(fù)一次的和。在GF(22)/GF(2)上的求逆可以由下式表示:(c'+k)-1=(c'0+k0)W2+(c′1+k1)W=c'-1+k-1。步驟S411、取所述第三輸出為所述第三子參數(shù)的負(fù)一次,所述第四輸出為所述第四子參數(shù)的負(fù)一次。取d'=c'-1,k'=k-1。步驟S412、根據(jù)為所述第三子參數(shù)的負(fù)一次的第三輸出及為所述第四子參數(shù)的負(fù)一次的第四輸出,計算所述第三部分和第四部分,以得到所述第一輸出和所述第二輸出。將d'=c'-1,k'=k-1帶入公式(5)、(6)得到b'與t'。步驟S413、根據(jù)計算得到的第一輸出和第二輸出,計算所述第一部分和第二部分,并將計算得到第一部分作為所述帶掩碼的取逆輸出,將計算得到的第二部分作為所述掩碼取逆輸出。將b'與t'帶入公式(2)、(3),得到z'與n'。步驟S207、對所述第一輪密文、所述第一輪掩碼以及所述輪密鑰中的第二輪密鑰進(jìn)行所述輪函數(shù)的第二輪運算,獲得第二輪密文和第二輪掩碼,依此實現(xiàn)所述輪函數(shù)的N輪運算,N為大于1的正整數(shù)。同樣地,以M為4繼續(xù)說明該步驟,經(jīng)過步驟S206及步驟S207之后,得到的第一輪密文可以為X′i+4,得到的一輪掩碼可以為Mi+4,將X′i+1、X′i+2、X′i+3、X′i+4、rki+1、Mi+1、Mi+2、Mi+3、Mi+4作為第二輪運算的輸入,進(jìn)行輪函數(shù)的第二輪運算。步驟S208、將所述第N輪運算輸出的第N輪密文與第N輪掩碼進(jìn)行異或運算,將運算結(jié)果作為所述SM4算法的輸出。本發(fā)明實施例所提供的技術(shù)方案,在輪函數(shù)的N輪運算中,除第一輪運算外,每一輪運算所需的掩碼均通過與該輪運算相鄰的上一輪運算的輸出得到,即,除第一輪運算外的每一輪運算無需引入新的隨機(jī)掩碼,因此,采用本申請的方案無需對N輪運算的中間值進(jìn)行脫掩,從而實現(xiàn)了對能量攻擊的抵抗。下面對本申請實施例提供的SM4算法的掩碼裝置進(jìn)行描述,下文描述的SM4算法的掩碼裝置與上文描述的SM4算法的掩碼方法可相互對應(yīng)參照。請參閱圖6,圖6為本申請實施例公開的SM4算法的掩碼裝置的一種結(jié)構(gòu)示意圖,包括:獲取模塊601,用于獲取輸入的帶掩碼的明文、隨機(jī)掩碼、輪密鑰;第一輪運算模塊602,用于對所述帶掩碼的明文、所述隨機(jī)掩碼以及所述輪密鑰中的第一輪密鑰進(jìn)行輪函數(shù)的第一輪運算,獲得第一輪密文和第一輪掩碼;第二輪運算模塊603,用于對所述第一輪密文、所述第一輪掩碼以及所述輪密鑰中的第二輪密鑰進(jìn)行所述輪函數(shù)的第二輪運算,獲得第二輪密文和第二輪掩碼,依此實現(xiàn)所述輪函數(shù)的N輪運算,N為大于1的正整數(shù);第一輸出模塊604,用于將所述第N輪運算輸出的第N輪密文與第N輪掩碼進(jìn)行異或運算,將運算結(jié)果作為所述SM4算法的輸出。本發(fā)明實施例所提供的技術(shù)方案,在輪函數(shù)的N輪運算中,除第一輪運算外,每一輪運算模塊所需的掩碼均通過與該輪運算相鄰的上一輪運算模塊的輸出得到,即,除第一輪運算外的每一輪運算無需引入新的隨機(jī)掩碼,因此,采用本申請的方案無需對N輪運算的中間值進(jìn)行脫掩,從而實現(xiàn)了對能量攻擊的抵抗。請參閱圖7,圖7為本申請實施例公開的SM4算法的掩碼裝置的另一種結(jié)構(gòu)示意圖,包括:獲取模塊701,用于獲取輸入的帶掩碼的明文、隨機(jī)掩碼、輪密鑰;第一劃分模塊702,用于按照比特由高到低的順序,將組成所述帶掩碼的明文的比特劃分成M組,以得到M組帶掩碼的子明文,所述M組帶掩碼的子明文的比特數(shù)相同;按照比特由高到低的順序,將組成所述隨機(jī)掩碼的比特劃分成M組,以得到M組子隨機(jī)掩碼,所述M組子隨機(jī)掩碼的比特數(shù)相同;第二劃分模塊703,用于對后M-1組子明文、所述第一輪密鑰進(jìn)行所述帶掩碼的明文的第一輪運算中的合成置換運算,所述后M-1組子明文為所述M組帶掩碼的子明文在所述帶掩碼的明文中比特位低的M-1組子明文;合成置換運算模塊704,用于對后M-1組子隨機(jī)掩碼進(jìn)行所述隨機(jī)掩碼的第一輪運算中的合成置換運算,所述后M-1組子隨機(jī)掩碼為所述M組子隨機(jī)掩碼在所述隨機(jī)掩碼中比特位低的M-1組子隨機(jī)掩碼;合成置換運算包括非線性變換,所述非線性變換通過S盒的運算模塊實現(xiàn);所述S盒的運算模塊,包括:接收模塊,用于接收第一輪密文的中間值和第一輪掩碼的中間值,所述第一輪密文的中間值為所述后M-1組子明文與所述第一輪密鑰取異或運算的結(jié)果,所述第一輪掩碼中間值為所述后M-1組子隨機(jī)掩碼取異或運算的結(jié)果;第二輸出模塊,用于對所述第一輪密文的中間值和所述第一輪掩碼的中間值進(jìn)行仿射變換和求逆運算,并將所述仿射變換和求逆運算后的結(jié)果作為所述S盒的輸出。如圖8所示,所述第二輸出模塊,包括:第一仿射變換模塊801,用于利用第一仿射變換矩陣,分別對所述第一輪密文的中間值和所述第一輪掩碼的中間值,進(jìn)行有限域GF(28)上的第一次仿射變換運算,得到帶掩碼的S盒輸出和掩碼輸出;取逆模塊802,用于對所述帶掩碼的S盒輸出和所述掩碼輸出,分別進(jìn)行復(fù)合域GF(((22)2)2)上的取逆運算,得到帶掩碼的取逆輸出和掩碼取逆輸出;第二仿射變換模塊803,用于利用第二仿射變換矩陣,分別對所述帶掩碼的取逆輸出和所述掩碼取逆輸出,進(jìn)行有限域GF(28)上的第二次仿射變換運算,并將所述第二次仿射變換運算的結(jié)果作為所述S盒的輸出。如圖9所示,所述取逆模塊,包括:第一表示模塊901,用于使用第一正規(guī)基,分別將所述帶掩碼的S盒輸出和所述掩碼輸出,表示為有限域GF(24)中的一次線性多項式,所述第一正規(guī)基中的元素為常量屬于有限域GF(24)的二次不可約多項式的根,所述有限域GF(24)中的一次線性多項式的系數(shù)屬于有限域GF(24);第二表示模塊902,用于依據(jù)所述帶掩碼的S盒輸出、在有限域GF(24)中的一次線性多項式及所述掩碼輸出在有限域GF(24)中的一次線性多項式,將所述帶掩碼的S盒輸出與所述掩碼輸出的和的取逆,用有限域GF(24)中的元素與第一參數(shù)表示,所述第一參數(shù)用于對所述有限域GF(24)中的元素取逆;第三表示模塊903,用于將用有限域GF(24)中的元素與第一參數(shù)表示的所述和的取逆,用第一輸出和第二輸出表示,所述第一輸出和所述第二輸出為第一函數(shù)的因變量,所述第一函數(shù)的自變量為將所述第一參數(shù)分解成的第一子參數(shù)和第二子參數(shù),對所述第一子參數(shù)和第二子參數(shù)的和的取逆運算的結(jié)果為所述第一輸出和第二輸出之和;第一分解模塊904,用于將用所述第一輸出和所述第二輸出表示的所述和的取逆,分解成第一部分和第二部分,并將第一部分作為所述帶掩碼的取逆輸出,將第二部分作為所述掩碼取逆輸出;第四表示模塊905,用于使用第二正規(guī)基,將所述第一子參數(shù)和所述第二子參數(shù),分別表示為有限域GF(22)中的一次線性多項式,所述第二正規(guī)基中的元素為常量屬于有限域GF(22)的二次不可約多項式的根,所述有限域GF(22)中的一次線性多項式的系數(shù)屬于有限域GF(24);第五表示模塊906,用于依據(jù)所述第一子參數(shù)和所述第二子參數(shù)在有限域GF(22)中的一次線性多項式,將對所述第一參數(shù)的取逆用有限域GF(22)中的元素與第二參數(shù)表示,所述第二參數(shù)用于對所述有限域GF(22)中的元素取逆;第六表示模塊907,用于將用有限域GF(22)中的元素與第二參數(shù)表示的第一參數(shù)的取逆,用第三輸出和第四輸出表示,所述第三輸出和所述第四輸出為第二函數(shù)的因變,所述第二函數(shù)的自變量為將所述第二參數(shù)分解成的第三子參數(shù)和第四子參數(shù),對所述第三子參數(shù)和第四子參數(shù)的和的取逆運算的結(jié)果,為所述第三輸出和第四輸出之和;第二分解模塊908,用于將用所述第三輸出和所述第四輸出表示的第一參數(shù)的取逆,分解成第三部分和第四部分,并將第三部分作為對所述第一輸出,將第四部分作為所述第二輸出;第七表示模塊909,用于使用第三正規(guī)基,將所述第三子參數(shù)和所述第四子參數(shù)分別表示為有限域GF(2)中的一次線性多項式,所述第三正規(guī)基中的元素為常量屬于有限域GF(2)的二次不可約多項式的根,所述有限域GF(2)中的一次線性多項式的系數(shù)屬于有限域GF(2);第八表示模塊910,用于依據(jù)所述第三子參數(shù)和所述第四子參數(shù)在有限域GF(2)中的一次線性多項式,將對所述第二參數(shù)的取逆用有限域GF(2)中的元素表示,并最終得到對所述第二參數(shù)取逆的結(jié)果為,第三子參數(shù)的負(fù)一次與所述第四子參數(shù)的負(fù)一次的和;確定模塊911,用于取所述第三輸出為所述第三子參數(shù)的負(fù)一次,所述第四輸出為所述第四子參數(shù)的負(fù)一次;第一計算模塊912,用于根據(jù)為所述第三子參數(shù)的負(fù)一次的第三輸出及為所述第四子參數(shù)的負(fù)一次的第四輸出,計算所述第三部分和第四部分,以得到所述第一輸出和所述第二輸出;第二計算模塊913,根據(jù)計算得到的第一輸出和第二輸出,計算所述第一部分和第二部分,并將計算得到第一部分作為所述帶掩碼的取逆輸出,將計算得到的第二部分作為所述掩碼取逆輸出。異或運算模塊705,用于將所述帶掩碼的明文的合成置換運算的結(jié)果與除所述后M-1組子明文之外的子明文取異或運算,將異或運算的結(jié)果作為所述第一輪密文,將所述隨機(jī)掩碼的合成置換運算的結(jié)果與除所述后M-1組子隨機(jī)掩碼之外的子隨機(jī)掩碼取異或運算,將異或運算的結(jié)果作為所述第一輪掩碼。第二輪運算模塊706,用于對所述第一輪密文、所述第一輪掩碼以及所述輪密鑰中的第二輪密鑰進(jìn)行所述輪函數(shù)的第二輪運算,獲得第二輪密文和第二輪掩碼,依此實現(xiàn)所述輪函數(shù)的N輪運算,N為大于1的正整數(shù);第一輸出模塊707,用于將所述第N輪運算輸出的第N輪密文與第N輪掩碼進(jìn)行異或運算,將運算結(jié)果作為所述SM4算法的輸出。本發(fā)明實施例所提供的技術(shù)方案,在輪函數(shù)的N輪運算中,除第一輪運算外,每一輪運算模塊所需的掩碼均通過與該輪運算相鄰的上一輪運算模塊的輸出得到,即,除第一輪運算外的每一輪運算無需引入新的隨機(jī)掩碼,因此,采用本申請的方案無需對N輪運算的中間值進(jìn)行脫掩,從而實現(xiàn)了對能量攻擊的抵抗。對于裝置或系統(tǒng)實施例而言,由于其基本相應(yīng)于方法實施例,所以相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置或系統(tǒng)實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。在本發(fā)明所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,在沒有超過本申請的精神和范圍內(nèi),可以通過其他的方式實現(xiàn)。當(dāng)前的實施例只是一種示范性的例子,不應(yīng)該作為限制,所給出的具體內(nèi)容不應(yīng)該限制本申請的目的。例如,所述單元或子單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或多個子單元結(jié)合一起。另外,多個單元可以或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另外,所描述系統(tǒng),裝置和方法以及不同實施例的示意圖,在不超出本申請的范圍內(nèi),可以與其它系統(tǒng),單元,技術(shù)或方法結(jié)合或集成。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。以上所述僅是本發(fā)明的具體實施方式,應(yīng)當(dāng)指出,對于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。當(dāng)前第1頁1 2 3