改进的零相关密码分析在SIMON上
1 引言
轻量级原语旨在效率、安全性和硬件性能之间找到最佳平衡。轻量级密码算法已广泛应用于射频识别标签、智能卡和现场可编程门阵列(FPGA)等多个领域。未来,轻量级密码算法的影响可能会持续增加。近年来,已开发出许多轻量级密码算法,包括KATAN [10], KLEIN[11],LED[12], Piccolo[15], PRESENT[8]和TWINE [17]。
SIMON [6]是美国国家安全局(NSA)于2013年6月公开发布的一类轻量级分组密码算法。迄今为止,美国国家安全局(NSA)已开发了三种密码算法,包括SIMON、SPECK和Skipjack。SIMON针对硬件实现的性能进行了优化,而其姊妹算法SPECK [6],则针对软件实现进行了优化。SIMON和SPECK为不同应用场景提供了多种块大小和密钥大小选项。
许多关于SIMON的密码分析结果已被发表。Abed等在[1]中首次提出了对SIMON的差分密码分析。
随后,Biryukov等通过搜索更优的差分特征,改进了对SIMON32、SIMON48和SIMON64的差分密码分析,见于[7]。基于Biryukov等提出的差分区分器,王等改进了对SIMON32、SIMON48和SIMON64[18]的密钥恢复攻击。在[18],中,王等给出了对21轮SIMON32的攻击,这至今仍是最佳攻击。
此外,孙等利用MILP模型识别出针对SIMON的更优差分区分器,见于[16]。
针对SIMON的不可能差分攻击首次出现在[2],,随后对SIMON32和SIMON48的改进不可能差分攻击在[19],中被提出,并由Boura等在[9]中进一步改进。
对于积分攻击,Wang等在[19]中基于一个实验获得的15轮SIMON32的零和积分区分器,提出了对21轮SIMON32的攻击。
零相关线性攻击是由博格达诺夫和里杰门在[3]中提出的一种新型密码分析方法。这类攻击基于相关值为零的线性逼近(即概率恰好为 1 2)的线性逼近。
近年来,在[4]中,博格达诺夫和王提出了多重零相关密码分析的思想。他们利用易受攻击的密码算法中存在大量零相关逼近这一特点,提出了一种新的区分器。在[5],中,引入了一种更强大的区分器,称为多维零相关区分器。
Wang等也在[19]中给出了SIMON32和SIMON48的零相关线性逼近,并利用这些逼近对20轮SIMON32、20轮SIMON48/72以及21轮SIMON48/96进行了攻击。
本文中,我们利用零相关线性密码分析研究了整个SIMON系列密码算法的安全性。对于SIMON32和SIMON48,通过使用等价密钥技术,我们的密码分析比之前在[19]中的零相关攻击多攻击一轮。我们首次给出了SIMON64、SIMON96和SIMON128的零相关线性逼近,并利用这些逼近对相应的密码算法进行了攻击。
我们的贡献
在本文中,我们利用零相关线性密码分析对整个SIMON家族的安全性进行了研究。我们的贡献可以总结如下:
– 基于SIMON32的11轮零相关区分器和SIMON48的12轮零相关区分器,我们使用等价密钥技术(即通过将子密钥移至轮函数左侧)来改进对SIMON32和SIMON48的密钥恢复攻击。最终,我们可以攻击21轮SIMON32、21轮SIMON48/72以及22轮SIMON48/96。等价密钥技术已在各种密钥恢复攻击中被广泛使用。该技术旨在利用等效子密钥替换密码中原先使用的子密钥,从而减少需要猜测的子密钥数量。该技术此前已被Isobe在[13]中使用过,但存在一点差异。由于子密钥是在非线性函数之后进行异或操作的,因此在[13]中要求部分明文固定的条件可以被取消。
– 我们提供了SIMON64、SIMON96和SIMON128的13轮、16轮和19轮零相关线性逼近,并利用它们分析相应密码算法的安全性。我们是首个给出SIMON64、SIMON96和SIMON128零相关线性密码分析结果的研究者。
我们的结果以及之前对SIMON32和SIMON48的零相关攻击列于表1中。
| 密码算法 | 轮数 时间(ENs) | 数据(KPs) | 内存(字节) | 参考文献 |
|---|---|---|---|---|
| SIMON32 SIMON32 | 20 21 | 2^59.9 2^59.4 | 2^32 2^32 | 2^41.4 2^31.0 |
| SIMON48/72 SIMON48/72 | 20 21 | 2^59.7 2^61.9 | 2^48 2^48 | 2^43.0 2^43.0 |
| SIMON48/96 SIMON48/96 | 21 22 | 2^72.6 2^80.5 | 2^48 2^48 | 2^46.7 2^43.0 |
| SIMON64/96 | 23 | 2^90.4 | 2^64 | 2^54.0 |
| SIMON64/128 | 24 | 2^116.8 | 2^64 | 2^54.0 |
| SIMON96/144 | 28 | 2^141.0 | 2^96 | 2^85.0 |
| SIMON128/192 32 | 2^156.8 | 2^128 | 2^117.0 | |
| SIMON128/256 34 | 2^255.6 | 2^128 | 2^117.0 |
KP:已知明文;EN:加密
提纲。 本文其余部分组织如下:第2节简要描述SIMON并介绍零相关线性密码分析的基本原理。第3节给出后续攻击中使用的零相关线性区分器。第4节涵盖对整个SIMON家族的零相关攻击。最后,我们在第5节总结全文。
2 预备知识
2.1 SIMON 简介
SIMON[6]是美国国家安全局(NSA)于2013年6月公开发布的一系列轻量级分组密码算法。SIMON为不同实现提供了多种块大小和密钥大小。表2列出了SIMON的不同块大小和密钥大小(以比特为单位)。
SIMON是一种双分支平衡Feistel网络,包含三种操作:与运算(&)、异或(⊕)和循环移位(≪)。我们用(Li, Ri) i= 0,1,…, r − 1表示第i轮的输入。
在第 i轮中,通过函数 F(x) = (x ≪ 1) & (x ≪ 8) ⊕ (x ≪ 2)将(Li, Ri)更新为(Li+1, Ri+1),具体如下:
Li+1= F(Li)⊕ Ri ⊕ rki, Ri+1= Li.
最后一轮的输出(Lr, Rr)是密文。轮函数的示意图如图1所示。
SIMON的密钥调度使用类LFSR过程生成 r子密钥 rk0, rk1,…, rkr−1。根据主密钥中包含的字数(ω)不同,SIMON采用三种略有不同的密钥调度过程。
前 ω个子密钥 rk0, rk1,…, rkω−1由主密钥初始化。其余的子密钥按如下方式进行生成:
rki+m= c⊕(zj)i ⊕ rki ⊕ Ym ⊕(Ym ≫ 1),
Ym=
⎧ ⎨
⎩
rki+1 ≫ 3 if ω= 2
rki+1 ⊕(rki+2 ≫ 3) if ω= 3
rki+1 ⊕(rki+3 ≫ 3) if ω= 4.
这里,值 c是常数0xff…fc,(zj)i表示来自五个常数序列 z0, z1, z2, z3和 z4之一的第 i位。如果已知任意连续的 ω个子密钥序列,则可以推导出主密钥。更多信息请参见[6]。
2.2 零相关线性密码分析
零相关线性攻击是由博格达诺夫和里杰门在[3]中提出的一种近期密码分析方法。这类攻击基于相关值为零的线性逼近(即概率恰好为 1 2 的线性逼近)。多重零相关密码分析的思想近年来在[4]中由博格达诺夫和王提出。他们利用易受攻击的密码算法中存在大量零相关逼近这一特点,提出了一种新的区分器。在[5],中引入了一种更强大的区分器,称为多维零相关区分器。
尽管多重零相关密码分析和多维零相关密码分析在多种密码算法上的表现优于零相关线性密码分析,但我们必须指出,它们并不适用于SIMON。
多重零相关密码分析和多维零相关密码分析更适用于字级别的密码算法,例如 AES、Skipjack和CAST‐256。
以下定理有助于计算零相关线性密码分析的成功概率。
定理1([3,命题 3])。 对于一个随机选取的 n比特置换的非平凡线性逼近,其相关值为0的概率可近似为 1 √2π2 4−n 2 ,其中 n ≥ 5。
基于零相关的线性逼近,一种类似于松井算法 2[14]的方法可用于密钥恢复。设攻击者拥有2n组明文‐密文对以及一个针对密码算法部分结构的零相关线性逼近 α → β。该线性逼近被置于被攻击密码算法的中间位置。令 E和 D分别为线性逼近边界处数据变换的部分中间状态(见图2)。然后可通过以下方法恢复密钥:
-
猜测计算 E 和 D所需的密钥比特。对每个猜测:
(a) 将明文部分加密并将密文部分解密,直至零相关线性逼近 α → β的边界。
(b) 利用部分加密和解密得到的值 E 和 D,通过统计在 2n对明文‐密文对中 〈α, E〉+ 〈β, D〉 为零的次数,来估计线性逼近 α → β 在密钥猜测下的相关性 c。
(c) 对估计的相关性 c进行检验,以判断 c 的估计值是否与 c 的实际值为零的假设相符。 -
使用必要数量的明文‐密文对测试剩余的密钥候选。
3 SIMON的零相关线性区分器
3.1 SIMON32的零相关线性区分器
对于SIMON32,我们使用[19],中的11轮零相关线性区分器,如图3所示。输入掩码为(0x0001,0x0000),输出掩码为(0x0000,0x0080)。左下角的“0”和右上角(红色)的“1”构成矛盾,从而保证零相关性。
3.2 SIMON48的零相关线性区分器
类似地,通过使用 [19], 中的12轮零相关线性区分器,我们可以对21轮SIMON48/72和
22轮SIMON48/96发起密钥恢复攻击。以下攻击中使用的区分器如图4所示。输入掩码为(0x000001,0x000000),输出掩码为(0x000000,0x000002)。左下角的‘0’与右上角(红色)的‘1’构成矛盾,从而保证零相关性。
3.3 SIMON64、SIMON96和SIMON128的零相关线性区分器
为了攻击SIMON64/96/128,我们首先应用中间相遇技术构造了SIMON64、SIMON96和SIMON128的13轮、16轮和19轮零相关线性逼近,如图5、6和7所示。
4 SIMON的零相关线性密码分析
在本节中,我们利用零相关线性密码分析研究整个SIMON家族的安全性。我们使用SIMON32和SIMON48的11轮和12轮零相关线性逼近 [19] 来对21轮SIMON32、21轮SIMON48/72和22轮SIMON48/96进行密钥恢复攻击。我们还利用第3.3节中提出的区分器对SIMON64、SIMON96和SIMON128进行攻击。
4.1 SIMON32的零相关线性密码分析
在本节中,我们使用11轮零相关线性区分器(见图3)来攻击21轮SIMON32。如图8所示,我们可以在区分器之前添加五轮,并在区分器之后附加五轮(即零相关区分器从第5轮开始,到第15轮结束,轮编号从0开始)。通过这种方式,我们可以攻击21轮SIMON32。
等效子密钥技术
等效子密钥技术已被广泛应用于各种密钥恢复攻击中。该技术旨在通过用原始子密钥替换等效子密钥,从而减少需要猜测的子密钥比特数量。伊佐部在[13]中曾使用过该技术,但存在细微差异。由于子密钥是在非线性函数之后进行异或操作,因此[13]中要求部分明文固定的条件可以被取消。
为了减少密钥恢复过程中需要猜测的子密钥比特数量,我们将第 i轮的子密钥 rki移至第(i+ 1)轮(i= 0, 1, 2, 3, 4),得到等效子密钥 Ki,见图8(a)。例如,图8(a)中的K0等于 rk0,K1等于(rk0 ≪ 2) ⊕ rk1,依此类推。注意,K4位于区分器内,无需猜测。在图8(a)中,我们仅列出了 Ki和 0 ≤ i ≤ 3的被猜测的比特。
类似地,我们可以将第 i轮的子密钥 rki移至第(i −1)轮(i= 16, 17, 18, 19, 20),以获得等效的子密钥 Ki,见图8(b)。同样,K16位于区分器内,无需被猜测。在图8(b)中,我们仅列出 Ki和 17 ≤ i ≤ 20的被猜测的比特。
SIMON32的密钥恢复过程
下文中,Ri表示第 i轮的输出。Ri,{j}表示 Ri的第 j位。Li,{j}以类似方式定义。注意位位置从‘0’开始。
首先,我们猜测部分等效子密钥 K17, K18, K19和 K20(具体猜测的密钥比特如图8 (b)所示),并进行部分解密将密文加密至状态R16,{7}。接下来,我们猜测部分等效子密钥 K0, K1, K2, K3(具体猜测的密钥比特如图8(a)所示),并将明文部分加密至状态L5,{0}。我们统计事件L5,{0}‖R16,{7}等于“00”或“11”的出现次数。如果出现次数恰好等于 2^31,则保留该猜测的58比特子密钥作为可能的子密钥候选,否则予以丢弃。
至此,已有58比特的子密钥被猜测,其中包括 K0 {0,2−7,9−14}, K2 {4−6,8,11−15}, K3 {0,6,7,13,14}, K4 {8,15}, K17 {6,15}, K18 {4,5,7,13,14}, K19 {2−6,11−13,15}和 K20 {0−5,7,9−14}。
由定理1可知,错误子密钥猜测在上述过程后仍被保留的概率可近似为
$$
\frac{1}{\sqrt{2\pi}} \cdot 2^{-n/2} \approx 2^{-15.33}
$$
因此,将剩下一些子密钥候选。之后,我们猜测K0 {1,8,15}‖K1 {0,1,2},并通过高斯消元法求解线性方程得到 K1 {3,7,9,10} ‖ K2 {1−5,8−12,15} ‖K3 {0−7,9−14}中剩余的29比特。最后,我们可以通过逆向密钥调度计算主密钥的全部比特,并使用最多两对明文‐密文对验证其正确性。我们将此过程表示于算法1中。
算法1. SIMON32的密钥恢复攻击
- 表示 K20 {0−5,7,9−14}‖K19 {2−6,11−13,15}‖K18 {4,5,7,13,14}‖K17 {6,15} by K0‖K1‖K2‖K3, 并得到29个线性方程
- 对于 all 2^42.67 subkey candidates getting from the subkey recovery procedure(See Table3) 执行
- 对于 all values of K0 {1,8,15}‖K1 {0,1,2} do
- 获得关于的29个线性方程 K1 {3,7,9,10}‖K2 {0−7,9−14}
- 通过高斯消元法求解线性方程
- 如果 solvable则
- 根据密钥调度计算主密钥的所有比特。
- 使用两对明文‐密文对验证主密钥。
攻击复杂度
对SIMON32进行攻击的数据复杂度为2^32已知明文。
在此攻击中,存储复杂度的主导项是用于存储 2^31 8位计数器 T0[X32_1]的项,这使得存储复杂度为 2^31字节。
子密钥恢复过程中每一步的时间复杂度如表3所示。总体而言,子密钥恢复过程的时间复杂度为 2^59.4 21轮SIMON32加密。在主密钥恢复阶段,使用高斯消元法求解包含29个变量的29个线性方程大约需要 $\frac{1}{3} \cdot 29^3 \approx 8130$ 位异或操作,这可以折算为 $ \frac{8130}{16 \cdot 4 \cdot 21} \approx 2^{2.60} $ 21轮SIMON32加密(注意其中有三次异或操作和轮函数中的一个与操作。为简化分析,我们将其近似为四个异或操作,因此主密钥恢复阶段的时间复杂度可近似为
$$
2^{42.67} \times 2^5 \times 2^{2.60} + 2^{42.67} \times 2^5 \times 1 + 2^{-32} \approx 2^{50.49}
$$
因此,该攻击的总时间复杂度约为 2^59.42 21轮SIMON32加密。
| 步骤 输入状态 | 猜测的子密钥(位) | 计算(位) | 计数器(大小) | 时间复杂度 |
|---|---|---|---|---|
| 0 X32_0 | K20 {0−5,7,9−14} K19 {2−6,11−13,15} K18 {4,5,7,13,14} K17 {6,15}(29) | R16,{7}(36)* | T0 X32_1 | 2^32·2^29· (1+3+6+10+16)/(16×21) ≈2^55.78 |
| 1 X32_1 | 无(0) | L1,{0,2−14}(14) | T1 X32_2 | 2^31·2^29· 14/(16×21) ≈2^55.41 |
| … | … | … | … | … |
| 10 X32_10 | K3 {8,15}(2) | L5,{0}(1) | T10 X32_11 | 2^5·2^58· 1 |
*:为了计算 R16,{7},我们还需要计算 R17,{5,6,15}、R18,{3−5,7,13,14}、R19,{1−6,11−13,15} 和 R20,{0−15},总计 36 位。
4.2 SIMON48的零相关线性密码分析
类似地,通过使用12轮零相关线性区分器(见图4)中的[19], ,我们可以对 21轮SIMON48/72和22轮SIMON48/96发起密钥恢复攻击。
针对21轮SIMON48/72的密钥恢复攻击
如图9所示,我们可以在区分器前添加五轮,并在区分器后附加四轮。通过这种方式,我们可以攻击21轮SIMON48/72。我们仅在图9中列出了猜测的子密钥比特。详细的攻击过程见算法2。
对SIMON48/72的攻击的数据复杂度为 2^48已知明文。
算法2. SIMON48/72的密钥恢复攻击
- 表示 K3 {16,23}‖K18 {0,17}‖K19 {9,15,16,22,23}‖K20 {0,1,7,8,13−15,17,20−22} by K0‖K1‖K2, 并得到20个线性方程。
- 对于 all 2^30.67 subkey candidates getting from the subkey recovery procedure(the concrete subkey recovery procedure is listed in Table5) do
- 对于 all values of K0 {0−3,7,9}‖K1 {1−5,8−11,15,17,18} do
- 获取关于 K1 {22}‖K2 的线性方程
- 通过高斯消元法求解线性方程。
- 如果 solvable则
- 根据密钥调度计算主密钥的所有比特。
- 使用两对明文‐密文对验证主密钥。
| 步骤 输入状态 | 猜测的子密钥(位) | 计算(位) | 计数器(大小) | 时间复杂度 |
|---|---|---|---|---|
| 0 X48,72_0 | K18 {0,17}‖K19 {9,15,16,22,23} K20 {0,1,7,8,13−15,17,20−22}(18) | R17,{1}(24)* | T0 X48,72_1 | 2^48·2^18·(1+3+7+13)/(24×21) ≈2^61.61 |
| … | … | … | … | … |
*:为了计算R17,{1},我们还需要计算 R18,{0,17,23}、R19,{1,9,15,16,21−23}以及 R20,{0,1,7,8,13−15,17,19−23},总计为24比特。
在此攻击中,存储复杂度的主导项是用于存储 2^43 8位计数器 T0[X48,72_1]的项,使得存储复杂度为2^43字节。
由表5可知,子密钥恢复的时间复杂度约为 2^61.87 21轮SIMON48/72 加密。在算法2中,将执行高斯消元过程共 2^30.67·2^18= 2^48.67次,与 2^61.87 21轮加密相比可忽略不计。之后,使用两对明文‐密文对验证猜测正确性的时间复杂度与 2^61.87 21轮加密相比也可忽略。因此,总时间复杂度约为 2^61.87 21轮SIMON48/72 加密。
22轮SIMON48/96的密钥恢复攻击
如图10所示,我们可以在区分器前增加五轮,并在区分器后附加五轮。通过这种方式,我们可以攻击22轮SIMON48/96。我们仅在图10中列出了猜测的子密钥比特。详细的攻击过程见算法3。
对SIMON48/96进行攻击的数据复杂度为 2^48已知明文。
算法3. SIMON48/96的密钥恢复攻击
- 表示 K17 {0,17}‖K18 {9,15,16,22,23}‖K19 {0,1,7,8,13−15,17,20−22}‖K20 {0,5−7,9,11−23} by K0‖K1‖K2‖K3, 并得到36个线性方程。
- 对于 all 2^48.67 subkey candidates getting from the subkey recovery procedure(the concrete subkey recovery procedure is listed in Table7) 执行
- 对于 all values of K0 {0−3,7,9}‖K1 {0−4} do
- 得到关于 K2 {5−7,9−13,16−20,23}‖K3 {0−15,17−22} 的36个线性方程
- 使用高斯消元法求解线性方程
- 如果 solvable 那么
- 根据密钥调度计算主密钥的所有比特。
- 使用两对明文‐密文对验证主密钥。
| 步骤 输入状态 | 猜测的子密钥(位) | 计算(位) | 计数器(大小) | 时间复杂度 |
|---|---|---|---|---|
| 0 X48,96_0 | K17 {0,17}‖K18 {9,15,16,22,23} K19 {0,1,7,8,13−15,17,20−22} K20 {0,5−7,9,11−23}(36) | R17,{1}(43)* | T0 X48,96_1 | 2^48·2^36·43/(24×22) ≈2^80.38 |
| … | … | … | … | … |
*:为了计算R17,{1},我们还需要计算 R18,{0,17,23}, R19,{1,9,15,16,21−23}, R20,{0,1,7,8,13−15,17,19−23}和 R21,{0,1,5−7,9,11−23},这些总计为43比特。
从表7可以看出,子密钥恢复的时间复杂度约为 2^80.54 22轮SIMON48/96加密。在算法3中,将进行 2^48.67·2^24= 2^72.67次高斯消元过程,与 2^80.54 22轮加密相比可以忽略不计。之后,使用两对明文‐密文对验证猜测正确性的时间复杂度与 2^80.54 22轮加密相比也可忽略。因此,总时间复杂度约为2^80.54 22轮SIMON48/96加密。
4.3 SIMON64、SIMON96和SIMON128的零相关线性密码分析
我们可以使用图5、6和7中所示的零相关线性逼近来攻击SIMON64、SIMON96和SIMON128。由于它们的攻击步骤相似,我们仅在表9中列出攻击结果。
| 密码算法 | ZC线性区分轮数 | 被攻击总计轮数(E) | Time (Ns) | Data (KPs) | 内存 |
|---|---|---|---|---|---|
| SIMON64/96 | 13 | 23(5+13+5)* | 2^90.4 | 2^64 | 2^54字节 |
| SIMON64/128 | 13 | 24(6+13+5) | 2^116.8 | 2^64 | 2^54字节 |
| SIMON96/144 | 16 | 28(6+16+6) | 2^141.0 | 2^96 | 2^85字节 |
| SIMON128/192 | 19 | 32(7+19+6) | 2^156.8 | 2^128 | 2^117字节 |
| SIMON128/256 | 19 | 34(8+19+7) | 2^255.6 | 2^128 | 2^117字节 |
KP:已知明文;EN:加密。
*:对于(a+ b+ c),a是区分器之前的轮数,b是区分器的长度,而c是区分器之后的轮数。
5 结论
在本文中,我们利用零相关线性密码分析研究了整个SIMON密码算法家族的安全性。我们改进了此前针对SIMON32和SIMON48的零相关攻击。此外,我们提出了SIMON64、SIMON96和SIMON128的13轮、16轮和19轮零相关线性逼近,并利用这些逼近对相应的密码算法进行攻击。我们是首个给出SIMON64、SIMON96和SIMON128零相关线性密码分析结果的研究者。
29

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



