密码算法与应用基础
Download
1 / 91

密码算法与应用基础 - PowerPoint PPT Presentation


  • 126 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 密码算法与应用基础' - havyn


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
密码算法与应用基础

五、数字签名与hash函数

阳振坤

[email protected]

计算机科学技术研究所

http://www.icst.pku.edu.cn/cryptocourse/


内容提要

  • 信息安全引论

  • 对称密钥密码

  • 对称密钥密码应用基础

  • 公开密钥密码

  • 数字签名与hash函数

  • 公开密钥密码应用基础

  • 密钥交换与密钥管理


信息安全的基本内容

  • 保密性(Confidentiality)

  • 真实性(Authentication)

  • 完整性(Integrity)

  • 不可否认性(Nonrepudiation)

    ……


数字签名与hash函数

  • Message authentication

  • Hash functions 

  • Digital signature 

  • ElGamal公钥算法的实现 


Message authentication
Message Authentication

  • 针对消息真实性的攻击:

  • Masquerade(send & receive)

  • Content modification

  • Sequence modification

  • Timing modification(delay & replay)

  • 解决方法:

  • 信息加密 

  • Message Authentication Code(MAC): public function + secret key 


Hash functions
Hash functions

  • hash function简介 

  • hash函数通用模型 

  • MD5 

  • SHA-1 

  • RIPEMD-160 

  • HMAC 

  • hash函数小结 


信息加密: 对称密钥密码

  • 前提是通信双方有共享密钥

  • 一定程度的内容和来源提供的真实性

    C = EK(M)M = DK(C)

  • 攻击者可以修改内容而不被察觉

  • 攻击者可以伪造消息(内容与来源)而不被察觉

  • 使用有结构的信息

  • 使用纠错码或者校验码


信息加密: 公开密钥密码

  • 前提是知道对方的公钥

  • 用私钥对信息加密提供真实性(无保密性)

    C = EKR(M)M = DKU(C)

  • 用公钥对信息加密提供保密性(无真实性)

    C = EKU(M)M = DKR(C)

  • 攻击者可以修改内容而不被察觉

  • 攻击者可以伪造消息(内容与来源)而不被察觉

  • 使用有结构的信息

  • 使用纠错码或者校验码


通过加密得到信息真实性: 问题

  • 保密性与真实性是两个不同的概念

  • 根本上,信息加密提供的是保密性而非真实性

  • 加密代价大(公钥算法代价更大)

  • 某些信息只需要真实性,不需要保密性

  • 广播的信息难以使用加密(信息量大)

  • 可执行程序不适合使用加密

  • 网络管理信息等只需要真实性

  • BBS上的消息

  • 政府/权威部门的公告

  • ……


MAC介绍

  • MAC: 对一段消息产生认证码(秘密校验核)

  • 要求: 不同的消息产生不同的认证码

    认证码能够被验证

  • 使用公开算法和秘密密钥K对信息M产生秘密校验核(MAC):

    MAC(M) = CK(M)

  • 例子:对M产生一个校验核M,再用K对M加密

  • 发送者与接收者要有共享密钥K

  • 发送者生成MAC,接收者验证

  • MAC有固定长度

  • 强制破译: 2min(|MAC|,|Key|)-1


Mac example
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.


Mac requirements
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|


Mac based on des
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也不安全

  • 加密算法受美国等的出口限制

  • 该方法适用于其他加密算法


Hash function
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)在计算上不可行


A simple hash function
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)


Block chaining hash function
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

  • 现在很少使用


Birthday attacks 1
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]}


Birthday attacks 2
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


Birthday attacks 3
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


Birthday attacks example
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)


hash函数通用模型

  • 由Merkle于1989年提出

  • Ron Rivest于1990年提出MD4

  • 几乎被所有hash函数使用

  • 具体做法:

  • 把原始消息M分成一些固定长度的块Yi

  • 最后一块padding并使其包含消息M长度

  • 设定初始值CV0

  • 压缩函数f, CVi=f(CVi-1,Yi-1)

  • 最后一个CVi为hash值


hash函数模型图


MD5简介

  • Merkle于1989年提出hash function模型

  • Ron Rivest于1990年提出MD4

  • 1992年,MD5出现

  • MD5把数据分成512-bit块

  • MD5的hash值是128-bit

  • 在最近数年之前,MD5是最主要的hash算法

  • 现行美国标准SHA-1以MD5的前生MD4为基础


