5 Hash函数与消息认证

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2020/5/18
26
MDq , 128
Yq
A B CD
512
ABCD"fF(ABCD,Yq,T[1…16])
A B CD
ABCD"fH(ABCD,Yq,T[33…48])
A B CD
ABCD"fH(ABCD,Yq,T[33…48])
A B CD
ABCD"fI(ABCD,Yq,T[49…64])
2020/5/18
• 可将签名变换和加密变换分开,可以在 OSI的不同层提供消息的完整性和机密 性。
பைடு நூலகம்
2020/5/18
9
Hash函数
Hash函数的安全性:Hash函数的安全性取 决于其抗击各种攻击的能力,对手的目标是 找到两个不同消息映射为同一杂Hash值。一 般假定对手知道Hash算法,采用选择明文攻 击法。
2020/5/18
31
Hash函数
MD0=IV(ABCD缓存器的初始矢量) MDq+1 =MDq+fI[Yq,fH[Yq,fG[Yq,fF[Yq,MDq]]]] MD=MDL—1(最终输出值)。
2020/5/18
32
Hash函数
MD5的安全性:
求具有相同Hash值的两个消息在计算上是 不可行的。MD-5的输出为128-bit,若采用 纯强力攻击寻找一个消息具有给定Hash值 的计算困难性为2128。若采用生日攻击法, 寻找有相同Hash值的两个消息需要试验264 个消息。差分攻击对MD5的安全性不构成 威胁。

