简介
之前的文章咱们讲到blowfish算法因为每次加密的块比拟小只有64bits,所以不倡议应用blowfish加密超过4G的文件。同时因为加密块小还会导致生日攻打等。所以才有了blowfish的继承者twofish。
明天咱们一起来揭秘一下twofish这个加密算法。
twofish的起源
twofish和blowfish一样,也是一种对称加密算法。不同的是twofish的块大小是128bits,而它的密钥长度是256bits。
AES置信大家都很相熟了,AES的全称是The Advanced Encryption Standard,它是由美国国家标准技术研究院(NIST)批准的规范的对称分组明码技术。
AES是从1997年到2000年公开选拔进去的。次要是为了替换DES而创立的。因为DES只有56位密钥,容易受到暴力攻打。
NIST在1997年1月2日发表,他们心愿抉择DES的继任者,即AES。 与DES一样,它也应是“一种可能在二十世纪之前很好地爱护政府敏感信息的,未公开的,公开的加密算法。” 然而,NIST并没有简略地公布一个继任者,而是进行公开的提拔,候选者须要提供相干的材料,证实其比DES优良。 这种开放式征集立刻引起了人们的浓厚兴趣。
在随后的几个月外面,NIST收到了来自多个国家的15个提案。他们是CAST-256,CRYPTON,DEAL,DFC,E2,FROG,HPC,LOKI97,MAGENTA,MARS,RC6,Rijndael,SAFER +,Serpent和Twofish。
在随后的评估中,明码学家对这些候选的算法进行了包含安全性,性能和无限环境运行等因素进行了评估,最终在1999年8月发表了5个最终入围的算法:MARS ,RC6,Rijndael,Serpent和Twofish。
最终在2000年10月2日,NIST发表选中Rijndael作为最终的AES算法。并于2001年11月26日作为正式的AES规范。
twofish尽管没有作为最初的AES规范,然而可能跻身5强,也是很厉害了。
twofish的性能
在2000年的时候,对于大多数平台来说,twofish在128-bit keys的体现要比Rijndael 要慢,这也是为什么Rijndael会入选为AES规范的起因。然而在256-bit keys的体现要好于Rijndael 。
然而随着Rijndael 作为AES的规范,越来越多的硬件都基于AES做了优化,最初导致twofish和Rijndael 的差距越来越大。
twofish和Blowfish一样也是收费的。
twofish的原理
twofish是由blowfish演变来的。咱们先看下twofish的工作图:
twofish和DES一样,也是应用的Feistel structure。
首先将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变换,最初和子密钥进行异或操作。
本文已收录于 http://www.flydean.com/twofish/
最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!