基于NFSR密码系统的度评估
摘要
本文从代数次数的角度研究基于非线性反馈移位寄存器(NFSR)的密码系统的安全性。我们首先提出一个用于迭代估计NFSR基密码系统代数次数的通用框架,该框架利用了一种称为 numeric mapping的新技术。在此通用框架基础上,我们进一步提出了一个具体且高效的算法,用于估计类Trivium密码的代数次数上界。我们的算法具有线性时间复杂度,并且所需内存可忽略不计。作为示例,我们将该算法应用于 Trivium、Kreyvium和 TriviA-SC,通过设置不同的输入变量,揭示了这些密码代数次数的各种上界。借助该算法,我们能够在立方体测试器中使用任意大小的立方体,而此前普遍认为这对于基于NFSR的密码系统是不可行的。由于算法效率很高,我们可以穷举大量大尺寸的立方体。因此,我们获得了针对轮数减少的 Trivium和 TriviA-SC的最佳已知区分攻击,以及对 Kreyvium的首次密码分析。我们在 Trivium上的实验表明,该算法不仅在计算上高效,而且在被攻击轮次的估计方面也十分准确。我们为 Kreyvium和 TriviA-SC找到的最佳立方体大小均超过60。据我们所知,我们的工具是首个形式化且系统化地用于寻找NFSR基密码系统代数次数上界的工具,这也是首次在NFSR基密码系统的密码分析中使用超出实际计算能力范围的大尺寸立方体。该方法未来在密钥恢复攻击及其他密码原语的应用中也具有潜在价值。
关键词: 非线性反馈移位寄存器 · Stream密码 · Distin-区分攻击 · Cube tester · Trivium · Kreyvium · TriviA-SC
1 引言
非线性反馈移位寄存器(NFSR)是现代密码原语中的常见组件,尤其在射频识别设备中(射频识别)和无线传感器网络应用。非线性反馈移位寄存器比线性反馈移位寄存器更抗密码分析攻击。许多著名的轻量级密码算法基于非线性反馈移位寄存器构建,包括流密码 Trivium[8,10]和Grain [1,27,28],它们被选入 eSTREAM项目组合中面向硬件的流密码最终名单;认证密码ACORN [44]被选为CAESAR竞赛第三轮候选算法之一;分组密码家族KATAN/KTANTAN [9],以及哈希函数 Quark[4,5]。其中,Trivium因其简洁性和高性能而受到最多关注,同时表现出显著的抗密码分析能力。受Trivium设计的启发,陆续开发出多种不同的密码算法,例如分组密码家族KATAN/KTANTAN、认证密码ACORN以及流密码 Kreyvium[11]和 TriviA-SC[13]。
大多数密码原语,包括基于NFSR的密码系统,都可以用可调布尔函数来描述,这些函数包含秘密变量(e.g.,密钥比特)和公共变量(e.g.,明文比特或初始向量比特)。这些布尔函数的代数次数在相应密码原语的安全性中起着重要作用。事实上,代数次数较低的密码原语容易受到许多已知攻击的影响,例如高阶差分攻击 [30,32,35],、代数攻击 [15–18],、立方体攻击 [19–22], 和积分攻击 [31]。
对于基于NFSR的密码系统,立方体攻击和高阶差分攻击是已知攻击中最强有力的密码分析工具。目前已知比穷尽搜索更快的对 Trivium的最佳密钥恢复攻击是对其变种进行的立方体攻击,该攻击将初始化过程减少到 1152[21,26],轮中的799轮;而对 Trivium的最佳区分攻击则通过立方体测试器将轮次减少到839轮[3,33]。需要注意的是,此处未包含概率未知的可能密钥恢复攻击,例如[41], ,或仅针对少量弱密钥的攻击,例如[29]。密码 Grain‐128在面对立方体测试器[2,39]时表现出的弱点部分促成了 Grain‐128a[1]的设计。事实上,完整的Grain‐128已在理论上被动态立方体攻击[19,22]攻破。所有这些攻击都利用了密码系统生成的可调布尔函数中存在的低次关系,即初始向量比特与密钥流比特之间的低次关系。
对于现代密码原语而言,计算其代数次数的精确值是困难的。在过去的三十年密码分析发展过程中,已经开发出若干理论工具来估计迭代置换代数次数的上界,并同时被用于攻击迭代密码[6,7,12,40]。
然而,对于非线性反馈移位寄存器(NFSR),除了符号计算和统计分析之外,可用于估计其代数次数的工具很少。已知的技术高度依赖于计算能力,且密码分析结果受限于现有的计算资源。例如,迄今为止,在基于非线性反馈移位寄存器的密码分析中,从未使用过大小超过54的立方体密码系统,无论是立方体攻击还是立方体测试器。为了实现更优的攻击,密码分析人员必须极度利用计算资源,例如使用专用的可重构硬件[19]。这通常需要高昂的财务成本或高能耗。尽管动态立方体攻击[19,22]可以达到更高的攻击复杂度,但它们仍然受到立方体大小的限制。
1.1 我们的贡献
在本文中,我们将注意力集中在评估基于NFSR的密码系统的代数次数上。为了克服上述现有局限性,我们采用了一种称为数值映射的新技术,以迭代估计非线性反馈移位寄存器内部状态的代数次数的上界。基于这一新工具,我们提出了一种用于估计基于NFSR的密码系统代数次数的算法。
作为示例,我们改进并应用我们的算法于类Trivium密码,包括 Trivium、Kreyvium和 TriviA-SC。 Trivium使用80位密钥和80位初始向量,而 Kreyvium和 TriviA-SC均使用128位密钥和128位初始向量。这三种密码均有1152轮初始化。我们改进后的算法能够针对任意规模的输入变量集(例如所有密钥和IV比特、全部或部分IV比特),给出类Trivium密码代数次数的一个上界。该算法在初始化轮次数量上具有线性时间复杂度,并且所需内存可忽略不计。换句话说,其运行速度几乎与密码本身一样快(最多相差一个常数因子)。此外,通过该算法我们对轮数减少的Trivium、Kreyvium和 TriviA-SC进行了若干实验,通过设置不同的输入变量获得了多个代数次数的上界。结果表明,当以所有密钥和IV比特作为输入变量时,Trivium、Kreyvium和TriviA-SC生成的密钥流比特未达到最大代数次数的最大初始化轮数分别至少为907、982和1121(相对于完整的1152轮);而当以所有IV比特作为输入变量时,对应的轮数分别为793、862和987。
我们进一步应用我们的算法,以利用立方体测试器中大尺寸的立方体,而据文献所述,这对于基于NFSR的密码系统被认为是不可行的。在实验中,我们将密钥比特设为符号常数i.e.,即在立方体变量上,任何密钥比特的代数次数均视为0。这与未知密钥设定下的区分器一致。由于我们的算法非常快速,我们可以在普通PC上用十几分钟穷举所有大小为 37 ≤ n ≤ 40且不包含相邻索引的立方体,用于 Trivium。这类立方体的总数约为 225。在此论文之前,测试所有这些立方体需要约 c262次密码操作,且测试的置信度依赖于 c;而我们的算法是确定性的。随后,我们找到了一个大小为37的立方体,在该立方体上,837轮Trivium的密钥流比特的代数次数严格小于37。我们还通过对100个随机密钥进行实验验证了这一结果。该立方体上的和(在立方体攻击和立方体测试器中称为超多项式)所对应的最小轮数在我们的实验中被检测到为839,这意味着我们的算法不仅在计算上高效,而且在受攻击轮次的估计上也准确。我们的实验表明,该立方体还可用于区分 842轮 Trivium。所有大小为 61 ≤ n ≤ 64且不包含相邻索引的立方体在几小时内就被穷尽。这类立方体的总数约为 230。按照传统方法,大约需要 c291次密码操作。我们为Kreyvium找到的最佳立方体大小为61,可用于区分872轮 Kreyvium。我们为 TriviA-SC及其后续版本找到的最优立方体分别为大小63和大小61,可分别用于区分1035轮和1047轮。据我们所知,这是首次1使用大小超过60的立方体对基于NFSR的密码系统进行攻击。
因此,我们获得了迄今为止针对流密码Trivium和 TriviA-SC的最佳区分攻击,以及对Kreyvium的首次外部密码分析。我们的结果总结在表1中,并与之前的攻击进行了比较。请注意,此表未包含劣于穷尽搜索的区分器或仅针对少量弱密钥的区分器。我们将在下文中详细讨论相关工作。
| 密码 | #轮次 | 复杂度 | 参考文献 |
|---|---|---|---|
| Trivium | 790 | 230 | [3] |
| Trivium | 798 | 225 | [29] |
| Trivium | 806 | 244 | [39] |
| Trivium | 829 | 253 | [38] |
| Trivium | 830 | 239 | [43] |
| Trivium | 839 | 237 | [33] |
| Trivium | 842 | 239 | 第 4 节 |
| Kreyvium | 872 | 261 | 第 4 节 |
| TriviA-SC(v1) | 930 | 236 | [38] |
| TriviA-SC(v1) | 1035 | 263 | 第 4 节 |
| TriviA-SC(v2) | 950 | 2 36 | [38] |
| TriviA-SC(v2) | 1047 | 2 61 | 第 5 节 |
| 简化 TriviA-SC 1152 | 2 120 | [45] | |
| 简化 TriviA-SC 1152 | 1152 | 2 63 | 第 4 节 |
1在与我们工作并行且独立的研究中,Todo et al。[41]也利用了大立方体用于对基于 NFSR的密码系统进行攻击,例如 Trivium、Grain‐128a 和 ACORN。
1.2 相关工作
代数次数的上界。 在EUROCRYPT 2002上,坎托和维多[12]提出了一种利用沃尔什谱来确定复合函数代数次数上界的理论,并将其应用于Feistel分组密码特别是MISTY1的一种推广形式的高阶差分密码分析。近年来,布尔阿等人对该理论进行了改进,[6,7]并将其应用于包括Rijndael‐256在内的多种分组密码和哈希函数的密码分析 Keccak。这些估计代数度的理论适用于迭代密码。
类似地,我们的工作也是从复合函数代数次数的一个上界出发,但不依赖于沃尔什谱,而是基于一个简单的事实。
最近,在EUROCRYPT 2015上,户斗[40]通过引入划分性质并将其应用于多种迭代密码原语的积分密码分析,发现了一种用于搜索SPN和费斯妥密码代数次数上界的新工具。户斗和森井在[42]中提出的基于比特的划分性质与我们的工作更为相关。与我们的研究同时,该工具已被户斗et al. [41]用于估计基于NFSR的密码系统(包括 Trivium、Grain‐128a和ACORN)的代数次数,并应用于对这些密码的立方体攻击。然而,我们的思路与划分性质仍有本质不同。在某些方面,基于划分性质的工具由于其高时间复杂度,受限于轮数和输入变量的规模。划分性质得到的上界可能更精确,而我们的工具则快得多,且没有此类限制。
类Trivium密码的攻击。 值得注意的是,表[45]中列出的所有攻击方法,除了1之外,均为立方体测试器,这是一种高阶差分攻击的变体,由 Aumasson等人在[3]首次提出。立方体测试器不仅在区分攻击中非常有用,而且在密钥恢复攻击中也有应用,例如,动态立方体攻击[19,22]以及类似立方体攻击的密码分析[20]。
在Aumasson et al. 的工作之前,Trivium(由Canni`ere和Preneel于 2006年设计)已经吸引了大量类似的密码分析,特别是针对选择初始向量的统计攻击,e.g.,[23,24,37]。在密码分析人员过去十年的努力之后,对 Trivium的密码分析似乎已接近瓶颈,即使尚未达到顶峰。在不同统计模型下,多个立方体区分器达到了约830轮次,e.g.,[33,38,43]。尽管我们为 Trivium设计的区分器并未显著改进此前的结果,但我们寻找立方体的技术是新颖的,为 Trivium的立方体密码分析提供了新的全局视角。
此外,Knellwolf等[29]分别针对 231和 226的弱密钥提出了对868轮和 961轮的区分器,复杂度均为225。对于 Trivium,密钥恢复攻击也得到了深入研究。在[21],年,迪努尔和沙米尔利用立方体攻击实现了对缩减至767轮的 Trivium的实际完整密钥恢复。此后,富克和范内特[26]改进了该方法对 Trivium的立方体攻击,并在784轮后实现了实际的完整密钥恢复,在799轮后实现了完整密钥恢复,复杂度为 262。最近,Todo等人[41]提出了一种可能的832轮密钥恢复方法,其中一位密钥信息可在大约277的时间内以未知概率被获取。此外,Maximov和Biryukov[34]提出了针对完整密码的状态恢复攻击,其时间复杂度约为 c283.5,其中 c是求解包含192个变量的线性方程组的复杂度。
TriviA-SC[13]是一种由Chakraborti等人在CHES 2015上设计的流密码,用于认证加密方案TriviA中,该方案曾被选为CAESAR竞赛的第二轮候选者,但未进入第三轮。其后续版本 TriviA-SC(v2)[14],保持了相同的设计结构,仅在加载到初始内部状态的常数中翻转除三位外的所有位方面有所不同。
Sarkar等.[38]展示了针对两个版本分别缩减至930轮和950轮时的立方体区分器,其复杂度为 236。我们将这些区分器分别改进至1035轮和1047轮。Xu 等.的工作显示,对于移除了输出函数中唯一非线性项的 2120简化变体,在完整的1152轮上存在复杂度为 TriviA-SC的线性区分器。如表1所示,我们将其复杂度从 2120降低至 263 。TriviA-SC
Kreyvium是 Trivium的一个变体,由坎托等人在FSE 2016上为实现高效的同态密文压缩[11]而设计,具有128位安全。据我们所知,该论文首次提出了对 Kreyvium的密码分析。
1.3 组织结构
本文的其余部分结构如下:在第2节中,给出了基本定义与符号。第3节展示了我们用于估计基于NFSR的密码系统代数次数的通用框架。在第4节中,我们提出了一个具体算法,用于寻找类Trivium密码代数度的上界,并应用于 Trivium、Kreyvium和 TriviA-SC;而第5节进一步提出了一种改进算法,并将其应用于TriviA-SC。第6节对论文进行了总结。
2 预备知识
布尔函数与代数次数。 设 F2表示二元域,F n 2表示在 F2上的 n维向量空间。一个 n变量的布尔函数是从 F n 2到 F2的一个映射。用 Bn表示所有 n变量布尔函数的集合。一个 n变量的布尔函数 f可以唯一地表示为在 F2上的一个多变量多项式,
f(x1, x2,···, xn)= ⊕
c=(c1 ,···,c n)∈ F n
2
ac n
∏
i=1
x c i
i , ac ∈ F 2,
称为代数正规形(ANF)。 f的代数次数,记为deg(f),定义为max{wt(c) | ac = 0},其中 wt(c)是 c的汉明重量。设 gi(1 ≤ i ≤ m)是定义在 n个变量上的布尔函数。我们用 deg(G) =(deg(g1),deg(g2) ···,deg(gm)),表示 G=(g1, g2,···, gm)。
立方体测试器。 给定一个布尔函数 f和一个包含来自索引子集 I的变量相乘得到的项tI,该函数可以表示为包含 I的超集项与至少缺少 I中一个变量的项之和。
f(x1, x2,···, xn)= fS(I)· tI ⊕ q(x1, x2,···, xn),
其中 fS(I) 被称为 I在 f中的超多项式。立方体测试器的基本思想是,通过为项 tI中的变量子集赋予所有可能的取值,从函数f得到的所有导出多项式的符号和恰好等于 fS(I)。立方体测试器通过评估精心选择的项 tI(这些项是公共变量(例如,初始向量比特)的乘积)的超多项式,并尝试将其与随机函数区分开来。特别地,如果 f关于 I中变量的代数次数小于 I的大小,则超多项式 fS(I) 等于零常数。本文主要关注这种情况。有关立方体测试器的更多细节,可参考[3]。
非线性反馈移位寄存器。 非线性反馈移位寄存器(NFSRs)是密码原语的基本组成部分,尤其是流密码。每次系统被时钟触发时,内部状态向右移动,新的最左端比特由前一状态通过非线性函数 f计算得出。反馈比特的计算方式为
st+1= f(st,···, st−n+1),
其中 f可以是 n个变量中的任意函数。根据实现目的,最有用的情况是二元情况,其中每个单元包含一个比特,且 f是一个布尔函数。在本论文中,我们专注于这种二元情况。有关非线性反馈移位寄存器的更多细节,我们参考[25]。
3 一种估计基于NFSR的密码系统代数次数的迭代方法
与其他类型的密码原语(如费斯妥和SPN密码)相比,基于NFSR的密码系统通常每轮更新更少的比特,需要更多轮次来确保其安全性,并且其代数次数更加不规则。可能正是由于这一原因,除了实验分析外,目前还缺乏有效的理论工具来估计基于NFSR的密码系统的代数次数。
本节将介绍一种用于迭代估计基于NFSR的密码系统代数次数的通用思路。我们首先给出关于度的一个基本事实复合函数的度,并利用它来估计基于非线性反馈移位寄存器的密码系统的内部状态和输出的度。
设 f(x1, x2,···, xm) =⊕c=(c1,···,cm)∈Fm 2 ac∏
m
i=1 x ic i 是一个关于 m 个变量的布尔函数。我们定义如下映射,称为数值映射,并记为 DEG,
DEG: Bm × Zm → Z,
(f, D) → max ac=0{
m
∑
i=1
cidi},
其中 D=(d1, d2,···, dm)和 ac’是如前所定义的f的代数正规形的系数。
设 g1, g2,···, gm为 n个变量上的布尔函数, G=(g1, g2,···, gm)且deg(G) =(deg(g1),deg(g2) ···,deg(gm))。复合函数 h= f ◦ G的数值度定义为 DEG(f, deg(G)),简记为DEG(h)。若对所有1 ≤ i ≤ m均有 di ≥ deg(gi),其中 D=(d1, d2,···, dm),我们称DEG(f, D)为 h的超数值度。我们可以验证,h的代数次数总是小于或等于 h的数值度,即
deg(h)= deg(f(g1, g2,···, gm)) ≤ DEG(h)= max ac=0{
m
∑
i=1
ci deg(gi)}.
命题 1。 复合函数的代数次数小于或等于其数值度。
基于NFSR的密码系统通常包含一个更新函数 g和一个输出函数 f。内部状态由更新函数 g进行更新,而在经过足够轮数的初始化后,输出比特由输出函数 f生成。为了实现高效的实现,更新函数和输出函数通常具有极稀疏的项,例如, Trivium[8,10]和 Grain [1,27,28]。尽管这些函数较为简单,但在内部状态经过足够轮数更新后,仍缺乏能够精确计算其代数次数的工具。一种直接的方法是计算代数正规形,但随着轮数增加,该方法很容易超出内存限制。另一种更高效的方法是通过统计分析来测试代数正规形的系数,但这在很大程度上依赖于计算资源,并受到计算时间的限制。为了克服计算资源的限制,我们利用数值映射来估计代数次数。
推论2. 设 s(t)为基于非线性反馈移位寄存器的密码系统在第 t轮时的内部状态, g和 f分别为更新函数和输出函数。则更新比特和输出比特的代数次数分别不超过其数值度,即DEG(g,deg(s(t)))和DEG(f,deg(s(t)))。
示例1。 设 xt= xt−2xt−7+ xt−4xt−5+ xt−8是大小为8的非线性反馈移位寄存器的更新函数。对于 t= 16,我们有
x16= x14x9+ x12x11+ x8.
我们可以迭代地计算
x9= x2x7+ x4x5+ x1, x11= x2x4x7+ x1x4+ x4x5+ x6x7+ x3, x12= x3x5x8+ x2x5+ x5x6+ x7x8+ x4,
x14= x2x3x7x8+ x2x5x6x7+ x3x4x5x8+ x3x5x7x8 + x1x3x8+ x1x5x6+ x2x4x5+ x2x5x7+ x4x5x6
+ x5x6x7+ x1x2+ x2x7+ x4x7+ x7x8+ x6.
然后通过数值映射,我们得到
DEG(x16)= max{deg(x14)+ deg(x9), deg(x12)+ deg(x11), deg(x8)} = max{4+ 2, 3+ 3, 1}
= 6.
我们可以通过计算 x16的代数正规形来验证deg(x16) = 6。事实上,我们还可以验证对于所有 t< 16都有DEG(xt) = deg(xt)。这一事实意味着,我们可以从开头开始迭代使用数值映射,从而对 x16的代数次数进行精确估计,而无需计算内部比特的代数正规形。
当出现在同一非线性项中的中间变量相互独立时,数值度等于代数次数的情况通常会发生。这种情况对于理想密码系统而言是合理的。对于具体的密码,如果我们消除或减少中间变量之间的依赖关系,则数值度可能等于或接近代数次数。
算法1 基于NFSR的密码系统的度估计
要求: 给定内部状态 s(0) 的代数正规形,更新 函数 G 和输出函数 f 的代数正规形,以及变量集合 X。
1: 将 D(0) 和 E(0) 设为 deg(s(0), X);
2: 对于 t 从 1 到 N 执行:
3:计算 D(t)= DegEst(G, E(t−1));
4:将 E(t) 设为 (D(0), D(1),···, D(t));
5: 返回 DegEst(f, E(N))。
基于NFSR的密码系统的输出比特和内部状态的代数次数可以迭代估计。我们在算法1中描述了这种估计方法。在该算法中, s(0)=(s (0)
1 , s(0) 2 ,···, s(0) n)
表示大小为 n 的 0 时刻内部状态,且 deg(s(0), X)=(deg(s(0) 1, X), deg(s(0) 2,
X) ···, deg(sn(0), X)),其中符号 deg(s(0) i, X) 表示以 s(0) i 中 X 作为变量的代数次数。特别地,deg(0, X) =−∞,且对于任何不包含 X 中变量的非零 c,有 deg(c, X) = 0 。更新函数 G 可写为从 F2n 到 F2n 的向量布尔函数,其中部分输入比特被更新,其余比特则进行移位。DegEst 是一个用于估计代数度的算法。该算法的输出给出了在设定 DegEst(·, E(t)) 为 DEG(·, D(t)) 时,给定基于非线性反馈移位寄存器的密码系统的输出代数次数的一个上界。这是基于如下事实:根据推论2,deg(g(s(t))) ≤DEG(g,deg(s(t))) ≤DEG(g, DEG(s(t)))。
现在我们已经给出了基于NFSR的密码系统的代数次数迭代估计的通用框架。为了获得更精确的上界,我们在算法DegEst中使用了比DEG更精细的方法 1。我们将在后面展示其在类Trivium密码上的应用,实验结果表明,我们的估计次数非常接近代数次数的真实值。
4 类Trivium密码的应用
在本节中,我们首先简要描述类Trivium密码的通用结构,以涵盖诸如 Trivium、TriviA-SC和Kreyvium等多种密码算法。然后,基于对这类密码更新函数的观察,我们形式化并开发了一种线性时间算法,用于求解类 Trivium密码代数次数的上界。最后,我们将该算法应用于分析密码 Trivium、TriviA-SC和Kreyvium的安全性。
4.1 Trivium类密码的简要描述
设 A, B和 C为三个寄存器,大小分别为 nA, nB和 nC,用 At、Bt和 Ct表示它们在时钟 t时刻的相应状态
At=(xt, xt−1,···, xt−nA +1), (1)
Bt=(yt, yt−1,···, yt−nB +1), (2)
Ct=(zt, zt−1,···, zt−nC +1), (3)
并分别由以下三个二次函数更新,
xt= zt−r C · zt−r C +1+ A(s(t−1)), (4)
yt= xt−r A · xt−r A +1+ B(s(t−1)), (5)
zt= yt−r B · yt−r B +1+ C(s(t−1))), (6)
其中 1 ≤ rλ< nλ对于 λ ∈{A, B, C}和 A, B以及 C是线性函数。我们记作
At[i]= xi、 Bt[i]= yi和 Ct[i]= zi,并定义 g (t)
A = zt−r C · zt−r C +1、
g
(t)
B = xt−r A · xt−r A +1和 g (t)
C = yt−r B · yt−r B +1。内部状态,记为
s(t)在 t时刻的时钟,由三个寄存器 A, B, C组成,即 s(t)=(At, Bt, Ct)。设 f为输出函数。在经过 N轮次的初始化后,其中内部状态更新了 N次,密码通过f(s(t))对每个 t ≥ N生成一个密钥流比特。
Trivium和 TriviA-SC恰好属于此类密码。如前所述, TriviA-SC及其后续版本 TriviA-SC(v2)仅在加载到初始内部状态的常数上有所不同。此后,若无特别说明, TriviA-SC指代这两个版本。 Kreyvium是具有128位安全性的 Trivium的一种变体。与 Trivium相比, Kreyvium增加了两个不进行更新而仅进行移位的寄存器(K∗、 V ∗),即 s(t)=(At, Bt, Ct, K ∗, V ∗),并向 A和 B,各添加一位(K∗, V ∗),其中 K∗和 V ∗分别仅涉及密钥比特和初始向量比特。我们可以轻松地将从 Trivium中得到的技术应用于 Kreyvium。 Trivium使用80位密钥和 80位初始向量,而 Kreyvium和 TriviA-SC均使用128位密钥和128位初始向量。所有这些密码都具有1152轮。有关这些密码规格说明的更多细节,请参见 [10,11,13,14]。
4.2 类Trivium密码的度估计算法
本文提出了一种算法,用于给出类Trivium密码在 f经过 N轮次后输出的代数次数的上界,如算法2所示。我们首先初始化初始内部状态的度,记为D(0),然后迭代计算 D(t),针对 t= 1、2、···、 N,最后应用数值映射来计算密钥流的第一比特的估计次数。在算法2中,我们还使用三个序列,分别记为 dA、 dB和 dC,用于记录三个寄存器 A、 B、 C的估计次数。在类Trivium密码的每一 步中,三个比特按照公式(4)、(5)和(6)进行更新。相应地,我们在每一步 t中计算这三个比特的估计次数,分别记为 d(t) A 、 d(t) B和 d(t) C ,然后从 D(t−1)更新 D(t)。
为了估计 xt、 yt、 zt的代数次数,我们采用两个过程DegMul和DEG,分别处理其“二次”部分和“线性”部分。DegMul的一个实例在算法3中描述。另外两种情况类似,DegMul的完整过程见附录中的算法5。算法3用于计算
g
(t) A= zt−r C · zt−r C +1的代数次数的上界,其正确性由引理4证明。我们将证明,对于所有满足 1 ≤ t ≤ N的 t, xt、 yt、 zt的估计次数 d(t) A 、 d(t) B 、 d(t) C均大于或等于其对应的代数次数,因此算法2的输出DEG(f, D(N))是密钥流第一比特的超数值度。换句话说,算法2给出了类Trivium密码在 N轮次后输出比特的代数次数的上界。
定理3. 算法2输出一个 N-轮类Trivium密码第一个密钥流比特的超数值度,其中变量为 X。
如前所述,要证明定理3,只需证明以下引理即可。
算法2. 类Trivium密码的度估计
要求:给定初始内部状态的代数正规形(A0, B0, C0),以及变量集合 X。
1: 对于 λ属于{A, B, C}执行:
2: 对于 t从 1 − nλ到0执行:
3: d(t) λ ← deg(λ0[t], X),其中
A0[t]= xt, B0[t]= yt, C0[t]= zt;
4: D(0) ←(d(1−nA) A,···, d(0) A, d(1−nB) B,
···, d(0) B, d(1−nC) C,···, d(0) C);
5: 对于 t从1到 N执行:
6: 对于 λ属于{A, B, C}执行:
7: d(t) λ ← max{DegMul(g(t) λ),DEG(λ, D(t−1))};
8: D(t) ←(d(t−nA+1) A,
···, d(t) A, d(t−nB+1) B,···, d(t) B, d(t−nC+1) C,···, d(t) C);
9: 返回DEG(f, D(N))。
算法3. DegMul(g(t) λ) for λ= A
1: t1 ← t − rC;
2: If t1 ≤ 0 then:
Return d(t1) C+ d(t1+1) .
3: t2 ← t1 − rB;
4: d1 ← min{d(t2) B+ d(t1+1) C , d(t2+2) B+ d(t1) C, d(t2) B+ d(t2+1) B+ d(t2+2) };
5: d2 ← DEG(C, D(t1))+ d(t1) C;
6: d3 ← DEG(C, D(t1−1))+ d(t1+1) ;
7: d ← max{d1, d2, d3};
8: Return d.
引理4.
在算法 2中,我们有 d(t) A ≥ deg(xt, X), d(t) B ≥ deg(yt, X)和d(t) C ≥
deg(zt, X)对于 t ≤ N。
证明. 对于 t ≤ 0是平凡的。接下来我们简单地将 deg(·, X) 记为 deg(·)。由公式 (4),(5) 和
4.2 类Trivium密码的度估计算法(续)
(6),足以证明对于 1 ≤ t ≤ N成立
d(t) A ≥ max{deg(zt−r C · zt−r C +1), deg(A(s(t−1)))}, (7)
d(t) B ≥ max{deg(xt−r A · xt−r A +1), deg(B(s(t−1)))}, (8) and
d(t) C ≥ max{deg(yt−r B · yt−r B +1), deg(C(s(t−1)))}. (9)
我们通过归纳法证明它们。由于相似性,此处仅提供第一个不等式的证明细节。
显然,(7) 对于 1 ≤ t ≤ rC成立。假设 (7),(8) 和 (9) 对所有 i ≤ t−1成立。现在我们证明 (7) 对于 t且 rC< t ≤ N成立。
从算法2可知, d(t) A ≥ DEG(A, D(t−1)) ≥ deg(A(s(t−1)))。接下来我们证明 d(t) A ≥ deg(zt−r C · zt−r C +1)。由(6)可得,对于 t − rC ≥ 1,
zt−r C = yt−r C −r B · yt−r C −r B +1+ C(s(t−r C −1)),
zt−r C +1= yt−r C −r B +1 · yt−r C −r B +2+ C(s(t−r C)),
因此
zt−rC · zt−rC+1 =(yt−rC−rB · yt−rC−rB+1+ C(s(t−rC−1)))· zt−rC+1 =yt−rC−rB · yt−rC−rB+1 · zt−rC+1+ C(s(t−rC−1))· zt−rC+1
=yt−rC−rB · yt−rC−rB+1 ·(yt−rC−rB+1 · yt−rC−rB+2+ C(s(t−rC)))
- C(s(t−rC−1))· zt−rC+1
=yt−rC−rB · yt−rC−rB+1 · yt−rC−rB+2+ yt−rC−rB · yt−rC−rB+1 · C(s(t−rC))
- C(s(t−rC−1))· zt−rC+1.
记 Y1, Y2和 Y3分别为上述等式中的三个加数。根据之前的假设,我们有
d(t−rC) C ≥ deg(yt−rC−rB · yt−rC−rB+1),
d(t−rC+1) C ≥ deg(yt−rC−rB+1 · yt−rC−rB+2),
因此
deg(Y1) ≤min{deg(yt−rC−rB)+ deg(yt−rC−rB+1 · yt−rC−rB+2), deg(yt−rC−rB+2)+ deg(yt−rC−rB · yt−rC−rB+1),
deg(yt−rC−rB)+ deg(yt−rC−rB+1)+ deg(yt−rC−rB+2)}
≤min{deg(yt−rC−rB)+ d(t−rC+1) ,
deg(yt−rC−rB+2)+ d(t−rC) ,
deg(yt−rC−rB)+ deg(yt−rC−rB+1)+ deg(yt−rC−rB+2)}
≤min{d(t−rC−rB) + d(t−rC+1) C
,
d(t−rC −rB+2)
B + d(t−rC) C
,
d(t−rC −rB)
B + d(t−rC −rB+1)
B + d(t−rC −rB+2)
B }= d1.
根据假设,我们还得到
deg(Y2) ≤ DEG(C, D(t−r C))+ d(t−r C) = d2,
deg(Y3) ≤ DEG(C, D(t−r C −1))+ d(t−r C +1)
C = d3.
由于 deg(zt−r C · zt−r C +1) ≤max{deg(Y1),deg(Y2), deg(Y3)} ≤max{d1, d2, d3},
根据算法2和 3可知 deg(zt−r C · zt−r C +1) ≤ d(t) A 。
算法的复杂度。 代数正规形的大小 λ是常数,因此deg(λ) 和 DegMul(g (t) λ) 可在常数时间内计算,对于 λ ∈{A, B, C}。因此算法 2的时间复杂度为 O(N)。它需要的内存为O(N)。
4.3 实验结果
在本节中,我们在 Trivium、 Kreyvium和TriviA-SC上实现了该算法,并揭示了这些密码代数次数的各种上界。对于 Kreyvium,我们在算法中使用了改进的 D(t),其中包含了两个额外寄存器(密钥和IV)的度。
密钥和IV何时才能充分混合? 我们将所有密钥和IV比特作为输入变量 X,并在 Trivium、 Kreyvium和 TriviA-SC上使用算法2进行实验2。结果如表2所示。从表中可以看出,在907轮初始化后, Trivium未达到最大次数160,而 Kreyvium和 TriviA-SC分别在982轮和1108轮后也未达到最大次数256。尽管这并非一种攻击,但这表明在这三种密码中, Trivium表现最佳,而 TriviA-SC在此项最大代数次数测试中仅具有较小的优势。
| 密码 | Trivium | Kreyvium | TriviA-SC |
|---|---|---|---|
| #密钥+#初始向量 | 160 | 256 | 256 |
| #轮次 | 907 | 982 | 1108 |
初始向量何时能充分混合? 将初始向量的子集作为输入变量,密钥作为参数,该算法可为密码提供一种选择初始化向量区分器。这类区分器(包括立方体测试器)在流密码上已被广泛研究,例如,[3,23,24,37]。
我们首先将该算法应用于 Trivium、 Kreyvium和 TriviA-SC,并将所有IV比特作为输入变量,即, X= IV。在我们的实验中,密钥被视为参数,即对于密钥的任意一位ki, X,deg(= 0) ki。这与未知密钥场景下的区分器一致。我们的实验表明,在793轮初始化后, Trivium未达到最大次数80;而 Kreyvium和 TriviA-SC分别在862轮和987轮后也未达到最大次数128。我们将结果总结于表3中。
接下来,我们考虑对大小约为IV一半长度且不包含相邻索引的输入变量集 X进行穷尽搜索。使用不包含相邻索引的立方体并非首次。实际上, Aumasson et al. [3]以及Liuet al. [33]的结果表明,由于 Trivium的更新函数的非线性结构,我们在立方体测试器中可以受益于此类立方体。在我们的实验中,我们将密钥设为参数,并将非变量的IV比特设为零。使用算法2,我们可以在普通PC上用十几分钟穷举所有大小为 37 ≤ n ≤ 40且不包含 Triv-ium的立方体,此类立方体的数量为 ∑40 n=37(81n−n) ≈ 225。在本论文之前,测试所有这些立方体需要c∑40 n=37 2 n(81n−n) ≈ c262次密码操作,且测试的置信度依赖于 c。所有大小为 61 ≤ n ≤ 64且不包含相邻索引、针对 Kreyvium和 TriviA-SC的立方体可在几小时内被完全穷举,此类立方体的数量为 ∑64 n=61(129n−n) ≈ 230。根据现有方法,测试所有这些立方体需要 c∑64 n=61 2 n(129n−n) ≈ c291次密码操作。结果总结于表4中,对应的立方体列于附录的表7中。
| 密码 | Trivium | Kreyvium | TriviA-SC |
|---|---|---|---|
| #IV | 80 | 128 | 128 |
| #轮次 | 793 | 862 | 987 |
如表4所示,837轮 Trivium在大小为37的初始向量比特子集上的次数严格小于37,因此837轮 Trivium在此立方体上的输出恒为0。由于 237是可行的,我们通过对100个随机密钥进行测试来验证这一点。检测到使得该立方体上的和 (即,超多项式)非常数的最小轮数为839轮,这意味着839轮Trivium在此初始向量比特子集上达到了最大次数37。这表明我们对可攻击轮数的下界的估计非常精确,在某些意义上,我们的度估计非常接近其真实值。该测试还意味着存在一个针对842轮 Trivium的区分器,其时间复杂度约为239,,因为我们检测到842轮输出比特存在0.46的偏差。我们总结在表5中列出测试结果,其中给出了从837轮到842轮该立方体的超多项式等于非零的比例。如表4所示,872轮的输出 Kreyvium在大小为61的初始向量比特子集上具有严格小于61的代数次数,这意味着该简化版本的 Kreyvium存在一个复杂度为 261的区分器。
| 密码 | Trivium | Kreyvium | TriviA-SC (v1) | TriviA-SC (v2) |
简化
TriviA-SC |
|---|---|---|---|---|---|
| 立方体大小 | 37 | 61 | 63 | 62 | 63 |
| #轮次 | 837 | 872 | 1035 | 1046 | 1152 |
| #轮次 | 837 | 838 | 839 | 840 | 841 | 842 |
|---|---|---|---|---|---|---|
| rate(超多项式=1) | 0 | 0 | 0.09 | 0.29 | 0.27 | 0.07 |
我们的实验还表明,1035轮 TriviA-SC(v1)和1046轮 TriviA-SC(v2)的输出在大小为63和大小为62的初始向量比特子集上均未达到最大代数次数,这意味着我们可以在 263和 262中分别将它们与随机函数区分开来。事实上,这两个立方体在实验完成之前很早就已被发现,前者耗时一秒,后者耗时三分钟。通过使用大小为63的立方体,我们还可以在 TriviA-SC的一个简化变体(两个版本)的完整轮次上获得复杂度为 263的区分器,其中该简化变体移除了输出函数中唯一的非线性项。
我们还尝试在其他策略下搜索大规模的立方体。我们穷举了大小接近IV长度的所有立方体。此外,我们结合我们的算法与贪心算法(如[39],中所做的那样)来搜索任意大小的最佳立方体。然而,并未找到更好的结果。
为进一步评估我们算法的准确性,我们针对 Trivium进行了更多实验。我们计算了从66轮到426轮简化版 Trivium输出比特的代数次数的精确值,并使用我们的算法对其进行了次数估计。实验结果表明
- 当将所有密钥和IV比特或所有IV比特作为输入变量时,我们估计的界在大多数情况下(超过70%)等于其真实值,即使在其他情况下,两者之间的差距也仅为1。
- 当将大小为37的最优立方体作为输入变量时,我们估计的界始终等于其真实值。
它们充分证明了我们算法的高准确性。我们在图1中展示了在所述三种情况下关于Trivium代数次数上界的完整估计。从该图中可以看出,初始向量比特上的代数次数几乎与所有密钥和IV比特上的代数次数相同,并且其增长速度远快于最佳立方体。前者可能是因为密钥和IV比特被加载到Trivium的不同寄存器中,而后者则是因为两个相邻变量比特加速了代数次数的增长。
备注。 该算法有可能通过进一步细化对 yi·yi+1·yi+2的度的估计来改进。然而,可能是因为在大多数情况下 yi·yi+1·yi+2并非 zi+r B · zi+r B +1代数次数的主导项,因此在我们的实验中,此方法并未发现改进效果。另一个可能的改进是存储 yi · yi+1的估计次数,并在DegMul过程中用它替换某些 d(i+r B ) C。但这种方法同样未得到更好的结果,至少在我们的实验中如此,可能是因为 zi+r B 的代数次数通常等于 yi · yi+1的代数次数。尽管这些方法在我们的实验中未显示出优势,在某些情况下,它们可能很有用。接下来,我们将通过计算前几轮内部状态的精确度,并结合第二种方法,展示一个改进算法。
5 类Trivium密码的度估计改进
在本节中,我们提出一种改进算法,用于估计 f经过 N轮后类Trivium密码输出的代数度,如算法4所述。
该算法与算法2类似。在改进算法中,我们计算前 N0轮内部状态的精确代数次数,其中 g (t) A 、 g (t) B和 g (t) C的次数也被记录,并使用修改后的DegMul ∗替代DegMul,如附录中的算法6所示。该算法其余部分与算法2相同。算法4的输出也给出了以 N轮类Trivium密码的代数次数上界,其输入变量为 X。用DegMul替换为DegMul ∗并不会带来改进,但保证了算法的正确性。证明过程与算法2类似,因此本文中省略。
评估算法4的复杂度较为困难,该复杂度取决于 N0以及内部状态的代数正规形(A t,B t, Ct)的复杂度,其中 t ≤ N 0。随着 N0的增加,其速度变得比算法2慢得多。
我们将该算法应用于 Trivium, Kreyvium和 TriviA-SC。如表6所示,对于 TriviA-SC,它在第4节中的结果略有改进,但对于 Trivium和 Kreyvium则并非如此。对于 TriviA-SC的两个版本,在
| 密码 | TriviA-SC | TriviA-SC(v2) |
|---|---|---|
| X | (key, IV) | IV的子集 |
| #X | 256 | 61 |
| #轮次(算法 2) | 1108 | 1032 |
| #轮次(算法 4) | 1121 | 1047 |
当 X=(key, IV) 时,通过选取 N0= 340,输出度小于 256 的轮数从 1108 提升至 1121。对于 TriviA-SC(v2),其中 X 是大小为 61 的 IV 的子集,通过选取 N0= 440,轮数从 1032 提升至 1047。该立方体列于附录的表7中。
6 结论
在本文中,我们提出了一种针对基于NFSR的密码系统的代数度评估的通用框架。该框架基于一种名为数值映射的新工具。我们还详细阐述了高效寻找类 Trivium密码代数次数上界的技术。作为示例,我们将该方法应用于 Trivium、 Kreyvium和 TriviA-SC,并通过在大小约为IV一半长度的立方体子集上进行穷尽搜索,获得了针对所有这些密码的最佳区分攻击。据我们所知,该工具是首个用于确定基于NFSR的密码系统代数次数上界的理论方法,这也是首次将超出实际计算规模的立方体应用于基于NFSR的密码系统的密码分析中。
需要注意的是,立方体测试器不仅在区分攻击中有用,也在密钥恢复攻击中具有应用价值。我们认为,该工具在基于NFSR的密码系统的密码分析与设计中均具有重要意义。未来值得进一步研究其在密钥恢复攻击中的应用,以及在更多密码原语中的应用。此外,将其推广至非基于NFSR的其他密码系统也具有研究价值。

1301

被折叠的 条评论
为什么被折叠?



