TEA算法
我们要讨论的最后一个分组密码加密算法是TEA(Tiny Encryption Algorithm)。到目前为止,我们在前面所呈现的连线图可能会使你得出如下结论:分组密码加密算法必须是复杂的。TEA却能够很好地说明,事实并非如此。
TEA算法使用64位长度的分组和128位长度的密钥。该算法设定基于32位单词的计算结构,其中所有的操作都是内在地模232的,任何第32位之后的二进制位都会被自动地截除。计算的轮数是可变的,但是必须足够大。通常明智的做法是选择32轮以确保安全。不过,TEA算法的每一轮更像Feistel密码结构(类似DES算法那样的结构)的两轮,所以这大约相当于DES算法的64轮,已经很可观了。
分组密码加密算法设计中,在每轮运算的复杂性和需要执行的轮数之间,始终要进行一种内在的权衡。类似DES这样的密码算法力求在二者之间达成平衡。而AES算法则尽可能地减少运算的轮数,其代价就是会有更加复杂的轮函数。某种意义上,TEA算法可以被看做走向了与AES算法设计思路相反的另一个极端,因为TEA算法使用非常简单的轮函数。不过,其轮运算如此简单的直接结果就是,运算的轮数必须足够大才能获得较高的安全水平。图3-7中给出了TEA加密算法的伪码(其中运用了32轮运算),其中"《"是左移位(非循环)操作,而"》"是右移位(非循环)操作。
关于TEA算法,有种有意思的情况值得引起注意,那就是这个算法不是Feistel密码结构,所以需要分别独立地加密和解密例程。不过,TEA算法在尽可能地接近Feistel密码结构,虽然实际上它并不是--TEA算法使用加法和减法取代了异或运算。即便如此,对于TEA算法来说,需要分别独立地加密和解密例程这件事并不是一个太大的问题,毕竟所需的代码行是如此之少,而且即使执行很多轮次,该算法也仍然是相当高效的。图3-8给出了TEA的解密算法,此处仍设定其执行32轮运算。
对于TEA算法,存在一种稍微有点儿晦涩的相关密钥攻击(见参考文献[163])。也就是说,如果密码分析者了解到两个TEA消息的加密密钥是以某种非常特殊的方式相互关联的,就可以恢复出明文。在绝大多数环境中,这都是一种低概率的攻击,兴许你可以放心地忽略不计。但是,如果你担心的正是这样一种攻击行为,那么还有一种TEA算法的稍微复杂点的变种,称为扩展TEA,或简称为XTEA(见参考文献[218]),该扩展算法可以解决上述潜在的问题。此外,还有TEA的简化版本,称为简版TEA,或简称为STEA,当然这个简版算法非常脆弱,主要用于阐述一些特定类型的攻击手段(见参考文献[208])。
TEA算法的更多相关文章
- 利用TEA算法进行数据加密
TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计. ...
- 【搬运】Tea算法Java实现工具类
最近在做数据加密,目标是实现平台app的数据安全性,所以准备使用AES+Base64进行加密,适逢一个特长的json串AES加密不了,于是在谷歌了各种算法,判断是否合用,参见 各种加密算法比较 一文中 ...
- 【常见加密方法】Base64编码&Tea算法简介
Base64编码 [Base64编码是什么] Base64是一种基于64个可打印字符来表示二进制数据的表示方法. ——维基百科 Base64,顾名思义,是基于64种可视字符的编码方式.这64种符号由A ...
- 数据的加密传输——单片机上实现TEA加密解密算法
各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性.常用的加密解密算法比如DES.RSA等,受限于单片机的内存和运算速度,实 ...
- TEA,XXTEA介绍,对称加密
总结:在使用加密的时候,我们可以加入随机数,这样相同的明文,每次加密后得到不同的密文,同时可以在密文中加入密文有效期,控制密文的有效时间长度. 针对有的功能扩展使用,很好的思想. TEA对 64 位数 ...
- TEA(Tiny Encryption Algorithm)
简介 TEA是一种简单高效的加解密算法,以速度快,实现简单著称.TEA算法每一次可以操作64-bit数据,采用128-bit作为key,算法采用迭代的形式,推荐的迭代轮数是64,最少32. 代码(默认 ...
- TEA加密
TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据.TEA特点是速度快.效率高,实现也 ...
- TEA加密算法的C/C++实现
TEA(Tiny Encryption Algorithm) 是一种简单高效的加密算法,以加密解密速度快,实现简单著称.算法真的很简单,TEA算法每一次可以操作64-bit(8-byte),采用128 ...
- Tea加密算法和XxTea加密算法
TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据.TEA特点是速度快.效率高,实现也 ...
随机推荐
- html5 meta标签属性整理
声明文档使用的字符编码 <meta charset='utf-8'> 声明文档的兼容模式 //指示IE以目前可用的最高模式显示内容<meta http-equiv="X-U ...
- c#面向对象编程基础
1. 为什么要有面向对象? (1) 增加代码重用. (2)降低维护负担,将具备独特性质的代码封装起来,修改程序时,相互不会影响. 2.数据封装用来解决全局变量不易维护的问题. 3.多态: ...
- 经历:sybase的sql查询,当传递的参数中包含全角空格(\u00a0),查询慢
今天,我遇到了一个sybase数据库查询的问题.一句简单的sql,但是不知道为什么查询不出来,导致生产生产服务器频频挂掉.吓得我的小心脏砰砰啊. select DISTINCT A.FCIL_CDE ...
- storm学习之入门篇(二)
Strom的简单实现 Spout的实现 对文件的改变进行分开的监听,并监视目录下有无新日志文件添加. 在数据得到了字段的说明后,将其转换成tuple. 声明Spout和Bolt之间的分组,并决定tup ...
- Hdu 4514 湫湫系列故事——设计风景线
湫湫系列故事--设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...
- Xcode 5.1 更新后插件不能用
打开目录 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins 右击选择"显示包内容" 找到"Inf ...
- Python3 列表
list是一种有序的集合,可以随时添加和删除其中的元素. >>> classmates = ['Michael', 'Bob', 'Tracy'] >>> clas ...
- php ini_set('display_errors', $value)
正常情况下,在开发模式中,把错误显示出来,方便纠正,但在布署模式中,就得把错误关闭: ini_set('display_errors', 1); // 开启 ini_set('display_erro ...
- 使用Fiddler提高前端工作效率 (介绍篇)
1. Fiddler 是什么? Fiddler是用C#编写的一个免费的HTTP/HTTPS网络调试器.英语中Fiddler是小提琴的意思,Fiddler Web Debugger就像小提琴一样,可以让 ...
- ecshop改造读写分离
前两天配置好了mysql主从方式,今天就拿ecshop练习读写分离.以下代码仅供学习参考,不成熟的地方,还需完善. config.php <?php $db_name = "ecsho ...