淺析Twofish加密算法的基本組件
Twofish算法一般包括以下的基本組件:
(1)??? Feistel Network。常被用來(lái)將一個(gè)函數(shù)(通常稱(chēng)為F函數(shù))轉(zhuǎn)換成一個(gè)排列,可用非線(xiàn)性函數(shù)來(lái)表式:
F:{o,1}n/2 X {0,1}m-->{0,1}n/2
Twofish采用的是一個(gè)16回合的Feistel Network,使用了一個(gè)雙射F函數(shù)。F函數(shù)是一個(gè)與密鑰相關(guān)64 bits的排列運(yùn)算。它包含了三個(gè)部份:R0,R1和回合數(shù)r0R0經(jīng)過(guò)函數(shù)g的運(yùn)算后成為T(mén)0,R1先左旋8 bits后再經(jīng)過(guò)函數(shù)g的運(yùn)算后成為T(mén)1,接著T0,T1再經(jīng)過(guò)PHT的組合運(yùn)算后得到函數(shù)F的輸出值F0,F1 :

每一回合的核心F函數(shù),均由兩個(gè)g函數(shù)構(gòu)成。函數(shù)g是整個(gè)Twofish最重要的部分,其輸入X是32位的數(shù)據(jù),分成4個(gè)字節(jié),每一個(gè)字節(jié)運(yùn)算時(shí)都有屬于自己的S一boxes,運(yùn)算完成后得到的結(jié)果再輸入到一個(gè)4?4的MOS矩陣,可得到一個(gè)32位的輸出結(jié)果Z0整個(gè)數(shù)學(xué)表示式如下:
X1=[X/28]mod28i=q,….,3
Y1=s1[x1]i=0,…,3

其中MDS矩陣如下所示:

(2)s-boxes。是一種非線(xiàn)性的置換運(yùn)算,可以用表格來(lái)表示。不同的S-box可由隨機(jī)的方式產(chǎn)生,或用特定的算法產(chǎn)生出來(lái)。S-box輸入和輸出個(gè)數(shù),隨分組密碼算法的不同而有所不同。Twofish使用四個(gè)8x8位的S-boxes,是由兩個(gè)固定的8x8位的置換,再加上密鑰的數(shù)據(jù)所產(chǎn)生出來(lái)的。
(3)MDS矩陣。是一個(gè)作用在域上的線(xiàn)性映射,從一個(gè)包含a個(gè)元素的向量映射到有b個(gè)元素的向量,會(huì)產(chǎn)生一個(gè)含有a+b個(gè)元素的合成向量,而這個(gè)向量有一個(gè)性質(zhì)就是:任何非零的向量它的非零元素個(gè)數(shù)至少有b+1個(gè)。換句話(huà)說(shuō),MDS通常表示成含有。axb個(gè)元素的矩陣型態(tài),而Twofish本身就使用了一個(gè)作用在GF(28)上4 x4的MDS矩陣。
(4)PHT。PHT是一種可以快速執(zhí)行的簡(jiǎn)單混合操作。假設(shè)給定兩個(gè)輸入a和b,則32位的PHT定義為:

(5)whitening。是在第一個(gè)回合之前和最后一個(gè)回合之后,將密鑰的數(shù)據(jù)和分組數(shù)據(jù)進(jìn)行XOR的操作。
(6)Key shceduling。shceduling的作用是從源密鑰產(chǎn)生k0,…,K39,共40個(gè)長(zhǎng)度為4字節(jié)的擴(kuò)展密鑰以及4組相關(guān)的S-boxes。這些S-boxes由g函數(shù)使用。Twofish定義了128、192、256位三種源密鑰長(zhǎng)度,短于256位的輸入密鑰用O填充至就近長(zhǎng)度。Key shceduling的基本流程如下:設(shè)k二N/64,則源密鑰M可分成2k個(gè)32位的字,構(gòu)成兩個(gè)長(zhǎng)度為k的字向量,
Me=(M0,M2,…,M2K-2),M0=(M1,M3,…,M2K-1)
第三個(gè)字向量S=(SK-1,,SK-2,…,S0)由下式確定:

其中向量(m0,m1,…,m8k-1)的每個(gè)元素由源密鑰的相鄰8位組成,RS矩陣定義如下:

Me、Mo、S就是產(chǎn)生擴(kuò)展密鑰的三個(gè)要素。K0,…,K39由下面的表達(dá)式確定:




