RIPEMD‐160碰撞攻击新进展

轮数减少的RIPEMD‐160的碰撞与半自由起始碰撞

摘要

本文中,我们提出了一种对国际标准化组织/国际电工委员会( ISO/IEC)标准化的双分支哈希函数RIPEMD‐160的改进型密码分析。首先,我们展示了如何理论计算RIPEMD‐160的步差分概率,该问题曾被门德尔在ASIACRYPT 2013上列为开放性问题。其次,基于门德尔提出 的自动寻找RIPEMD‐160差分路径的方法,我们构造了一条30步差分路径,其中左分支稀疏,右分支尽可能保持稀疏。为了确保消息修改技术能够应用于RIPEMD‐160,需要预先推导并良好控制一些额外比特条件。这些额外比特条件用于确保模差能够正确传播。通过这种方法,我们可以以复杂度 2^67找到30步RIPEMD‐160的碰撞。这是首个针对轮数减少的 RIPEMD‐160的碰撞攻击。此外,通过选择不同的消息字来合并两个分支,并对起始点增加一些条件,可以改进ASIACRYPT 2013中关于前36步 RIPEMD‐160的半自由起始碰撞攻击。然而,此前预计算方程 T≪S0 C0=(T C1) ≪S1的方式开销过大。为克服这一障碍,我们受到道姆在MD5上的工作的启发,提出一种方法来降低预计算该方程所需的时间复杂度和内存复杂度。结合所有这些技术,前36步RIPEMD‐160的半自由起始碰撞攻击的时间复杂度可降低至原来的2^15.3到 2^55.1。

关键词

RIPEMD‐160 · Semi-free-start碰撞 · Collision · 哈希函数 · 压缩函数

1 引言

密码学哈希函数是一种将任意长度的消息作为输入,并输出大小为 n位的固定长度 哈希值的函数。存在三种哈希函数的基本要求,即抗原像攻击、第二原像抗性和抗碰撞性。大多数标准 哈希函数基于Merkle‐Damg˚ard范式 [2,12],通过迭代一个具有固定大小输入的压缩函数H,以压缩任意长度的消息。因此,压缩函数本身应满足相应的 安全要求,从而使哈希函数能够继承其安全性。针对压缩函数存在两种攻击模型:一种称为自由起始碰撞攻击,另一种是半自由起始碰撞攻击。自由起始碰撞攻击旨在找到两对不同的消息与链变量(CV, M),(CV ′, M′),使得H(CV, M) =H(CV ′, M′)。半自由起始碰撞攻击的工作方式相同,但附加条件为 CV= CV ′。过去十年见证了诸如MD4、MD5、SHA‐0和SHA‐1等一系列哈希函数的破译,这是由于在哈希函数密码分析方面取得了一系列突破性成果 [15,20–23]。所有这些哈希函数都属于MD‐SHA家族,其设计策略基于在非平衡Feistel网络中使用加法、循环移位、异或和布尔函数。

RIPEMD家族可被视为MD‐SHA家族的一个子家族,因为RIPEMD‐0[1]是该家族的第一个代表,由两个类似MD4的函数并行计算组成,总共包含48步。Dobbertin [4]首先对RIPEMD‐0的安全性提出了质疑,王等[20]随后提出了针对它的实际碰撞攻击。为了增强RIPEMD‐0的安全性,Dobbertin、 Bosselaers和Preneel[3]于1996年提出了两种加强版本,即RIPEMD‐128和 RIPEMD‐160,其输出分别为128/160位,步数分别为64/80步。为了使两个计算分支彼此更加不同,RIPEMD‐128和RIPEMD‐160在两个分支中不仅使用了不同的常量,还使用了不同的旋转值、消息插入调度和布尔函数。

对于RIPEMD‐128,已有一系列分析[5,8,16–18],威胁其安全性。至于 RIPEMD‐160,门德尔et al.[11]在ASIACRYPT 2013上提出了一种改进的方法,用于自动寻找RIPEMD‐160的差分路径。利用他们的方法,他们找到了一条48步差分路径和一条36步差分路径。基于这两条差分路径,门德尔et al.[11]对42步RIPEMD‐160发起了半自由起始碰撞攻击,并对前36步RIPEMD‐160发起了半自由起始碰撞攻击。此外,他们还提出了一个开放性问题,即如何理论计算步差分概率。此外,还有一些关于RIPEMD‐160的其他分析结果,例如针对31步RIPEMD‐160的原像攻击[13],最多可达51步的压缩函数区分器[14],, 针对压缩函数36步的实际半自由起始碰撞攻击[9](并非从第一步开始),以及 针对48步RIPEMD‐160[19]的半自由起始碰撞攻击。然而,RIPEMD‐160至今未被攻破,并且作为ISO/IEC标准广泛应用于安全协议的实现中。

2005年,道姆在他的博士论文[6]中研究了T函数(一种第i个输出位仅依赖于所有输入字的前i个低位的函数)的概率计算。更具体地说,他提出了一种方法来计算T满足方程(T C0) ≪ S= T≪ S C1的概率。其中 C0和 C1是常量。根据我们对计算RIPEMD‐160步差分概率这一开放性问题的分析,发现计算该概率等价于计算内部状态的模差被正确传播以及内部状态上的比特条件成立的概率。尽管道姆的工作可用于计算模差被正确传播的概率,但由于内部状态上单个比特条件成立的概率不再为1/2,因此无法完全解决该开放性问题。然而,通过从不同角度考虑T满足方程(T C0) ≪S= T≪S C1的概率的计算,我们可以推导出T的一些有用特征,这些特征可用于计算比特条件成立的概率。通过这种方法,我们可以完全解决该开放性问题。

