考研复习 Day 44 | 密码学--第六章 Hash函数(上)

注:以下内容参考《新编密码学》范九伦 张雪锋 侯红霞 编著


6.1 Hash函数与随机预言模型

6.1.1 Hash函数的概念

数据的完整性是指数据从发送方产生后,未经授权未被修改的性质。Hash函数(散列函数)将任意长度的消息映射为较短、固定长度的"指纹"(消息摘要),当数据改变时,指纹也随之改变,从而可用于检测数据完整性。

设 H 是一个Hash函数,x 是消息,对应的消息摘要为 y=H(x)。若消息被修改为 x′,通过验证 H(x′)=y 是否成立,即可判断完整性。

Hash函数的安全性通过以下三个问题进行评估:

  • 定义6.1 原像问题 :给定 y∈Y,是否能找到 x∈X 使得 H(x)=y。若难解,则称Hash函数是单向的原像稳固的

  • 定义6.2 第二原像问题 :给定 x∈X,是否能找到 x′≠x 使得 H(x′)=H(x)。若难解,则称Hash函数是第二原像稳固的

  • 定义6.3 碰撞问题 :是否能找到 x≠x′ 使得 H(x)=H(x′)。若难解,则称Hash函数是碰撞稳固的

带密钥的Hash函数族(定义6.4)包括:消息集合 X、消息摘要集合 Y、密钥空间 K,以及对于每个 k∈K 的Hash函数 Hk:X→Y。

Hash函数应具备的六个性质

  1. 能用于任意大小的数据分组

  2. 产生定长输出

  3. 易于计算,便于软硬件实现

  4. 给定 y,寻找 x 使 H(x)=y 不可行(单向性)

  5. 给定 x,寻找 x′≠x 使 H(x′)=H(x) 不可行(抗第二原像)

  6. 寻找任意一对碰撞 x≠x′ 不可行(抗碰撞)

生日攻击:基于生日问题(23人中有两人同生日的概率>1/2)。对于 m 位消息摘要,约检查 2^(m/2) 个消息即有50%概率发现碰撞。40位摘要很不安全,128位是当前可接受的最小长度,160位更佳。

举例:

6.1.2 随机预言模型

随机预言模型(Random Oracle Model)是一种理想化的Hash函数模型,由Bellare和Rogaway提出。在该模型中,Hash函数 H:X→Y 是从所有可能函数中随机选取的,计算 H(x) 的唯一方式是询问预言者,每个 x 对应一个完全随机的 H(x)。

  • 定义6.5:设 ∣X∣=N,∣Y∣=M,所有从 X 到 Y 的函数集合 F^(X,Y) 的大小为 M^N。任何子集 F⊆F^(X,Y) 称为一个 (N,M)-Hash族。

  • 定理6.1:随机选取 H∈F^(X,Y),对任意 x∈X,y∈Y,有 P(H(x)=y)=1/M。M 越大,碰撞概率越小。


6.2 迭代Hash函数

Merkle于1979年提出了基于压缩函数 compress: {0,1}^{m+t} → {0,1}^m 构造无限定义域Hash函数的方法,称为迭代Hash函数(图6-1)。

构造步骤:

  1. 预处理:输入消息 x(∣x∣≥m+t+1),构造位串 y=y1∥y2∥⋯∥yr,其中 ∣yi∣=t,r 为分组个数。

  2. 迭代压缩:设 z0 为公开的 m 位初始向量,迭代:

    zi<--- compress(z(i−1)∥yi),i=1,2,...,r

  3. 输出变换:设 g:{0,1}^m→{0,1}^l 为公开函数,定义 H(x)=g(Zr)。


6.3 消息摘要算法------MD算法

消息摘要(MD,Message Digest)算法由Ron Rivest于1990年10月提出,1992年4月公布改进算法。通常将1990年提出的算法称为MD4 ,改进算法称为MD5

MD4对输入消息产生128位的消息摘要。其安全性不基于其他密码体制或已知单向函数,只能由时间来证明。MD4公布后,Bert den Boer和Antoon Bosselaers对三轮算法中的后两轮成功进行了密码分析;Ralph Merkle成功攻击了前两轮;Eli Biham讨论了前两轮的差分攻击可能性。尽管这些攻击尚未扩展到整个MD4算法,但为增强安全性,Ron Rivest于1992年4月发布了MD5。

6.3.1 MD4

MD4算法涉及以下基本运算:

  • X∧Y:逻辑"与"

  • X∨Y:逻辑"或"

  • X⊕Y:逻辑"异或"

  • Xˉ:逻辑"补"

  • X+Y:整数模 2³² 加法

  • X≪s:循环左移 s 位(0≤s<31)

MD4算法具体过程

输入任意长度的消息 xx,构造数组序列:

M=M0M1⋯Mn−1

其中 ∣Mi∣=32,0≤i≤n−1,n≡0(mod16)。

(1) 初始化寄存器:4个32位寄存器A、B、C、D(链接变量)赋初值:

A=67452301

B=EFCDAB89

C=98BADCFE

D=10325476

(其中0~9、A~F表示十六进制数字)

(2) 分组:对 0≤i≤(n/16)−1,0≤j≤15,计算:

Xj=M16i+j

(3) 保存初值:将A、B、C、D分别存入AA、BB、CC、DD。

(4) 第一轮操作(0≤k≤3):

A=(A+F(B,C,D)+X4k)≪3

D=(D+F(A,B,C)+X4k+1)≪7

C=(C+F(D,A,B)+X4k+2)≪11

B=(B+F(C,D,A)+X4k+3)≪19

