1 / 91

密码算法与应用基础

密码算法与应用基础. 五、数字签名与 hash 函数 阳振坤 yzk@icst.pku.edu.cn 计算机科学技术研究所 http://www.icst.pku.edu.cn/cryptocourse/. 内容提要. 信息安全引论 对称密钥密码 对称密钥密码应用基础 公开密钥密码 数字签名与 hash 函数 公开密钥密码应用基础 密钥交换与密钥管理. 信息安全的基本内容. 保密性 (Confidentiality) 真实性 (Authentication) 完整性 (Integrity) 不可否认性 (Nonrepudiation ) …….

havyn
Download Presentation

密码算法与应用基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 密码算法与应用基础 五、数字签名与hash函数 阳振坤 yzk@icst.pku.edu.cn 计算机科学技术研究所 http://www.icst.pku.edu.cn/cryptocourse/

  2. 内容提要 • 信息安全引论 • 对称密钥密码 • 对称密钥密码应用基础 • 公开密钥密码 • 数字签名与hash函数 • 公开密钥密码应用基础 • 密钥交换与密钥管理

  3. 信息安全的基本内容 • 保密性(Confidentiality) • 真实性(Authentication) • 完整性(Integrity) • 不可否认性(Nonrepudiation) ……

  4. 数字签名与hash函数 • Message authentication • Hash functions  • Digital signature  • ElGamal公钥算法的实现 

  5. Message Authentication • 针对消息真实性的攻击: • Masquerade(send & receive) • Content modification • Sequence modification • Timing modification(delay & replay) • 解决方法: • 信息加密  • Message Authentication Code(MAC): public function + secret key   

  6. Hash functions • hash function简介  • hash函数通用模型  • MD5  • SHA-1  • RIPEMD-160  • HMAC  • hash函数小结   

  7. 信息加密: 对称密钥密码  • 前提是通信双方有共享密钥 • 一定程度的内容和来源提供的真实性 C = EK(M)M = DK(C) • 攻击者可以修改内容而不被察觉 • 攻击者可以伪造消息(内容与来源)而不被察觉 • 使用有结构的信息 • 使用纠错码或者校验码

  8. 信息加密: 公开密钥密码 • 前提是知道对方的公钥 • 用私钥对信息加密提供真实性(无保密性) C = EKR(M)M = DKU(C) • 用公钥对信息加密提供保密性(无真实性) C = EKU(M)M = DKR(C) • 攻击者可以修改内容而不被察觉 • 攻击者可以伪造消息(内容与来源)而不被察觉 • 使用有结构的信息 • 使用纠错码或者校验码

  9. 通过加密得到信息真实性: 问题 • 保密性与真实性是两个不同的概念 • 根本上,信息加密提供的是保密性而非真实性 • 加密代价大(公钥算法代价更大) • 某些信息只需要真实性,不需要保密性 • 广播的信息难以使用加密(信息量大) • 可执行程序不适合使用加密 • 网络管理信息等只需要真实性 • BBS上的消息 • 政府/权威部门的公告 • ……  

  10. MAC介绍  • MAC: 对一段消息产生认证码(秘密校验核) • 要求: 不同的消息产生不同的认证码 认证码能够被验证 • 使用公开算法和秘密密钥K对信息M产生秘密校验核(MAC): MAC(M) = CK(M) • 例子:对M产生一个校验核M,再用K对M加密 • 发送者与接收者要有共享密钥K • 发送者生成MAC,接收者验证 • MAC有固定长度 • 强制破译: 2min(|MAC|,|Key|)-1

  11. MAC: Example • M=(X1,X2,…,Xt) • 对M产生校验核M=X1X2…Xt • 秘密校验核MAC = EK(M) • 密钥足够长+加密算法足够好安全 • 攻击者选择M=(Y1,Y2,…,Yt-1,Yt),使得Yt满足: Yt = Y1Y2…Yt-1M • 于是M=MEK(M)=EK(M) CK(M)=CK(M) • 尽管不知道K,攻击者仍然可以伪造消息M.

  12. MAC: requirements • 条件:攻击者知道MAC函数但不知道密钥 已知M和CK(M),构造M使得CK(M)=CK(M)在计算上不可行(计算上无碰撞) CK(M)均匀分布: 随机选择M和M, Pr[CK(M)= CK(M)]=2-|MAC| f是M的一个变换(例如对某些位取反),那么, Pr[CK(M)= CK(f(M))]=2-|MAC|

  13. MAC based on DES • ANSI标准(X9.17) • M=(X1,X2,…,Xt) M1=EK(X1) Mj+1=EK(Xj+1Mj), 1j<t MAC= Mt • DES不安全使得X9.17也不安全 • 加密算法受美国等的出口限制 • 该方法适用于其他加密算法  

  14. Hash Function简介  • MAC需要对全部数据进行加密 • MAC速度慢 • Hash是一种直接产生认证码的方法 • Hash函数: h=H(x), 要求: 可作用于任何尺寸数据且均产生定长输出 H(x)能够快速计算 单向性: 给定h,找到x使h=H(x)在计算上不可行 Weak Collision Resistence(WCR):给定x,找到yx使H(x)=H(y)在计算上不可行 Strong Collision Resistence(SCR): 找到yx使H(x)=H(y)在计算上不可行

  15. A Simple Hash Function • M=(X1,X2,…,Xt) • H(M)=X1X2…Xt • H不满足单向性,WCR和SCR中的任一个 • 即使对M以及H(M)都加密仍然是不安全的 • 假如使用CBC加密模式, 令Y0=IV, Xt+1=X1X2…Xt, 那么: Yi=EK(XiYi-1), 1it • Xi=DK(Yi)Yi-1, 1it • Xt+1=X1X2…Xt =(DK(Y1)Y0)(DK(Y2)Y1)… (DK(Yt-1)Yt) • 改变Yi的顺序不影响校验核(Xt+1)

  16. Block Chaining hash function • 用对称加密算法构造hash函数 • M=(M1,M2,…,Mt), H0=Initial value Hi=f(Mi,Hi-1), 例如Hi=EMi(Hi-1) hash: Ht • 速度慢,且许多这样的hash函数被证明不安全(与E的安全性无关) • 下面的四种可能是安全的: Hi=EHi-1(Mi)Mi Hi=EHi-1(Mi)MiHi-1 Hi=EHi-1(MiHi-1)Mi Hi=EHi-1(MiHi-1)MiHi-1 • 现在很少使用

  17. Birthday Attacks(1) • 所有hash函数都可被Birthday attack攻击 k个同龄人中至少有两个人是相同生日的概率 k个在[1,n]的随机数中至少两个数相等的概率. 两个在[1,n]的k个随机数集合有交集的概率. 问题: P(n,k) • 任何两个数都不相等的k-组合的个数是: n(n-1)…(n-k+1) • 全部k-组合的个数是: nn…n=nk P(n,k)=1-(n(n-1)…(n-k+1)/nk) =1-{1(1-1/n)…[1-(k-1)/n]}

  18. Birthday Attacks(2) • 令f(x)=1-x-e-x,则f(0)=0,f(x)=e-x-1<0, x>0 f(x)<0, x>0 1-x<e-x, x>0 P(n,k) = 1-{1(1-1/n)…[1-(k-1)/n]} > 1-e-1/ne-2/n…e-(k-1)/n=1-e-k(k-1)/2n P(n,k)>1-e-k(k-1)/2n • 若要使得P(n,k)0.5, 令1-e-k(k-1)/2n=0.5 k(k-1)=nln(4) k[nln(4)]1/2 1.18n1/2 • 若k1.183651/222.54, 则k个同龄人中有两个人是相同生日的概率不低于0.5 • 若k1.182m/22m/2, 则k个在[1,2m]的随机数中有两个数相等的概率不低于0.5

  19. Birthday Attacks(3) 问题: R(n,k) 两个在[1,n]的k个随机数集合X,Y有交集的概率. • 对xX, yY, Pr(x=y) = 1/n  Pr(xy) = 1-1/n  Pr(xY) = (1-1/n)kPr((XY)=) = ((1-1/n)k)k R(n,k) = Pr((XY)) = 1-(1-1/n)kk > 1-((e-1/n)kk) = 1-e- kk/n (∵1-x<e-x, x>0) • 若要使得R(n,k)0.5, 令1-e-kk/n=0.5 kk=n/ln(2) k[n/ln(2)]1/2 0.83n1/2 • 若k0.83n1/2,两个在[1,n]的k个随机数集合有交集的概率不小于为0.5

  20. Birthday Attacks: example • 经理要秘书按指定内容写一封信(64位hash签名) • 秘书按要求写一封信M,同时准备另一封信M • 秘书对M和M各做32处微小变化(保持原意),分别产生232个64位hash值 • 根据前面的结论,超过0.5的概率能找到一个M和一个M,它们的hash值相同 • 秘书提交M,经理审阅后产生64位hash值并对该值签名,返回给秘书 • 秘书用M替换M,再与经理数字签名一起发出 • Hash必须足够长(64  128  160)  

  21. hash函数通用模型  • 由Merkle于1989年提出 • Ron Rivest于1990年提出MD4 • 几乎被所有hash函数使用 • 具体做法: • 把原始消息M分成一些固定长度的块Yi • 最后一块padding并使其包含消息M长度 • 设定初始值CV0 • 压缩函数f, CVi=f(CVi-1,Yi-1) • 最后一个CVi为hash值

  22. hash函数模型图

  23. MD5简介  • Merkle于1989年提出hash function模型 • Ron Rivest于1990年提出MD4 • 1992年,MD5出现 • MD5把数据分成512-bit块 • MD5的hash值是128-bit • 在最近数年之前,MD5是最主要的hash算法 • 现行美国标准SHA-1以MD5的前生MD4为基础

  24. MD5: padding • Step 1: Padding M  M1 • |M1|  448 mod 512 • |M1| > |M|  如果|M|  448 mod 512,则|M1| = |M|+512 • Padding内容: 100…0 • Step 2: Append 64-bit length M1  M2 • 若|M| > 264,则仅取低64位 • 低字节在前 (little-endian) • |M2|为512的倍数: Y0,Y1,…,YL-1

  25. MD5: 示意图

  26. MD5: compression • Step 3: Initialize MD buffer (little-endian) A = 01 23 45 67 (0x67452301) B = 89 AB CD EF (0xEFCDAB89) C = FE DC BA 98 (0x98BADCFE) D = 76 54 32 10 (0x10325476) • Step 4: Compression CV0=IV CVi=HMD5(CVi-1,Yi) • Step 5: Output MD = CVL

  27. MD5 Step 4: 示意图

  28. MD5 Step 4: overview • Step 4: CV0=IV, CVi=HMD5(CVi-1,Yi) • (A0,B0,C0,D0)(A,B,C,D) • RoundOne(A,B,C,D,T[1…16],X[0…15]) • RoundTwo(A,B,C,D,T[17…32],X[0…15]) • RoundThree(A,B,C,D,T[33…48],X[0…15]) • RoundFour(A,B,C,D,T[49…64],X[0…15]) • (A,B,C,D)(A+A0,B+B0,C+C0,D+D0) • 512-bit块(X[…]为32-bit表示)在四个Round使用 • 每个Round包含16次循环,每次处理一个32-bit • T[j]= [sin(j)*232]的整数部分, 1  j  64

  29. MD5 Step 4: RoundOne • For(k = 0; k < 16; ++k) { AB + ((A+g1(B,C,D)+X[1(k)]+T[160+k+1]) <<< s1[k mod 4]) (A,B,C,D)  (A,B,C,D) >>>32 } • g1(B,C,D) = (B & C) | (B & D) • 1(k) = k, 0  k < 16 • s1[0…3] = [7,12,17,22]

  30. MD5 Step 4: RoundTwo • For(k = 0; k < 16; ++k) { AB + ((A+g2(B,C,D)+X[2(k)]+T[161+k+1]) <<< s2[k mod 4]) (A,B,C,D) (A,B,C,D) >>>32 } • g2(B,C,D) = (B & D) | (C & D) • 2(k) = (1+5k) mod 16, 0  k < 16 • s2[0…3] = [5,9,14,20]

  31. MD5 Step 4: RoundThree • For(k = 0; k < 16; ++k) { AB + ((A+g3(B,C,D)+X[3(k)]+T[162+k+1]) <<< s3[k mod 4]) (A,B,C,D)  (A,B,C,D) >>>32 } • g3(B,C,D) = B  C  D • 3(k) = (5+3k) mod 16, 0  k < 16 • s3[0…3] = [4,11,16,23]

  32. MD5 Step 4: RoundFour • For(k = 0; k < 16; ++k) { AB + ((A+g4(B,C,D)+X[4(k)]+T[163+k+1]) <<< s4[k mod 4]) (A,B,C,D)  (A,B,C,D) >>>32 } • g4(B,C,D) = C  (B | D) • 4(k) = 7k mod 16, 0  k < 16 • s4[0…3] = [6,10,15,21]

  33. MD5: 总结 • MD5使用little-endian • 生日攻击+64位可计算 128位hash值太短 • Dobbertin在1996年找到了两个不同的512-bit块,它们在MD5计算下产生相同的hash • 至今还没有真正找到两个不同的消息,它们的MD5的hash相等 • MD5不是足够安全的  

  34. Secure Hash Algorithm简介  • 1992年NIST制定了SHA(128位) • 1993年SHA成为标准 • 1994年修改产生SHA-1(160位) • 1995年SHA-1成为新的标准 • SHA-1要求输入消息长度<264 • SHA-1的摘要长度为160位 • 基础是MD4

  35. SHA-1: padding • 与MD5相同 • Step 1: Padding M  M1 • |M1|  448 mod 512 • |M1| > |M|  如果|M|  448 mod 512,则|M1| = |M|+512 • Padding内容: 100…0 • Step 2: Append 64-bit length M1  M2 • |M| < 264 • 高字节在前 (big-endian) • |M2|为512的倍数: Y0,Y1,…,YL-1

  36. SHA-1: compress • Step 3: Initialize MD buffer (big-endian) A = 67 45 23 01 (0x67452301) B = EF CD AB 89 (0xEFCDAB89) C = 98 BA DC FE (0x98BADCFE) D = 10 32 54 76 (0x10325476) E = C3 D2 E1 F0 (0xC3D2E1F0) • Step 4: Compression CV0=IV CVi=HSHA-1(CVi-1,Yi) • Step 5: Output MD = CVL

  37. SHA-1 step 4: 示意图

  38. SHA-1 step 4: overview • Step 4: CV0=IV, CVi=HSHA-1(CVi-1,Yi) (A0,B0,C0,D0,E0)(A,B,C,D,E), t  0 Round(A,B,C,D,E,K[t],W[t]) 0  t < 80 (A,B,C,D,E)(A+A0,B+B0,C+C0,D+D0,E+E0) • 整个Round包含80次循环,每次处理一个32-bit • W[t] = Yi[t] 0  t < 16 W[t] =(W[t-16]W[t-14]W[t-8]W[t-3])<<<1 16  t < 80 • 每组(16个)W[t]可由前一组W[t]直接计算

  39. SHA-1: compression function • Four rounds: 0  t < 80 E  E+f(t,B,C,D)+(A<<<5)+W[t]+K[t] B  B<<<30 (A,B,C,D,E)(A,B,C,D,E)>>>32 • f(t,B,C,D) = (B&C)|(B&D) 0  t < 20 K[t] = 230  sqrt(2) • f(t,B,C,D) = B  C  D 20  t < 40 K[t] = 230  sqrt(3) • f(t,B,C,D) = (B&C)|(B&D)|(C&D) 30  t < 60 K[t] = 230  sqrt(5) • f(t,B,C,D) = B  C  D 60  t < 80 K[t] = 230  sqrt(10)

  40. SHA-1总结 • SHA-1使用big-endian • 抵抗生日攻击: 160位hash值 • 没有发现两个不同的512-bit块,它们在SHA-1计算下产生相同的“hash” • 速度慢于MD5 • 安全性优于MD5  

  41. RIPEMD-160简介  • 欧洲RIPE项目的结果 • RIPEMD为128位 • 更新后成为RIPEMD-160 • 基础是MD5

  42. RIPEMD-160: padding • Step 1: Padding M  M1 • |M1|  448 mod 512 • |M1| > |M|  如果|M|  448 mod 512,则|M1| = |M|+512 • Padding内容: 100…0 • Step 2: Append 64-bit length M1  M2 • |M| < 264 • 低字节在前 (little-endian) • |M2|为512的倍数: Y0,Y1,…,YL-1

  43. RIPEMD-160: compression • Step 3: Initialize MD buffer (little-endian) A = 01 23 45 67 (0x67452301) B = 89 AB CD EF (0xEFCDAB89) C = FE DC BA 98 (0x98BADCFE) D = 76 54 32 10 (0x10325476) E = F0 E1 D2 C3 (0xC3D2E1F0) • Step 4: Compression CV0=IV CVi=HRIPE(CVi-1,Yi) • Step 5: Output MD = CVL

  44. RIPEMD-160 step 4: 示意图

  45. RIPEMD-160: compression function • (A0,B0,C0,D0,E0)(A,B,C,D,E) • Five rounds: 0  t < 16 A  ((A+f(B,C,D)+X[p[t]]+K)<<<s)+E C  C<<<10 (A,B,C,D,E)(A,B,C,D,E)>>>32 A((A+f(B,C,D)+X[p[t]]+K)<<<s)+E CC<<<10 (A,B,C,D,E)(A,B,C,D,E)>>>32 • (A,B,C,D,E)  (B0+C+D, C0+D+E, D0+E+A, E0+A+B, A0+B+C)

  46. RIPEMD-160 step 4: fi,,  • Function f1,f2,f3,f4,f5: • f1(B,C,D) = B  C  D • f2(B,C,D) = (B&C)|(!B&D) • f3(B,C,D) = (B|!C)  D • f4(B,C,D) = (B&C)|(C&!D) • f5(B,C,D) = B  (C|!D) • : 7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8 • : 5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12

  47. RIPEMD-160总结 • RIPEMD-160使用little-endian • 抵抗生日攻击: 160位hash值 • 没有发现两个不同的512-bit块,它们在RIPEMD-160计算下产生相同的“hash” • 速度略慢于SHA-1 • 安全性优于MD5 • 对密码分析的抵抗力好于SHA-1

  48. MD5,SHA-1,RIPEMD-160比较

  49. hash函数小结 • hash函数把变长信息映射到定长信息 • hash函数不具备可逆性 • hash函数速度较快 • hash函数与对称密钥加密算法有某种相似性 • 对hash函数的密码分析比对称密钥密码更困难 • hash函数可用于消息摘要 • hash函数可用于数字签名 

  50. HMAC简介  • MAC可用块加密算法产生 • ANSI标准(X9.17): M=(X1,X2,…,Xt) M1=EK(X1), Mj+1=EK(Xj+1Mj), 1j<t • 速度慢 • 加密算法出口受限制 • hash函数可用来构造MAC: HMAC为其中之一 • HMAC作为RFC2104并在SSL中使用

More Related