專利名稱:一種改進(jìn)的Ri jndael算法的制作方法
技術(shù)領(lǐng)域:
本發(fā)明專利涉及信息安全技術(shù)。尤其是用于保護(hù)敏感信息的AES (Advanced Encryption Standard) 技術(shù)。
背景技術(shù):
1997年4月15日美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所(NIST)發(fā)起征集AES(Advanced Encryption Standard)算法
的活動(dòng),并專門成立了 AES工作組。目的是為了確定一個(gè)非保密的、公開披露的、全球免費(fèi)使用的分組密 碼算法,用于保護(hù)21世紀(jì)政府的敏感信息。1997年9月12日在聯(lián)邦登記處(FR)公布了征集AES候選算 法的通告。AES的要求是比三重DES快而且至少和三重DES—樣安全,分組長(zhǎng)度為128比特,密鑰長(zhǎng)度 為128、 192、 256比特。后來,NIST從15個(gè)算法中篩選出了 5個(gè)AES候選算法,它們是RC6、 Mars、 Rijndael、 Serpent和Twofish。最終,由比利時(shí)設(shè)計(jì)者Joan Daemen和Vincent Rijmen設(shè)計(jì)的Rijndael算法 勝出。
發(fā)明內(nèi)容
加密解密過程
Rijndael加密算法是分組長(zhǎng)度可變、密鑰長(zhǎng)度也可變的分組密碼。分組長(zhǎng)度、密鑰長(zhǎng)度彼此獨(dú)立地確 定為128、 192、 256比特。
1、 字節(jié)轉(zhuǎn)換(SubBytes)
字節(jié)轉(zhuǎn)換是一個(gè)以字節(jié)為單位的非線性取代運(yùn)算,取代表(S-Box)是經(jīng)過兩個(gè)運(yùn)箅過程而建立,并且是 可逆的。首先找出每個(gè)字節(jié)在GF(28)中的乘法反元素;接著經(jīng)過一個(gè)仿射(Affine)轉(zhuǎn)換運(yùn)算,字節(jié)取代 (SubBytes)運(yùn)算對(duì)State的影響,經(jīng)過運(yùn)算后形成的S-box。
字節(jié)取代(SubBytes)轉(zhuǎn)換的反運(yùn)算計(jì)算仿射對(duì)應(yīng)之后的相反運(yùn)算可得到S"-Box,以此S"-Box做字 節(jié)取代(SubBytes)即可。
2、 移行轉(zhuǎn)換(ShiftRows transformation )
在這個(gè)轉(zhuǎn)換中,State的每一行以不同的偏移量做環(huán)狀位移,第0行不動(dòng),第一行位移C1個(gè)字節(jié),第 二行位移C2個(gè)字節(jié),第三行位移C3個(gè)字節(jié)。位移的偏移量Cl,C2,C3跟區(qū)塊的數(shù)目(Nb)有關(guān),定義如表 1。 移行轉(zhuǎn)換(ShiftRows)運(yùn)算對(duì)于State的影響,如圖2。移行轉(zhuǎn)換(ShiftRows)的反運(yùn)算對(duì)第二、第三 及第四行做Nb-Cl, Nb-C2, Nb-C3個(gè)字節(jié)的環(huán)狀位移即可。
3、 混列轉(zhuǎn)換(MixColumns transformation)
在這個(gè)轉(zhuǎn)換中,把State當(dāng)作一個(gè)存在GF(28)中的多項(xiàng)式。并且對(duì)一個(gè)固定的多項(xiàng)式c(x)作乘法,如果 發(fā)生溢位,則再模余x4+l。表示如下
c(f03';c3 + '0r;c2 + '0r;c + '02'
啦)與一+1互質(zhì),令W力=C(,"")?;炝?MixColumns)轉(zhuǎn)換的反運(yùn)算,則是乘上一個(gè)特殊的多項(xiàng)式d(x),
('03'x3 + '01';c2 + '0r;c + '02')十d(;c)-'0r c/(x)-'05'x3 + '0D';c2 + '09';c + '0i:'。
4、 輪密鑰加(AddRoundKey)
這個(gè)運(yùn)算主要是把每一個(gè)冋合密鑰(Round Key)透過簡(jiǎn)單的bitwise EXOR加入到每一個(gè)State中 AddRoundKey的逆是它0身。
5、 MixColumns變換的優(yōu)化技術(shù)
針對(duì)AES密碼最可能成功的攻擊來自一個(gè)允許時(shí)間選擇攻擊的弱實(shí)現(xiàn)P'5。攻擊者用不同的密鑰并精 確地測(cè)量出加密例程所需的時(shí)間。如果加密例程被粗心編碼,執(zhí)行時(shí)間便依賴亍密鑰值,它就有可能推導(dǎo) 出有關(guān)密鑰的信息。在AES中,這種事情最可能發(fā)生在MixColumns例程中,因?yàn)橛杏虺恕a槍?duì)這種攻擊 的最穩(wěn)妥的安全措施是將域乘實(shí)現(xiàn)為一個(gè)查詢表。
乘法所用的常量系數(shù)基丁域論的,并且是0x01, 0x02或0x03中的任意一個(gè)值。如給定某一列c,其替 代式如下
State
=0x02*State
+0x03*State+0x01 *State[2,c]+0x01 *State[3,c] ,
State[l ,c=0x01 *State
t0x02*State+0x03*State[2,c]+0x01*State[3,c]
State[2,c]=0x01 *State
+0x01 *State+0x02*State[2,c]+0x03*State[3,c]
State[3,c]=0xO3*State[O,c]+OxOl*State+0x01 * State[2,c]+0x02* State[3 ,c]
由以上公式計(jì)算出每一個(gè)可能的值,從而形成一張表,然后進(jìn)行類似于S-box的磚匠置換。所以當(dāng)做 MixColumns變換時(shí)只要查表即可,不需要用域乘,這樣就增加了差分分析攻擊的難度。
6、 子密鑰生成優(yōu)化
子密鑰是由密鑰導(dǎo)出的,這個(gè)過程包含了兩個(gè)組成部分, 一個(gè)是密鑰擴(kuò)展,另一個(gè)是輪子密鑰的選取, 其基本原理有如下3點(diǎn)[61:
(1) 輪子密鑰的比特?cái)?shù)總和等于分組長(zhǎng)度乘以輪的數(shù)目加1,即每分組長(zhǎng)128比特,輪數(shù)等于10時(shí), 輪子密鑰的比特?cái)?shù)總和為128x (10+1) = 1408比特。
(2) 密鑰擴(kuò)充為擴(kuò)展密鑰(Expanded Key)。
(3) 輪子密鑰是由這些擴(kuò)展密鑰中取出來的,第1輪子密鑰由最先Nb個(gè)字組成,第2輪子密鑰為其次
Nb個(gè)字等。
7 、密鑰的擴(kuò)充(Key Expahsion)
擴(kuò)充后的密鑰是一個(gè)4-byte的線性數(shù)組,表示為W[NbX(Nr+l)],前Nk個(gè)字組包含了加密密鑰(Cipher Key)。密鑰擴(kuò)充函式和Nk是息息相關(guān)的,分為兩種情況運(yùn)作, 一是當(dāng)Nk小亍或等亍6,另外則是當(dāng)Nk 大丁-6,以偽碼敘述如下
當(dāng)NkS6時(shí),
KeyExpansion(byte Key[4XNk] word W[NbX(Nr+l)]) for(i=0; i < Nk; i++)
W[i]=(Key[4 X ij, Key[4 X i+1 ], Key[4 X i+2], Key[4 X i+3]); for(i=Nk; i <NbX(Nr+l); i++)
4temp=W[i-l];
if(i%Nk==0)
temp-SubByte(Ro但yte(temp)) A Rcon[i /Nk]; W[i〗=W[i - Nk] a temp;
在上面的子程序中,SubByte(W)傳回一個(gè)4-byte的字組,這些字組是輸入的字組經(jīng)過S-box的轉(zhuǎn)換所 產(chǎn)生的相對(duì)字組。RotByte(W)則是傳回經(jīng)過旋轉(zhuǎn)的字組。
當(dāng)Nk〉6時(shí), ' KeyExpansion(byte Key[4XNk] word W[NbX(Nr+l)])
for (i=0; i < Nk; i++)
W[i]= (key[4 X i],key[4 X i+1], key[4 X i+2], key[4 X i+3]); for (i=Nk; i < Nb X (Nr+1); i++)
{
temp=W[i - 1〗; if(i%Nk==0)
temp-SubByte(Ro但yte(temp)) A Rcon[i / Nk]; elseif(i%Nk = 4) temp=SubByte(temp); W[i]=W[i - Nk] a temp;
} 一 以上兩種情況的相異處在于當(dāng)NkS6時(shí),(i-4)是Nk的倍數(shù)時(shí),對(duì)亍W[i-l]先執(zhí)行SubByte,再執(zhí)行
EXOR。上述回合常數(shù)定義如下
Rcon[i]-(RC[i],'OO,,'OO,,'OO,),其中RC[O]-,Ol,, RC[i]=x(RC[i-l])-x(")。 由以上分析可得出如下公式
RC[i]=randrom[] (RC[i-l]一x(")。
第一次生成RC[I]的時(shí)候按照原來的方式利用線性同余法生成偽隨機(jī)數(shù)I,從而選擇運(yùn)算對(duì)象rand[I],
具體的公式如下
RC[l]=(RC[I-l])'Random(K)其中k為小于1的任何數(shù)
產(chǎn)生Random(K)的函數(shù)
Random (n, m, seed, a, b)
{
r0=seed;
for (i=l; i<=n; i++) ri= (a*ri-l+b) modm;
其中將種子參數(shù)seed設(shè)為計(jì)算機(jī)當(dāng)前的日期或者時(shí)間;m是一個(gè)較大數(shù),可以把它取為2w, w是計(jì) 算機(jī)的字長(zhǎng);a可以是0.01w和0.99w之間的任何整數(shù);n等于當(dāng)前(I-1)。這樣就可以方便的產(chǎn)生出隨機(jī)的 參與異或運(yùn)算的對(duì)象rand[I]。密鑰生成后把所有的子密鑰形成一個(gè)表,而在密鑰選擇階段同樣可以使用隨 機(jī)函數(shù),打亂子密鑰選擇的規(guī)律性,使生成各列子密鑰的過程具有完全的隨機(jī)性。但是由于算法中用到了 加密者的本地時(shí)間作為seed,而解密者不一定與加密者時(shí)間統(tǒng)一,為了解決這個(gè)問題,決定用數(shù)字時(shí)間戳 (digitaltime-st|mp)系統(tǒng),該系統(tǒng)可以讓通信雙方遵守同樣的時(shí)間,而算法中只要把取的系統(tǒng)時(shí)間加入到 密文里的某個(gè)只有雙方才知道的特殊位置(或者直接加入明文里加密也可)就可以使解密者很容易地對(duì)密文進(jìn)行解密了。當(dāng)然,以上方法只能應(yīng)用在網(wǎng)絡(luò)中,但是它給Rijndael帶來的安全性是前所未有的'并且 跟通信系統(tǒng)緊密聯(lián)合在一起。
具體實(shí)施方式
可將對(duì)齊方案在計(jì)算機(jī)上實(shí)現(xiàn),構(gòu)成最終系統(tǒng)
權(quán)利要求
1.專利申請(qǐng)中提出的首先是對(duì)于最可能被攻擊的混列進(jìn)行的優(yōu)化,使該步驟變成簡(jiǎn)單的查表而不是域乘,而對(duì)于子密鑰的生成方面使用了引入了隨機(jī)函數(shù)使密鑰的生成和選擇變成隨機(jī)性的,而不是原算法簡(jiǎn)單的線形選擇。
全文摘要
本發(fā)明通過深入分析Rijndael算法,改進(jìn)了算法的幾個(gè)有可能產(chǎn)生不安全隱患的步驟,首先是對(duì)于最可能被攻擊的混列(MixColumns)進(jìn)行的優(yōu)化,使該步驟變成簡(jiǎn)單的查表而不是域乘,增加了非線形安全性;而對(duì)于子密鑰的生成方面我們引入了隨機(jī)函數(shù)使密鑰的生成和選擇變成隨機(jī)性的,而不是原算法簡(jiǎn)單的線形選擇,這樣就幾乎可以完全抵抗線形密碼分析的攻擊了。
文檔編號(hào)H04L9/06GK101527627SQ200810034309
公開日2009年9月9日 申請(qǐng)日期2008年3月6日 優(yōu)先權(quán)日2008年3月6日
發(fā)明者邵斌彬 申請(qǐng)人:邵斌彬