Md5 padding
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


MD5: 示意图


Md5 compression
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


Md5 step 4
MD5 Step 4: 示意图


Md5 step 4 overview
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


Md5 step 4 roundone
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]


Md5 step 4 roundtwo
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]


Md5 step 4 roundthree
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]


Md5 step 4 roundfour
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]


MD5: 总结

  • MD5使用little-endian

  • 生日攻击+64位可计算 128位hash值太短

  • Dobbertin在1996年找到了两个不同的512-bit块,它们在MD5计算下产生相同的hash

  • 至今还没有真正找到两个不同的消息,它们的MD5的hash相等

  • MD5不是足够安全的


Secure hash algorithm
Secure Hash Algorithm简介

  • 1992年NIST制定了SHA(128位)

  • 1993年SHA成为标准

  • 1994年修改产生SHA-1(160位)

  • 1995年SHA-1成为新的标准

  • SHA-1要求输入消息长度<264

  • SHA-1的摘要长度为160位

  • 基础是MD4


Sha 1 padding
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


Sha 1 compress
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


Sha 1 step 4
SHA-1 step 4: 示意图


Sha 1 step 4 overview
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]直接计算


Sha 1 compression function
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)


Sha 1
SHA-1总结

  • SHA-1使用big-endian

  • 抵抗生日攻击: 160位hash值

  • 没有发现两个不同的512-bit块,它们在SHA-1计算下产生相同的“hash”

  • 速度慢于MD5

  • 安全性优于MD5


Ripemd 160
RIPEMD-160简介

  • 欧洲RIPE项目的结果

  • RIPEMD为128位

  • 更新后成为RIPEMD-160

  • 基础是MD5


Ripemd 160 padding
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


Ripemd 160 compression
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



Ripemd 160 compression function
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)


Ripemd 160 step 4 f i
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


Ripemd 1601
RIPEMD-160总结

  • RIPEMD-160使用little-endian

  • 抵抗生日攻击: 160位hash值

  • 没有发现两个不同的512-bit块,它们在RIPEMD-160计算下产生相同的“hash”

  • 速度略慢于SHA-1

  • 安全性优于MD5

  • 对密码分析的抵抗力好于SHA-1



hash函数小结

  • hash函数把变长信息映射到定长信息

  • hash函数不具备可逆性

  • hash函数速度较快

  • hash函数与对称密钥加密算法有某种相似性

  • 对hash函数的密码分析比对称密钥密码更困难

  • hash函数可用于消息摘要

  • hash函数可用于数字签名


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中使用


HMAC示意图


HMAC的定义与特征

对密钥K左边补0以产生一个hash用块K+

K+每个字节与ipad(00110110)作XOR以产生Si

对(Si||M)进行hash

K+每个字节与opad(01011010)作XOR以产生So

HMAC=f[IV,So||f(IV,Si||M)]

  • HMAC特征:

  • 可直接使用各种hash算法

  • 可使用将来的更加安全和更加快速的hash算法

  • 保持原始hash算法的性能

  • 密钥的使用简单

  • 与hash函数有同等的安全性


hash函数小结

  • hash函数特点:

    可作用于任何尺寸数据且均产生定长输出

    能够快速计算

    单向性: 给定h,找到x使h=H(x)在计算上不可行

    Strong Collision Resistence(SCR): 找到yx使H(x)=H(y)在计算上不可行

  • hash应用

    消息认证(如HMAC)

    数字签名


数字签名

  • 传统签名的基本特点:

    能与被签的文件在物理上不可分割

    签名者不能否认自己的签名

    签名不能被伪造

    容易被验证

  • 数字签名是传统签名的数字化,基本要求:

    能与所签文件“绑定”

    签名者不能否认自己的签名

    签名不能被伪造

    容易被自动验证


数字签名分类

  • 以方式分

    direct digital signature

    arbitrated digital signature

  • 以安全性分

    无条件安全的数字签名

    计算上安全的数字签名

  • 以可签名次数分

    一次性的数字签名

    多次性的数字签名