本文组织如下:在第2节中,我们简要描述RIPEMD‐160的算法;在第3节中,我们描述计算步差分概率的方法;在第4节中,我们描述改进的预计算方程 T≪S0 C0=(T C1) ≪ S1的方法;在第5节中,我们描述对前30步 RIPEMD‐160的碰撞攻击;在第6节中,我们描述对前36步RIPEMD‐160的改进的半自由起始碰撞攻击。最后,在第7节中总结全文。

我们的贡献

  1. 我们理论计算步差分概率的方法包括两个步骤。首先,我们考虑内部状态的模差成立的概率,这将有助于获得 Qi(Qi参见第2.2节)的一些特征。然后,对于 Qi的每一个特征,在该 Qi特征成立的条件下,可计算出内部状态上的比特条件成立的概率。通过这种方式,RIPEMD‐160的步差分概率的理论计算成为可行。

  2. 我们从道姆的博士论文[6]中推导出一个有用的性质。基于该性质,我们可以将求解方程 T≪S0 C0=(T C1) ≪S1转化为求解方程 T≪S0 C2= T≪S1。通过分析在给定多对(C0, C1)的情况下,该方程解数量的期望,我们可得出结论:在合并阶段,我们新的获取解的方法平均仅需花费检查方程 T≪S0 C0= (T C1) ≪S1的4倍时间,因此与之前的方法[5,11]相比,对效率的影响可以忽略不计。此外,我们新方法预计算方程的时间复杂度和内存复杂度均为 2^32,, 远小于通过构建大小为 2^64的表来存储解的策略。

  3. 通过使用[11]中描述的技术自动为RIPEMD‐160寻找差分路径,我们可以构造一条30步差分路径,其中左分支较为稀疏,右分支尽可能被控制为稀疏。对于左分支,我们以概率方式保留;对于右分支,我们应用消息修改技术[20]。然而,根据我们对理论上计算步数这一开放性问题的分析,RIPEMD‐160的差分概率中,只有当内部状态的比特条件和模差同时满足时, RIPEMD‐160的差分路径才成立。这与MD4不同,因为MD4的差分路径仅需内部状态的比特条件满足即可。由于消息修改技术只能用于确保比特条件成立,因此将其应用于RIPEMD‐160时,如何使内部状态的模差成立成为难点。幸运的是,我们发现可以通过在内部状态上增加一些额外比特条件来使模差成立。因此,在应用消息修改之前,必须通过分析 Qi的特征,预先推导出这些额外的比特条件。在获得新添加的额外比特条件后,通过调整消息修改技术以适用于RIPEMD‐160,我们能够对RIPEMD‐160发起概率为 2^−67的 30步碰撞攻击。

  4. 基于36步差分路径,通过选择不同的消息字来合并两个分支,我们可以改进合并阶段的时间复杂度。此外,基于Q15的特征,我们可以在寻找起始点阶段对 Y11添加一些额外比特条件,以进一步改进我们的攻击。改进后的前36步 RIPEMD‐160上的半自由起始碰撞攻击为2^55.1,远小于之前已知的最佳结果 (表1)。

目标 攻击类型 步骤 复杂度 Ref
压缩函数 原像 31 2^148 [13]
哈希函数 原像 31 2^155 [13]
压缩函数 半自由起始碰撞 36a low [9]
压缩函数
压缩函数 半自由起
半自由起始碰撞
始碰撞 36
36 2^70.4 [11]
2^55.1 New
压缩函数 半自由起始碰撞 42a 2^75.5 [11]
压缩函数 半自由起始碰撞 48a 2^76.4 [19]
哈希函数 碰撞 30 2^67 New

一种攻击从中间步骤开始。

2 RIPEMD‐160描述

RIPEMD‐160 是一种使用 Merkle‐Damg˚ard 结构作为域扩展算法的 160位哈希函数:该哈希函数通过迭代一个 160位压缩函数 H 构建而成,该压缩函数以 512位消息块Mi和 160位链变量 CVi作为输入。CVi+1= H(CVi, Mi) 其中,要哈希的消息 M 事先被填充至 512 位的倍数,且第一个链变量被设置为预定义的初始值 IV,即 CV 0= IV。有关 RIPEMD‐160 的详细描述,请参考 [3]。

2.1 符号说明

为了更好地理解本文,我们引入以下符号。
1. ≪, ≫, ⊕, ∨, ∧和 ¬分别表示逻辑运算: rotate left,rotate right, exclusive or, or, and, negate。
2. 和 分别表示32位上的模加和模减。
3. M=(m0, m1, . . . , m15) 和 M′=(m′0, m′1, . . . , m′15) 表示两个512位消息块。
4. Δmi= m′i − mi表示两个消息字 mi和 m′i之间的模差。
5. Kl j和 Kr j分别表示第j轮左分支和右分支所使用的常数。
6. Φl j和 Φr j分别表示第j轮左分支和右分支所使用的32位布尔函数。
7. Xi, Yi分别表示在第i步压缩 M过程中更新的左分支和右分支的32位内部状态。
8. X′ i, Y ′ i分别表示在第i步压缩 M′过程中更新的左分支和右分支的32位内部状态。
9. Xi,j, Yi,j分别表示 Xi和 Yi的第 j位,其中最低有效位为第0位,最高有效位为第31位。
10. Qi表示在第i步压缩 M过程中更新的右分支的32位临时状态。
11. sl i和 sri分别表示第i步中左分支和右分支所使用的旋转常数。
12. π1(i) 和 π2(i) 表示第i步中左分支和右分支所使用的消息字的索引。
13. [Z]i表示32位 Z的第 i位。
14. [Z]j∼i( 0 ≤ i< j ≤ 31) 表示32位字 Z的第 i位到第 j位。
15. xi[j], xi[−j](x可以是 X和 Y)是仅改变 xi的第j位后得到的结果值。 xi[j]是通过将 xi的第 j位由 0变为1得到的。xi[−j]是通过将 xi的第 j位由1变为0得到的。
16. xi[±j1,±j2,…,±jl](x可以是 X和 Y)是通过改变 xi的第 j1、j2、 jl位得到的值。“+”符号表示该位由0变为1,“−”符号表示该位由1变为0。
17. P(A)是事件 A 的概率。

