利用动态立方体攻击破解Grain - 128流密码
1. 引言
设计良好的密码系统应能抵御各类已知的密码分析攻击,如区分攻击和密钥恢复攻击。这两种攻击紧密相关,很多情况下,区分器可扩展为密钥恢复攻击。例如在迭代分组密码的密钥恢复攻击中,攻击者先为一定轮数的迭代分组密码构建区分器,再猜测部分密钥并用于部分解密最后一轮的密文,通过区分器验证猜测的正确性。但这种方法通常不适用于流密码,因为流密码无法进行部分解密。
本文聚焦于从立方体测试器获得的区分器,并展示如何将其用于密钥恢复攻击。立方体测试器是一类通用区分器,可应用于任何密码系统的黑盒表示。立方体攻击与立方体测试器相关,二者都会对密码函数在部分输入值上的输出求和。不过,立方体测试器用求和结果区分密码与随机函数,而立方体攻击用求和结果推导密钥位的线性方程。
立方体攻击和立方体测试器都分两个阶段:与密钥无关的预处理阶段和密钥值固定未知的在线阶段。立方体攻击是密钥恢复攻击,比立方体测试器更强,但预处理阶段通常更复杂,成功概率更低。原因在于立方体攻击要求密码输出函数的和具有特定性质,即表示为密钥位的多项式时次数要低;而立方体测试器只要求求和值具有易测试的性质,如平衡性。
2. 立方体攻击和立方体测试器
2.1 立方体攻击
在几乎所有密码方案中,每个输出位都可用一个关于秘密变量(密钥位)和公共变量(分组密码和MAC中的明文位、流密码中的IV位)的多元主多项式 $p(x_1, \cdots, x_n, v_1, \cdots, v_m)$ 来描述。密码分析者可通过为公共变量赋值来调整主多项式,目标是求解所得多项式方程组中的公共秘密变量。
基本立方体攻击是求解