RSA签名

  • A的公钥私钥对{KUa||KRa}

  • A对消息M签名: SA=EKRa(M)

  • 问题:

  • 速度慢

  • 信息量大

  • 第三方仲裁时必须暴露明文信息

  • 同态性漏洞: EKRa(xy)EKRa(x)EKRa(y) mod n

  • 先做摘要: HM = hash(M)

  • 再对HM签名SA=EKRa(HM)

  • hash函数的无碰撞性保证了签名的有效性


签名与加密

  • 签名提供真实性(authentication)

  • 加密提供保密性(confidentiality)

  • “签名+加密”提供“真实性+保密性”

  • 两种实现方式: (AB)

    先签名,后加密: EKUb{M||SigA(M)}

    先加密,后签名: {EKUb(M)||SigA(EKUb(M))}

  • 方式的问题:

  • 发生争议时,B需要向仲裁者提供自己的私钥

  • 安全漏洞: 攻击者E截获消息,把SigA(EKUb(M))换成SigE(EKUb(M)),让B以为该消息来自E

  • 保存信息多:除了M,SigA(EKUb(M)), 还要保存EKUb(M) (∵KUb可能过期)


Direct digital signature
Direct digital signature

  • AB: {M||SigA(M)} (RSA: {M||EKRa(M)})

  • 私钥的有效性: 发送者通过声称私钥丢失而否认自己签名的消息(例如发现签过的内容对他不利的时候)

  • 私钥丢失: 盗窃者可用偷来的私钥伪造签名


Arbitrated digital signature 1
Arbitrated digital signature(1)

  • 基本思想:仲裁者C保存双方的正确信息,A签名的消息经过仲裁者C后发给B

  • 方案一: 使用对称密钥

    AC: {M||EKac(IDA,H(M))}

    A对消息M产生摘要H(M),把摘要与A的身份一起用A与仲裁者的共享密钥加密,同消息M一起给仲裁者(需要时M也可被加密)

    CB: {EKcb(IDA||M||EKac(IDA,H(M))||T)}

    仲裁者解密接到的信息,检查A的身份以及消息M的摘要,验证无误后加上时间戳发给B,所有内容用它与B的共享密钥加密

  • 问题: 仲裁者知道A,B通信的内容


Arbitrated digital signature 2
Arbitrated digital signature(2)

  • 方案二: 使用对称密钥

     AC: {EKab(M)||EKAC(IDA,H(EKab(M)))}

    A对消息M=EKab(M)产生摘要H(M),把摘要与A的身份一起用A与仲裁者的共享密钥加密,同消息M一起给仲裁者,其中EKab是A和B的共享密钥

     CB:

    {EKcb(IDA||EKab(M) ||EKac(IDA,H(EKab(M)))||T)}

    仲裁者解密接到的信息,检查A的身份以及消息M的摘要,验证无误后加上时间戳发给B,所有内容用它与B的共享密钥加密

  • 仲裁者与A合伙,可使A抵赖发送的消息

  • 仲裁者与B合伙,可使B抵赖或伪造接收的消息


Arbitrated digital signature 3
Arbitrated digital signature(3)

  • 方案三: 使用公钥密码

    AC: EKUc{EKRa(IDA)||EKUb[M,EKRa(H(M))]}

    A对消息产生摘要H(M)并对摘要签名,与M一起用B的公钥加密,再对A自己的身份签名,然后一起用仲裁者的公钥加密后传给仲裁者

    CB: EKRc{EKRa(IDA)||EKUb[M,EKRa(H(M))]||T}

    仲裁者解密接到的信息,查看A的公钥的有效性,加上时间戳并用自己的私钥签名后发给B

  • 即使仲裁者与A或B合伙,也只能使时间戳失效

  • 仲裁者或者任何其他人不知道A,B通信的内容

  • 仲裁者的私钥泄密不会导致信息的泄漏

  • EKRa(IDA)用来保证A的公钥的有效性与一致性


Elgamal
ElGamal型数字签名简介

  • ElGamal于1985年提出

  • 既可用于加密,也可用于签名

  • 两种情形: p是大素数

    q=p或者q是p-1的大素因子

  • DSS(数字签名标准)是后者的一种变形