2.2 RIPEMD‐160压缩函数

RIPEMD‐160 压缩函数是 RIPEMD‐128 的一种扩展版本,基于 MD4,但其特殊之处在于它由两个不同且几乎相互独立的并行实例组成。我们通过左分支和右分支来区分这两个计算分支。压缩函数在两个分支中均包含 80 步,分为 5 轮,每轮 16 步。

第j轮 φl j 异或 O φr j NX 0x Kl j 00000000 0x Kr j 50a28be6 XO 函数 R(x, y, z) x 表达式
0 0x5a827999 0x5c4dd124 I FX(x, y, z) ⊕y ⊕z
1 IFX IFZ ONZ 0x 6ed9eba1 0x 6d703ef3 I FZ(x, y, z) (x ∧y) ⊕(¬x ∧z)
2 ONZ 0x8f1bbcdc 0x7a6d76e9 O NX(x, y, z) x (x ∧ z) ⊕(y ∧¬z)
3 IFZ ONX 异 IFX 或 0x a953fd4e 0x 00000000 ON Z(x, y, z) (x
4 ∨¬y) ⊕ z

Initialization. 160 位输入链变量 CVi被划分为五个 32 位字 hi(i= 0, 1, 2, 3, 4),以如下方式初始化左右分支 160 位内部状态:
X−4= h≫10 0 , X−3= h≫10 4 , X−2= h≫10 3 , X−1= h2, X0= h1.
Y−4= h≫10 0 , Y−3= h≫10 4 , Y−2= h≫10 3 , Y−1= h2, Y0= h1.
特别是,CV0 对应以下五个 32 位字:
X−4= Y−4= 0xc059d148, X−3= Y−3= 0x7c30f4b8, X−2= Y−2= 0x1d840c95, X−1= Y−1= 0x98badcfe, X0= Y0= 0xefcdab89.

消息扩展。 512位输入消息块被分为16个大小为32位的消息字 mi。每个消息字 mi将在两个分支的每一轮中以置换顺序 π使用一次。

步函数。 在第j轮,内部状态按以下方式更新。
Xi= X≪10 i−4 (X≪10 i−5 Φl j(Xi−1, Xi−2, X≪10 i−3) mπ1(i) K l j) ≪s l i,
Yi= Y ≪10 i−4 (Y ≪10 i−5 Φr j(Yi−1, Yi−2, Y ≪10 i−3) mπ2(i) K r j)≪s r i,
Qi= Y ≪10 i−5 Φr j(Yi−1, Yi−2, Y ≪10 i−3) mπ2(i) K r j,
其中 i =(1, 2, 3, … , 80) 且 j =(0, 1, 2, 3, 4)。RIPEMD‐160 的布尔函数与轮常数详见表2。至于其他参数,可参考 [3]。

最终化。 当两个分支都已完成80步计算后,应用一次最终化与前馈。输出链变量由五个32位字 h ′ i组成,其计算方式如下。
h′0= h1 X79 Y78) ≪10 , h′1 = h2 X ≪10 78 Y ≪ 10 77 , h′2 = h3 X ≪ 10 10 76 , h′3 = h4 X ≪ 10 76 Y80, h′4 = h0 X80 Y79.

3 计算步差分概率

在 [11],门德尔等人指出,对于 RIPEMD‐160 的给定差分路径,计算每一步的差分概率并不像 RIPEMD‐128 那样容易。主要原因是 RIPEMD‐160 中的步函数不再是 T函数。因此,精确计算差分概率变得非常困难。然而,我们可以将步差分概率的计算分为两个步骤。定义 μ为内部状态上的所有比特条件成立的事件, ν为内部状态的模差成立的事件。尽管道姆提出了一种方法 [6]用于计算P(ν),但我们将会使用一种不同的方法来计算它,因为我们的目标不仅是计算 P(ν),还要获得 Qi的一些有用特征。然后,我们可以利用推导出的特征以及内部状态上的比特条件来计算 P(μν)。通过这种方式,可得到步差分概率 P(μν)。我们以右分支的步函数为例,并在下方给出其描述。我们将展示如何推导Qi的有用特征并计算 P(μν)。

3.1 开放性问题的描述

