Rijndael加密模型分析

Rijndael的加密解密要經(jīng)過(guò)多次的數(shù)據(jù)變換操作,每一次變換操作都會(huì)產(chǎn)生一個(gè)中間結(jié)果,我們稱(chēng)這個(gè)中間結(jié)果為狀態(tài)。算法的所有操作都以狀態(tài)為對(duì)象進(jìn)行,每個(gè)狀態(tài)可由字節(jié)的矩陣列表示,這種矩陣立列包含4行,矩陣列的列數(shù)目可以由Nb表示。密鑰列表用Nk表示。他等于密鑰的長(zhǎng)度除以32.
從某種意義上來(lái)講,這些數(shù)據(jù)也可以看作是4字節(jié)的一維向量,每個(gè)向量由相應(yīng)的矩陣的一個(gè)列組成。Nb于Nk的可取值為4、6、8,下面的矩陣的形式由列出Nb不同取值情況下的數(shù)組結(jié)構(gòu):
以下為Nk不同取值情況下數(shù)組的矩陣形式:

Rijndael加密模型分析
算法中的加密解密是迭代進(jìn)行的,它的重復(fù)次數(shù)成為輪數(shù),用Nr來(lái)表示。Nr由Nb和Nk共同決定。

Rijndael加密模型分析
(1)字節(jié)置換
字節(jié)置換是一種非線(xiàn)性的置換,字節(jié)置換對(duì)分組矩陣的每個(gè)字節(jié)執(zhí)行一次非線(xiàn)性字節(jié)替換操作。假設(shè)a(x)為狀態(tài)數(shù)組中的一個(gè)字節(jié),采用多項(xiàng)式表示,講GF中的元素用多項(xiàng)式的形式表示,且系數(shù)是GF2中的元素。值得一提的是,字節(jié)替換作為Rijndael算法的唯一一個(gè)非線(xiàn)性運(yùn)算,是整個(gè)算法中的最關(guān)鍵部分,也是最復(fù)雜的部分。

Rijndael加密模型分析

Rijndael加密模型分析
(2)行位移
行位移將狀態(tài)數(shù)組的每一行進(jìn)行循環(huán)左移操作,位移量隨著不同的行而有所不同。其中,第0行的位移為0,第一行循環(huán)左移c1字節(jié),第二行循環(huán)左移c2字節(jié)。位移操作是算法中的一個(gè)基本的操作,無(wú)論是在加密過(guò)程中的初始輪還是在加密過(guò)程中的中間輪,位移的操作一直存在。

Rijndael加密模型分析
(3)列混合
在列混合變換中,將一個(gè)列視為上的多項(xiàng)式,再與一個(gè)固定的模式進(jìn)行乘法,上面的公式運(yùn)算可以展開(kāi)為有限的加法與乘法運(yùn)算,從而在很大程度上簡(jiǎn)化了運(yùn)算的復(fù)雜度。列混合并沒(méi)有貫穿夾擊算法的整個(gè)流程,在最后一輪的運(yùn)算并沒(méi)有包含列混合的操作。
(4)添加密鑰
在添加密鑰變換中,每一輪的密鑰被加載狀態(tài)數(shù)組上,有限域上的假發(fā)相當(dāng)于亦或操作。其中輪密鑰由密鑰調(diào)度模塊產(chǎn)生,它由Nb個(gè)列組成。這Nb個(gè)列被加到狀態(tài)數(shù)組中的每一列上。

Rijndael加密模型分析
(5)輪密鑰表
在AES算法中,一共要產(chǎn)生Nb(nr+1)個(gè)字的密鑰。輪密鑰是由初始密鑰產(chǎn)生的,它分為兩個(gè)步驟進(jìn)行:密鑰擴(kuò)展與輪密鑰的選擇,且遵循一定的原則。