前言:我们在登录QQ有时会遇到密码忘记的问题,那么思考一下,为什么腾讯公司不直接把密码发还给用户而是要求设置新密码呢。其实,不保存密码,是为了更好地对密码保密,换言之,腾讯的数据库根本没有存储你的密码。那腾讯又是怎么判断你的登录安全性呢,接下来的哈希函数就是其原理所在。
“好”的Hash
密码学哈希函数
= ( ) , ≠ − ( ) =(), {\color{red}≠} ^− () h=H(M),M=H−(h)
= ( ) , = ( ) _=(_ ),_=(_ ) h1=H(M1),h2=H(M2)
≠ _ {\color{red}≠} _ h1=h2
应用在网络安全中的Hash函数称为密码学Hash
已知Hash值,无法计算出对应的数据块——单向
数据块不同,生成的Hash值不同——抗碰撞
方法一:消息 M M M与哈希值 H ( M ) H(M) H(M)均对称加密并传输
Q:现在密钥K是绝对保密的,若攻击者截获了传输的数据,他能看到消息M 是什么吗?
A:不能
Q:现在密钥K是绝对保密的,若攻击者截获了传输的数据,并已知Hash值长度,那么他能看到消息M 是什么吗?
A:可以
Q:若攻击者截获了传输的数据并修改了M,他能否也篡改数据中的Hash值,使得接收方无法察觉?
A:不能
Q:若攻击者截获了传输的数据,并已知Hash值的长度,他能否获取到消息M?
A:能
Q:若攻击者截获了传输的数据并修改了M,他能否也篡改数据中的Hash值,使得接收方无法察觉?
A:不能
方法四:消息 M M M与哈希值 H ( M ) H(M) H(M)均对称加密并加入校验值
Q:若攻击者截获了传输的数据,并已知Hash值长度,他能否获取到消息M?
A:能
Q:若攻击者截获了传输的数据并修改了M,他能否也篡改数据中的Hash值,使得接收方无法察觉?
A:不能
Q:现在密钥K是绝对保密的,若攻击者截获了传输的数据,他能否获取到消息M?
A:不能
思考:上面两个函数是真正的哈希函数吗?
答:哈希函数的一大特征:单向性,而异或是有办法逆向的
可变输入
Hash函数 可应用于任意大小的数据块
固定长度
Hash函数 产生的是固定长度的输出
计算效率
对任意消息x,计算H(x)容易,硬件软件均可实现
抗原像攻击
对于Hash值 =() ,称是的原像
给定,找到满足=() 的 在计算上不可行
抗弱碰撞
对任意给定的,找到满足≠ 且()=()的,在计算上不可行
抗强碰撞
找到任何满足()=()的偶对(,),在计算上不可行
抗原像 抗弱碰撞 抗强碰撞 Hash数字签名 Y Y Y 入侵检测、病毒检测 Y 单向口令文件 Y \begin{array}{|c|c|c|c|} \hline & \text { 抗原像 } & \text { 抗弱碰撞 } & \text { 抗强碰撞 } \\ \hline \text { Hash数字签名 } & Y & Y & Y \\ \hline \text { 入侵检测、病毒检测 } & & Y & \\ \hline \text { 单向口令文件 } & Y & & \\ \hline \end{array} Hash数字签名 入侵检测、病毒检测 单向口令文件 抗原像 YY 抗弱碰撞 YY 抗强碰撞 Y
原像攻击、弱碰撞攻击
( ) = − ()= \\ ^{−} H(y)=h2m−1
碰撞攻击
( ) = ( ) / ()=() \\ ^{/} H(x)=H(y)2m/2
( ) = ( ) 128 / ()=() \\ ^{128/} H(x)=H(y)2128/2
( ) = ( ) 80 ()=() \\ ^{80} H(x)=H(y)280
若 MD5值 变为160位,相同的碰撞机则需要4000年才可找出一个碰撞
而我国著名密码学家、中科院院士、2019未来科学大奖获得者、清华大学教授王小云 研究的MD5碰撞算法,将碰撞次数从 ^{} 280降低为 \color{red}^{} 269
强碰撞的应用——生日悖论
生日悖论 同一天生日的问题,反直觉概率, 同月同日生不是难事
生日悖论视频
将输入消息分为 L L L个固定长度的分组,每个分组长 b b b位
最后一个分组不足 b b b位,要加上填充内容 P P P与消息长度
Hash结构重复使用了函数
将第一个分组 \color{purple}_ Y0 和 初始化变量 \color{green}_ CV0 输入到函数 f \color{red}f f中,输出一个 n n n位分组 \color{green}_ CV1
将下一个分组 \color{purple}_ Y1 和 上一次输出 \color{green}_ CV1 输入到函数 f \color{red}f f中,输出一个 n n n位分组 \color{green}_ CV2
直到最后一个分组 − \color{purple}_{−} YL−1 和 上一次输出 − \color{green}_{−} CVL−1 输入到函数 f \color{red}f f中,输出最终的Hash值,即分组 \color{green}_ CVL
如果 迭代函数f 能够做到抗碰撞,那么Hash函数也会具有抗碰撞能力,密码分析就是分析 f \color{red}f f的内部结构
一个理想的Hash函数 要求密码分析所需的代价大于穷举攻击的代价
单选题:
原始消息的总长度是a位,将a位分成b位为一个分组,共L个分组。经过Hash函数的处理,输出Hash码为n位,问: Hash函数迭代结构中的初始值IV是多少位呢?
A.a B.b C.L D.n
答:选D
随后SHA-0被发现存在安全缺陷,将其修订后变为SHA-1并于1995年发布
SHA-1产生的是160位的Hash值
SHA算法建立在MD4算法之上,基本框架与MD4相似
2002年,NIST又给出了三种新的SHA版本,Hash值长度依次为256、384、512位,统称为SHA-2
Sony PS4 与游戏服务器通信的数据,使用AES-128加密、CBC工作模式、SHA-256完整校验
XBOX ONE 与游戏服务器通信的数据,使用AES-256加密、CBC工作模式、SHA-384完整校验
2015年,NIST增加了两个算法SHA-512/224和SHA-512/256
我们将介绍SHA-2系列中的SHA-512,其他版本的算法与之类似
SHA-1 SHA-224 SHA-256 SHA-512 SHA- 512 / 224 SHA- 512 / 256 消息摘要长度 160 224 256 512 224 256 消息长度 < 2 64 < 2 64 < 2 64 < 2 128 < 2 128 < 2 128 分组长度 512 512 512 1024 1024 1024 字长度 32 32 32 64 64 64 \begin{array}{|l|l|l|l|l|l|l|} \hline & \text { SHA-1 } & \text { SHA-224 } & \text { SHA-256 } & \text { SHA-512 } & \begin{array}{l} \text { SHA- } \\ 512 / 224 \end{array} & \begin{array}{l} \text { SHA- } \\ 512 / 256 \end{array} \\ \hline \text { 消息摘要长度} & 160 & 224 & 256 & 512 & 224 & 256 \\ \hline \text { 消息长度 } & <2^{64} & <2^{64} & <2^{64} & <2^{128} & <2^{128} & <2^{128} \\ \hline \text { 分组长度 } & 512 & 512 & 512 & 1024 & 1024 & 1024 \\ \hline \text { 字长度 } & 32 & 32 & 32 & 64 & 64 & 64 \\ \hline \end{array} 消息摘要长度 消息长度 分组长度 字长度 SHA-1 160<26451232 SHA-224 224<26451232 SHA-256 256<26451232 SHA-512 512<2128102464 SHA- 512/224224<2128102464 SHA- 512/256256<2128102464
单选题:
关于SHA-512的说法正确的是?
A. SHA-512产生的摘要长度是512位
B. SHA-512要求对消息进行填充,填充部分的长度可以为0bit.
C. SHA-512还要求在消息的填充部分后加上256位的长度部分
D. SHA-512要求处理的分组长度是512位
答案:选A,摘要长度即哈希值长度;B错,不能为空;C错,是128位;D错,是1024位
练习:
使用SHA-512算法,计算消息36的Hash值,问:
(1)消息长度是多少个bit?
(2)填充内容P 是什么?
(3)消息长度区域L 是什么?
答:
(1) = = M=36,化二进制为:100100,因此消息的长度是6个bit
(2) + = ( ) _+_= ( ) LM+LP=896(mod1024)
+ = ( ) +_= ( ) 6+LP=896(mod1024)
= ( ) = × + _= ( )=×+ LP=890(mod1024)=n×1024+890
令 = _= LP=890(即n取0),填充内容 P:1和889个0
(3) = = M=36,继续填充 消息长度区域,消息长度为6,化为二进制110,将其放在 消息长度区域 的最低3位,其余高位填充为0,共128位
即消息长度区域为 125个0 和 110
迭代函数 F F F中的 、 … _ 、 _ … _{} W0、W1…W79是什么呢?
σ 0 512 ( x ) = ROTR 1 ( x ) ⊕ ROTR 8 ( x ) ⊕ SHR 7 ( x ) σ 1 512 ( x ) = ROTR 19 ( x ) ⊕ ROTR 61 ( x ) ⊕ SHR 6 ( x ) \begin{aligned} \sigma_{0}^{512}(x) &=\operatorname{ROTR}^{1}(x) \oplus \operatorname{ROTR}^{8}(x) \oplus \operatorname{SHR}^{7}(x) \\ \sigma_{1}^{512}(x) &=\operatorname{ROTR}^{19}(x) \oplus \operatorname{ROTR}^{61}(x) \oplus \operatorname{SHR}^{6}(x) \end{aligned} σ0512(x)σ1512(x)=ROTR1(x)⊕ROTR8(x)⊕SHR7(x)=ROTR19(x)⊕ROTR61(x)⊕SHR6(x)
迭代函数 F F F中的 、 … _ 、 _ … _{} K0、K1…K79又是什么呢?
、 … _ 、 _ … _{} K0、K1…K79是轮常量
b 、 c 、 d 、 f 、 g 、 h b、c、d、f、g、h b、c、d、f、g、h直接由 a 、 b 、 c 、 e 、 f 、 g a、b、c、e、f、g a、b、c、e、f、g得到
T 1 = h + Ch ( e , f , g ) + ( ∑ 1 512 e ) + W t + K t T_{1}= h+\operatorname{Ch}(e, f, g)+\left(\sum_{1}^{512} e\right)+W_{t}+K_{t} T1=h+Ch(e,f,g)+(∑1512e)+Wt+Kt
T 2 = ( ∑ 0 512 a ) + Maj ( a , b , c ) T_{2}=\left(\sum_{0}^{512} a\right)+\operatorname{Maj}(a, b, c) T2=(∑0512a)+Maj(a,b,c)
e = d + T 1 e= d+T_{1} e=d+T1
a = T 1 + T 2 a= T_{1}+T_{2} a=T1+T2
其中:
Ch ( e , f , g ) = ( e AND f ) ⨁ ( NOT e AND g) \text { Ch }(e, f, g)=(\text { e AND } f) \bigoplus(\text { NOT e AND g) } Ch (e,f,g)=( e AND f)⨁( NOT e AND g)
如果 e e e则 f f f,否则 g g g
Maj ( a , b , c ) = ( a AND b ) ⨁ ( a AND c ) ⨁ ( b AND c) \operatorname{Maj}(a, b, c)=(a \text { AND b }) \bigoplus(a \text { AND c })\bigoplus(b \text { AND c) } Maj(a,b,c)=(a AND b )⨁(a AND c )⨁(b AND c)
函数为真当且仅当变量的多数(2或3个)为真
( ∑ 0 512 a ) = ROTR 28 ( a ) ⨁ ROTR 34 ( a ) ⨁ ROTR 39 ( a ) \left(\sum_{0}^{512} a\right)= \operatorname{ROTR}^{28}(a) \bigoplus \operatorname{ROTR}^{34}(\mathrm{a}) \bigoplus \operatorname{ROTR}^{39}(\mathrm{a}) (∑0512a)=ROTR28(a)⨁ROTR34(a)⨁ROTR39(a)
( ∑ 1 512 e ) = ROTR 14 ( e ) ⨁ ROTR 18 ( e ) ⨁ ROTR 41 ( e ) \left(\sum_{1}^{512} e\right)= \operatorname{ROTR}^{14}(\mathrm{e}) \bigoplus \operatorname{ROTR}^{18}(\mathrm{e}) \bigoplus \operatorname{ROTR}^{41}(\mathrm{e}) (∑1512e)=ROTR14(e)⨁ROTR18(e)⨁ROTR41(e)
R O T R n ( x ) ROTR^n (x) ROTRn(x)为对64位的变量 x x x循环右移 n n n位
单选题:
关于SHA-512的轮函数说法不正确的是?
A. 每个迭代函数包含了80轮的轮函数
B. 每个轮函数的输入有三部分,轮常量Kt,消息分组Mt和寄存器的值
C. 对于第一轮的轮函数,输入的是第一个消息分组的前32bit数据
D. 对于每轮轮函数,输出到寄存器b的值都是输入寄存器a的值
答案:选C,是64bit
a b c \hspace{2cm}a\hspace{2cm}b\hspace{2cm}c abc
97 98 99 \hspace{1.9cm}97\hspace{1.9cm}98\hspace{1.8cm}99 979899
01100001 01100010 01100011 \hspace{1.4cm}01100001\hspace{0.8cm}01100010\hspace{0.8cm}01100011 011000010110001001100011
6162638000000000 0000000000000000 0000000000000000 0000000000000000 6162638000000000 \ 0000000000000000 \ 0000000000000000 \ 0000000000000000 6162638000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 \ 0000000000000000 \ 0000000000000000 \ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 \ 0000000000000000 \ 0000000000000000 \ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000018 0000000000000000 \ 0000000000000000 \ 0000000000000000 \ 0000000000000018 0000000000000000 0000000000000000 0000000000000000 0000000000000018
W 0 = 6162638000000000 W 8 = 0000000000000000 W_0 = 6162638000000000 \quad W_8 = 0000000000000000 W0=6162638000000000W8=0000000000000000
W 1 = 0000000000000000 W 9 = 0000000000000000 W_1 = 0000000000000000 \quad W_9 = 0000000000000000 W1=0000000000000000W9=0000000000000000
W 2 = 0000000000000000 W 10 = 0000000000000000 W_2 = 0000000000000000 \quad W_{10} = 0000000000000000 W2=0000000000000000W10=0000000000000000
W 3 = 0000000000000000 W 11 = 0000000000000000 W_3 = 0000000000000000 \quad W_{11} = 0000000000000000 W3=0000000000000000W11=0000000000000000
W 4 = 0000000000000000 W 12 = 0000000000000000 W_4 = 0000000000000000 \quad W_{12} = 0000000000000000 W4=0000000000000000W12=0000000000000000
W 5 = 0000000000000000 W 13 = 0000000000000000 W_5 = 0000000000000000 \quad W_{13} = 0000000000000000 W5=0000000000000000W13=0000000000000000
W 6 = 0000000000000000 W 14 = 0000000000000000 W_6 = 0000000000000000 \quad W_{14} = 0000000000000000 W6=0000000000000000W14=0000000000000000
W 7 = 0000000000000000 W 15 = 0000000000000018 W_7 = 0000000000000000 \quad W_{15} = 0000000000000018 W7=0000000000000000W15=0000000000000018
a 6 a 09 e 667 f 3 b c c 908 f 6 a f c e b 8 b c f c d d f 5 1320 f 8 c 9 f b 872 c c 0 b b b 67 a e 8584 c a a 73 b 6 a 09 e 667 f 3 b c c 908 f 6 a f c e b 8 b c f c d d f 5 c 3 c 6 e f 372 f e 94 f 82 b b b 67 a e 8584 c a a 73 b 6 a 09 e 667 f 3 b c c 908 d a 54 f f 53 a 5 f 1 d 36 f 1 3 c 6 e f 372 f e 94 f 82 b b b 67 a e 8584 c a a 73 b e 510 e 527 f a d e 682 d 1 58 c b 02347 a b 51 f 91 c 3 d 4 e b f d 48650 f f a f 9 b 05688 c 2 b 3 e 6 c 1 f 510 e 527 f a d e 682 d 1 58 c b 02347 a b 51 f 91 g 1 f 83 d 9 a b f b 41 b d 6 b 9 b 05688 c 2 b 3 e 6 c 1 f 510 e 527 f a d e 682 d 1 h 5 b e 0 c d 19137 e 2179 1 f 83 d 9 a b f b 41 b d 6 b 9 b 05688 c 2 b 3 e 6 c 1 f \begin{array}{|c|c|c|l|} \hline a & 6 a 09 e 667 f 3 b c c 908 & f 6 a f c e b 8 b c f c d d f 5 & 1320 f 8 c 9 f b 872 c c 0 \\ b & bb67ae8584caa73b & 6 a 09 e 667 f 3 b c c 908 & f 6 a f c e b 8 b c f c d d f 5 \\ c & 3 c 6 e f 372 f e 94 f 82 b & b b 67 a e 8584 c a a 73 b & 6 a 09 e 667 f 3 b c c 908 \\ d & a54ff53a5f1d36f1 & 3 c 6 e f 372 f e 94 f 82 b & bb67ae8584caa73b \\ e & 510 e 527 f a d e 682 d 1 & 58 c b 02347 a b 51 f 91 & c3d4ebfd48650ffa \\ f & 9 b 05688 c 2 b 3 e 6 c 1 f & 510 e 527 f a d e 682 d 1 & 58 c b 02347 a b 51 f 91 \\ g & 1 f 83 d 9 a b f b 41 b d 6 b & 9 b 05688 c 2 b 3 e 6 c 1 f & 510 e 527 f a d e 682 d 1 \\ h & 5 b e 0 c d 19137 e 2179 & 1 f 83 d 9 a b f b 41 b d 6 b & 9 b 05688 c 2 b 3 e 6 c 1 f \\ \hline \end{array} abcdefgh6a09e667f3bcc908bb67ae8584caa73b3c6ef372fe94f82ba54ff53a5f1d36f1510e527fade682d19b05688c2b3e6c1f1f83d9abfb41bd6b5be0cd19137e2179f6afceb8bcfcddf56a09e667f3bcc908bb67ae8584caa73b3c6ef372fe94f82b58cb02347ab51f91510e527fade682d19b05688c2b3e6c1f1f83d9abfb41bd6b1320f8c9fb872cc0f6afceb8bcfcddf56a09e667f3bcc908bb67ae8584caa73bc3d4ebfd48650ffa58cb02347ab51f91510e527fade682d19b05688c2b3e6c1f
H 1 , 0 = 6 a 09 e 667 f 3 b c c 908 + 73 a 54 f 399 f a 4 b 1 b 2 = d d a f 35 a 193617 a b a H_{1,0} = 6a09e667f3bcc908 + 73a54f399fa4b1b2 = ddaf35a193617aba H1,0=6a09e667f3bcc908+73a54f399fa4b1b2=ddaf35a193617aba
H 1 , 1 = b b 67 a e 8584 c a a 73 b + 10 d 9 c 4 c 4295599 f 6 = c c 417349 a e 204131 H_{1,1} = bb67ae8584caa73b + 10d9c4c4295599f6 = cc417349ae204131 H1,1=bb67ae8584caa73b+10d9c4c4295599f6=cc417349ae204131
H 1 , 2 = 3 c 6 e f 372 f e 94 f 82 b + d 67806 d b 8 b 148677 = 12 e 6 f a 4 e 89 a 97 e a 2 H_{1,2} = 3c6ef372fe94f82b + d67806db8b148677 = 12e6fa4e89a97ea2 H1,2=3c6ef372fe94f82b+d67806db8b148677=12e6fa4e89a97ea2
H 1 , 3 = a 54 f f 53 a 5 f 1 d 36 f 1 + 654 e f 9 a b e c 389 c a 9 = 0 a 9 e e e e 64 b 55 d 39 a H_{1,3} = a54ff53a5f1d36f1 + 654ef9abec389ca9 = 0a9eeee64b55d39a H1,3=a54ff53a5f1d36f1+654ef9abec389ca9=0a9eeee64b55d39a
H 1 , 4 = 510 e 527 f a d e 682 d 1 + d 08446 a a 79693 e d 7 = 2192992 a 274 f c 1 a 8 H_{1,4} = 510e527fade682d1 + d08446aa79693ed7 = 2192992a274fc1a8 H1,4=510e527fade682d1+d08446aa79693ed7=2192992a274fc1a8
H 1 , 5 = 9 b 05688 c 2 b 3 e 6 c 1 f + 9 b b 4 d 39778 c 07 f 9 e = 36 b a 3 c 23 a 3 f e e b b d H_{1,5} = 9b05688c2b3e6c1f + 9bb4d39778c07f9e = 36ba3c23a3feebbd H1,5=9b05688c2b3e6c1f+9bb4d39778c07f9e=36ba3c23a3feebbd
H 1 , 6 = 1 f 83 d 9 a b f b 41 b d 6 b + 25 c 96 a 7768 f b 2 a a 3 = 454 d 4423643 c e 80 e H_{1,6} = 1f83d9abfb41bd6b + 25c96a7768fb2aa3 = 454d4423643ce80e H1,6=1f83d9abfb41bd6b+25c96a7768fb2aa3=454d4423643ce80e
H 1 , 7 = 5 b e 0 c d 19137 e 2179 + c e b 9 f c 3691 c e 8326 = 2 a 9 a c 94 f a 54 c a 49 f H_{1,7} = 5be0cd19137e2179 + ceb9fc3691ce8326 = 2a9ac94fa54ca49f H1,7=5be0cd19137e2179+ceb9fc3691ce8326=2a9ac94fa54ca49f
d d a f 35 a 193617 a b a c c 417349 a e 204131 12 e 6 f a 4 e 89 a 97 e a 2 0 a 9 e e e e 64 b 55 d 39 a ddaf35a193617aba \ cc417349ae204131 \ 12e6fa4e89a97ea2 \ 0a9eeee64b55d39a ddaf35a193617aba cc417349ae204131 12e6fa4e89a97ea2 0a9eeee64b55d39a
2192992 a 274 f c 1 a 8 36 b a 3 c 23 a 3 f e e b b d 454 d 4423643 c e 80 e 2 a 9 a c 94 f a 54 c a 49 f 2192992a274fc1a8 \ 36ba3c23a3feebbd \ 454d4423643ce80e \ 2a9ac94fa54ca49f 2192992a274fc1a8 36ba3c23a3feebbd 454d4423643ce80e 2a9ac94fa54ca49f
如上过程重复80轮后,最终得到512位的消息摘要
假设将输入消息改变1位,从“abc”变成“cbc”,对应的512位消息摘要发生了253位不同
d d a f 35 a 193617 a b a c c 417349 a e 204131 12 e 6 f a 4 e 89 a 97 e a 2 0 a 9 e e e e 64 b 55 d 39 a ddaf35a193617aba \ cc417349ae204131 \ 12e6fa4e89a97ea2 \ 0a9eeee64b55d39a ddaf35a193617aba cc417349ae204131 12e6fa4e89a97ea2 0a9eeee64b55d39a
2192992 a 274 f c 1 a 8 36 b a 3 c 23 a 3 f e e b b d 454 d 4423643 c e 80 e 2 a 9 a c 94 f a 54 c a 49 f 2192992a274fc1a8 \ 36ba3c23a3feebbd \ 454d4423643ce80e \ 2a9ac94fa54ca49f 2192992a274fc1a8 36ba3c23a3feebbd 454d4423643ce80e 2a9ac94fa54ca49f
OK,以上就是本期知识点“哈希函数”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟~
如果有错误❌,欢迎批评指正呀~让我们一起相互进步
如果觉得收获满满,可以点点赞支持一下哟~