由于RIPEMD‐160在两个分支上的步函数具有相同的形式,我们以右分支为例来描述该开放性问题。
Yi= Y ≪10 i−4 (Y ≪10 i−5 Φl j(Yi−1, Yi−2, Y ≪10 i−3) mπ2(i) K r
为了确保给定的差分路径成立,我们需要对Yi的一些位施加条件,并控制 Yi的模差。该开放性问题是如何计算在Yi的比特条件和 Yi的模差同时满足的条件下,且Yi−1、 Yi−2、 Yi−3、 Yi−4、 Yi−5上所有条件均已满足时的概率。例如,根据表16中显示的差分路径,我们知道:
Y ′ 15= Y15[−5,−20,−26], Y ′ 14= Y14[5, 11, 22], Y ′ 13= Y13[−9,−24, 26,−30], Y ′ 12= Y12[0,−15, 21], Y ′ 11= Y11[1, 10, 12, 15,−16, 24, 26,−28], Y ′ 10= Y10[−3, 21, 22, 23, 24, 25, 26,−28], Δm3= 0.
首先,我们使用Y10, Y11, Y12, Y13, Y14, m3计算 Y15。然后,使用Y ′ 10, Y ′ 11, Y ′ 12, Y ′ 13, Y ′ 14, m ′ 3计算 Y ′ 15。接着,第15步的差分概率等于 Y ′ 15= Y15 25 220 226成立且 Y15上的所有比特条件均被满足的概率。

3.2 T C0) ≪S= T≪S C1 的概率

给定两个常量 C0与 C1,道姆描述了一种方法 [6]来计算 T满足(TC0) ≪ S= T≪ SC1(1 ≤ S ≤ 31)的概率。然而,我们通过考虑满足该方程的 T的特征,从另一个角度来研究这个问题。通过这种方法,我们不仅可以计算该方程的概率,还可以获得 T的特征,以便进一步用于理论计算步差分概率。

设 R0||R1= T C0,,其中 R0是表示 T C0的高S位的S位变量, R1是表示T C0的低(32‐S)位的(32‐S)位变量。设 R1′||R0′= T≪S C1,,其中 R1′是表示T≪S C1的高(32‐S)位的(32‐S)位变量, R0′是表示 T≪S C1的低S位的S位变量。则(T C0)≪S= T≪S C1(1 ≤ S ≤ 31)的概率等于P(R0= R0′与 R1= R1′)。由于
R0 ≡[T]31∼(32−S)+[C0]31∼(32−S)+ carry0 mod(2S),
R′ 0 ≡[T]31∼(32−S)+ C1 ∼0 mod(2S), R1 ≡ T ∼0+ C0 ∼0 mod(232−S),
R′ 1 ≡ T ∼0+[C1]31∼S+ carry1 mod(232−S),
其中carry0表示计算 T C0,时从第(31‐S)位向第(32‐S)位的进位, carry1表示计算 T≪S C1时从第(S‐1)位向第S位的进位。为简便起见,我们将 carry0= 0定义为事件 κ,将 carry1= 0定义为事件 ω。因此,
P(R0= R′ 0)= P(κ and[C0]31∼(32−S)= C1 ∼0)+ P(κ and[C0]31∼(32−S)+ 1 ≡ C1 ∼0 mod(2S)),
P(R1= R′ 1)= P(ω and C0 ∼0= [C1]31∼S)+ P(ω and C0 ∼0 ≡[C1]31∼S+ 1 mod(232−S)).
我们将 C0 ∼0中等于1的位的位置表示为 k0, k1,…, kn,并将 C1 ∼0中等于1的位的位置表示为 r0, r1,…, rm。然后, P(κ) 与 P(ω) 的值可以直接推导如下:
1. 如果 C0 ∼0= 0,则 P(κ) = 1。否则, P(κ) = 1−∑ n i=0 2 −(32−S−k i)。
2. 如果 C1 ∼0= 0,则 P(ω) = 1。否则, P(ω) = 1 −∑ m i=0 2 −(S−r i)。
因此,我们可以用这种方式计算 P(R0= R′ 0 and R1= R′ 1):
1. 如果 C0 ∼0=[C1]31∼S与 [C0]31∼(32−S)= C1 ∼0,则 P(R0= R′ 0 and R1= R′ 1) = P(κ) × P(ω)。
2. 如果 C0 ∼0=[C1]31∼S与 [C0]31∼(32−S)+ 1 ≡ C1 ∼0 mod(2S),则 P(R0= R′ 0 and R1= R′ 1) = P(κ) × P(ω)。
3. 如果 C0 ∼0 ≡[C1]31∼S+ 1 mod(232−S) 与 [C0]31∼(32−S) = C1 ∼0,则 P(R0= R′ 0 and R1= R′ 1) = P(κ) × P(ω)。
4. 如果 C0 ∼0 ≡[C1]31∼S+ 1 mod [C0]31∼(32−S) + 1 ≡ C1 ∼0 mod 232−S 2S P R0= R′ 0 and R1= R′ 1 = P κ × P ω ( )) 与 ( )),则 ( ) ( ) ( )。
5. 如果 C0与 C1不属于上述四种情况中的任何一种,则 P (R0= R′ 0 and R 1= R′ 1) = 0。

根据上述方法计算 P(R0= R0′ and R1= R1′),可直接推导出以下性质。(事实上,我们也可以通过使用[6]中的推论4.14来推导它。)

性质1。 给定两个各为32位的随机常量 C0与 C1,存在一个32位的 T,使得( T C0)≪S= T≪S C1成立当且仅当(C0, C1)满足以下方程之一:
1 C1 ∼0 = 0.
2 C1= C0 1 ≪S C1= C0 232−S ≪S . ( ) ,与。 ( ) ,与 C0 ∼0 = 0.
3 C1= C0 232−S 1 ≪S . ( ) ,与 C1 ∼0 = 0 C0 ∼0 = 0.
4 ,。 C1= C≪S 0 .

示例。 下面,我们给出一个如何计算(T 0x80bfd9ff)≪12= T≪12 0 fd9ff80c的概率的例子。为了更好地理解我们用于计算概率的3方法,我们通过表。

