应用密码学 第6章 Hash函数(2)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
之所以称这一问题是悖论是因为当人数k给定时,得到的至少有两个人的生日相 同的概率比想象的要大得多。
SHA-1接受输入消息的最大长度为264-1 bits,生成160 bits的消息摘要。 SHA-1算法操作首先对输入消息划分为512-bit块,若最后一个数据块不满 足长度要求,按照一定规则进行填充为512-bit块。 然后每个512-bit块重复使用分块处理函数,最终输出160 bits哈希值。
求A,B,C,D的值。
•SHA-1散列算法后面的与步骤3类似计算。 2020/3/26 •由标准可知,若输入字符串”abc”,SHA-1算法160 bits哈希值为: 25
a9993e36 4706816aba3e2571 7850c26c 9cd0d89d
6.3.3 SHA-256、SHA-384和SHA-512*
2
Kt = 6ED9EBA1
3
Kt = 8F1BBCDC
4
Kt = CA62C1D6
3)SHA-1算法伪代码
H0 67452301, H1 EFCDAB89, H2 98BA DCFE, H3 10325476, H4 C3D2E1F0
A H0, B H1,C H2, D H3, E H4
6.4.1 生日悖论问题
生日悖论是这样一个问题:在k个人中至少有两个人的生日相同的概率大于0.5时, k至少多大?
绝大多数人回答这个问题时候会认为是一个很大的数,事实上是非常小的一个数。 为了回答这一问题,下面我们给出计算方法:
2020/3/26
33
(1)对于进入房间的第一个人来说,有365个不同的生日; (2)对于第二个进入房间时,有364个与第一个人不是同一天生日的可能,因此 不匹配概率为364/365; (3)对于第三个人进入房间时,有363个与前两个人不是一天生日,因此现在不 匹配的概率为: 363 364
1.生成程序或文档的“数字指纹”-完整性验证
消息 T
A M
H(M)
M
消息
B M'
2020/3/26
杂凑算法
= H(M)
H(M) = H(M') (正常) 或
H(M) <> H(M') (错误发生)
杂凑算法 = H(M')
30
2.用于安全存储口令
声称者A
验证者(系统)B 口令表
A A H(mA)(m为口令)
作为SHA家族最新的算法,其采用了不同于传统MD结构,而选择了 海绵构造(sponge结构)。通过采用这种结构,常用于MD结构的攻击方 法难以进行,增加了其算法安全性。
6.3.5 Hash散列算法的应用(略)
Hash算列函数由于其单向性和随机性的特点, 主要运用于提供数据完整性(包括数 字签名、以及与数字签名联系起来的数字指纹的应用) 知识证明、密钥推导、伪随机 数生成等方面。
- SHA参数比较:
6.3.4 SHA-3 算法
自2007年,NIST发起了SHA-3竞赛以征集新的Hash算法以来,截止 到 2010 年 10 月,第二轮遴选结束,共有五种算法进入最终轮遴选,入 选的五个算法是:BLAKE、Grøstl、JH、Keccak、Skein,
到2012年,NIST最终选择Keccak算法作为SHA-3标准 (即美国的 FIPS PUB 202)。
A:口令m’
H (m'A )
/CSDN2011/ CSDN用户信息泄露的背后
2020/3/26
H(mA)
=否 拒绝 是 接受
31
6.4 散列算法的攻击现状(略)
散列函数主要用于数据完整性验证,确定消息是否被修改,因此对散列函数攻击 的目标是生成这样的修改后的消息:其散列值与原有消息的散列值相等。 • 对散列函数的攻击可以分为如下几类:
SHA-3为了与SHA-2完全兼容,SHA-3中也提出了4个Hash算法 SHA3-224, SHA3-256, SHA3-384, SHA3-512,可完全替换SHA-2。
Keccak算法是由 Guido Bertoni,Joan Daemen,Michaël Peeters ,以及Gilles Van Assche设计的。
160 bits 哈希值
1)SHA-1算法预处理
6 4 742348 6 44 764 4 48
0114120040301 0114120040310 0114120040311 1 000L 000 000L 01{ 1000
"a"
"b"
"c"
l 24
(1)消息由704位二进制组成。 先划分第一个分组:704-512=192 第二个分组填充:先填充一个“1”,填充“0”的个数位:
End For 5. return哈希值(H0||H1||H2||H3||H4 ) 备注:伪代码中"+"表示模 加
- 实例
例: 对字符串”abc”,运用SHA-1求散列值 首先”abc”二进制表示为:01100001 01100010 01100011,共24位长度 SHA-1算法: 第一步:按照SHA-1要求,填充数据
1 ~ 512 bits 64 bits
附加位元
消息长 度
M(2)
M(3)
M(N)
160 bits
160 bits HSHA-1
CV1
160 bits HSHA-1
CV2
HSHA-1
160 bits
CVL-1
HSHA-1
160 bits 哈希值
M (i)
512 W[t] W[t]
W[t] W[t]
6
如果消息长度为480bits呢?
实际上,在编程的时候应当分为2种情况: (1)消息的最后分组小于448比特,即56个字节,这种情况的填充方 式容易理解; (2)消息的最后分组长度大于等于448比特,这种情况会增加一个分 组。 另外,按照现在计算机的编码方式,消息的长度总是8的整数倍。 编程时,先分组再算消息摘要,还是读一组计算一组?文件很大呢? 多线程?---内存映射文件的方式
W
[t
14]
W
[t
16])
0 t 15 16 t 79
H (0) 0
67452301,
H (0) 1
EFCDAB89,
H (0) 2
98BA
DCFE,
H (0) 3
10325476,
H (0) 4
C3D2E1F0
2)SHA-1算法512-bit分块处理过程
SHA-1算法以512-bit分块为单位进行循环处理,处理过程为:第一个 512-bit分块与160-bit初始IV变量作为输入,通过分块处理压缩函数,输 出160 bits数据块;
448-1-192=255 最后64个比特填充消息的二进制长度。
(2)消息由448位二进制组成。 已经448bits了,又必须填充1,故填充后消息为2个分组。 故先填充一个“1”,然后用“0”把第1个分组填满。 再把第2个分组的前448比特然后用“0”填充,剩下最后64比特填充消 息的二进制长度。
2020/3/26
ABCD E f4, Kt, W[t], t=60, ..., 79
第四回合 20 steps
160
H (i)
模232 加
(1)逻辑函数(?) 分块处理中需要使用结构相似的四个基本逻辑函数:f1,f2,f3,f4,每 个回合使用不同的逻辑函数,f1,f2,f3,f4逻辑函数的定义如下所示:
f1 f (t, B,C, D) (B C) (B D) 0 t 19
512-64-24=424(填充1位“1”,423位“0”,及 1000…000) 512位的输入数据为(十六进制表示 ):61626380 00000000,……,00000018 故 W0= 61626380,W1=W2=…=W14=00000000,W15=00000018 第二步:初始化 A、B、C 与 D 缓存器,如下:
第6章 认证理论与技术—Hash函数(2)
知识点: ◇ 认证与认证系统 ◇ 散列算法概述 ◇ Hash散列算法 ◇ 散列算法的攻击现状 ◇ 消息认证
2020/3/26
1
6.3.2 SHA-1散列算法
NIST在1993年发布了一个哈希算法称为安全HASH算法,1995年修改, 修改后的版本是SHA-1,这个版本是当前使用最广泛的哈希算法。
2020/3/26
2
512 bits
M(1)
N * 512 bits
不定长度 原文消息
1 ~ 512 bits 64 bits
附加位元
消息长 度
M(2)
M(3)
bits HSHA-1
CV1
160 bits HSHA-1
CV2
HSHA-1
160 bits
CVL-1
HSHA-1
4.5 For t=0 to79
T = ROTL5(A) + f1(B, C, D) + E + W[t] + K[t] E = D; D = C; C = ROTL30 (B) ; B=A; A=T
End;
H0 A H0; H1 B H1; H2 H2 C; H3 H3 D; H4 H4 E
2020/3/26
8
512 bits Mi
W0
W2
W8
W13
Wt-16
Wt-14
Wt-8
Wt-3
W63
W65
W71
W76
XOR ROTL1
XOR ROTL1
XOR ROTL1
W0 W1 … W14 W15
W16
…
Wt
W79
…
数据扩展
W
[t
]
ROTL1
(W
[t
-3]
W
[t
M (i) t
8]
在2002年,相继对SHA系列算法进行扩展,提出SHA-256、SHA384、SHA-512,并称为SHA-2。
SHA-256与SHA-1算法一样,以512-bit分块为基本处理单位,每分 块又划分为16个32-bit字进入哈希函数中处理操作。
而SHA-384、SHA-512与SHA-1算法不同,是以1024-bit分块为基 本处理单位,每分块是划分为16个64-bit字进入哈希函数中处理操作。
H (i1)
160
32 ABCD E
f1, Kt, W[t], t=0, .., 19
第一回合 20 steps
ABCD E f2, Kt, W[t], t=20, .., 39
第二回合 20 steps
ABCD E f3, Kt, W[t], t = 40, .., 59
第三回合 20 steps
365 365
匹配概率为:1 363 364 365 365
(4) 但k个人进入房间时,不匹配概率的一般公式为:
匹配概率为:
2020/3/26
34
(5)当k=23时,概率为0.5073,即在23个人中至少有两个人生日相同的概率大于 0.5。若k取100,则概率0.9999997,即获得如此大的概率。
然后,第二512-bit分块和第一个分块处理最后输出160-bit数据块作为 输入,通过分块处理处理压缩函数,输出160 bits数据块;
依次,直到最后一个512-bit子块处理完成,最后输出160 bits数据块 为输入原始消息的哈希值,如图所示
512 bits
M(1)
N * 512 bits
不定长度 原文消息
A
B
C
D
f1~4
ROTL5
ROTL30
E
模232 加
W[t] K[t]
A
B
C
D
E
A = E + f1~4(B, C, D) +ROTL5(A) + W[t] + K[t] ; B = A ; C = ROTL30(B) ; D = C ; E = D
回合
步骤
输入常数
取值方式(整数)
1
Kt = 5A82799
A:67 45 23 01 B:EF CD AB 89 C:98 BA DC FE D:10 32 54 76 E :C3 D2 E1 F0
2020/3/26
24
第三步:进入第一轮次运算,执行 20 回合: A,B,C,D,E→(E+f1(t,B,C,D)+S5(A)+Wt+Kt),A,S30(B),C,D)
f2 f (t, B,C, D) B C D 20 t 39
f3 f (t, B,C, D) (B C) (B D) (C D) 40 t 59
f4 f (t, B,C, D) B C D 60 t 79
(4)压缩函数
寄存器A、B、C、D,E数据通过压缩函数变换
2020/3/26
32
目前,对散列函数的碰撞攻击最重要的平凡攻击是生日攻击。生日攻击的名字 起源于所谓的生日悖论,严格来说,它并不是一个真正的悖论,只是一个令人吃 惊的概率问题。
生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘 要的长度,即Hash值的长度。这种攻击对Hash函数提出了一个必要的安全条件, 即消息摘要必须足够的长。
SHA-1接受输入消息的最大长度为264-1 bits,生成160 bits的消息摘要。 SHA-1算法操作首先对输入消息划分为512-bit块,若最后一个数据块不满 足长度要求,按照一定规则进行填充为512-bit块。 然后每个512-bit块重复使用分块处理函数,最终输出160 bits哈希值。
求A,B,C,D的值。
•SHA-1散列算法后面的与步骤3类似计算。 2020/3/26 •由标准可知,若输入字符串”abc”,SHA-1算法160 bits哈希值为: 25
a9993e36 4706816aba3e2571 7850c26c 9cd0d89d
6.3.3 SHA-256、SHA-384和SHA-512*
2
Kt = 6ED9EBA1
3
Kt = 8F1BBCDC
4
Kt = CA62C1D6
3)SHA-1算法伪代码
H0 67452301, H1 EFCDAB89, H2 98BA DCFE, H3 10325476, H4 C3D2E1F0
A H0, B H1,C H2, D H3, E H4
6.4.1 生日悖论问题
生日悖论是这样一个问题:在k个人中至少有两个人的生日相同的概率大于0.5时, k至少多大?
绝大多数人回答这个问题时候会认为是一个很大的数,事实上是非常小的一个数。 为了回答这一问题,下面我们给出计算方法:
2020/3/26
33
(1)对于进入房间的第一个人来说,有365个不同的生日; (2)对于第二个进入房间时,有364个与第一个人不是同一天生日的可能,因此 不匹配概率为364/365; (3)对于第三个人进入房间时,有363个与前两个人不是一天生日,因此现在不 匹配的概率为: 363 364
1.生成程序或文档的“数字指纹”-完整性验证
消息 T
A M
H(M)
M
消息
B M'
2020/3/26
杂凑算法
= H(M)
H(M) = H(M') (正常) 或
H(M) <> H(M') (错误发生)
杂凑算法 = H(M')
30
2.用于安全存储口令
声称者A
验证者(系统)B 口令表
A A H(mA)(m为口令)
作为SHA家族最新的算法,其采用了不同于传统MD结构,而选择了 海绵构造(sponge结构)。通过采用这种结构,常用于MD结构的攻击方 法难以进行,增加了其算法安全性。
6.3.5 Hash散列算法的应用(略)
Hash算列函数由于其单向性和随机性的特点, 主要运用于提供数据完整性(包括数 字签名、以及与数字签名联系起来的数字指纹的应用) 知识证明、密钥推导、伪随机 数生成等方面。
- SHA参数比较:
6.3.4 SHA-3 算法
自2007年,NIST发起了SHA-3竞赛以征集新的Hash算法以来,截止 到 2010 年 10 月,第二轮遴选结束,共有五种算法进入最终轮遴选,入 选的五个算法是:BLAKE、Grøstl、JH、Keccak、Skein,
到2012年,NIST最终选择Keccak算法作为SHA-3标准 (即美国的 FIPS PUB 202)。
A:口令m’
H (m'A )
/CSDN2011/ CSDN用户信息泄露的背后
2020/3/26
H(mA)
=否 拒绝 是 接受
31
6.4 散列算法的攻击现状(略)
散列函数主要用于数据完整性验证,确定消息是否被修改,因此对散列函数攻击 的目标是生成这样的修改后的消息:其散列值与原有消息的散列值相等。 • 对散列函数的攻击可以分为如下几类:
SHA-3为了与SHA-2完全兼容,SHA-3中也提出了4个Hash算法 SHA3-224, SHA3-256, SHA3-384, SHA3-512,可完全替换SHA-2。
Keccak算法是由 Guido Bertoni,Joan Daemen,Michaël Peeters ,以及Gilles Van Assche设计的。
160 bits 哈希值
1)SHA-1算法预处理
6 4 742348 6 44 764 4 48
0114120040301 0114120040310 0114120040311 1 000L 000 000L 01{ 1000
"a"
"b"
"c"
l 24
(1)消息由704位二进制组成。 先划分第一个分组:704-512=192 第二个分组填充:先填充一个“1”,填充“0”的个数位:
End For 5. return哈希值(H0||H1||H2||H3||H4 ) 备注:伪代码中"+"表示模 加
- 实例
例: 对字符串”abc”,运用SHA-1求散列值 首先”abc”二进制表示为:01100001 01100010 01100011,共24位长度 SHA-1算法: 第一步:按照SHA-1要求,填充数据
1 ~ 512 bits 64 bits
附加位元
消息长 度
M(2)
M(3)
M(N)
160 bits
160 bits HSHA-1
CV1
160 bits HSHA-1
CV2
HSHA-1
160 bits
CVL-1
HSHA-1
160 bits 哈希值
M (i)
512 W[t] W[t]
W[t] W[t]
6
如果消息长度为480bits呢?
实际上,在编程的时候应当分为2种情况: (1)消息的最后分组小于448比特,即56个字节,这种情况的填充方 式容易理解; (2)消息的最后分组长度大于等于448比特,这种情况会增加一个分 组。 另外,按照现在计算机的编码方式,消息的长度总是8的整数倍。 编程时,先分组再算消息摘要,还是读一组计算一组?文件很大呢? 多线程?---内存映射文件的方式
W
[t
14]
W
[t
16])
0 t 15 16 t 79
H (0) 0
67452301,
H (0) 1
EFCDAB89,
H (0) 2
98BA
DCFE,
H (0) 3
10325476,
H (0) 4
C3D2E1F0
2)SHA-1算法512-bit分块处理过程
SHA-1算法以512-bit分块为单位进行循环处理,处理过程为:第一个 512-bit分块与160-bit初始IV变量作为输入,通过分块处理压缩函数,输 出160 bits数据块;
448-1-192=255 最后64个比特填充消息的二进制长度。
(2)消息由448位二进制组成。 已经448bits了,又必须填充1,故填充后消息为2个分组。 故先填充一个“1”,然后用“0”把第1个分组填满。 再把第2个分组的前448比特然后用“0”填充,剩下最后64比特填充消 息的二进制长度。
2020/3/26
ABCD E f4, Kt, W[t], t=60, ..., 79
第四回合 20 steps
160
H (i)
模232 加
(1)逻辑函数(?) 分块处理中需要使用结构相似的四个基本逻辑函数:f1,f2,f3,f4,每 个回合使用不同的逻辑函数,f1,f2,f3,f4逻辑函数的定义如下所示:
f1 f (t, B,C, D) (B C) (B D) 0 t 19
512-64-24=424(填充1位“1”,423位“0”,及 1000…000) 512位的输入数据为(十六进制表示 ):61626380 00000000,……,00000018 故 W0= 61626380,W1=W2=…=W14=00000000,W15=00000018 第二步:初始化 A、B、C 与 D 缓存器,如下:
第6章 认证理论与技术—Hash函数(2)
知识点: ◇ 认证与认证系统 ◇ 散列算法概述 ◇ Hash散列算法 ◇ 散列算法的攻击现状 ◇ 消息认证
2020/3/26
1
6.3.2 SHA-1散列算法
NIST在1993年发布了一个哈希算法称为安全HASH算法,1995年修改, 修改后的版本是SHA-1,这个版本是当前使用最广泛的哈希算法。
2020/3/26
2
512 bits
M(1)
N * 512 bits
不定长度 原文消息
1 ~ 512 bits 64 bits
附加位元
消息长 度
M(2)
M(3)
bits HSHA-1
CV1
160 bits HSHA-1
CV2
HSHA-1
160 bits
CVL-1
HSHA-1
4.5 For t=0 to79
T = ROTL5(A) + f1(B, C, D) + E + W[t] + K[t] E = D; D = C; C = ROTL30 (B) ; B=A; A=T
End;
H0 A H0; H1 B H1; H2 H2 C; H3 H3 D; H4 H4 E
2020/3/26
8
512 bits Mi
W0
W2
W8
W13
Wt-16
Wt-14
Wt-8
Wt-3
W63
W65
W71
W76
XOR ROTL1
XOR ROTL1
XOR ROTL1
W0 W1 … W14 W15
W16
…
Wt
W79
…
数据扩展
W
[t
]
ROTL1
(W
[t
-3]
W
[t
M (i) t
8]
在2002年,相继对SHA系列算法进行扩展,提出SHA-256、SHA384、SHA-512,并称为SHA-2。
SHA-256与SHA-1算法一样,以512-bit分块为基本处理单位,每分 块又划分为16个32-bit字进入哈希函数中处理操作。
而SHA-384、SHA-512与SHA-1算法不同,是以1024-bit分块为基 本处理单位,每分块是划分为16个64-bit字进入哈希函数中处理操作。
H (i1)
160
32 ABCD E
f1, Kt, W[t], t=0, .., 19
第一回合 20 steps
ABCD E f2, Kt, W[t], t=20, .., 39
第二回合 20 steps
ABCD E f3, Kt, W[t], t = 40, .., 59
第三回合 20 steps
365 365
匹配概率为:1 363 364 365 365
(4) 但k个人进入房间时,不匹配概率的一般公式为:
匹配概率为:
2020/3/26
34
(5)当k=23时,概率为0.5073,即在23个人中至少有两个人生日相同的概率大于 0.5。若k取100,则概率0.9999997,即获得如此大的概率。
然后,第二512-bit分块和第一个分块处理最后输出160-bit数据块作为 输入,通过分块处理处理压缩函数,输出160 bits数据块;
依次,直到最后一个512-bit子块处理完成,最后输出160 bits数据块 为输入原始消息的哈希值,如图所示
512 bits
M(1)
N * 512 bits
不定长度 原文消息
A
B
C
D
f1~4
ROTL5
ROTL30
E
模232 加
W[t] K[t]
A
B
C
D
E
A = E + f1~4(B, C, D) +ROTL5(A) + W[t] + K[t] ; B = A ; C = ROTL30(B) ; D = C ; E = D
回合
步骤
输入常数
取值方式(整数)
1
Kt = 5A82799
A:67 45 23 01 B:EF CD AB 89 C:98 BA DC FE D:10 32 54 76 E :C3 D2 E1 F0
2020/3/26
24
第三步:进入第一轮次运算,执行 20 回合: A,B,C,D,E→(E+f1(t,B,C,D)+S5(A)+Wt+Kt),A,S30(B),C,D)
f2 f (t, B,C, D) B C D 20 t 39
f3 f (t, B,C, D) (B C) (B D) (C D) 40 t 59
f4 f (t, B,C, D) B C D 60 t 79
(4)压缩函数
寄存器A、B、C、D,E数据通过压缩函数变换
2020/3/26
32
目前,对散列函数的碰撞攻击最重要的平凡攻击是生日攻击。生日攻击的名字 起源于所谓的生日悖论,严格来说,它并不是一个真正的悖论,只是一个令人吃 惊的概率问题。
生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘 要的长度,即Hash值的长度。这种攻击对Hash函数提出了一个必要的安全条件, 即消息摘要必须足够的长。