淺析TWofish算法的流程

TWofish算法是典型的分組加密算法,即對固定長度的一組明文進行加密的算法。它將明文按一定的位長分組,明文組和密鑰組的全部經(jīng)過加密運算得到密文組。解密時密文組和密鑰組經(jīng)過解密運算(加密運算的逆運算),還原成明文組。Twofish算法采用的明密文分組長度為128比特,支持128、192、256比特的密鑰長度。

Twofish算法流程如下圖所示,包括十六回合的Feistel操作,以及額外的輸入/輸出部分的whitening操作。

淺析TWofish算法的流程

TWofish算法與DES的加密與解密的算法基本上一樣不同,湯四。Twofish算法的加密與解密的算法稍微有點不同,但是使用的基本組件是一樣的。以加密為例,首先將128位長度的明文分成四個32位長度的字組(P0,P1,P2,P3),并分別與長度是32位的四個子密鑰K0~K3做XOR運算,得到R0,0-R0,3等四組結(jié)果,此即輸入whitening步驟。

R0,1=P1⊕K1i=0,…,3

接著從事十六個回合的加密動作。首先計算Tr,0和Tr,1

Tr,0=g(Rr,0)

Tr,1=g(ROL(Rr,1,8)),

r=0,1,…15

這里r代表當(dāng)前的回合數(shù)。然后將Tr,0與Tr,1經(jīng)由PHT之后,再分別加上子密鑰K2r+8與K2R+9 ,得到Fr,0與Fr,1:

Fr,o二(Tr,0+Tr,1+K2r+8)mod 232

Fr,1=(Tr,0+2Tr,1+K2r+9)mod 232

接著再將Fr,0與Fr,1分別和Rr,2與(Rr,3<<<1)進行XOR運算,最后將Rr,2再右移1位。如此便得到下一回合的輸入數(shù)據(jù)。

在最后一個回合之后,進行輸出whitening操作,亦即將輸出的四組32位數(shù)據(jù)分別和K4~K7進行XOR操作,如下所示:

C1=R16,(1+2)mod4⊕K1+4i=0,…,3。

其中ROR與ROL分別代表向右及向左移位的運算。(C0,C1,C2,C3)代表16個字節(jié)的輸出密文。

解密的算法與加密的類似,都是采用相同的十六回合動作,用到的F函數(shù)也是一樣的,不過解密時所有子密鑰的使用順序與加密時相反,而且每一回合的動作略有修改。

Twofish算法以其良好的的快速加解密能力和優(yōu)異的保密性和抗攻擊性在數(shù)據(jù)加密和網(wǎng)絡(luò)安全通信等方面得到了廣泛的應(yīng)用。在實際的應(yīng)用系統(tǒng)中,通常和其他加密技術(shù)共同構(gòu)成一個完整的加密體系。