Elgamal q p 1
ElGamal型数字签名q=p(1)

  • 随机选择1<<p使是p的原根(即:使j1 mod p的最小正整数j=p-1),选择整数a, 记=a mod p

    Key={p,q,,,a}

    保密a,公开其它.

  • 签名定义: 随机选择整数k, SigKey(x)=(,),

    其中=k mod p, f,g,h是公开的函数, 满足:

    kf(x,,)+ag(x,,)+h(x,,)  0 mod p-1

  • 签名验证:f(x,,)  g(x,,)  h(x,,)  1 mod p

  • 证明: fgh kfagh (∵k,a )

     kf+ag+h  1 mod p (kf+ag+h  0 mod p-1)

  • f,g,h都是一些很简单的函数

  • 要容易计算


Elgamal1
ElGamal数字签名

  • f(x,,)=, g(x,,)=, h(x,,)=-x

    kf(x,,)+ag(x,,)+h(x,,)  0 mod p-1 

    k+a-x  0 mod p-1 =(x-a)k-1 mod p-1

  • 签名算法: SigKey(x)=(,), 其中

     = kmod p,  = (x-a)k-1 mod p-1

  • 签名验证: fgh  1 mod p 

    -x  1 mod p 

      x mod p


Elgamal 1
ElGamal数字签名安全性分析(1)

  • 安全性分析: 攻击者想伪造消息x的签名

  • 签名算法: SigKey(x)=(,), 其中

     = kmod p,  = (x-a)k-1 mod p-1

    选择(即选择k),然后找

    攻击者要得到,则要从=a mod p(或  x mod p)中获得a(或),即求离散对数

    选择,然后找

    则要解关于的方程:   x mod p

  • 不能泄漏k: SigKey(x)=(,);   x mod p

    ∵=(x-a)k-1 mod p-1  a=(x-k)-1 mod p-1

    ∴泄漏k意味着泄漏了a.


Elgamal 2
ElGamal数字签名安全性分析(2)

  • 不能用同一个k签两个不同的消息

    由于 = kmod p,若同一个k签了两个消息x1,x2,则得到(,1)和(,2),

    1  x1 mod p 且 2  x2 mod p

    两边相除,得到: 1-2  x1-x2 mod p

    注意到 = kmod p,因此 k(1-2)  x1-x2 mod p 

    k(1-2)  (x1-x2) mod p-1 (∵是原根) 

    整数s,使得(x1-x2) = k(1-2) + s(p-1)

    令d=gcd(1-2,p-1),则d是容易计算的且d|(x1-x2)

    令=(1-2)/d, x=(x1-x2)/d, p=(p-1)/d,则

    x = k + sp


Elgamal 3
ElGamal数字签名安全性分析(3)

x = k + sp 

x  k mod p 

k  x()-1 mod p (∵与p互素)

由于0<k<p,所以k的可能值只有:

x()-1 + ip, i=0,1,…,d-1

通过等式 = k mod p可以找出k.


Elgamal q p 11
ElGamal型数字签名q|(p-1)

  • 随机选择1<<p使的阶为q(即:使j1 mod p的最小正整数j=q),选择整数a, 记=a mod p

    Key={p,q,,,a}

    保密a,公开其它.

  • 签名定义: 随机选择整数k, SigKey(x)=(,),

    其中=k mod p, f,g,h是公开函数, 满足:

    kf(x,,)+ag(x,,)+h(x,,)  0 mod q

  • 签名验证:f(x,,)  g(x,,)  h(x,,)  1 mod p

  • 证明: fgh kfagh (∵k,a )

     kf+ag+h  1 mod p (kf+ag+h  0 mod q)

  • f,g,h都是一些很简单的函数

  • 要容易计算


数字签名标准DSS原理

  • 数字签名标准DSS: 选择f(x,,)=, g(x,,)=-, h(x,,)=-H(x), H(x)是hash函数

  • kf(x,,)+ag(x,,)+h(x,,)  0 mod q 

    k-a-H(x)  0 mod q =(H(x)+a)k-1 mod q

  • 签名算法: SigKey(x)=(,), 其中

     = (k mod p) mod q, =(H(x)+a)k-1mod q

  • 签名验证: (e1e2 mod p)   mod q, 其中

    e1=H(x)-1 mod q, e2= -1 mod q

  • 证明: 令=-1 mod q, 则

    e1e2 mod p= H(x)a mod p (∵a mod p)

    = (H(x)+a) mod p(k-a-H(x)  0 mod q)

    = k mod p = k mod p