| T | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| C0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| | R0 | R0 | R0 | R0 | R0 | R0 | R0 | R0 | R0 | R0 | R0 | R0 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 |
| T≪12 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
| T≪12 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| C1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
| | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 1 | R′ 0 | R′ 0 | R′ 0 | R′ 0 | R′ 0 | R′ 0 | R′ 0 | R′ 0 | R′ 0 | R′ 0 | R′ 0 | R′ 0 |
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |

根据表3,我们可以找到 C0与 C1之间的关系:
[C0]19∼0=[C1]31∼12,[C0]31∼20+ 1 ≡[C1]11∼0 mod(212).
因此,我们可以得到 P((T 0x80bfd9ff)≪12= T≪12 0xfd9ff80c)= P(κ) × P(ω)。通过考虑T的特征, P(κ) 与 P(ω) 可按如下方式计算:
P(κ)= P([T]19= 1)+ P([T]19∼18= 01)+ P([T]19∼17= 001) +P([T]19∼16= 0001)+ P([T]19∼15= 00001)+ P([T]19∼14= 000001) +P([T]19∼12= 00000011)+ P([T]19∼11= 000000101) +P([T]19∼8= 000000100111)+ P([T]19∼7= 0000001001101) +P([T]19∼6= 00000010011001)+ P([T]19∼5= 000000100110001) +P([T]19∼ 4= 0000001001100001)+ P([T]19∼ 3= 00000010011000001) +P([T]19∼ 2= 000000100110000001)+ P([T]19∼ 1= 0000001001100000001) +P([T]19∼ 0= 00000010011000000001) =Σ 6 i=1 2 − i +2 − 8 +2 − 9 +Σ 20 i=12 2 − i .
P(ω)= 1 − P([T]31 = 1)− P([T]31− 23 = 011111
111)− P([T]31− 22 = 0111111101) = 1 −(2 − 1 +2 − 9 +2 − 10 ). 因此, P((T 0x80bfd9ff)≪12= T≪12 0xfd9ff80c) ≈ 2−1。在此示例 中,我们称[T]19= 1为 T的一个可能特征,称[T]31= 1为 T的一个不可能特 征。总共有17个 T的可能特征与3个 T的不可能特征。

3.3 计算步差分概率

我们使用右分支的步函数来解释计算步差分概率的方法。设 Δ= Yi ′ Yi, Δi−5= Y ′≪10 i−5 Y ≪10 i−5,Δi−4= Y ′≪10 i−4 Y ≪10 i−4, ΔF= Φl j(Y i′−1, Y i′−2, Y ′≪10 i−3) Φl j(Yi−1, Yi−2, Y ≪10 i−3),则 P(ν) = P(Δ=Δi−4(Δi−5ΔFΔmπ2(i) Qi) ≪sri Q≪ sri i )。给定差分路径与用于控制差分传播的比特条件后,Δ, Δi−5, Δi−4, ΔF与Δmπ2(i)均为固定值。令C0=Δi−5 ΔF Δmπ2(i)与 C1=ΔΔi−4,可得 P(ν) = P((Qi C0)≪ sri= Q≪ sri i C1),该值可按照第 3.2节所述快速计算。 请注意,在计算 Yi 时, Yi−4 与 Yi 的某些位存在条件,即 Yi−4 与 Yi 的某些位是固定的。此外,为了满足 Yi 的模差,对 Qi存在一些约束。通过 仔细分析这些约束,可以发现 Qi 的特征,从而使 P(μν) 的理论计算成为可能。 通过以下示例,我们将介绍如何利用 Qi 的特征以及 Yi−4 与 Yi 上的比特条 件来计算 P(μν)。一般情况可类似处理。

示例。 对于表16中给定的差分路径,我们知道 ΔF= ONX(Y ′ 14, Y ′ 13,(Y ′ 12)≪ 10 ) ONX(Y14, Y13, Y ≪10 12 )= 0xbffa20, Y ′≪10 11= Y ≪10 [−26, 25, 22, 20, 11,−6, 4, 2], Δ11= Y ′≪10 Y ≪10 11= 0xfe5007d4, Y ′≪10 10= Y ≪10 [31,−13,−6, 4, 3, 2, 1, 0], Δ10= Y ′≪10 Y ≪10 10= 0x7fffdfdf, Δ= Y ′ 15 − Y15= 0xfbefffe0, Δm3= 0. 因此, Q15必须满足方程(Q15 0x80bfd9ff)≪12= Q ≪12 15 0xfd9ff80c。 根据第3.2节中的示例,可推导出满足该方程的 Q15的特征,并在表4中展示。 令 a= Q ≪12 15, b= Y ≪10 11, d= Y15,由于 Y15= Y ≪10 Q ≪12 15 ,我们可以得到 d= a b。此外,我们用 ci表示在计算 a b时从第(i‐1)位到第 i位的进位。因此, [d]i=[a]i ⊕[b]i ⊕ ci,(c0= 0, 0 ≤ i ≤ 31). 定义 Ai为事件 [a]i= 0, Bi为事件 [b]i= 0, λi为事件 ci= 0, Di 为事件 Y15,i= 0, ν15为事件Y ′ 15 − Y15= 0xfbefffe0, η15为关于 Y15的全 部7个条件均成立的事件。为了更好地理解我们的方法,我们在表 5中展示了 Y15的计算。然后, P(η15ν15)可按如下方式计算:

