针对轮数减少的TWINE的差分分析和中间相遇攻击
亚历克斯·比留科夫,帕特里克·德尔贝兹,和 L´eo Perrin(B)
SnT,卢森堡大学,卢森堡,卢森堡 alex.biryukov@uni.lu, {patrick.derbez,leo.perrin}@uni.lu
1 引言
轻量化目前是对称密码学中研究最广泛的课题之一。随着越来越多的设备需要彼此通信以及通过互联网通信,在低功耗CPU(例如传感器网络或小型RFID标签中使用的设备)上运行的原语的需求变得愈发迫切。在过去几年中,人们提出了许多适用于此类受限环境的轻量级原语,相关综述可在 [1]中找到。
设计轻量级原语的一种可行方法是采用具有简单结构的多轮数。广义费斯妥网络 (GFN)被引入 帕特里克·德尔贝兹 和 L´eo Perrin – 由卢森堡的CORE ACRYPT项目资助。
c©国际密码研究协会 2015 G. Leander (编辑): FSE 2015, LNCS 9054, 第3–27页, 2015年。DOI: 10.1007/978‐3‐662‐48116‐5 1
本文档由 funstory.ai 的开源 PDF 翻译库 BabelDOC v0.5.10 (http://yadt.io) 翻译,本仓库正在积极的建设当中,欢迎 star 和关注。
4 A. 毕留科夫 等
由Nyberg提出的[2],是一种改进的常规Feistel网络,其使用超过2个分支。更多的分支允许采用更简单的Feistel函数,由分支置换来实现扩散效果,因此这种结构在资源受限环境中具有良好的适用性。然而,大多数广义Feistel网络中使用的简单分支旋转需要 b轮才能实现完全扩散。为了减少所需轮数,文献[3]中引入了更复杂的置换方式,TWINE的设计者采用了其中一种置换方式: TWINE是一种具有广义Feistel网络结构的轻量级分组密码。尽管TWINE使用了16个分支,但仅需8轮即可实现完全扩散。因此,TWINE不仅是轻量级密码学中常见权衡策略的一个良好范例(例如,它采用一个简单的轮函数并进行多次迭代),也是少数几个具备改进型扩散层的广义Feistel网络实例之一。类似的分组密码是LBlock[5],,这是一种轻量级分组密码,曾作为LBlock‐s设计的基础,而LBlock‐s是一种S盒和密钥调度不同的变体,被同一研究团队用于提交至CAESAR竞赛的轻量级认证加密(LAC)方案中[6]。尽管LBlock被描述为“常规”的双分支Feistel网络,但其置换层中使用的旋转方式以及其 Feistel函数的简洁性使其等效于类似于TWINE的广义Feistel网络。TWINE的设计者在文献[4]中指出了这种相似性。
本文中,我们将研究重点放在TWINE上,并尝试了多种方法对其进行密码分析。首先,我们研究了针对TWINE‐128的中间相遇(MitM)攻击,并描述了一种对25轮1的攻击。该攻击基于Demirci和Sel¸cuk在FSE 2008[9]上提出的攻击策略,该策略最初用于攻击轮数减少至8轮的AES的192位和256位版本,并且是迄今为止对高级加密标准最佳攻击的起点[10–12]。接着,我们研究了不可能差分攻击,并表明借助Boura等在[13]中描述的框架,可以在25轮上实施此类攻击,其总体复杂度低于穷举搜索的自然界限。我们的25轮攻击的时间复杂度略高于王和吴[14]在ACISP 2014上提出的25轮攻击,但数据复杂度更低。
有趣的是,三种不同的密码分析技术(中间相遇攻击、不可能差分和零相关线性)均能够以相似的总体复杂度攻破相同数量的轮数。
TWINE特有的置换层意味着,正如我们将看到的,该分组密码在面对截断差分密码分析时表现出明显的脆弱性,这种攻击由克努森[15]首次提出。与 “常规”差分密码分析不同,该技术并不依赖于研究完全指定的差分路径(其中每个比特差值都被假定为特定值),而是着眼于更一般的模式,其中某些比特差值可以同时取0和1。对于字导向密码而言,我们可以将研究限制在字级别 的差分路径上:即整个字中要么至少存在一个差分,要么不存在任何差分。在某些比特
1尽管文献中已有针对25轮TWINE‐128的中间相遇攻击 [7],但在eprint上的一则笔记中已表明 [8]该攻击的实际复杂度实际上高于暴力破解。
差分分析和中间相遇攻击 5
在差分区分器的顶部和底部添加轮数时,通常不指定具体细节。然而,使用覆盖所有轮数的截断差分也可能产生强大的攻击效果。例如,拉朗等人最近采用这种方法[16]攻击了轻量级分组密码KLEIN[17]。截断差分还被用于增强高概率差分的搜索。最近的两个例子分别是针对分组密码PRINCE的最佳攻击[18]以及对认证密码LAC的差分伪造攻击[19]。
由于我们提出了针对TWINE的新攻击,我们在单密钥模型下总结了针对该密码算法的最佳攻击复杂度,如表1所示。
| 描述 | 描述 | 描述 | 复杂度 | 复杂度 | 复杂度 |
|---|---|---|---|---|---|
| 参考类型 | 版本 | Data | Time | 内存 | |
| [20] | 拜克里克 | 完整的TWINE‐80 | 260 | 279.1 | 28 |
| [20] | 拜克里克 | 完整的TWINE‐128 | 260 | 2126.82 | 28 |
| [21] |
不可能差分
零相关线性 23轮 T | 23轮 TWINE‐80 | 257.85 | 279.09 | 278.04 |
| [21] |
不可能差分
零相关线性 23轮 T |
24轮 TWINE‐128
WINE‐80 | 258.1 | 2126.78 | 2125.61 |
| [14] | 262.1 | 272.15 | 260 | ||
| [14] | 25轮 TWINE‐128 | 262.1 | 2122.12 | 260 | |
| 第 3.1 节 | MitM | 25轮 TWINE‐128 | 248 | 2124.7 | 2109 |
| 第 3.2 节 | 不可能差分 | 25r TWINE‐128 | 259.1 | 2124.5 | 278.1 |
| 第 5.3 节 | 截断差分 | 23r TWINE‐128 | 258 | 2126.78 | 289 |
| 第 5.3 节 | 截断差分 | 23r TWINE‐128 | 262 | 2125.94 | 289 |
| 第 5.3 节 | 截断差分 | 23r TWINE‐128 | 264 | 2124.35 | 289 |
我们的贡献。首先,我们在第3节中描述了对TWINE‐128的最佳攻击,即中间相遇攻击和不可能差分攻击,利用了该分组密码密钥调度的简单性。
然后,我们在第4节中强调TWINE所使用置换的一个性质:加密轮数可以被分组为每4轮一个块,使得在每个块的前3轮中,两个密码算法内部状态的两半彼此独立演化,并仅在第四轮交换信息。我们还讨论了LBlock及其更简单的变体LBlock‐s为何表现出相同的4轮行为。基于这一观察,我们描述了所有这些密码算法的若干高概率截断差分路径。随后在第5节中利用这些路径,以相对较低的内存攻击TWINE‐128的23轮版本。最后,我们利用这些截断路径优化对高概率差分的搜索,并表明TWINE设计者保守选择的S盒极大地限制了该原语中的差分效应——与LBlock‐s等情况不同。
6 A. 毕留科夫 等
2 TWINE、LBlock 和 LBlock‐s 的描述
2.1 TWINE描述
该分组密码使用16个4比特分支,且具有非常简单的轮函数(见图1):Feistel函数由子密钥的异或以及对基于 GF(24)中逆函数的唯一S盒的一次调用组成。然后,通过一个复杂的半字节置换对分支进行混洗,以实现比简单移位更快的扩散[3]。
TWINE的一种版本使用80位密钥,另一种使用128位密钥,我们将这两个版本分别记为TWINE‐80和TWINE‐128。它们仅在密钥调度上有所不同,且均有36轮。两种密钥调度均为稀疏的广义Feistel网络,其中TWINE‐80每轮使用2次S盒调用, TWINE‐128每轮使用3次。在每一轮中,密钥状态的一些固定半字节被用作分组密码的轮密钥。TWINE的一轮结构如图1所示。
Notations.给定一组消息 {P0,…},在消息 m 的第 r 轮中索引为 i的半字节表示为 xm r[i]。主密钥表示为 K,而在第 r 轮使用的轮密钥表示为 RKr。
密钥调度。密钥调度通过主密钥 K生成36个轮密钥。它是一种广义Feistel网络的变体,仅使用少量S盒,该结构与TWINE的轮函数中所使用的相同。支持两种密钥长度:80比特和128比特。在这两种情况下,首先将子密钥 WK0初始化为 K,然后使用轮常数和相同的轮函数生成后续的子密钥: WKi+1=F(WKi, CONi), 其中 0 ≤ i ≤ 31。最后通过从 WKi中提取8个半字节得到轮密钥 RKi。用于128 比特密钥的函数 F如图2所示。关于80比特版本的密钥调度,我们建议读者参考[4]。
2.2 LBlock和LBlock‐s的描述
LBlock [5]是一种双分支Feistel网络,其特点是:在与Feistel函数输出进行异或的分支上执行旋转操作。这导致其与TWINE具有很强的结构相似性,正如该密码算法的作者所指出的那样。
LBlock的Feistel函数由密钥加法、一个由8个不同的4比特S盒组成的S盒层 S以及一个半字节置换 P构成。此外,
差分分析和中间相遇攻击 7
典型的Feistel结构,在异或之前,右分支会向左旋转8比特。完整的轮函数如图3所示。LBlock仅使用80位密钥。其密钥调度类似于 present[22]:它依赖于用于存储主密钥的80位寄存器的旋转以及两个S盒的应用。它使用32轮来加密明文。
认证密码LAC [6],中使用的分组密码LBlock‐s与LBlock相同,只是S盒层使用了一个唯一S盒,而不是8个不同的S盒,并且其密钥调度更接近 TWINE‐80的密钥调度。LBlock和LBlock‐s的S盒都具有类似的差分特性。
3 种针对25轮 TWINE-128的新攻击
在本节中,我们提出了针对25轮TWINE的两种新攻击,若排除双链攻击,则被攻破的轮数增加了一轮。
8 A. 毕留科夫 等
3.1 中间相遇攻击on 25轮 TWINE‐128
我们的中间相遇攻击遵循了Demirci和Sel¸cuk在高级加密标准上使用的方法,随后由Dunkelman等人在[9],中改进,Derbez等人在[23],中进一步优化,以及Li等人在[10,11]中的工作。这是首次将此类中间相遇攻击应用于费斯妥网络,表明该技术在此类密码算法上同样具有强大威力。[12]
首先,我们给出a δ‐集合的定义,这是一种在我们的攻击中使用的消息特定结构。
定义1。 设一个 δ-集合是指一组16个TWINE状态,它们在一个状态半字节(活动半字节)上互不相同,而在其他状态半字节(非活动半字节)上全部相同。
接下来,我们考虑 δ集,其中半字节15是活动的。对于这样一种特定的集合,我们作出了以下观察,这是我们的新攻击的核心。
观察1。
考虑通过十一轮完整的TWINE轮对一个 δ-集{P0, P1,…, P15}进行加密。有序序列
[x111[4] ⊕ x011[4], x211[4] ⊕ x011[4],…, x15 11[4] ⊕ x011[4],
x111[15] ⊕ x011[15],…, x15 11[15] ⊕ x011[15]] 由以下 27个半字节参数完全确定:
– y10[14] – y20[14] – y30[2, 14] – y40[2, 4, 14]
– y 0
– y60[0, 2, 8, 12, 14] – y70[0, 4, 6, 10, 14] – y80[2, 8, 12] – y90[4, 10]
– y 0
其中y m r[2i] ⊕ RKr[i]。因此,当我们考虑所有可能的密钥和 δ集合时(在理论上可能的30-半字节序列的 24×2×15= 2120中),最多有 24×27= 2108种可能的序列。
证明。
该证明是直接的,并在图4中进行了说明。在第一步,我们知道差分
P1 ⊕ P0,…, P15 ⊕ P0。由于我们考虑的是一个 δ‐集合,第一轮每个S盒中的差分均为零,因此我们能够计算出差分 x11⊕x01,…, x15 1 ⊕x01。因此,对 y 0 1[14]的了解可得到该特定状态变量在全部16个消息中的取值,从而得知此轮每个S盒中的差分,并能够计算出差分 x12⊕x02 ,…, x15 2 ⊕x02。该过程可以重复进行,直到获得 x11[4]和 x11[15]中的差分,因为在每一步中,S盒中的差分要么为零,要么不需要,要么已知。
P0的活动半字节的实际值不会影响所有可能序列的集合,因为只使用了差分。因此P0的选择是自由的,但随后必须根据活动半字节的差分对 δ‐集合进行排序。
差分分析和中间相遇攻击 9
对11轮TWINE的这一观察被用于通过在开头增加5轮、结尾增加9轮,对25轮TWINE发起攻击。攻击场景如下:
–离线阶段。计算观测1中给出的所有 2108 120比特序列,并将其存储在哈希表中。– 在线阶段。1. 选择一个明文 P0。2. 猜测识别包含 P0的 δ‐集合所需的状态变量。3. 获取相应的密文。4. 猜测从密文计算 x11[4]和 x11[15]中差分所需的状态变量。5. 构造序列并检查其是否存在于表中。
步骤2和步骤4类似于观察1的证明:首先我们将差分从状态 x5传播到明文,然后将差分从密文传播到 x11[4]和 x11[15]。因此,如图5所示,在线阶段需要58个状态半字节。幸运的是,密钥调度方程将可能的值数量从 24·58= 2232减少到 2124。实际上,只要知道子密钥 WK6的全部内容(除了半字节26),就可以获得足够的密钥材料,以对明文和密文进行部分加密和解密,从而得到所需状态变量的值。这些密钥材料如图6所示。
10 A. 毕留科夫 等
本次攻击的数据复杂度为 248个选择明文,时间复杂度为 2124 · 16次部分加密/解密,内存复杂度约为 2108 128比特序列。误报的概率约为 2108 · 2−120= 2−12,并且由于我们尝试了 2124次密钥猜测,预计在最后一步后仅剩2116个。因此,可以猜测 WK6[26]以完全恢复主密钥,然后使用两组明文/密文对进行验证。
请注意,可以对攻击进行一些小的改进。首先,我们可以考虑使用15条消息的 δ‐集合,而不是16条,以节省一些内存
差分分析与中间相遇攻击 11
时间复杂度,同时仍提供足够的过滤以检索主密钥而不会增加整体复杂度。此外,知道子密钥 WK6除了半字节15和26之外,提供了足够的密钥材料(图中灰色标注的部分)6,可用于计算步骤2所需的所有状态变量,以及除其中21个以外的步骤4所需的所有状态变量。这些状态变量是 y16[14]、y17[6, 10]、 y18[2, 8, 10]、 y19[0, 12]、 y20[2, 4, 6, 14]、 y21[2, 6, 8]、 y22[0, 2]、 y23[0, 4]和y24[6]。因此,我们估计时间复杂度为:
2120 · 15 · 37/200+ 2124 · 15 · 21/200+ 2 · 2120 ≈ 2124.7 encryptions,
其中200是一次加密的S盒数量。内存复杂度约为2109 64比特块。
3.2 对25轮TWINE‐128的不可能差分攻击
不可能差分密码分析由克努森 [24] 和比汉 et al.[25] 同时提出,是一种针对多种分组密码的强大技术。最近,博拉 et al. [13] 提出了一种不可能差分攻击的通用视角,旨在简化并辅助此类密码分析的构造与验证。特别是,他们提供了一个公式来根据攻击的参数计算其复杂度。为了理解该公式,我们首先简要回顾不可能差分攻击的构造方式。该方法首先将密码算法分为三部分:
E= E3 ◦ E2 ◦ E1,并通过 E2 找到一条不可能差分 (ΔX ΔY)。然后将 ΔX(或 ΔY)以概率1通过 E −1 1 (或 E3)进行传播,从而得到 Δin(或 Δout)。我们用 cin 和 cout 分别表示转移 Δin→ ΔX 和 Δout→ ΔY 的概率的 log2。最后,用 kin和 kout 表示这些转移中涉及的密钥材料。总体而言,该攻击通过排除那些至少存在一对数据满足该特征的密钥 k 来实现
12 A. 毕留科夫 等
通过 E1和 E3,并在穷尽其余部分时,其复杂度如下:
–数据: CNα–内存: Nα–时间:
CNα+(1+ |kin∪kout|−cin−cout) NαCE′+ 2|k|−α
其中 Nα满足(1 −2−cin−cout)Nα< 2−α, CNα是生成满足(Δin,Δout)的 Nα对所需的选择明文数量, |k| 是密钥长度, CE′是部分加密代价与完全加密代价的比率。
我们使用该框架对25轮TWINE‐128发起了不可能差分攻击。首先,我们找到了一个贯穿TWINE 13轮的截断不可能特征,如图7所示。该特征在前端扩展了4轮,在后端扩展了8轮,从而用于攻击密码算法的25轮。从图8可以看出,明文中的差分在11个半字节上必须为零,即 cin+ cout= 16+ 60= 76。密钥材料 kin ∪ kout由 7+ 45= 52个轮密钥半字节组成,由于TWINE‐128的密钥调度,这些半字节总共只能取 2124种可能值。实际上,它们都可以由完整的子密钥 WK24计算得出,除了半字节1(见图9)。
因此,根据上述公式,我们攻击的复杂度为
D= α · 275.5−39 · 220= α · 256.5 T ≈ α · 2123.5 ·
C E ′+ 2128−α M= α · 275.5
C E ′ 52/200 ≈ 2−1.9 α,且。
当我们估计比率为时,使整体复杂度最小的值为5.87。
差分分析和中间相遇攻击 13
WK0 WK1
WK 24
RK[ 0 ]
RK[1]
RK[ 2 ]
RK[3]
RK[ 4 ]
RK[5]
RK[ 6 ]
RK[7]
4 TWINE、LBlock 和 LBlock‐s 的 4 轮结构
4.1 轮函数的另一种表示
TWINE的轮函数可以用一种等效的替代表示来描述,这种表示能够更清晰地展示某些差分路径。这种替代表示如图10a所示。注意,类似的表示‐
14 A. Biryukov 等人
轮函数的替代表示。)
LBlock 的构造可以被获得,这一观察突显了这两种设计之间的相似性。
对于 TWINE,我们只需将所有“进入”Feistel函数的支路移到左侧,而将其输出接收支路移到右侧。这意味着我们将具有偶数索引的支路移至左侧,奇数索引的支路移至右侧,如图10a 所示。
LBlock(‐s)的替代描述过程比TWINE更为复杂,总结如图11所示。由于S 盒和置换层 P均在半字节上操作, P ◦ S等价于 S′ ◦ P,其中 S′是重新排列的S盒层。然后,在Feistel函数内部应用 P之前,我们提前在其输入端应用,并在同一分支上应用其逆操作 1/P以进行补偿。最后,我们注意到旋转 R与逆置换 1/P作用于相同的数据,因此将它们合并为单一操作 R◦(1/P)。如果我们把构成LBlock内部状态的两个32位字分别替换为八个4位半字节,则得到图10b中给出的表示形式。
的替代表示。)
4.2 四轮循环行为
利用我们的替代表示,我们可以轻松表示TWINE的4轮(见图12左侧)。如图所示,这16个分支可以分为两个互不相交的组件,即灰色和黑色,使得在一个组件内的分支在4轮中的3轮仅与彼此相互作用。然而,在最后一轮中,每个组件的分支仅与来自另一个组件的分支相互作用
差分分析和中间相遇攻击 15
另一个组件。此外,这些组件是稳定的,因为这种由4轮迭代组成的组可以拼接在一起以覆盖任意轮数,并且对于所有索引为 r且满足 r ≡ 3 mod 4 的轮数,它们始终保持分离。实际上,在图12中,第四轮输出端为黑色的分支恰好是第一轮输入端为灰色的分支。如果我们把这些组件彼此分开绘制,就会得到图12右侧所示的TWINE的4轮另一种描述形式。同样的方法也可应用于L Block(‐s),见图13。
针对轮数减少的TWINE的差分分析和中间相遇攻击
5 TWINE的截断差分密码分析
5.1 4轮上的截断差分
由于TWINE在4轮中具有特殊的结构,因此表现出一些高概率的截断差分模式。其中最简单的一种模式意味着在4轮的输入中有4个活跃分支,在输出中也有4个活跃分支,代价是在第3轮发生4次差分抵消。假设(x[0], x[2], x[6], x[10])具有非零差分,则这些差分将在接下来的两轮中传播到完整的黑色分量。在第3轮期间,如果(x[0], x[4], x[6], x[12])中的差分在经过密钥加法和S盒层后与(x[1], x[5], x[7], x[13])中的差分相互抵消,则差分将不会传播到
16 A. 毕留科夫 等
红色分量。因此,差分在黑色分量中再保持3轮,概率为1。由于4次抵消发生的概率为 2−16,并且这些截断特征可以“拼接”,以覆盖任意多的轮数,因此我们得到了一个覆盖 4r轮数的截断差分,其概率为 2−16·r。
其他一些略有不同的特征在输入和4轮后的输出中涉及三个活跃分支,使得仅需4次抵消,即它们也具有概率 2−16。其中一个如图14a所示,其余的见附录中的图17。非零差分为黑色,零差分为灰色。它们的工作方式均为在第二轮发生一次抵消,第三轮发生三次抵消。与之前相同,第一轮和第四轮的概率为概率1。然而,我们可以通过在所有组件上添加非零差分将这些特征扩展到前4轮(在图17中以浅蓝色虚线表示)。代价是多一次抵消,因此概率为 2−20,我们可以使用由 232个明文/密文对构成的结构,从而产生(232 2) ≈ 263对具有正确零差分的对。
可以看到,这些差分在经过4轮后会转移到右分支。附录中描述了覆盖它的类似差分路径(图18),其中第一个也在图14b中表示出来。与之前一样,灰色表示零差分,黑色表示非零差分,黑色方块表示在加密过程中必须发生的抵消。它还用虚线浅蓝色表示前3轮中不考虑抵消约束的差分传播,使得该路径的概率为概率1。绿色方块表示当从底部开始并对具有正确输出差的一对密文进行部分解密时必须观察到的抵消。
的4轮替代表示。S盒未显示,异或操作用圆圈表示。左侧为基本表示,右侧则突出显示两个分量。)
差分分析和中间相遇攻击 17
因此,可以使用特征 Li,Ri,…, Li,Ri覆盖任意 i ∈[1, 4]轮数。这样的路径将覆盖 4r轮数,其概率为 2−16·r。我们还用 L′ i表示在顶部扩展后的路径 Li,以实现8个非零输入差分,代价是一次额外的抵消;用R′ i表示缩减至3轮且不发生任何抵消的路径 Ri。 L′ i和 R′ i均对应浅蓝色虚线包含非零差分的情况。
5.2 高效密钥恢复
阻止差分传播到其他组件的4次抵消(在第一轮中为5次)可分为两组,每组依赖于一个不同的5和6个子密钥集合。该现象如图15所示,其中零差分用灰色表示,第一个子组件用实线表示,第二个子组件用虚线表示。迭代路径中第一轮的抵消仅在加密的第一轮中相关。
从一对具有正确输入差分的明文对出发,可以很容易地生成所有可能导致我们预期路径的子密钥组合集合,如下所示:
1. 尝试图15中连续(即“非虚线”)部分涉及的所有子密钥组合,并仅存储导致正确抵消的组合。共有 24·5= 220种可能性,其中 220−3·4= 28种产生正确的模式。2. 尝试图15中虚线部分涉及的所有子密钥组合,并仅存储导致正确抵消的组合。共有 24·6= 224种可能性,其中 220−2·4= 216种产生正确的模式。
3. 将 28和 216个独立的子候选组合起来,得到 224个 4 ·(5+ 6)的候选,每个为 = 44比特。
18 A. 毕留科夫 等
一种非常类似的算法可用于在部分解密同一对密文时恢复产生正确抵消的候选值。这样做会生成另外 224 个候选值,每个候选值为 44 比特。
5.3 结合截断差分攻击23轮 TWINE‐128
一般原理。 本攻击的总体思路是排除在前3轮中用于更新左分支的12个子密钥以及在最后3轮中用于更新右分支的12个子密钥所组成的集合中部分值的组合。这些子密钥构成一个包含24个半字节(即96比特)的集合。图16中描述的截断差分路径的首尾各4轮块均依赖于该集合中的子密钥,尽管每条路径仅使用了可用96比特中的88比特。因此,很容易结合从每条路径推导出的信息。我们攻击的完整描述如下。
利用上一节中描述的差分路径,我们可以通过四种不同的方式以概率 p= 2−84覆盖23轮。这些4轮特征的连接方式如图16所示,其中0表示该半字节上无差异, x表示任意非零差异。注意,它们都要求相同的输入截断差分,均产生相同的输出截断差分,并且一旦在第三轮通过消除其中一个差分“选择”了分支,则截断路径即被固定。
1. 数据生成。 首先,我们需要生成用于提取子密钥信息的对。为此,我们使用 2s个结构,每个结构包含 232个明文/密文对。在这些结构中,半字节
x0[0..3, 6, 7, 10, 11]取所有可能的值,而其他位保持不变。因此,我们以一定代价获得了 2s+63个具有正确输入差分的对
差分分析和中间相遇攻击 19
| xxxxxxxx | 00000000 |
|---|
| 08|xx0x0000 |
| 08|xxx00000 |
| 08|0xxx0000 |
| 08|x0xx0000 |
| 08|xx0x0000 |
|---|
| 08|xxx00000 |
| 08|0xxx0000 |
| 08|x0xx0000 |
| xxx00000|08 |
|---|
| xx0x0000|08 |
| x0xx0000|08 |
| 0xxx0000|08 |
| 08|xx0x0000 |
|---|
| 08|xxx00000 |
| 08|0xxx0000 |
| 08|x0xx0000 |
| 00000000 | xxxxxxxx |
|---|
| R1, p= 2−16 |
| R2, p= 2−16 |
| R3, p= 2−16 |
| R4, p= 2−16 |
| | | ||| | ||| | ||| | ||| | ||| | ||| | ||| | ||| | ||| | ||| | ||| | ||| | ||| | |||||| |
| — |
| xxx00000|xxx00000|08 |
| xx0x0000|xx0x0000|08 |
| x0xx0000|x0xx0000|08 |
| 0xxx0000|0xxx0000|08 |
| R4, p= 2−16 |
|---|
| L1, p= 2−16 |
| L2, p= 2−16 |
| L3, p= 2−16 |
| L4, p= 2−16 |
| R1, p= 2−16 |
|---|
| R 2, p= 2−16 |
| R3, p= 2−16 |
轮索引
0
4
8
12
16
20
23
R4, p= 2−16
L1, p= 2−16
| L2, p= 2−16 |
| — |
| L3, p= 2−16 |
L4, p= 2−16
的 D= 232+s次查询加密预言机。然后我们获得所有也具有正确输出差的对,即2 08x8,代价是2s对包含 232个密文的数组进行排序。由于该输出差的概率为 f= 2−32,因此剩下 N p= 2s+63 · f= 2s+31个具有正确输入和输出差的对。其中,对于图16中描述的4条截断差分路径中的每一条,均有 Nr= 2s+63 · p= 2s−21个正确对——这意味着 s必须至少等于21。注意
N p = Nrf/p和D= Nr/p。
2该差值中半字节的顺序对应于我们在替代表示中的半字节顺序。
20 A. 毕留科夫 等
现在我们已获得所需的数据,接下来对每条差分路径进行如下处理, t为当前考虑的差分路径的索引。
2.计数器递增。 对于 t ∈[1, 4]
(a) 设 Tt为一个大小为 288的数组。对于通过筛选的 Np对,我们运行第 5.2节中描述的算法,以恢复前3轮使用的11个子密钥子集的 224个候选值,以及最后3轮使用的另一组11个子密钥子集的224个候选值。这将产生 K= 248个候选值,存在于大小为 S= 288 的空间中
3. 丢弃候选值。 现在我们有4个 Tt, t ∈[1, 4]计数器表。在每个表中,每个 S候选值以概率 K/S= 2−40被增加了 Np次。因此,我们用均值为
μwrong= NpK/S= Nr(fK)/(pS)、方差为 σ2 wrong= Np(K/S)(1 − K/S) ≈ Nr(fK)/(pS)的正态分布来近似计数器的分布。然而,正确的计数器还被每个 Nr正确对所增加,这意味着其均值为 μright= NpK/S+Nr= Nr((fK)/(pS)+1)。我们定义μ0以便于表示 μwrong、 σ2 wrong和 μright:
μ0=
f · K
p · S, μwrong= Nrμ0, σ2 wrong= Nrμ0, μright= Nr(μ0+ 1).
然后,我们结合这些计数器中的信息。为了实现这一点,我们回顾一下,表 Tt 中的索引对应于总共96比特密钥集中88比特的不同子集。因此,我们可以为每个96比特候选值在每个表 Tt 中关联一个单独的代表值。于是,我们可以通过取每个表中其代表值得分的平均值,为每个96比特候选值赋予一个分数。因此,错误候选值的得分服从以下参数的正态分布:
N(4 · μwrong 4, 4 · σ2 wrong 42 )= N(μwrong, σ2 wrong 4).
类似地,正确候选的得分是从分布N(μright, σ 2 right /4)中抽取的一个样本。如果我们希望保留正确候选的概率约为1/2,则需要丢弃所有得分低于μright的候选。我们用 Pwrong表示保留一个错误候选的概率,即一个错误候选的得分大于 μright的概率。该概率由以下公式给出:
Pwrong= 1 2[1 − erf(μright − μwrong √2σ2 wrong /4)]= 1 2[1 − erf(√2Nr μ0)]. (1)
我们可以看到,且不出所料,每条路径的正确对数量越多,被丢弃的错误候选值的数量就越多Nr 。表2给出了当 Nr取不同值时,保留一个错误候选值的概率 Pwrong ,以及相应的数据复杂度,其中已知 μ0=2 −32+56+84−96= 212。
另外需要注意的是, Nr的最大值对应于完整的码本,即当我们查询所有 232可能的结构时的情况,此时Nr= 232−21= 211。
差分分析和中间相遇攻击 21
| Nr | P错误 | D | T | M |
|---|---|---|---|---|
| 25 | 2−1.22 | 258 | 2126.78 | 289 |
| 27 | 2−1.47 | 260 | 2126.53 | 289 |
| 29 | 2−2.06 | 262 | 2125.94 | 289 |
| 211 | 2−3.67 | 264 | 2124.34 | 289 |
复杂度估计。 上一节中描述的截断差分攻击的内存复杂度很容易评估。我们最多需要存储 263明文/密文对和4倍 288计数器。这些计数器的平均值为 Nr · 212,其中 Nr最大为 211。因此,每个计数器使用32比特已完全足够。在此,存储计数器显然是主要因素,这意味着该攻击的内存复杂度为 4 · 288= 290个32比特的计数器,或 289内部状态。
我们需要Nr·253个明文/密文对,这意味着数据复杂度为 Nr · 253。
这也意味着我们需要至少生成这些所需的时间。此外,我们还需要计算每个通过筛选的Nr · 252对中可能的候选值。如第5.2节所述,每一对可以在 248时间内完成。因此,我们还需要执行计数器递增操作 4 · Nr · 252 · 248= Nr · 2102次。最后,对于所有得分足够高的候选值,我们需要暴力破解密钥剩余的32比特。这需要 2128 · Pwrong次加密。不同 Nr值的复杂度如表2所示。
6 优化高概率差分的搜索
虽然截断差分可直接用于攻击(轮数减少的)分组密码,但它们也可用于优化高概率差分的搜索。实际上,通过提供差分特征应遵循的“模板”,可以显著减小搜索空间的大小,并使差分概率下界的计算更加精确。类似的方法已在 [18]中用于识别PRINCE的高概率差分,这些差分随后被应用于多重差分攻击,这是目前对该密码算法最有效的攻击。LAC [6],是CAESAR竞赛的一个轻量级候选算法,基于LBlock的简化版本LBlock‐s,在线发布的一份笔记中,勒伦特 [19]对其进行了另一次高概率差分搜索。
在两种情况下,所采用的方法都是相同的:首先识别出一个高概率差分路径,然后使用启发式方法来计算一个差分的下界概率。
22 A. 毕留科夫 等
通过本质上聚类所有遵循该截断差分的特征,从而计算出差分概率的下界。由于我们拥有覆盖任意轮数的TWINE迭代截断路径,因此我们将此方法应用于该密码算法以识别高概率差分。
对于覆盖 r 轮数的截断特征 T,我们用 PT[δ→Δ] 表示通过将所有遵循该截断路径并从 δ 映射到 Δ 的差分路径的概率之和所得到的差分 (δ→Δ) 的概率。利用这些概率,我们构建一个矩阵 M(C),使得 M(T)i,j= PT[i→ j]。
为了获得给定 δ时 Δ 的分布,我们只需将一个处处为零、仅在位置 δ 处等于 1 的向量乘以 M(T)。注意,以此方式得到的 Δ 的概率之和不等于 1,因为截断路径本身的概率不为 1。给定 M(T),可通过寻找矩阵中的最大系数来轻松找到概率最高的差分。 M(T) 的大小受限于仅考虑与 T 一致的 δ 和 Δ 的取值。
为了获得路径 T 经过两次迭代后 Δ 的分布,我们将同一向量乘以矩阵 M(T) × M(T),其中“×”表示常规矩阵乘法。该构造当然可以迭代。
对于TWINE,我们计算了两个矩阵 M(L1) 和 M(R1),分别对应于图14a 和 b 中描述的截断差分路径 L1和 R1。由于这两条路径的输入和输出都仅有 3 个非零半字节,因此 M(L1) 和 M(R1) 均为大小为 212 × 212的方阵。通过对这些矩阵进行不同的乘法运算,我们找到了表3中给出的高概率差分。
| 轮数 输入 | 差分 | 输出差 | 概率 | # 活跃 S盒 ×2−2 |
|---|---|---|---|---|
| 4 | 10 20 00 60 00 00 00 00 | 00 00 20 00 60 00 00 60 | 2−17.496 | 2−18 |
| 4 | 60 20 00 60 00 00 00 00 | 00 00 20 00 60 00 00 10 | 2−17.496 | 2−18 |
| 4 | 30 60 00 30 00 00 00 00 | 00 00 60 00 30 00 00 10 | 2−17.759 | 2−18 |
| 4 | 10 60 00 30 00 00 00 00 | 00 00 60 00 30 00 00 30 | 2−17.759 | 2−18 |
| 8 | 10 20 00 60 00 00 00 00 | 60 20 00 10 00 00 00 00 | 2−34.542 | 2−36 |
| 8 | 10 20 00 60 00 00 00 00 | 60 20 00 f0 00 00 00 00 | 2−34.981 | 2−36 |
| 8 | f0 20 00 60 00 00 00 00 | 60 20 00 10 00 00 00 00 | 2 −34.981 | 2−36 |
| 8 | d0 f0 00 80 00 00 00 00 | 80 f0 00 d0 00 00 00 00 | 2 −34.994 | 2−36 |
| 12 | 10 20 00 10 00 00 00 00 | 00 00 20 00 60 00 00 10 | 2 −52.083 | 2 −54 |
| 12 | 10 20 00 60 00 00 00 00 | 00 00 20 00 10 00 00 10 | 2 −52.083 | 2 −54 |
| 12 | 80 f0 00 80 00 00 00 00 | 00 00 f0 00 d0 00 00 80 | 2 − 52.144 | 2 −54 |
| 12 | 80 f0 00 d0 00 00 00 00 | 00 00 f0 00 80 00 00 80 | 2 − 52.144 | 2 −54 |
| 16 | 60 20 00 60 00 00 00 00 | 60 20 00 60 00 00 00 00 | 2 − 67.538 | 2 − 72 |
| 16 | 30 60 00 30 00 00 00 00 | 30 60 00 30 00 00 00 00 | 2 − 67.595 | 2 − 72 |
| 16 | 90 30 00 90 00 00 00 00 | 90 30 00 90 00 00 00 00 | 2 − 67.626 | 2 − 72 |
| 16 | 80 f0 00 80 00 00 00 00 | 80 f0 00 80 00 00 00 00 | 2 − 67.762 | 2 − 72 |
差分分析与中间相遇攻击 23
如我们所见,4轮差分特征的概率比预期更高。实际上,该特征涉及9个S盒,而S盒中单个差分的最大概率为 2−2。因此,该特征的最大概率为 2−18,低于我们的模型预测值 2−17.5,而该预测值我们已通过实验验证。随着轮数增加,这一增益也随之提高。对于12轮,我们有27个活跃的S盒,这意味着特征的概率不可能高于 2−54,然而最高的差分概率至少为 2−52.1。
勒伦特针对LBlock‐s获得了更为显著的结果(例如,8轮的下界为 2−29.8),这乍看之下可能令人惊讶,因为这两种密码算法的线性层非常相似,且均使用最大差分概率等于 2−2的S盒。然而,这两种密码算法S盒的差分分布表中系数的分布是不同的。例如,设 SL和 ST分别表示LBlock‐s和TWINE的S盒,则对于 δ ∈{4, 5, 6, 7},有 P[SL(x+ δ) + SL(x) = 4]= 2−2;而对于任意Δ = 0,仅存在一个 δ使得 P[ST(x+ δ) + ST(x) = Δ]= 2−2。换句话说,TWINE的输出差分分布比LBlock‐s(以及LBlock)更接近均匀。为了研究这些差分行为差异所带来的影响,我们通过将TWINE的S盒替换为LBlock‐s的S盒,重新进行了差分搜索。我们找到了8轮中至少具有 2−31.7概率的四个不同差分路径。3该结果比宽轨迹论证所能给出的结果高出 24.3倍,且比使用TWINE S盒的结果高出 23倍。
我们的研究结果强调了如何利用大截断差分来证明差分概率的更紧下界,同时也强调了在设计原语时应考虑S盒整体的差分分布表中系数的分布情况,而不仅仅是关注最大系数(这在使用宽路径论证时常被采用)。对于仿射等价于 GF(2n)单项式的 n×n S盒,这种分布完全由所谓的差分谱[26]描述,但据我们所知,目前尚无此概念向任意S盒的推广。
7 结论
铃木等人在[3]中提出了一种用于广义Feistel网络中的新型置换,并随后将其应用于设计TWINE。我们针对该原语36轮中的25轮提出了两种新攻击,据我们所知,这是单密钥模型下的最佳攻击。接着,我们对信息在这种改进型广义 Feistel网络中的传播方式提供了新的见解,表明混合操作实际上分为两个阶段:内部状态的两半部分在前三轮中独立进行混合,仅在第四轮时交换信息。这种行为不断重复ad infinitum ,并且也可以在LBlock及其变体中观察到。
3注意,勒伦特使用了一个包含17个活跃S盒的截断差分,而我们的有18个。这一差异很可能解释了导致我们结果之间相差因子 2 1.9的原因。
24 A. 毕留科夫 等
LBlock‐s。我们利用这一观察结果找到了高概率截断差分路径,然后利用这些结果对23轮TWINE‐128发起攻击,并给出了某些差分高概率的更紧下界,突出了TWINE与LBlock‐s在差分传播过程中的差异。

840

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



