密码学系列之: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/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
密码学系列之:twofish对称密钥分组算法的更多相关文章
- 密码学系列之:blowfish对称密钥分组算法
目录 简介 blowfish详解 密钥数组和S-box 密钥数组 S-box 生成最终的K数组 blowfish blowfish的应用 blowfish的缺点 简介 Blowfish是由Bruce ...
- 写给开发人员的实用密码学(七)—— 非对称密钥加密算法 RSA/ECC
本文部分内容翻译自 Practical-Cryptography-for-Developers-Book,笔者补充了密码学历史以及 openssl 命令示例,并重写了 RSA/ECC 算法原理.代码示 ...
- DES,3DES,AES这三种对称密钥的区别与联系
DES:Data Encryption Standard(数据加密标准,又美国国密局,选中的IBM的方案,密钥长度为56,标准提出是要使用64位长的密钥,但是实际中DES算法只用了64位中的56位密钥 ...
- 密码学系列之:加密货币中的scrypt算法
目录 简介 scrypt算法 scrypt算法详解 scrypt的使用 简介 为了抵御密码破解,科学家们想出了很多种方法,比如对密码进行混淆加盐操作,对密码进行模式变换和组合.但是这些算法逐渐被一些特 ...
- 密码学系列之:feistel cipher
密码学系列之:feistel cipher 简介 feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构.它是由德籍密码学家Horst Feistel在I ...
- 密码学系列之:Argon2加密算法详解
目录 简介 密钥推导函数key derivation function Password Hashing Competition Argon2算法 Argon2的输入参数 处理流程 简介 Argon2 ...
- 密码学系列之:Merkle–Damgård结构和长度延展攻击
密码学系列之:Merkle–Damgård结构和长度延展攻击 简介 Merkle–Damgård结构简称为MD结构,主要用在hash算法中抵御碰撞攻击.这个结构是一些优秀的hash算法,比如MD5,S ...
- Asp.Net 常用工具类之加密——对称加密DES算法(2)
又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...
- Diffie-Hellman密钥协商算法
一.概述 Diffie-Hellman密钥协商算法主要解决秘钥配送问题,本身并非用来加密用的:该算法其背后有对应数学理论做支撑,简单来讲就是构造一个复杂的计算难题,使得对该问题的求解在现实的时间内无法 ...
随机推荐
- OO_Unit2_多线程电梯
CSDN博客链接 一.第一次作业 1.需求分析 单部多线程傻瓜调度(FAFS)电梯 2.实现方案 输入接口解析 类似于Scanner,我们使用ElevatorInput进行阻塞式读取(第一次作业较简单 ...
- 《Ray Tracing in One Weekend》阅读笔记 - 9、Metal(金属)
如果我们希望不同的物体使用不同的材料,则需要进行设计决策.我们可以使用具有许多参数的通用材料,而将不同的材料类型仅将其中一些参数归零.这不是一个坏方法.或者我们可以有一个抽象的材料类来封装行为.我是后 ...
- 10.Debug
1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 Debug调式, ...
- Journey to the future begins
当提交申请的那一刻,我就更加确认了自己想要走的路,慢慢一路向上,追求自己想要的生活! 2021.5.18 wzb
- 并发王者课 - 青铜 2:峡谷笔记 - 简单认识Java中的线程
在前面的<兵分三路:如何创建多线程>文章中,我们已经通过Thread和Runnable直观地了解如何在Java中创建一个线程,相信你已经有了一定的体感.在本篇文章中,我们将基于前面的示例代 ...
- PyCharm和JDK安装与配置(windows)
原创 PyCharm和JDK安装与配置(windows) mb5cd21e691f31a关注0人评论2024人阅读2020-03-20 21:08:41 一.PyCharm安装与配置 PyChar ...
- Log4j 配置多个 Logger
引言 Log4j 是 Java 的主流日志框架,通过灵活的配置可以提供各种类型的日志服务. 在使用 Log4j 进行实际项目开发的过程中,有时不想使用 rootLogger 记录器,把所有的日志都输出 ...
- Java 自定义常量
Java 中的常量就是初始化或赋值后不能再修改,而变量则可以重新赋值. 我们可以使用Java 关键字 final 定义一个常量,如下 final double PI = 3.14; 注意:为了区别 J ...
- 2.2 CPU 上下文切换是什么意思?(下)
怎么查看系统的上下文切换情况 过多的上下文切换,会把 CPU 时间消耗在寄存器.内核栈以及虚拟内存等数据的保存和恢复上,缩短进程真正运行的时间,成了系统性能大幅下降的一个 元凶. 使用 vmstat ...
- 3.21-22 od、tee
3.21 od:按不同进制显示文件 od命令用于输出文件的八进制.十六进制或者其他格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符. -A 地址进制 按指定的进制 ...