i χi(特征) Type i χi(特征) Type
1 [Q15]31= 1 不可能 11 [Q15]19∼11= 000000101 可能
2 [Q15]31∼23= 011111111 不可能 12 [Q15]19∼8= 000000100111 可能
3 [Q15]31∼22= 0111111101 不可能 13 [Q15]19∼7= 0000001001101 可能
4 [Q15]19= 1 可能 14 [Q15]19∼6= 00000010011001 可能
5 [Q15]19∼18= 01 可能 15 [Q15]19∼5= 000000100110001 可能
6 [Q15]19∼17= 001 可能 16 [Q15]19∼4= 0000001001100001 可能
7 [Q15]19∼16= 0001 可能 17 [Q15]19∼3= 00000010011000001 可能
8 [Q15]19∼15= 00001 可能 18 [Q15]19∼2= 000000100110000001 可能
9 [Q15]19∼14= 000001 可能 19 [Q15]19∼1= 0000001001100000001 可能
10 [Q15]19∼12= 00000011 可能 20 [Q15]19∼0= 00000010011000000001 可能

| Q≪ 15 | 21 | 20 | 19 | 18 1 | 7 1 | 6 1 | 5 1 | 4 13 | 12 | 11 | 10 | 9 8 | 7 | 6 5 | 4 3 | 2 | 1 0 | 31 | 30 | 29 | 28 | 27 | 26 | 25 2 | 4 2 | 3 2 | | | | |
| — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| Y ≪10 11 | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 2 | 0 1 | 9 1 | 8 1 | 7 1 | 6 15 | 14 | 13 | 12 | 11 | 10 | 9 8 | 7 6 | 5 | 4 3 | 2 1 | 0 | | | | |
| Y15 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| Q ≪12 15(a) | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| Y ≪10 11 (b) | - | 1 | - | - | 1 | 1 | 0 | - | - | 0 | - | 0 | - | - | 1 | 0 | 0 | 0 | 0 | 1 | 0 | - | 0 | - | - | 1 | - | 0 | 1 | 0 | - | - |
| Y15(d) | - | - | - | - | - | 1 | - | - | - | 1 | - | 1 | 0 | - | - | - | - | - | - | - | - | 1 | - | - | - | - | - | 1 | - | - | 1 | - | - |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

P(η15ν15)= P(λ12η15ν15)+ P(λ12η15ν15), P(λ12η15ν15)=Σ20 i=4P(D26D22D20D19χi | λ12)×{P(D11D5D2λ12) −Σ3 i=1[P(D11D5D2λ12 | χi)× P(χi)]}, P(λ12η15ν15)=Σ20 i=4P(D26D22D20D19χi | λ12)×{P(D11D5D2λ12) −Σ3 i=1[P(D11D5D2λ12 | χi)× P(χi)]}. 然而,根据 Q15的特征,我们知道如果Y ′ 15 Y15= 0xfbefffe0,则[Q15]31始 终为0,这意味着 P(λ12 | ν15) = 0与 P(λ12 | ν15) = 1。因此,只需计算 P( λ12η15ν15)即可。以计算P(D11D5D2λ12) −Σ 3 i=1[P(D11D5D2λ12 | χi) × P(χi)] 为例。首先,我们计算 P(D11D5D2λ12 | χ3)。如表6所示,计算细节如下。

Q ≪ 15 1 0 31 30 29 28 27 26 25 24 23 22
Y ≪ 10 11 11 10 9 8 7 6 5 4 3 2 1 0
Y15
Q ≪ 12 15(a) 0 1 1 1 1 1 1 1 0 1 - -
Y ≪ 10 11 (b) 0 - 0 - - 1 - 0 1 0 - -
Y 1 - - - - - 1 - - 1 - -

P(D11D5D2λ12 | χ3)= P(D11D5D2 | χ3). P(D11D5D2 | χ3) = P(λ11D5D2 | χ3) = P(B10) × P(D5D2 | χ3) + P(B10) × P(λ10D5D2 | χ3) = 1 2 × P(D5D2 | χ3)+ 1 2 × P(λ10D5D2 | χ3). P(D5D2 | χ3) = P(B5) × P(λ5D2 | χ3) + P(B5) × P(λ5D2 | χ3) = 1 2 × P(λ5D2 | χ3)+ 1 2 × P(λ5D2 | χ3)= 1 2 × P(D2 | χ3). P(D2 | χ3) = P(λ2). P(λ2)= P(A1B1)+[P(A1B1)+ P(A1B1)] × P(λ1)= 1 4+ 1 2 × P(λ1). P(λ1) = P(A1B1) + P(A1B1) + P(A1B1) = 3 4 . P(λ10D5D2 | χ3) = P(λ9D5D2 | χ3) = P(B8) × P(D5D2 | χ3) + P(B8) × P(λ8D5D2 | χ3) = 1 2 × P(D5D2 | χ3) + 1 2 × P(λ8D5D2 | χ3). P(λ8D5D2 | χ3) = P(B7) × P(D5D2 | χ3) + P(B7) × P(λ7D5D2 | χ3) = 1 2 × P(D5D2 | χ3) + 1 2 × P(λ7D5D2 | χ3). P(λ7D5D2 | χ3) = P(D5D2 | χ3). 因此, P(D11D5D2λ12 | χ3)= 5 16。以同样的方式,我们可以得到P( D11D5D2λ12 | χ2)= 1 | χ1)= 159 1024与 P(D11D5D2λ12)=P (D11D5D2)= 1 8。因此, P(D11D5D2λ12)−Σ 3 i=1[P(D11D5D2λ12 | χi)× P(χi)] = 1 8 − 1 2 × 159 1024 − 1 29 × 1 4 − 1 210 × 5 16 ≈ 1 16= 2−4. 由于 Σ 20 i=4P(D26D22D20D19χi | λ12)=Σ 20 i=4[P(D26D22D20D19 | χiλ12)× P(χi | λ12)] =Σ 20 i=4[P(D26D22D20D19 | χiλ12)× P(χi)], 与 P(D26D22D20D19 | χiλ12)(4 ≤ i ≤ 20) 可以按照上述方式计算,因此可以 得到 Σ20 i=4P(D26D22D20D19χi | λ12) 的值。从而,步函数的概率可以被计算。 总之,为了理论计算第i步的步差分概率,我们首先应推导出 Qi的特征, 以便正确传播模差。然后,对于Qi的每一种特征,计算比特条件成立的概率转 化为计算 A+ B= C的概率,其中A和B的某些位被固定,C的某些位被限制为 固定值。当考虑了 Qi的所有特征后,即可得到步差分概率。