2020/5/18
23
Hash函数MD5
MD5算法
• 每轮输出为128 bit,可用下述4个32 bits字表 示:A,B,C,D。其初始存数以十六制表 示为:
A=01234567 B=89ABCDEF C=FEDCBA98 D=76543210。
2020/5/18
24
Hash函数MD5
MD5算法
++++
27
MDq+1,128
2020/5/18
a b cd
g
+
+
X [k]
+
T [i]
CLSS
+
28
Hash函数
– CLSs:32-bit 存数循环左移s位。
– X[k]=M[q×16+k]:消息的第q-512-bit组的 第k个32-bit字
– T[i]:232×abs(sin(i))的整数部分。
第五章 Hash函数与消息认证
一、 Hash函数概述 二、 Hash函数MD5 三、安全Hash算法SHA 四、基于分组密码与离散对数的Hash函数 五、消息认证
2020/5/18
1
一、 Hash函数概述
2020/5/18 2
Hash函数
• 单向函数 函数f(x):A→B若满足下面两个条件,则 称为单向函数 – 对于任意x*∈A计算y=f(x)是容易的, 其中 y ∈B。 – 对于x∈A,求y∈B 使满足y=f(x)是计 算上不可能的 。
2020/5/18
34
三、安全Hash算法SHA
2020/5/18 35
安全Hash算法SHA
SHA是美国NIST和NSA设计的一种标准 算法SHA (Secure Hash Algorithm),用于 数字签字标准算法DSS (Digital Signature Standard),亦可用于其它需要用Hash算 法的情况。SHA具有较高的安全性。 – 输入消息长度小于264 bit – 输出压缩值为160 bit
2020/5/18
4
Hash函数
Hash函数的分类
根据安全水平:
• 弱无碰撞:散列函数H称为是弱无碰撞 的,是指对给定消息 ,在计算上几乎 找不到异于x的x*使H (x)= H (x*) 。
• 强无碰撞:散列函数H被称为是强无碰 撞的,是指在计算上几乎不可能找到相 异的x ,x* 使得H (x)= H (x*) 。
Hash函数的用途 • 消息的完整性检测
• 数字签名
2020/5/18
7
Hash函数
x x h
h(x)
发送者对h(x) 进行加密
y
不安全信道 不安全信道
x
h
接收者对y 进行解密
h(x)
相等?
h(x)
y
2020/5/18
8
Hash函数
使用Hash函数进行数字签名的好处
• 提高数字签名的速度。
• 无需泄露签名所对应的消息,可将签名 泄露,如对消息x的签名是Sig(x),其 z=H(x)可将(z,y)公开,而保密x。
2020/5/18
25
Hash函数MD5
MD5是四轮运算,各轮逻辑函数不同。每轮 又要进行16步迭代运算,4轮共需64步完成。 每步完成
a b+CLSS (a+g(B,C,D)+X[k]+T[i]) 其中a,b,c,d=缓存器中的四个字,按特定次序 变化。g=基本逻辑函数F, G, H, I中之一,算 法的每一轮用其中之一。
• 迭代函数以E表示,一般E又都是通过基 本轮函数的多轮迭代实现的,因此,轮 函数的设计是Hash函数设计的核心。
• 迭代Hash函数的构造方法
– 安全迭代函数E
– 消息M划分成组M1, M2,…, Mi ,…, Mt – 选定密钥为K,
– H0为初始向量IV,
2020/5/18
16
Hash函数
• Rabin法:
2020/5/18
3
Hash函数
Hash函数
• 设H:将A*映射到An,H满足:
– H是单向函数。
– 已知 x, 找 x*∈A* ,使H (x)= H (x*)在计 算上是不可能的。
– 找一对 x 和 x* ,x ≠ x* ,使H (x)= H (x*) 在计算上也是不可能的。
H称为安全的Hash函数。
H0=IV; Hi=E(Mi, Hi-1) i=1,…,t; H(M)=Ht 。 密码分组链接(CBC)法:
H0=IV;Hi=E(K, Mi Hi-1) i=1,2,…,t; H(M)=Ht 。 • 密码反馈(CFB)法:
Hi=E(K, Hi-1Mi),i=1, 2,…,t;H(M)=Ht
2020/5/18
2020/5/18
5
Hash函数
Hash函数的分类
• 根据是否使用密钥
– 带秘密密钥的Hash函数:消息的散列值由 只有通信双方知道的秘密密钥K来控制 。此时Hash值称作MAC。
– 不带秘密密钥的Hash函数:消息的散列 值的产生无需使用密钥。此时Hash值称 作MDC。
2020/5/18
6
Hash函数
20
二、Hash函数MD5
2020/5/18 21
Hash函数MD5
设计目标: MD5是R.Rivest在MIT开发研究的Hash函 数
– 输入:任意长度的消息 – 输出:128位消息摘要 – 处理:以512位输入数据块为单位
2020/5/18
22
Hash函数MD5
MD5算法
• 对明文输入按512bit分组,最后要填充使 其成为512 bit的整数倍,且最后一组的后 64 bit用来表示消息长在mod 264下的值K ,故填充位数为1~512 bit,填充数字图 样为(100…0),得Y0,Y1,…,YL-1。其中, Yl为512 bit,即16个长为32 bit的字,按字 计消息长为N=L×16。
2020/5/18
13
Hash函数
Hash函数的迭代构造
将不限定长度的输入数据压缩成定长输出的 Hash值过程:
– 将输入数字串划分成固定长的段如m比特段
– 将此m比特映射成n比特,称完成此映射的 函数为迭代函数。
– 对一段m比特输入做类似映射,以此类推, 直到全部输入数字串完全做完,以最后的输 出值作为整个输入的Hash值。
2020/5/18
14
Hash函数
将m bit到n bit的分组映射或迭代函数的三 种选择
• m>n。有数据压缩,例如:MD4、MD5 SHA等算法。是不可逆映射。
• m=n。无数据压缩,亦无数据扩展,通 常分组密码采用这类。
• m<n。有数据扩展的映射。认证码属 于此类。
2020/5/18
15
Hash函数
• HMD5的运算,对512 bit(16-字)组进行运算, Yq表示输入的第q组512 bit数据,在各轮中参 加运算。T[1,…,64]为64个元素表,分四组参 与不同轮的计算。T[i]为232×abs(Sine(i))的整 数部分,i是弧度。T[i]可用32 bit二元数表示 ,T是32 bit随机数源。
fF F(b,c,d) (b•c)V(b•d)
fG G(b,c,d) (b•d)V(c• d¯)
fH H(b,c,d)
bcd
fI I(b,c,d) c(b•d¯)
2020/5/18
30
2020/5/18
Hash函数
表-2 逻辑函数的真值表 b c d FG H I 0000001 0011010 0100110 0111001 1000011 1010101 1101100 1111110
10
Hash函数
对Hash函数的基本攻击方法 • 穷举攻击法:给定H=H(H0, M),其中H0为
初值,攻击者在所有可能的M中寻求有利于 攻击者的M’,使H(H0, M’)=H(H0, M),由于 限定了目标H(H0, M)来寻找H(H0, M’),这种 攻击法称为目标攻击。若对算法的初值H0不 限定,使其H(H0, M)等于H(H0, M’),则称这 种攻击法为自由起始目标攻击。
2020/5/18
12
Hash函数
生日悖论 在一个会场参加会议的人中,找一个与某人 生日相同的概率超过0.5时,所需参会人员为 183人。但要问使参会人员中至少有两个同日 生的概率超过0.5的参会人数仅为23人。这是 因为,对于与某个已知生日的人同日生的概 率为1/365,若房中有t人,则至少找到一人与 此人同日生的概率为。易于解出当t183时可 使p>0.5。
– Hi=E(Mi, Hi-1)Hi-1 – Hi=E(Hi-1, Mi)MiHi-1 – Hi=E(Hi-1, MiHi-1)Mi
2020/5/18
19
Hash函数
– Hi=E(Hi-1, MiHi-1)MiHi-1
– Hi=E(Hi-1, Mi)Mi
– Hi=E(Mi, MiHi-1)MiHi-1
– +:模232加法。
T[i]由sin 函数构造。每个输入的32 bit字被 采用4次,每轮用一次,而T[i]中每个元素 恰只用一次。每一次,ABCD中只有4个字 节更新,共更新16次,在最后第17次产生 此组的最后输出。
2020/5/18
29
Hash函数
表-1各轮的逻辑函数
轮 基本函数 g g(b, c, d)
2020/5/18
11
Hash函数
对Hash函数的基本攻击方法
• 生日攻击:这种攻击法不涉及Hash算法的 结构,可用于攻击任何Hash算法。强无碰撞 函数正是基于生日悖论一类的攻击法定义的 。穷举和生日攻击都属选择明文攻击。生日 攻 击 给 定 初 值 H0 寻 找 MM’, 使H(H0, M’)=H(H0, M),也可对初始值H0不 加 限 制 , 即 寻 找 H0’, M’ 使 满 足 h(H0’, M’)=h(H0, M)。
2020/5/18
33
Hash函数
MD5的安全性:
对单轮MD5已有攻击结果。与Snefru比 较,两者均为32 bits字运算。Snefru采用 S-BOX,XOR函数,MD5用mod 232加。 最近山东大学的王小云教授利用用差分分 析的方法研究MD5,得到了比较好的算法 使MD5能够产生碰撞。因此MD5的安全 性还需要进一步提高。
17
Hash函数
组合明/密文链接法: Mt+1=IV;Hi=E(K,MiMi-1Hi-1)
i=1, 2,…, t ;H(M)=Ht+1。 • 修正Daveis-Meyer法:
H0=IV;Hi=E(Hi-1, Mi , Hi-1) (Hi和Mi共 同作为密钥)
2020/5/18
18
Hash函数
B. Preneel总结的下述12种基本方式构造 的分组迭代Hash函数。令E是迭代函数, 它可以是一种分组加密算法,E(K, X),K 是密钥,X是输入数据组或某种压缩算法 。令消息分组为M1,…, M i,…, H0=I为初始 值。
2020/5/18
36
安全Hash算法SHA
SHA的描述 • 输入长度少于264比特,输出160比特。输入
分成512比特块。
• 附加信息位使长度mod512与448同余。
– Hi=E(Mi, Hi-1)MiHi-1
– Hi=E(Mi,MiHi-1)Hi-1
– Hi=E(MiHi-1, Mi)Mi
– Hi=E(MiHi-1, Hi-1,)Hi-1 [Brown等1990]
– Hi=E(MiHi-1, Mi)Hi-1
– Hi=E(MiHi-1, Hi-1)Mi
2020/5/18
相关文档
最新文档