TWofish算法是典型的分组加密算法,即对固定长度的一组明文进行加密的算法。它将明文按一定的位长分组,明文组和密钥组的全部经过加密运算得到密文组。解密时密文组和密钥组经过解密运算(加密运算的逆运算),还原成明文组。Twofish算法采用的明密文分组长度为128比特,支持128、192、256比特的密钥长度。
Twofish算法流程如下图所示,包括十六回合的Feistel操作,以及额外的输入/输出部分的whitening操作。
TWofish算法与DES的加密与解密的算法基本上一样不同,汤四。Twofish算法的加密与解密的算法稍微有点不同,但是使用的基本组件是一样的。以加密为例,首先将128位长度的明文分成四个32位长度的字组(P0,P1,P2,P3),并分别与长度是32位的四个子密钥K0~K3做XOR运算,得到R0,0-R0,3等四组结果,此即输入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代表当前的回合数。然后将Tr,0与Tr,1经由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位。如此便得到下一回合的输入数据。
在最后一个回合之后,进行输出whitening操作,亦即将输出的四组32位数据分别和K4~K7进行XOR操作,如下所示:
C1=R16,(1+2)mod4⊕K1+4i=0,…,3。
其中ROR与ROL分别代表向右及向左移位的运算。(C0,C1,C2,C3)代表16个字节的输出密文。
解密的算法与加密的类似,都是采用相同的十六回合动作,用到的F函数也是一样的,不过解密时所有子密钥的使用顺序与加密时相反,而且每一回合的动作略有修改。
Twofish算法以其良好的的快速加解密能力和优异的保密性和抗攻击性在数据加密和网络安全通信等方面得到了广泛的应用。在实际的应用系统中,通常和其他加密技术共同构成一个完整的加密体系。