在前两天的文章中,我们聊了Blowfish加密算法,在文章最后,我们提到了Blowfish加密算法的发明人布鲁斯·施耐尔(Bruce Schneier)建议用户迁移至Twofish加密算法中去,那么什么是Twofish加密算法呢?我们今天就来简单了解一下。

什么是Twofish算法?

Twofish加密算法中文名为“双鱼算法”,是布鲁斯·施奈尔带领的项目组于1998年研发的区块加密算法。和Blowfish加密算法一样,也是一种对称加密算法。不同的是Blowfish的块大小是64bits,而Twofish的块大小是128bits,它有128、192、256位三种密钥长度可供选择。

Twofish

Twofish算法的原理

Twofish是由Blowfish演化来的,所以两者加密原理也十分接近,也使用feistel密码(费斯妥密码)。

Twofish算法

 

首先将128bits的明文分成4部分,然后分别和K0,K1,K2,K3进行异或操作,生成4个结果,我们称他们为A1,A2,A3,A4(虚线括起来的部分是F函数)。

A1,A2作为F的输入生成的结果和A3进行异或操作,然后右移一位,和A4左移一位的结果进行异或操作,然后交换左右部分的位置。

最后一轮的输出不进行交换直接与四个扩展密钥字进行异或而得到密文C。

我们再来看看F函数。

F是64位数据上与密钥相关的置换函数,它有三个参数,R1,R2两个输入,还有一个r表示的子项的轮数。

R1和R2先通过S-box的变换,然后乘以MDS矩阵,然后再进行PHT变换,最后和子密钥进行异或操作。

Twofish算法的起源

在1997年到2000年公开选拔美国国家标准技术研究院批准的标准的对称分组密码技术(AES)中,MARS ,RC6,Rijndael,Serpent和Twofish最终进入前五,但Rijndael被选为最终的AES算法。虽然没有作为最后的AES标准,但是能够跻身5强,也足以见得Twofish算法的优越性。

在2000年的时候,对于大多数平台来说,Twofish在128-bit密钥的表现要比Rijndael要慢,这也是为什么Rijndael会当选为AES标准的原因,但是Twofish算法在256-bit密钥的表现要好于Rijndael 。

但是随着Rijndael作为AES的标准,越来越多的硬件都基于AES做了优化,最后导致Twofish和Rijndael 的差距越来越大。

免责声明:素材源于网络,如有侵权,请联系删稿。