乘法差分在密码分析中的应用
1. MultiSwap 密码分析
1.1 MultiSwap 密码概述
MultiSwap 密码用于微软的数字版权管理子系统,它完全基于 32 位字进行操作,维护两个内部状态字 $s_0$ 和 $s_1$,并使用 12 个 32 位子密钥 $k_0, \cdots, k_{11}$。若要使密码可逆,子密钥 $k_0, \cdots, k_4, k_6, \cdots, k_{10}$ 必须为奇数。在非反馈模式下,通常 $s_0 = s_1 = 0$。该密码对 64 位块 $(x_0, x_1)$ 进行操作以生成密文 $(c_0, c_1)$。
1.2 选择明文攻击
- 获取 $k_5$ :当输入为 $(0, x_1)$ 时,因为 $s_0 = s_1 = 0$,所以 $t = s_0 + x_0 = 0$,进而 $u = 0$,可得 $s_0’ = s_1’ = k_5$。经过后半部分处理后,无论 $x_1$ 为何值,输出都满足 $c_1 = c_0 + k_5$。因此,使用一个形式为 $(0, x_1)$ 的选择明文消息即可推导出 $k_5 = c_1 - c_0$。
- 获取 $k_{11}$ :输入为 $(0, -k_5)$ 时,$s_0’ = s_1’ = k_5$。在后半部分,由于 $x_1 = -k_5$,$w = s_0’ + x_1 = 0$,经过乘法和交换操作后,输出为 $c_0 = k_{11}$ 和 $c_1 = k_5 + k_{11}$。所以,一个 2 消息自适应选择明文攻击可以暴露 $k_5