DSS的特点

  • 签名算法: SigKey(x)=(,), 其中

     = (k mod p) mod q, =(H(x)+a)k-1mod q

  • 签名验证: e1e2   mod q, 其中

    e1=H(x)-1 mod q, e2= -1 mod q

  • -1 mod q要存在    0 mod q

  • 若q~2160,则Pr(  0 mod q) = 1/q ~ 2-160,非常小的概率.如果发生,接收者可拒绝该签名.

  • 若p~2512, q~2160,则原始的ElGamal签名的(,)需要两个512位,即1024位,而DSS只需要两个160位,即320位

  • DSS的签名比验证快

  • DSS不能用于加密或者密钥分配


Lamport
一次性数字签名: Lamport方案

  • 特点: 只能签一次(一条消息),但可验证多次

  • Lamport方案: f是一个单向函数,

    要签名的信息有k位:(x1,x2,…,xk)

    随机选择2k个元素yi,j, 1ik,j=0,1,令zi,j=f(yi,j),

    密钥K={yi,j,zi,j|1ik,j=0,1},公开{zi,j},保密{yi,j}

  • 签名定义:

    SigK(x1,x2,…,xk)=(y1,x1, y2,x2,…, yk,xk)=(a1,a2,…,ak)

  • 验证定义:

    VerK(x1,x2,…,xk,a1,a2,…,ak)=T  f(ai)=zi,xi, 1ik

  • Lamport方案与单向函数有同样的安全性


Lamport 2
Lamport方案(2)

  • 单向函数f的构造

    离散对数: f(x)=x mod p, 是素数p的原根

    对称密码: f(x)=Ex(a), E是加密算法,a是常数

  • 签名不能被伪造:

  • f的单向性使得攻击者无法从{zi,j}获得{yi,j}

  • 签名会泄漏一半{yi,j},从而使得签名是一次性的

  • Lamport方案缺陷:签名信息比较长.

    离散对数:p是1024位,则签名信息扩大1024倍

    对称密码:密钥是128位,则签名信息扩大128倍

  • 改进方案之一: Bos-Chaum


Bos chaum
Bos-Chaum方案: 描述

选择整数n使得: C(2n,n)  2k,

:{0,1}k{全部不超过2n的n个正整数集合}

随机选择2n个元素yi, 1i2n,令zi=f(yi),

密钥K={yi,zi|1i2n},公开{zi},保密{yi}

  • 签名定义:

    SigK(x1,x2,…,xk)={yi|i(x1,x2,…,xk)}=(a1,a2,…,an)

  • 验证定义:

    VerK(x1,x2,…,xk,a1,a2,…,an)=T 

    {f(ai)|1in}={zi|i(x1,x2,…,xk)}

  • 签名不能被伪造:

  • f的单向性使得攻击者无法从{zi,j}获得{yi,j}

  • 恰含n个正整数的集合两两互不包含


Bos chaum1
Bos-Chaum方案: 分析

  • 需选择整数n使得: C(2n,n)  2k

    Stirling公式: n!=(2n)1/2(n/e)ne(n)/12n, 0<(n)<1

    C(2n,n)=(2n)!/(n!)2

    =(22n)1/2/(2n)(2n/e)2n/(n/e)2ne((2n)-4(n))/24n

    = 22n/(n)1/2e((2n)-2(n))/12n

    k  2n-(ln(n)1/2)+((2n)-4(n))/24n

  • Bos-Chaum方案的密钥长度为Lamport方案的一半略多(如k=1024时,可取2n=1024+4  n=514)

  • Bos-Chaum方案的签名信息为Lamport方案的一半略多


Bos chaum2
Bos-Chaum方案: 构造

  • :{0,1}k{全部不超过2n的n个正整数集合}

  • 核心思想: 对n-元素集合排序

    x=xi2i-1, ={}, t = 2n, s = n

    while(t > 0) {

    t = t – 1

    if(x > C(t,s)) {

    x = x-C(t,s)

    s = s-1

    ={t+1}

    }

    }