4 求解方程 T≪S0 C0=(T C1)≪S1

当使用兰代尔与佩林提出的方法分析RIPEMD‐128和RIPEMD‐160[5],时,总会构造一个形如 T≪S0C0=(T C1)≪S1的方程。为了降低合并阶段的时间复杂度,对方程进行预计算成为一种可行的方法。然而,在之前的分析中 [5,11],,预计算方程的方法消耗了过多的时间与内存。在本节中,我们提出一种方法来降低时间复杂度与内存复杂度。基于性质1,给定一个常数 C1,如果方程(T C1)≪S1= T≪S1 C2,存在解,则 C2只能取以下四个可能值: 1. C2=(C1 1)≪S1,与 C2 ∼0 = 0。 2 ∼0 = 0. 3 C2= C1 232−S1 ≪S1 C1 ∼0 = 0, C1 ∼0 = 0.4。 C2= C≪S1 1 . 因此,给定一个常数 C1,我们可以根据上述 C1 与 C2 之间的关系计算 并存储 C2 的四个可能值。然后,对于每个 C2 的值,我们需要求解方程 T≪S0 C0= T≪S1 C2。令 C3= C0 C2,该方程变为 T≪S0 C3= T≪S1。因此,我们只需预计算方程 T≪S0 C3= T≪S1。 接着,为了得到方程 T≪S0 C0=(T C1) ≪S1 的解,我们只需猜测 C2 的四个可能值。对于每个猜测的 C2 值,都可以快速获得方程 T≪S0 C3= T≪S1 的解。对于得到的解 T,我们必须验证其是否满足方 程 (T C1) ≪S1= T≪S1 C2,因为 T 以一定概率满足该方程。预计算方程 T≪S0 C3= T≪S1 仅消耗 2^32 时间和 2^32 内存,这要小得多。 解的个数的期望对 T≪S0 C0=(T C1) ≪S1也有影响,进而影响合并阶段 的时间复杂度。由于在之前的分析中未提及,有必要给出一个理论值。考虑方 程 T≪S0 C0=(T C1) ≪S1。一旦我们固定一个常数,假设为 C0,然后穷 举所有 2^32可能的T值,就可以得到对应的 C1。由于多个 T的值可能对应同一 个 C1,因此当 C1固定时,一个 T的值将对应多个 C0的值。我们在表7中展 示这一点。

T C1 x x . .. x . ..
y
0… i … j … 0xffffffff
C1 i NULL … … j Ti … … k Ti
T
0…
… 0xffffffff

当 C0固定且 C1随机时,我们用 ε表示解的个数,用 pi表示方程有i个 解的概率。此外,我们用 Ni表示对应方程有i个解的 C1的个数。假设该方程 最多有 n个解。那么,我们可以推导出 N1+ 2N2+…+ nNn= 2^32, pi= Ni / 2^32, E(ε)= p1+ 2p2+…+ npn= (N1+ 2N2+…+ nNn) / 2^32 = 1. 因此, T≪S0 C0=(T C1)≪S1的期望解数为1。同样地,我们可以得出 T≪S0 C3= T≪S1的期望解数也为1。 结论,给定多对(C0, C1),我们首先可以计算出对应的 C2的四个可能值。 由于 T≪S0 C3= T≪S1的解的个数期望为1,因此对于 C2的四个值,平均 可得到T≪S0 C3= T≪S1的四个可能解。然而,我们需要进一步检查这四个 解 T是否满足 T≪S0 C0=(T C1) ≪S1。由于 T≪S0C0=(TC1) ≪S1的解 的个数期望为1,因此平均可得到一个 T≪S0C0=(TC1) ≪S1的解。因此, 在求解方程 T≪S0 C0=(T C1) ≪S1时,平均只需进行四次检查,速度非常 快。因此,求解该方程的时间复杂度为 2^2。

5 前30步RIPEMD‐160的碰撞攻击

通过构建一条30步差分路径,其中左分支稀疏且右分支尽可能控制为稀疏,将 王[20]提出的消息修改技术应用于右分支,而左分支保持概率性,有可能对 30步RIPEMD‐160发起碰撞攻击,其概率为 2^−67。30步差分路径如表8所示。 使用单步修改与多步修改,可满足[20],内部状态上的比特条件。如前所述,仅 当内部状态的模差与比特条件同时成立时,差分路径才成立,这与MD4不同。 然而,消息修改技术无法直接用于确保内部状态的模差成立。此外,内部状态 模差成立的概率对消息修改阶段有很大影响,原因将在后文讨论。因此,在使 用消息修改时如何使内部状态的模差成立成为一个亟待解决的问题。根据前文 计算步差分概率的方法,我们可以将这一问题转化为:在使用消息修改时,如 何确保 Qi满足其对应的方程,从而使 ΔYi成立。

