我们要讨论的最后一个分组密码加密算法是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. Linq to SQL只支持SQL Server(所选对象使用不支持的数据提供程序)

  2. NChome如何创建单据跟主子表还有扩展开发要怎么弄?

    单据表跟主子表笔记做在笔记本里面 扩展开发在网络备份里面

  3. Spring MVC 3.0 返回JSON数据的方法

    Spring MVC 3.0 返回JSON数据的方法1. 直接 PrintWriter 输出2. 使用 JSP 视图3. 使用Spring内置的支持// Spring MVC 配置<bean c ...

  4. 学习XAML中的一些基本语法

    1:slider 控件 2:x:名称空间的使用 3:事件处理器 event handler {    <Button x:Name="button1" Click=" ...

  5. O-C相关-08-动态类型与静态类型

    08-动态类型与静态类型 1, 什么是动态类型和静态类型 1) 动态语言 又叫动态编程语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所周知的EC ...

  6. Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面

    Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢 ...

  7. O_NONBLOCK模式下写fifo的注意事项

    后台网络通信框架一般采用fifo来作为事件通知的机制:创建一个fifo,然后以非阻塞读和非阻塞写的方式打开fifo,然后把fd加到epoll里面,作为通知网络事件的fd. 在这里有个隐晦的问题容易被忽 ...

  8. iframe 的基本操作

    要在服务器环境下才行 1.iframe 下操作父页面window.parent.document.getElementById //全部支持window.top //最顶层ie 下的iframe的on ...

  9. PHP curl 采集内容之规则 1

    <?phpheader("Content-type:text/html; charset=utf-8");$pattern = '/xxx(.*)yyyy/isU'; //i ...

  10. .NET多线程编程(转)

    在.NET多线程编程这个系列我们讲一起来探讨多线程编程的各个方面.首先我将在本篇文章的开始向大家介绍多线程的有关概念以及多线程编程的基础知识;在接下来的文章中,我将逐一讲述.NET平台上多线程编程的知 ...