简介
之前的文章咱们讲到 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 局部,而后别离和 K 0,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/
最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!