Luffa算法的各种密码分析方法全面盘点
Luffa是 NIST SHA-3 竞赛第二轮候选算法之一,其设计融合了变种 sponge 结构与并行置换。尽管未能进入最终评选,但其组件在约减轮数下被发现了多种密码分析弱点。以下按攻击类型对 Luffa 的主要密码分析方法进行系统盘点。
🔓伪攻击(Pseudo-Attacks)
伪攻击假设攻击者能控制或修改初始值(IV),而非标准安全模型。Jia 等人系统研究了 Luffa 的伪碰撞、伪第二原像与伪原像攻击。
伪碰撞与伪第二原像
由于 Luffa 的消息注入函数MI是线性的,求其逆可轻易构造伪碰撞对。对 Luffa‑256,仅需改变 5 比特的 IV 即可获得伪碰撞和伪第二原像;Luffa‑384 需改变 7 比特,Luffa‑512 需 12 比特差分。
伪原像
- Luffa‑224/256:给定哈希值,仅需2次迭代即可得到伪原像。
- Luffa‑384:需约264
次迭代与267
字节内存(扩展广义生日攻击)。
- Luffa‑512:复杂度升至2128
次迭代与2132
字节内存。
这些伪攻击可直接转化为 NMAC 的相关密钥伪造攻击。
📈高阶差分攻击与零和区分器
Watanabe等人对 Luffa v1 的非线性置换Qj进行了代数次数分析,发现其增长慢于理想置换。
区分器结果
- 利用一个块消息,可构造最多7/8步Luffa v1 的区分器,攻击需2216
条消息。
- Aumasson 与 Meier 提出的零和攻击(高阶差分的应用)原需281
输入,经优化后可降至233
。
对 Luffa v2 的适用性
Luffa v2在末轮强制增加了一个空白轮,使代数次数不低于 256,因此高阶差分攻击不威胁完整轮数的 Luffa v2。
🔄旋转攻击
针对 Luffa 置换的旋转特性,研究者定义了“旋转对”,并证明了“与”“或”运算对旋转关系的等效性。
区分攻击结果
- 3轮 Luffa 置换难以抵抗旋转攻击,区分算法的计算复杂度仅为216
。
- 该攻击属于区分攻击,不直接恢复密钥或构造碰撞,但表明约减轮数下置换的随机性不足。
💥回弹攻击(Rebound Attack)的变种
Khovratovich等人针对 Luffa v2 组件开发了改进的回弹方法,包括构建截断差分路径、多入站阶段差分搜索以及通过线性系统快速求解。
主要成果
- 对7/8轮Luffa‑256 构造了非平凡半自由起始碰撞,时间复杂度2104
,内存2102
。
- 对 Luffa v2 的完整置换给出了更高效的区分器,采用“先短测全样本、再长测子集”的模型,能显著快于随机置换找到差分路径的右对。
这是首次对 Luffa v1 置换以外的组件进行分析。
⚔️中间相遇攻击(Meet-in-the-Middle)
Luffa的链式结构中,消息注入函数与置换的组合可被中间相遇攻击利用。
攻击思路
寻找前两个块的部分碰撞(内部碰撞),从而构造更长的消息碰撞。该攻击对约减轮数的 Luffa 有效,但对完整轮数未发现严重威胁。
复杂度
攻击约需2w-1wnb次操作,其中w
为并行分支数,nb
为分支宽度。对 Luffa‑256(w=3
),复杂度约为2170
量级,未突破安全边界。
🧩内部碰撞与半自由起始碰撞
内部碰撞
Luffa的安全性依赖于消息注入函数抗内部碰撞的能力。研究者提出了多种通用攻击寻找内部碰撞,但均未对完整 Luffa 构成实际威胁。
半自由起始碰撞
- 对任意轮数的 Luffa,半自由起始碰撞复杂度为2256⋅w-1/w
。
- 对Luffa‑512,该复杂度可降至2204.8
。
- 对7/8轮 Luffa‑256,回弹攻击将半自由起始碰撞复杂度降至2104
(时间)与2102
(内存)。
🧬滑动攻击(Slide Attack)
Luffa的最终化过程包含重复的空白迭代,可能遭受滑动攻击。官方支持文档分析了滑动攻击对最终化阶段的影响,但未发现对完整算法的实际威胁。
🛡️其他攻击与通用分析
暴力碰撞与固定 IV 碰撞
对4/8步Luffa‑256 v2,使用精细消息修改技术,可在复杂度290下找到固定初始向量的碰撞。这是首个针对固定 IV 的碰撞分析。
随机性区分
对8轮完整置换,存在非随机性区分器,复杂度为2224。
侧信道攻击
官方文档评估了侧信道攻击的抵抗力,Luffa 的 S 盒实现需注意时序泄露防护。
💎总结
攻击类型 | 目标 | 轮数/变体 | 复杂度 | 实际威胁 |
伪碰撞/伪第二原像 | 哈希函数 | 完整(控制 IV) | 极低(5‑12 比特 IV 改变) | 仅相关密钥模型 |
伪原像 | 哈希函数 | 完整 | Luffa‑256: 2 次迭代;Luffa‑512:2128 | 仅伪设置 |
高阶差分区分器 | 置换 | 7/8 步 (v1) | 2216 | 不威胁完整轮 |
零和区分器 | 置换 | 约减轮 | 233 | 不威胁完整轮 |
旋转区分攻击 | 置换 | 3 轮 | 216 | 仅约减轮 |
回弹攻击 | 压缩函数 | 7/8 轮 (v2) | 2104 | 不威胁完整轮 |
中间相遇 | 链式结构 | 约减轮 | ≈2170 | 不威胁完整轮 |
内部碰撞 | 链式结构 | 通用 | 未突破安全边界 | 无实际威胁 |
固定 IV 碰撞 | 哈希函数 | 4/8 步 (v2) | 290 | 仅约减轮 |
滑动攻击 | 最终化 | --- | 未发现实际威胁 | 无实际威胁 |
总体评价:Luffa 在完整轮数下对所有已知攻击均保持了足够的安全裕度。上述攻击绝大多数针对约减轮数或伪/半自由起始模型,其复杂度远高于暴力搜索,未能对标准安全目标(抗碰撞、抗原像)构成实际威胁。Luffa 的结构设计——尤其是 v2 中增加的空白轮——有效抵御了高阶差分等代数攻击,但其消息注入函数的线性特性在伪设置下较为脆弱。