密码学系列之:twofish 对称密钥分组算法
简介
之前的文章我们讲到 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/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
版权声明: 本文为 InfoQ 作者【程序那些事】的原创文章。
原文链接:【http://xie.infoq.cn/article/8c6b874255a03e17b2680eab7】。文章转载请联系作者。
评论