我们要讨论的最后一个分组密码加密算法是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算法的更多相关文章

  1. 利用TEA算法进行数据加密

    TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计. ...

  2. 【搬运】Tea算法Java实现工具类

    最近在做数据加密,目标是实现平台app的数据安全性,所以准备使用AES+Base64进行加密,适逢一个特长的json串AES加密不了,于是在谷歌了各种算法,判断是否合用,参见 各种加密算法比较 一文中 ...

  3. 【常见加密方法】Base64编码&Tea算法简介

    Base64编码 [Base64编码是什么] Base64是一种基于64个可打印字符来表示二进制数据的表示方法. ——维基百科 Base64,顾名思义,是基于64种可视字符的编码方式.这64种符号由A ...

  4. 数据的加密传输——单片机上实现TEA加密解密算法

    各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性.常用的加密解密算法比如DES.RSA等,受限于单片机的内存和运算速度,实 ...

  5. TEA,XXTEA介绍,对称加密

    总结:在使用加密的时候,我们可以加入随机数,这样相同的明文,每次加密后得到不同的密文,同时可以在密文中加入密文有效期,控制密文的有效时间长度. 针对有的功能扩展使用,很好的思想. TEA对 64 位数 ...

  6. TEA(Tiny Encryption Algorithm)

    简介 TEA是一种简单高效的加解密算法,以速度快,实现简单著称.TEA算法每一次可以操作64-bit数据,采用128-bit作为key,算法采用迭代的形式,推荐的迭代轮数是64,最少32. 代码(默认 ...

  7. TEA加密

    TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据.TEA特点是速度快.效率高,实现也 ...

  8. TEA加密算法的C/C++实现

    TEA(Tiny Encryption Algorithm) 是一种简单高效的加密算法,以加密解密速度快,实现简单著称.算法真的很简单,TEA算法每一次可以操作64-bit(8-byte),采用128 ...

  9. Tea加密算法和XxTea加密算法

    TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据.TEA特点是速度快.效率高,实现也 ...

随机推荐

  1. jQuery导航菜单防刷新

    为了实现最主要的功能,只写了一个粗糙的案例 CSS样式 ul,li{ list-style-type:none;} .nav { width: 100%; height: 35px; line-hei ...

  2. Sun开发的JINI技术在网络中的应用

    一.概述 Sun公司开发的Jini系统是一种创新技术,听说它的人很多但较少被人理解.Jini系统可利用Java扩展网络计算的范围,并有可能成为最佳解决方案. Jini是Sun公司的研究与开发项目,它能 ...

  3. 转:四种方案解决ScrollView嵌套ListView问题

    转载自:http://blog.sina.com.cn/s/blog_46798aa80101lxbk.html 原始的连接已经不知道是哪里了,项目中遇到了同样的问题,花了一下午都没有想到是嵌套引起的 ...

  4. select random item with weight 根据权重随机选出

    http://eli.thegreenplace.net/2010/01/22/weighted-random-generation-in-python/ 类似俄罗斯轮盘赌

  5. iTerm 使用expect实现自动远程登录,登录跳板机

    #!/usr/bin/expect set timeout 10 spawn ssh -p [lindex $argv 0] [lindex $argv 1]@[lindex $argv 2] exp ...

  6. HDU 4707 Pet(BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4707 题目大意:在一个无环的,从0开始发散状的地图里,找出各个距离0大于d的点的个数 Sample I ...

  7. 解决Mysql的主从数据库没有同步的两种方法

    今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist;   查看下进程是否Sleep太多.发现很正常.show master status; ...

  8. jQuery 滚动动画简单版

    动画的思路很简单,点击页面上一个元素,页面滚动到指定位置.下面介绍一下我3个小时百度的研究成果: 首先是html部分: <html> <body> <a>顶部< ...

  9. css按钮自适应

    原理:利用a标签和i标签各自一个背景组合成为按钮,达到自适应. <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  10. PHP trim去空格函数

    trim() 能除去的字符有“ ”空格."\t"水平制表符."\n"换行符."\r"回车符."\0字符串结束符".&qu ...