xxtea
那么xxtea又来了!
相比于xtea,乃至tea,这次的改进可谓是大改进,在安全性和加密流程上做了较为巨大的改动,整体安全性也得到了提升:
1、处理任意长度数据
2、增强扩散性和抗差分攻击能力
3、key调度更合理
观察tea和xtea,不难发现其实改动并不大,而且分组明文块的大小始终固定为八字节难免会存在安全性问题。 包括xtea和tea只在一个块中的两个半块进行扩散等等。
XXTEA = XTEA 的多块版本 + 非线性轮函数改进 + 轮数随数组长度调整 + 修复 Block TEA 弱点
xxtea采用相邻半块进行更新,而tea,xtea只在一个块中的两个半块更新:
1
| v[i] = v[i] + F( v[i-1], v[(i+1)%n], sum, K[i&3] )
|
下面从5个方面来看看区别:
存在意义
| 算法 |
目标 |
| XTEA |
修复 TEA 的弱点(等价密钥问题、周期性问题),适用于固定 64-bit 分组加密 |
| XXTEA |
扩展 XTEA,支持任意长度数据块,修复原 Block TEA 的弱点,提高多块消息的安全性 |
数据块结构
| 特性 |
XTEA |
XXTEA |
| 分组大小 |
64-bit(v0, v1 两个 32-bit 半块) |
任意长度数组 ≥2 个 32-bit 单元 |
| 数据处理 |
只处理两个半块 |
循环处理整个数组,每块受邻居影响 |
轮函数与数据扩散
| 特性 |
XTEA |
XXTEA |
| 每轮更新 |
v0 或 v1 交替 |
每块 v[i] 更新,受左右邻居影响 |
| 数据扩散 |
限于两个半块之间 |
整个数组,扩散性强 |
| 轮数 |
固定 64 |
随数组长度 n 调整(6 + 52/n) |
| 非线性组合 |
移位 + 加法 + XOR |
移位 + XOR + 加法 + 邻居影响 |
key调度
| 特性 |
XTEA |
XXTEA |
| key_index 来源 |
sum 的 bit:(sum&3, (sum>>11)&3) |
块索引 i & 3 |
| key 使用规律 |
随轮数 sum 决定,跳跃式但依赖 sum |
直接依赖块索引,循环全数组,更简单且安全 |
| key 与数据块关联 |
仅两个半块 |
所有块都用 key 参与更新 |
安全性对比
| 特性 |
XTEA |
XXTEA |
| 弱点修复 |
修复 TEA 的等价密钥问题和周期性弱点 |
修复 Block TEA 多块弱点,增强扩散和抗差分攻击能力 |
| 抗差分攻击 |
有限扩散,攻击难度比 TEA 高 |
扩散性强,攻击难度更大 |
| 适用场景 |
小分组、嵌入式 |
任意长度消息,多块数据加密 |
总结:
- XTEA = TEA 改进版,固定 64-bit 分组,key 由 sum 决定,轮数固定。
- XXTEA = XTEA 的多块扩展版,可加密任意长度数组,轮函数覆盖全数组,每块受邻居影响,key 由块索引决定,扩散性更强。