Xi π1(i) Yi π2(i)
-4 -4
-3 -3
-2 -2
-1 -1
00 00
00 05
01 01
01 14
02 02
02 07
03 03
03 00
04 04
04 09
05 05
05 02
06 06
06 11
07 07
07 04
08 08
08 13
09 09
09 06
10 10
10 15
11 11
11 08
12 12
12 01
13 13
13 10
14 14
14 03
15 15
15 12
16 16
16 06
17 17
17 11
18 18
18 03
19 19
19 07
20 20
20 00
21 21
21 13
22 22
22 05
23 23
23 10
24 24
24 14
25 25
25 15
26 26
26 08
27 27
27 12
28 28
28 02
29 29
29 09
30 30
30 11

其他条件
| Y ¬Y10 = 1, Y ¬Y10 = 1, Y ¬Y10 = 1, Y ¬Y10 = 1, Y ¬Y10 = 1, Y ¬Y10 = 1. |
| — |
| Y 14 , 21 = 1, Y14 , 20 = 1, Y14 , 9 = 1(我们使用这三个条件);或 Y15 , 21 = 1, Y14 , 21 = 0, Y14 , 20 = 0, Y14 , 19 = 0。 |
| Y 15 , 6 = 1, Y14 , 6 = 0, Y15 , 5 = 1;或 Y14 , 6 = 1, Y15 , 5 = 0(我们使用这两个条件)。 |
| Y 15,29 = 0, Y 15,28 = 0, Y 15,27 = 1. |
| Y 18,28 = Y 17,28 , Y 18,21 = Y 17,21 , Y 18,16 = Y 17,16 . |
| Y 19,17 = Y 18,17 , Y 19,8 = Y 18,8 , Y 19,1 = Y 18,1 . |
| Y 20,24 = Y 19,24 . Y = Y = Y |
| 22,19 21,19 , Y 22,20 21,20 . |
| Y 28,19 = Y 27,19 , Y 28,20 = Y 27,20 , Y 28,21 = Y 27,21 . |
| X 15,0 = X 14,22 . X = X |
| 22,31 21,21 . |

5.1 推导额外位条件以控制 Qi的特征

给定一条差分路径,内部状态上的比特条件以及所有 Qi必须满足的方程都是 固定的。只有当所有这些比特条件成立且所有 Qi满足其对应的方程时,该差 分路径才成立。尽管王提出的消息修改技术可用于确保内部状态上的比特条件 成立,但无法直接用于确保 Qi满足其对应的方程。然而,如果我们能够添加 一些关于 Yi和 Yi−4的额外比特条件,以确保 Qi始终满足其对应的方程,则可 以消除 Qi的影响。然后,该消息修改可确保内部状态的比特条件与模差同时成立。以 Q13为例,我们展示了如何推导出关于 Y13与 Y9的额外比特条件。 基于表8中的30步差分路径,我们可以得到 Q13必须满足方程(Q13 0 x6ffba800)≪14= Q≪14 13 0xea001bff,以使模差ΔY13成立,由此我们可以 推导出 Q13的特征,如前所述。我们仅选择 Q13的两个可能特征,即 [Q13]31= 0和[Q13]17= 1。通过应用单步消息模修改, Y13与 Y9上的所有比特 条件均可满足,这意味着它们的某些位被固定。考虑 Y13与 Y9之间的关系: Q≪14 13 = Y13 Y ≪10 9 , 我们的目标是确保 Q13上的两个比特条件在 Y13和 Y9的某些位已固定的情 况下得到满足。我们展示了Q≪14 13 = Y13 Y ≪10 9在表9中的计算,这将有助于理 解如何准确推导出额外比特条件。

Y13 0 1 0 0 1 u u 1 1 1 1 1 n u u n n 1 1 0 1 1 0 1 1 u n
Y ≪10 9 1 0
Q≪ 14 13 1 0

如果我们对 Y9施加四个比特条件,即Y9,2= 0, Y9,3= 1, Y9,20= 0,Y9,21= 1,则 关于 Q13的两个比特条件将以概率1成立。换句话说,如果 Y9与 Y13上的所有比特 条件(包括附加条件)均成立,则方程(Q13 0x6ffba800)≪14= Q≪ 14 13 0 xea001bff将始终成立。因此,通过对 Y9增加四个额外条件,消息修改可以确保 Y13 上的比特条件与模差ΔY13同时成立。 然而,有时添加大量附加条件的代价过高。因此,对于某些特殊情况,我 们采用一种动态方法添加较少的条件,以确保 Qi以概率1或接近1满足其对应 的方程。例如,为了确保模差 ΔY23成立,Q23必须满足方程(Q23 0 x81000001)≪9= Q ≪9 23 0x102,从中我们可以推导出 Q23的特征。然后,我 们选择一个可能特征,即[Q23]31= 1。通过这种方式, Q23以其对应方程的 满足概率为1 − 2^−23 ≈ 1。通过考虑如表10所示的Q ≪9 23= Y23 Y ≪10 19的计算, 我们描述了如何动态确定 Y23上的比特条件。

| Y 23 | 1 | ‐ | ‐ | ‐ | ‐ | ‐ | ‐ | ‐ | ‐ | ‐ | ‐ | ‐ | ‐ | ‐ | ‐ | 0 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值