基于分组密码的哈希轮函数研究
1. 哈希函数安全与MD强化
哈希函数在信息安全领域有着至关重要的作用,其中MD强化对于构建安全的迭代哈希函数意义重大。如果一个m位哈希轮函数h的自由启动目标攻击所需计算量少于$2^m$,那么可以根据相关命题对哈希函数发起目标攻击。从这两个命题可以看出,MD强化能够将安全的轮函数转化为安全的迭代哈希函数。例如,前面提到的一些简单自由启动、半自由启动攻击以及长消息目标攻击,在使用MD强化的迭代哈希函数面前就难以奏效。所以,在使用迭代哈希函数时,应该始终采用MD强化。在后续讨论哈希函数安全性时,指的都是经过MD强化的哈希函数的安全性。由于相关命题以及人们通常希望哈希函数能有效抵御自由启动攻击,构建安全哈希函数的问题就转化为构建能抵御自由启动攻击的哈希轮函数的问题。
2. 基于分组密码的哈希轮函数方案
2.1 Davies - Meyer(DM)方案
DM方案由Davies和Meyer独立提出,该方案可与任何分组密码结合使用。在这个方案的每一步中,被哈希处理的消息块$M_i$的长度$l$等于分组密码的密钥长度$k$,即$l = k$。其哈希轮函数表示为:
$h(H_{i - 1}, M_i) = E_{M_i}(H_{i - 1}) \oplus H_{i - 1}$
这里的$\oplus$表示逐位模2加法。如果分组密码没有已知的弱点,那么经过MD强化的DM方案通常被认为是安全的。也就是说,对$h$的自由启动目标攻击大约需要$2^m$次计算,自由启动碰撞攻击大约需要$2^{m/2}$次计算。并且,之前提到的那些攻击都无法有效针对基于DM方案的迭代哈希函数。目前,DM方案正在考虑成为ISO标准。其哈希轮函数的流程可以用以下mermaid流程图表示:
graph LR
A[H_{i - 1}] --> C[分组密码E]
B[M_i] --> C
C --> D[E_{M_i}(H_{i - 1})]
D --> E[/oplus H_{i - 1}]
E --> F[h(H_{i - 1}, M_i)]
2.2 一种使用m位分组和2m位密钥的分组密码的m位哈希轮函数
这种方法基于块长度为m且密钥长度$k = 2m$的分组密码,例如可以使用PES或其改进版本IPES。对于这样的密码,记$Y = E_{Z_a, Z_b}(X)$表示从m位明文$X$和两个m位子密钥$Z_a$、$Z_b$计算出m位密文$Y$。该哈希轮函数的相关描述如下,但目前在底层分组密码没有已知弱点的情况下,尚未找到比暴力攻击更优的攻击方法。
2.3 2m位哈希轮函数的构建
当分组密码的块长度$m$为64(许多实际分组密码都是如此)时,使用DM方案可以得到64位的迭代哈希函数。然而,对任何64位哈希函数的“暴力”碰撞攻击复杂度约为$2^{32}$,在很多应用场景中这个复杂度是不够的。因此,人们尝试通过修改看似安全的DM方案,基于m位分组密码构建2m位哈希函数。
2.4 评估哈希轮函数的原则及对2m位哈希轮函数的攻击
评估哈希轮函数安全性有一个有用的原则:对哈希轮函数的输入和输出应用任何简单(双向)可逆变换,会得到与原函数具有相同安全性的新哈希轮函数。例如,对于块长度等于密钥长度的分组密码,DM方案的哈希轮函数与另一个通过交换输入块得到的哈希轮函数具有相同的安全性。为了验证这个原则,下面对基于m位分组密码和m位密钥的三个2m位哈希轮函数进行四种“中间相遇”攻击。
-
Preneel - Bosselaers - Govaerts - Vandewalle(PBGV)方案
-
方案描述
:该方案使用m位分组密码和m位密钥,从2mn位消息和2m位初始值计算2m位哈希值。每一轮中,根据前两个m位值$H_{i - 1}$、$G_{i - 1}$和两个m位消息块$L_i$、$N_i$计算两个新的m位值$H_i$和$G_i$。其轮函数从输入$(h_0, g_0, l, n)$产生输出对$(h, g)$的方式为:
$h = E_{l \oplus n}(h_0 \oplus g_0) \oplus l \oplus h_0 \oplus g_0$
$g = E_{n \oplus g_0}(n \oplus h_0 \oplus l) \oplus h_0 \oplus g_0 \oplus l$ -
自由启动目标攻击(复杂度约$2^{m/2}$)
- 选择一个任意常数$Q$。
- 对于给定的$h$,随机选择$2^{m/2}$个$h_b$值及其对应的$l’$,使得$h_b \oplus l’ = Q$,计算$a = E_{h_b}(h_b) \oplus l’$。
-
对于给定的$f$,随机选择$2^{m/2}$个$g_b$值及其对应的$r$,使得$g_b \oplus r = Q$,计算$a’ = E_{g_b}(g_b) \oplus f$。
当某些$a$和$a’$取相同值的概率约为0.63时,通过计算$n’ = a \oplus l’ \oplus h_b \oplus l’ \oplus h$,可得到(7)式的解$(h_b, g_b, l’, n’)$。
- 目标攻击(复杂度约$2^m$) :对于给定的$(h_0, g_0)$和$(h, g)$,随机选择$l’$,然后进行一系列计算,经过$2^m$次计算后,$g_b \oplus n’$会以约0.63的概率取到给定值$g_0$,再通过相关变换得到(4)式的解$(l, n)$。
-
方案描述
:该方案使用m位分组密码和m位密钥,从2mn位消息和2m位初始值计算2m位哈希值。每一轮中,根据前两个m位值$H_{i - 1}$、$G_{i - 1}$和两个m位消息块$L_i$、$N_i$计算两个新的m位值$H_i$和$G_i$。其轮函数从输入$(h_0, g_0, l, n)$产生输出对$(h, g)$的方式为:
-
第一个Quisquater - Girault(QG - I)方案
-
方案描述
:该方案同样基于m位分组密码和m位密钥,从2mn位消息和2m位初始值计算2m位哈希值。每一轮中,$H_i$和$G_i$的计算方式为:
$H_i = E_l(g_0 \oplus n) \oplus n \oplus h_0 \oplus g_0$
$G_i = E_n(E_l(g_0 \oplus n) \oplus n \oplus h_0 \oplus l) \oplus h_0 \oplus g_0 \oplus l$ -
自由启动目标攻击(复杂度约$2^{m/2}$)
- 随机选择$a$的值并选择$n$使得$a \oplus n = c$($c$为固定的m元组),对于给定的$f$,计算$h_b = a \oplus D_n(a \oplus f)$,重复此过程$2^{m/2}$次,得到$2^{m/2}$个$(h_b, n)$值。
-
随机选择$l$并计算$h_i = h \oplus (l \oplus c) \oplus D_l(l \oplus c)$,在$2^{m/2}$次计算中,可得到$2^{m/2}$个$(h_i, l)$值。
由于$h_b$和$h_i$都是m位块,它们取相同值的概率约为0.63,找到$h_b = h_i$后,计算$g_0 = D_l(l \oplus c) \oplus n$,得到满足(10)式的解$(h_0, g_0, l, n)$。
-
方案描述
:该方案同样基于m位分组密码和m位密钥,从2mn位消息和2m位初始值计算2m位哈希值。每一轮中,$H_i$和$G_i$的计算方式为:
-
LOKI双块哈希(DBH)函数
-
方案描述
:该方案基于LOKI分组密码,从2mn位消息和2m位初始值计算2m位哈希值。每一轮中,$H_i$和$G_i$的计算方式为:
$W_i = E_{L_i \oplus G_{i - 1}}(C_{i - 1} \oplus N_i) \oplus N_i \oplus H_{i - 1} \oplus G_{i - 1}$
$H_i = W_i \oplus C_{i - 1}$
$G_i = E_{N_i \oplus H_{i - 1}}(N_i \oplus L_i) \oplus H_{i - 1} \oplus G_{i - 1} \oplus L_i$ -
自由启动目标攻击(复杂度约$2^{m/2}$)
:通过对输出和输入应用特定的变换,将问题转化为计算新函数的解。具体步骤如下:
- 选择一个任意值$I$。
- 对于给定的$h$和所选的$I’$,随机选择$2^{m/2}$个$n’$值,计算$h_1 = h \oplus n’ \oplus E_{n’}(n’)$。
-
对于给定的$h$、$f$和所选的$I’$,随机选择$2^{m/2}$个$r$值,计算$h_2 = E_{r}(h \oplus I’) \oplus h \oplus I’ \oplus f$。
当某些$h_1$和$h_2$取相同值的概率约为0.63时,通过计算$g_0 = r \oplus n’ \oplus h_1$,可得到新函数的解$(h_0, g_0, I’, n’)$。
-
方案描述
:该方案基于LOKI分组密码,从2mn位消息和2m位初始值计算2m位哈希值。每一轮中,$H_i$和$G_i$的计算方式为:
3. 已知对2m位哈希函数攻击的复杂度
这里考虑一些已知的基于两轮使用m = 64位分组密码(密钥长度$k = 64$或$k = 56$)的128位迭代哈希函数,这些方案可看作是64位DM方案哈希轮函数的轻微修改。假设所有迭代哈希函数都使用MD强化,且底层分组密码没有已知弱点(如弱密钥),已知攻击这些哈希函数的复杂度如下表所示:
|序号|方案|自由启动目标攻击复杂度|自由启动碰撞攻击复杂度|备注|
|----|----|----|----|----|
|1|DM方案|约$2^m$|约$2^{m/2}$|可与任何分组密码结合,考虑成为ISO标准|
|2|PBGV方案|约$2^{m/2}$| - | - |
|3|QG - I方案|约$2^{m/2}$| - |曾出现在ISO标准草案,后被移除|
|4|LOKI DBH函数|约$2^{m/2}$| - |基于LOKI分组密码|
|5|Merkle方案| - | - |哈希码长度112位,每轮只能处理7位消息|
|6|Meyer - Schilling方案| - | - |128位哈希码,轮输出长度108位|
从这个表格可以清晰地看到不同方案在面对攻击时的复杂度情况,有助于我们评估各个方案的安全性。同时,这些复杂度的分析也为后续构建更安全的哈希函数提供了重要的参考依据。
4. 针对k = 2m分组密码的建议方案
对之前提出的哈希方案的研究表明,使用m位分组密码和m位密钥通过两次使用来构建一个每轮能“处理”至少m位消息且具有理想计算安全性的2m位哈希轮函数是非常困难的。然而,如果有m位分组和2m位密钥的分组密码可用,那么就有更多可能构建出安全的2m位哈希轮函数。以下是两个建议的方案:
4.1 Tandem DM方案
该方案基于级联两个DM方案。在每一次迭代中,从两个先前的m位值$H_{i - 1}$和$G_{i - 1}$以及一个m位消息块$M_i$计算两个新的m位值$H_i$和$G_i$,计算方式如下:
$Y_i = E_{H_{i - 1}, M_i}(H_{i - 1})$
$H_i = Y_i \oplus H_{i - 1}$
$G_i = G_{i - 1} \oplus E_{M_i, M_i}(G_{i - 1})$
其流程可以用以下mermaid流程图表示:
graph LR
A[H_{i - 1}] --> C[分组密码E1]
B[M_i] --> C
C --> D[Y_i = E_{H_{i - 1}, M_i}(H_{i - 1})]
D --> E[/oplus H_{i - 1}]
E --> F[H_i]
G[G_{i - 1}] --> I[分组密码E2]
B --> I
I --> J[E_{M_i, M_i}(G_{i - 1})]
J --> K[/oplus G_{i - 1}]
K --> L[G_i]
4.2 Abreast DM方案
在这个方案中,两个DM方案并行使用。在每一轮中,从两个先前的m位值$(H_{i - 1}, G_{i - 1})$和一个m位消息块$M_i$计算两个新的m位值$(H_i, G_i)$,计算方式如下:
$H_i = H_{i - 1} \oplus E_{G_{i - 1}, M_i}(H_{i - 1})$
$G_i = G_{i - 1} \oplus E_{M_i, H_{i - 1}}(\overline{G_{i - 1}})$
这里的$\overline{G_{i - 1}}$表示$G_{i - 1}$的逐位取反。其流程可以用以下mermaid流程图表示:
graph LR
A[H_{i - 1}] --> C[分组密码E3]
B[M_i] --> C
D[G_{i - 1}] --> C
C --> E[E_{G_{i - 1}, M_i}(H_{i - 1})]
E --> F[/oplus H_{i - 1}]
F --> G[H_i]
H[G_{i - 1}] --> I[取反]
I --> J[/overline{G_{i - 1}}]
B --> K[分组密码E4]
L[H_{i - 1}] --> K
J --> K
K --> M[E_{M_i, H_{i - 1}}(\overline{G_{i - 1}})]
M --> N[/oplus G_{i - 1}]
N --> O[G_i]
这两个方案的提出为构建更安全的2m位哈希轮函数提供了新的思路和方法。通过利用k = 2m的分组密码,有望在一定程度上提高哈希函数的安全性和性能。同时,这也为后续的研究和实践提供了更多的探索方向。例如,可以进一步研究这两个方案在不同应用场景下的表现,以及如何对其进行优化以适应更复杂的安全需求。
综上所述,在哈希函数的研究和应用中,我们需要综合考虑各种因素,包括分组密码的特性、攻击复杂度、方案的可行性等,以构建出安全可靠的哈希函数体系。随着信息技术的不断发展,对哈希函数的安全性要求也会越来越高,未来还需要不断探索和创新,以应对日益复杂的安全挑战。
基于分组密码的哈希轮函数研究(续)
5. 对不同方案的综合分析与对比
5.1 安全性对比
从前面的讨论可以看出,不同的哈希轮函数方案在安全性上存在明显差异。DM方案在经过MD强化且底层分组密码无已知弱点时,自由启动目标攻击复杂度约为$2^m$,自由启动碰撞攻击复杂度约为$2^{m/2}$,相对较为安全。而PBGV方案、QG - I方案和LOKI DBH函数的自由启动目标攻击复杂度均约为$2^{m/2}$,说明这些2m位哈希轮函数在抵御自由启动目标攻击方面比DM方案的m位哈希轮函数要弱。这可能是因为它们试图通过修改DM方案来构建2m位哈希函数,但在这个过程中引入了一些安全漏洞。
Merkle方案的哈希码长度为112位,虽然看起来具有理想的安全性,但每轮只能“消化”7位消息,这在处理大量数据时效率较低。Meyer - Schilling方案的128位哈希码,轮输出长度为108位,也可能在某些情况下存在一定的局限性。
5.2 性能与效率对比
在性能和效率方面,各种方案也有不同的表现。DM方案由于其结构相对简单,与任何分组密码都能结合使用,实现起来较为方便,因此在实际应用中可能具有较高的效率。而像Tandem DM和Abreast DM方案,虽然利用了k = 2m的分组密码,有望提高安全性,但由于其计算过程相对复杂,可能会在一定程度上影响性能。
例如,Tandem DM方案需要进行两次分组密码运算,Abreast DM方案同样需要进行两次分组密码运算,并且其中一个还涉及到逐位取反操作,这都会增加计算量和处理时间。在对性能要求较高的场景下,需要仔细权衡安全性和性能之间的关系,选择合适的方案。
6. 未来研究方向与展望
6.1 改进现有方案
对于现有的哈希轮函数方案,可以通过进一步的研究和改进来提高其安全性和性能。例如,对于那些容易受到自由启动目标攻击的2m位哈希轮函数方案,可以尝试寻找新的设计思路或改进方法,增强其抵御攻击的能力。可以考虑引入更多的随机化因素或复杂的变换,使攻击者更难找到攻击的切入点。
对于Tandem DM和Abreast DM方案,可以研究如何优化其计算过程,减少不必要的计算量,提高性能。例如,可以通过并行计算或使用更高效的算法来加速分组密码的运算。
6.2 探索新的构建方法
除了改进现有方案,还可以探索新的构建哈希轮函数的方法。随着密码学技术的不断发展,可能会出现新的分组密码算法或其他加密技术,可以利用这些新技术来构建更安全、更高效的哈希轮函数。
例如,可以研究如何结合量子密码学的原理来构建哈希函数,以应对未来可能出现的量子攻击。还可以探索使用多线性映射等新型数学工具来设计哈希轮函数,为哈希函数的安全性和性能带来新的突破。
6.3 应用场景的拓展
随着信息技术的不断发展,哈希函数的应用场景也在不断拓展。除了传统的信息安全领域,如数据完整性验证、数字签名等,哈希函数还可以应用于区块链、物联网、云计算等新兴领域。
在区块链领域,哈希函数用于确保区块链数据的不可篡改和交易的安全性。在物联网中,哈希函数可以用于设备身份验证和数据传输的安全保护。在云计算中,哈希函数可以用于数据的存储和检索,提高数据的安全性和效率。因此,未来的研究可以针对不同的应用场景,设计出更适合的哈希轮函数方案。
7. 实际应用中的注意事项
7.1 选择合适的方案
在实际应用中,需要根据具体的需求和场景选择合适的哈希轮函数方案。如果对安全性要求较高,且处理的数据量不是特别大,可以考虑使用Tandem DM或Abreast DM方案。如果对性能要求较高,且对安全性的要求相对较低,可以选择DM方案。
同时,还需要考虑底层分组密码的特性和安全性。确保使用的分组密码没有已知的弱点,并且在实际应用中要定期更新分组密码的密钥,以提高安全性。
7.2 防范潜在攻击
虽然我们对各种方案的攻击复杂度进行了分析,但攻击者可能会不断尝试新的攻击方法。因此,在实际应用中,需要时刻关注密码学领域的最新研究成果,及时发现和防范潜在的攻击。
例如,对于那些容易受到自由启动目标攻击的方案,可以采取一些额外的防护措施,如增加初始值的随机性、引入多重哈希等。同时,要建立完善的安全监测机制,及时发现异常的攻击行为,并采取相应的措施进行应对。
7.3 与其他安全技术结合
哈希函数通常不会单独使用,而是会与其他安全技术结合起来,形成更完善的安全体系。例如,可以将哈希函数与对称加密算法、非对称加密算法等结合使用,实现数据的加密和认证。
在实际应用中,可以先使用哈希函数对数据进行哈希处理,得到哈希值,然后再使用对称加密算法对数据进行加密。在接收端,先使用对称加密算法解密数据,然后再计算哈希值,并与发送端传来的哈希值进行比较,以验证数据的完整性。
8. 总结
本文详细介绍了基于分组密码的哈希轮函数的多种方案,包括DM方案、PBGV方案、QG - I方案、LOKI DBH函数等,分析了它们的安全性、性能和效率。同时,还提出了Tandem DM和Abreast DM这两个利用k = 2m分组密码的新方案。
通过对不同方案的对比和分析,我们可以看到各种方案都有其优缺点。在实际应用中,需要根据具体的需求和场景选择合适的方案,并采取相应的措施来防范潜在的攻击。未来,随着密码学技术的不断发展,我们需要不断探索新的构建方法和改进现有方案,以应对日益复杂的安全挑战。
为了更直观地展示不同方案的特点,下面给出一个综合对比表格:
|方案名称|哈希值长度|自由启动目标攻击复杂度|自由启动碰撞攻击复杂度|底层分组密码要求|性能与效率|适用场景|
|----|----|----|----|----|----|----|
|DM方案|m位|约$2^m$|约$2^{m/2}$|无特殊要求,可与任何分组密码结合|较高,结构简单|对性能要求较高,数据量适中,安全性要求一般的场景|
|PBGV方案|2m位|约$2^{m/2}$| - |m位分组密码,m位密钥|适中,结构相对复杂|对安全性有一定要求,但对性能要求不是极高的场景|
|QG - I方案|2m位|约$2^{m/2}$| - |m位分组密码,m位密钥|适中,结构相对复杂|曾用于标准草案,现需谨慎使用,可用于对安全性有一定要求的场景|
|LOKI DBH函数|2m位|约$2^{m/2}$| - |可用于m位分组密码,n位密钥,以LOKI为例|适中,计算量相对较大|基于特定分组密码,对安全性有一定要求的场景|
|Merkle方案|112位| - | - | - |低,每轮只能处理7位消息|对安全性要求极高,但数据量较小的场景|
|Meyer - Schilling方案|128位| - | - | - |适中,轮输出长度为108位|对安全性和性能有一定综合要求的场景|
|Tandem DM方案|2m位|待研究|待研究|k = 2m的分组密码|较低,计算过程复杂|对安全性要求极高,对性能要求相对较低的场景|
|Abreast DM方案|2m位|待研究|待研究|k = 2m的分组密码|较低,计算过程复杂,涉及逐位取反操作|对安全性要求极高,对性能要求相对较低的场景|
通过这个表格,我们可以更清晰地了解不同方案的特点,从而在实际应用中做出更合理的选择。同时,这也为未来的研究提供了一个参考框架,有助于进一步探索和改进哈希轮函数的设计和应用。
总之,基于分组密码的哈希轮函数在信息安全领域有着重要的地位,我们需要不断深入研究和创新,以构建更安全、更高效的哈希函数体系,保障信息的安全和可靠。随着技术的不断进步,相信哈希轮函数的研究和应用将会取得更大的突破。
2229

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