群签名方案(1)

  • 群中各个成员以群的名义匿名地签发消息.

    只有群成员能代表所在的群签名

    接收者能验证签名所在的群,但不知道签名者

    需要时,可借助于群成员或者KDC找到签名者

  • 应用: 投标

  • 方案: 是素数p的一个原根, 每个群成员有一个秘密密钥si,对应的公钥是si,KDC知道每个成员的公钥

  • KDC为每个成员随机选择一个盲因子ri,公开(si)ri.每个成员使用siri作为秘密密钥,用ElGamal型数字签名.


群签名方案(2)

  • 接收者用收到的公钥表验证签名,某一个通过验证即说明群签名的合法性

  • 盲因子ri使得接收者无法知道具体的签名者

  • 发生争端时,KDC可进行仲裁

  • KDC无法伪造用户的签名

  • 盲因子ri泄漏不会威胁用户私钥si

  • 盲因子ri可定期更换

  • 新成员加入需改变所有成员的盲因子,否则接收者可以区别新旧成员


盲签名方案介绍

  • 盲签名要求:

    消息内容对签名者不可见

    签名被接收者泄漏后,签名者无法追踪签名

  • 应用: 电子货币,电子选举,特工的数字护照

  • 盲签名过程:

    消息盲变换签名接收者逆盲变换


RSA盲签名方案

  • 签名者B

    公钥KUb,私钥KRb,f是单向函数(如hash函数)

  • A需要B为他盲签消息x

    盲变换: A随机选择k,计算x=f(x)EKUb(k) mod n, 把x给B

    B签名: B对x进行签名得到y=SigB(x)=EKRb(x),把y给A

    逆盲变换: A计算y=y/k mod n = EKRb(f(x)EKUb(k))/k mod n = EKRb(f(x)) mod n

  • 随机数k使得签名者无法知道签名的内容

  • f的单向性增加了安全性


离散对数盲签名方案(1)

  • 签名者B: 公钥KUb = {p,q,,},私钥KRb = {p,q,,,a}, p,q是素数,q|(p-1),是的阶为q, =a mod p

  • A需要B为他盲签消息m

    BA: r=k mod p; k是随机数

    AB: m=umrs-1 mod q;s=ruv mod p, u,v是随机数

    BA: w=(ar+km) mod q

    A计算: t=(wsr-1+vm) mod q

  • B对m的签名是(s,t),验证方程是t=ssm mod p


离散对数盲签名方案(2)

  • 签名者B: 是的阶为q, =a mod p, r=k mod p

  • m=umrs-1 mod q, w=(ar+km) mod q

  • s=ruv mod p, t=(wsr-1+vm) mod q

  • 验证方程是t=ssm mod p

  • t=((ar+kumrs-1)sr-1+vm) mod q

    =(as+kum+vm) mod q=(as+(ku+v)m) mod q

  • s=ku+v mod p

  • ssm mod p=as(ku+v)m mod p=as+(ku+v)m mod p

  • t=ssm mod p


数字签名小结(1)

  • 基本要求:

    能与所签文件“绑定”; 自己的签名不能否认

    签名不能被伪造; 容易被自动验证

  • 分类:

  • direct vs arbitrated

  • 无条件安全 vs 计算上安全

  • 一次性 vs 多次性

  • 签名与加密:

  • 先签名,后加密: EKUb{M||SigA(M)}

  • {EKUb(M)||SigA(EKUb(M))}:安全性差,仲裁需私钥

  • RSA数字签名: EKRa(M)  EKRa(H(M))

  • 速度+抵抗同态性漏洞+仲裁时不暴露明文


2 elgamal p q
数字签名小结(2): ElGamal型p=q

  • ElGamal型数字签名(q=p): p是大素数,是p的原根, a是整数, =a mod p, Key={p,q,,,a},保密a, 公开其它.

  • 签名定义: SigKey(x)=(,),

    k是随机数, f,g,h是(x,,)的函数,=k mod p, 满足: kf+ag+h  0 mod p-1

  • 签名验证:fgh  1 mod p

  • 要容易计算

  • 不能泄漏k

  • 不能用同一个k签两个不同的消息