其中 F(X,Y,Z)=(X∧Y)∨(¬X∧Z)。

(5) 第二轮操作(0≤k≤3):

A=(A+G(B,C,D)+X4k+5A827999)≪3

D=(D+G(A,B,C)+X4k+1+5A827999)≪5

C=(C+G(D,A,B)+X4k+2+5A827999)≪9

B=(B+G(C,D,A)+X4k+3+5A827999)≪13

其中 G(X,Y,Z)=(X∧Y)∨(X∧Z)∨(Y∧Z)。

(6) 第三轮操作

A=(A+H(B,C,D)+X0+6ED9EBA1)≪3

D=(D+H(A,B,C)+X8+6ED9EBA1)≪9

C=(C+H(D,A,B)+X4+6ED9EBA1)≪11

B=(B+H(C,D,A)+X12+6ED9EBA1)≪15

A=(A+H(B,C,D)+X2+6ED9EBA1)≪3

D=(D+H(A,B,C)+X10+6ED9EBA1)≪9

C=(C+H(D,A,B)+X6+6ED9EBA1)≪11

B=(B+H(C,D,A)+X14+6ED9EBA1)≪15

A=(A+H(B,C,D)+X1+6ED9EBA1)≪3

D=(D+H(A,B,C)+X9+6ED9EBA1)≪9

C=(C+H(D,A,B)+X5+6ED9EBA1)≪11

B=(B+H(C,D,A)+X13+6ED9EBA1)≪15

A=(A+H(B,C,D)+X3+6ED9EBA1)≪3

D=(D+H(A,B,C)+X11+6ED9EBA1)≪9

C=(C+H(D,A,B)+X7+6ED9EBA1)≪11

B=(B+H(C,D,A)+X15+6ED9EBA1)≪15

其中 H(X,Y,Z)=X⊕Y⊕Z。

(7) 更新寄存器

A=A+AA,B=B+BB,C=C+CC,D=D+DDA=A+AA,B=B+BB,C=C+CC,D=D+DD

输出:H(x)=A∥B∥C∥D,得到128位的消息摘要。

6.3.2 MD5算法

MD5接收任意长度消息,输出128位消息摘要。以512位分组处理消息,每分组分为16个32位子分组。

算法步骤

  1. 填充:在消息末尾添加一个1,后跟若干0,使长度 ≡ 448 (mod 512)。即使已满足也要填充,填充位数1~512。

  2. 附加长度:用64位表示原始消息长度,附加到填充后的消息末尾。

  3. 初始化寄存器:4个32位寄存器A、B、C、D初始化为:

    • A = 01234567

    • B = 89ABCDEF

    • C = FEDCBA98

    • D = 76543210

  4. 主循环:对每个512位分组进行4轮处理,每轮16次操作。每轮使用不同的非线性函数 F,G,H,I 和不同的消息子分组顺序、常数 tj、循环左移位数 s。最终将本轮结果加到寄存器初值上,作为下一分组的输入。

  5. 输出:最后A、B、C、D串联成128位消息摘要。

四个非线性函数

  • F(X,Y,Z)=(X∧Y)∨(¬X∧Z)

  • G(X,Y,Z)=(X∧Z)∨(Y∧¬Z)

  • H(X,Y,Z)=X⊕Y⊕Z

  • I(X,Y,Z)=Y⊕(X∨¬Z)

真值表见表6-1。

消息子分组顺序

  • 第一轮:顺序 M0,M1,...,M15

  • 第二轮:ρ₂(j)=(1+5j) mod  16

  • 第三轮:ρ₃(j)=(5+3j) mod  16

  • 第四轮:ρ₄(j)=7j mod  16

常数表 T(表6-2)包含64个常数,t j=⌊2³²×∣sin⁡ j∣⌋,j 以弧度为单位。

循环左移位数 s见表6-3(每轮16个移位值)。

MD5与MD4的改进对比

  1. 主循环由3轮增至4轮

  2. 每一步均有唯一的加法常数

  3. 函数 G 定义改为 (X∧Z)∨(Y∧¬Z),减弱对称性

  4. 改变第二、三轮访问消息子分组的次序

  5. 优化各轮循环移位的位数,各不相同

安全性

MD5的每一位均是输入消息每一位的函数,具有良好的混合特性。但2004年王小云等提出了有效的碰撞攻击算法,MD5已不再安全,建议使用更安全的算法(如SHA-1或SHA-2系列)。


注:以上内容的理解和计算,如果有任何错误,希望各位读者和大佬指出改正,非常感谢!!!

相关推荐
killerbasd1 天前
总结 5.31
考研
路baby1 天前
2026第十届御网杯网络安全大赛线上赛 区域赛WP (MISC和Crypto)(详解-思路-脚本)
安全·web安全·网络安全·密码学·ctf·misc·御网杯
Jul1en_1 天前
【Redis】 集群概念
数据库·redis·哈希算法
如君愿2 天前
考研复习 Day 43 | 密码学--第五章 序列密码(下)
考研·密码学·课后习题
05候补工程师2 天前
【英语学习笔记】基于“底层逻辑转换”与“去动词化”的英汉互译核心方法论及写作高分公式
经验分享·笔记·学习·考研
Byte不洛2 天前
哈希表原理 + 冲突解决 + C++实现
数据结构·c++·算法·哈希算法·散列表
w2018002 天前
考研各科真题答题卡PDF可打印(英语、管综、数学等)
考研
博界IT精灵3 天前
第二章(进位计数制及其数据之间的相互转换)
考研
2401_876964133 天前
27考研优路|肖睿|唐辛|师大集训营|大牙|B站橙啦101公共课PDF
考研·pdf