简介

之前的文章我们讲到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/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

密码学系列之:twofish对称密钥分组算法的更多相关文章

  1. 密码学系列之:blowfish对称密钥分组算法

    目录 简介 blowfish详解 密钥数组和S-box 密钥数组 S-box 生成最终的K数组 blowfish blowfish的应用 blowfish的缺点 简介 Blowfish是由Bruce ...

  2. 写给开发人员的实用密码学(七)—— 非对称密钥加密算法 RSA/ECC

    本文部分内容翻译自 Practical-Cryptography-for-Developers-Book,笔者补充了密码学历史以及 openssl 命令示例,并重写了 RSA/ECC 算法原理.代码示 ...

  3. DES,3DES,AES这三种对称密钥的区别与联系

    DES:Data Encryption Standard(数据加密标准,又美国国密局,选中的IBM的方案,密钥长度为56,标准提出是要使用64位长的密钥,但是实际中DES算法只用了64位中的56位密钥 ...

  4. 密码学系列之:加密货币中的scrypt算法

    目录 简介 scrypt算法 scrypt算法详解 scrypt的使用 简介 为了抵御密码破解,科学家们想出了很多种方法,比如对密码进行混淆加盐操作,对密码进行模式变换和组合.但是这些算法逐渐被一些特 ...

  5. 密码学系列之:feistel cipher

    密码学系列之:feistel cipher 简介 feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构.它是由德籍密码学家Horst Feistel在I ...

  6. 密码学系列之:Argon2加密算法详解

    目录 简介 密钥推导函数key derivation function Password Hashing Competition Argon2算法 Argon2的输入参数 处理流程 简介 Argon2 ...

  7. 密码学系列之:Merkle–Damgård结构和长度延展攻击

    密码学系列之:Merkle–Damgård结构和长度延展攻击 简介 Merkle–Damgård结构简称为MD结构,主要用在hash算法中抵御碰撞攻击.这个结构是一些优秀的hash算法,比如MD5,S ...

  8. Asp.Net 常用工具类之加密——对称加密DES算法(2)

    又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...

  9. Diffie-Hellman密钥协商算法

    一.概述 Diffie-Hellman密钥协商算法主要解决秘钥配送问题,本身并非用来加密用的:该算法其背后有对应数学理论做支撑,简单来讲就是构造一个复杂的计算难题,使得对该问题的求解在现实的时间内无法 ...

随机推荐

  1. Python自动扫描出微信不是好友名单

    前言 最近找几个老友准备聊天发现几个已经被删除好友名单,做为潜水党多年的我已经不知道成为多少人的黑名单,但是好友列表却依然有不是好友的名单,面对庞大的好友数量想要清除谈何容易.虽然可以发消息给所有人, ...

  2. C++ primer plus读书笔记——第7章 函数——C++的编程模块

    第7章 函数--C++的编程模块 1. 函数的返回类型不能是数组,但可以是其他任何一种类型,甚至可以是结构和对象.有趣的是,C++函数不能直接返回数组,但可以将数组作为结构或对象的组成部分来返回. 2 ...

  3. import 更新变量

    其他的模块的变量一经引用,是定值,只能再次import才能更新他的值

  4. tar解压某个目录 tar解压某个指定的文件或者文件夹

    tar解压某个目录 tar解压某个指定的文件或者文件夹 发布时间:2017-05-30 来源:服务器之家   1. 先查看压缩文档中有那些文件,如果都不清楚文件内容,然后就直接解压,这个是不可能的 使 ...

  5. 更换介质:请把标有Debian ... 的盘片插入驱动器

    Debian安装软件报错如下: 更换介质:请把标有 "Debian GNU/Linux 10.8.0 _Buster_ - Official amd64 DVD Binary-1 20210 ...

  6. C语言变量和函数命名规范

    C 语言变量和函数命名规范: 关于C语言变量和函数命名规范 据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则.命名规则对软件产品而言并不是"成败悠关&quo ...

  7. pip;python包管理工具

    刚开始学习Python时,在看文档和别人的blog介绍安装包有的用easy_install, setuptools, 有的使用pip,distribute,那麽这几个工具有什么关系呢,看一下下面这个图 ...

  8. linux 磁盘管理命令之df-(转自 Howie的专栏)

    linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...

  9. 6.3-4 zip、unzip

    zip:打包和压缩文件     zip压缩格式是Windows与Linux等多平台通用的压缩格式.和gzip命令相比,zip命令压缩文件不仅不会删除源文件,而且还可以压缩目录.   zip命令的参数选 ...

  10. FOC_矢量控制相关资料

    http://www.eepw.com.cn/news/listbylabel/label/FOC/ FOC(field-oriented control)为磁场导向控制,又称为矢量控制(vector ...