具有秘密 S 盒的类 PRESENT 密码的密码分析
1. 过滤方法与松弛截断差分
- 蝴蝶结过滤法 :若 ${x_1, y_1}$ 和 ${x_2, y_2}$ 属于同一集合 $D_e$,那么 ${x_1, y_2}$ 和 ${x_2, y_1}$ 会属于另一个集合 $D_{e’}$($e’ \neq e$),同理,${x_1, x_2}$ 和 ${y_1, y_2}$ 会属于集合 $D_{e’‘}$($e’’ \notin {e, e’}$)。假设已知两个集合 $D’$ 和 $D’‘$ 覆盖 $F_2^4$,且 ${a, b} \in D’$,${a, c} \in D’‘$,若 ${c, d} \in D’$,则 ${b, d} \in D’‘$。按此规则在两个集合间跳转,会形成蝴蝶结形状的循环。
- 松弛截断差分 :之前的方法仅在密文对中只有一个活动 S 盒时增加计数器,此事件概率低,需大量明文对才能对其分组。而权重为 1 的差分在密码中适度扩散,使密文中出现多个活动 S 盒的可能性更大。可通过查看有多个活动 S 盒的密文对来更高效地寻找细长对候选。允许的活动 S 盒越多,噪声越多,存在信噪比和信号强度的权衡。但允许较多活动 S 盒也不会引入过多噪声,可提高攻击效率。为每个输入 S 盒 $S_i$ 和每对 ${x, y}$ 引入计数器 $C_{i,j}({x, y})$,当 $S_i$ 的输入对 ${x, y}$(其他 S 盒输入随机固定)导致恰好 $j$ 个 S 盒活动时($j$ 范围 1 到 15),增加计数器。加密多次后对某些 $i, j$ 的计数器排序,若覆盖过滤器据此识别出集合,则认为是正确的细长