3 elgamal q p 1
数字签名小结(3) : ElGamal型q|(p-1)

  • ElGamal型数字签名(q|p(p-1)): p是大素数,q是素数且q|(p-1),的阶为q, a是整数, =a mod p, Key={p,q,,,a},保密a, 公开其它.

  • 签名定义: SigKey(x)=(,),

    k是随机数, f,g,h是(x,,)的函数,=k mod p, 满足: kf+ag+h  0 mod q

  • 签名验证:fgh  1 mod p

  • 要容易计算

  • 不能泄漏k

  • 不能用同一个k签两个不同的消息


4 dss
数字签名小结(4): DSS

  • 数字签名标准DSS: f=, g=-, h=-H(x)

  • 签名: SigKey(x)=(,), 其中

     = (k mod p) mod q, =(H(x)+a)k-1mod q

  • 验证: (e1e2 mod p)   mod q, 其中

    e1=H(x)-1 mod q, e2= -1 mod q

  • 标准ElGamal签名尺寸: 2sizeof(p)

  • DSS签名尺寸比较小: 2sizeof(q)

  • DSS不能用于加密或者密钥分配


数字签名小结(4): 其它签名方案

  • 一次性签名算法: 只能签一次

  • Lamport方案

  • Bos-Chaum方案

  • 群签名方案: 匿名个体代表群体签名

  • 盲签名要求:

    消息内容对签名者不可见

    签名被接收者泄漏后,签名者无法追踪签名

  • 消息盲变换签名接收者逆盲变换

  • RSA盲签名方案

  • 离散对数盲签名方案


Elgamal2
ElGamal公钥算法的实现

  • 类型一: q=p

  • 随机选择1<<p使是p的原根(即:使j1 mod p的最小正整数j=p-1),选择整数a, 记=a mod p,

    Key={p,q,,,a} 保密a,公开其它.

  • 核心问题: 找p的原根

  • 类型二: q|(p-1)

  • 随机选择1<<p使的阶是q(即:使j1 mod p的最小正整数j=q),选择整数a, 记=a mod p,

    Key={p,q,,,a} 保密a,公开其它.

  • 核心问题: 找寻找阶为q的元素


安全素数的原根

  • 判断原根的充分必要条件: 假如p是安全素数,任取正整数x: 0<x<p,

    x是p的原根 x2 1 mod p 并且x(p-1)/2 1 mod p

  • 证明: 若x是原根,则j: 0<j<p-1, xj 1 mod p 

    x2 1 mod p 并且x(p-1)/2 1 mod p

    反之, 如果x2 1 mod p 并且x(p-1)/2 1 mod p

    假如j: 0<j<p-1,使得xj 1 mod p

    令d=gcd(p-1,j),则整数u,v,使得d=u(p-1)+vj 

    xd = xu(p-1)+vj xu(p-1) xvj 1 modp

    由于d|(p-1)且d<p-1,而(p-1)/2是素数,所以d=2或者d=(p-1)/2,与假设矛盾.


原根的个数

  • 结论: 假定x是p的原根,则对任意正整数j,只要gcd(p-1,j)=1,则xj也是p的原根.

  • 证明: 反证法.假如xj不是p的原根,那么存在正整数k<p-1,使得 (xj)k  1 mod p

    令d=gcd(p-1,jk), 由于gcd(p-1,j)=1 

    d=gcd(p-1,k)<p-1

    d=gcd(p-1,jk)  整数u,v,使得d=u(p-1)+vjk 

    xd = xu(p-1)+vjk xu(p-1) xvjk 1 modp

    注意到d<p-1,这与x是p的原根相矛盾.

  • 推论: p的原根个数为(p-1),是Euler函数.


阶为q的元素

  • 类型二: q|(p-1)

  • 结论: 若x是p的任一原根,则元素x(p-1)/q的阶为q.

  • 证明: 令y=x(p-1)/q

    yq = (x(p-1)/q)q = xp-1  1 mod p

    正整数j<q, yj = (x(p-1)/q)j = xj(p-1)/q 1 mod p

    (∵(j(p-1)/q) < (p-1)且x是p的原根)

    结论得证.


关于作业

  • 现在已经不再接受第一次作业

  • 下周三后不再接受第二次作业

  • 第三次作业: 实现RSA(素数生成,加密,签名),12月5日前完成

    Email地址:

    [email protected]

    网址:

    http://www.icst.pku.edu.cn/cryptocourse/

    2001.11.07


ad