网安笔记06 数字签名基本概念

文章详细介绍了数字签名的基本概念,包括RSA、Rabin、ElGamal等签名体制的工作原理和安全性。数字签名用于确认消息来源的真实性,防止消息被篡改,并提供不可否认性。同时,对比了消息认证和公钥加密的区别,并讨论了签名的速度和安全性要求。

数字签名基本概念

  1. R1:receiver确认、证实sender的签名,这个签名不能被伪造
  2. S:sender发送出签名的教习给receiver,不能否认他签发的消息
  3. R2:receiver堆收到的签名消息不能否认,收报认证
  4. T:第三方可以确认手法收发双方之间的消息传输,但不可伪造

与消息认证的区别:

消息认证:只用于防范第三者破坏,未验证sender身份(RS双方没有利害冲突)

  • receiver验证sender身份是否被篡改
  • receiver验证消息是否被篡改

数字签名:(RS双方存在利害冲突)

  • 数字签名确定消息来源的真实性
  • 数字签名保证实体身份的真实性
  • 不可否认

与公钥加密的区别

公钥

  • A用B公开密钥加密data后,发送data(已加密)给B
  • B用私钥堆密文解密得到明文

签名

  • A用私钥加密消息m签名,将m与签名发送给B
  • B 收到A签名,使用A公钥验证签名有效性
  • 签名消息可能要多年以后验证
  • 签名可能要多次严正
  • 签名安全性、防伪造要求高
  • 签名速度要比验证速度快

分类

消息是否被压缩分类:

  1. 对整体消息签名
  2. 对压缩的消息签名

按消息/签名对应关系划分

  1. 确定性deterministic数字签名:消息与签名一一对应。对同意消息签名永不变化 —— RSA/Rabin算法
  2. 随机化 randomized

构成

  1. 签名算法 signature algorithm
  2. 验证算法 verification algorithm

安全性约定: 签名算法、密钥是秘密的,只有签名人掌握;验证算法公开

签名

(M,S,K,V)(M,S,K,V)(M,S,K,V)

  • M 明文空间
  • S 签名集合
  • K 密钥空间
  • V 验证函数的值域, 真、伪组成

∀k∈K,m∈M签名算法:s=Sigk(m)∈S验证算法:Verl(s,m)∈{true,false}\forall k\in K, m\in M\\签名算法:s = Sig_k(m)\in S \\ 验证算法: Ver_l(s,m)\in\{true, false\}kK,mM签名算法:s=Sigk(m)S验证算法:Verl(s,m){true,false}

安全性:m和s很难推出签名者私钥kkk,很难伪造信息m′m'm使得Verk(s,m′)=trueVer_k(s,m') = trueVerk(s,m)=true

签名体制

RSA数字签名

参数同之前讲过的RSA

n=p∗qn = p * qn=pq

选e计算出d让 ed≡1 mod ϕ(n)ed \equiv 1\ mod\ \phi(n)ed1 mod ϕ(n)

n和e公开,p,q,d保密

RSA密码:c=mec = m ^ ec=me
∀m∈Zn,签名s=Sigk(m)=md mod n\forall m \in Z_n, 签名s = Sig_k(m) = m^d\ mod\ nmZn,签名s=Sigk(m)=md mod n

验证真实性:签名者才知道私钥d,其他人难以伪造
m≡se mod nm\equiv s^e\ mod \ nmse mod n

Rabin

N=pqN = pqN=pq。 p和q都是大质数
m,s∈QRp∩QRqm,s\in QR_p\cap QR_qm,sQRpQRq QR是二次剩余集

pq密钥,N公钥

签名过程

  • 消息m,0<m<N,m∈QRp∩QRq消息m, 0<m<N,m\in QR_p\cap QR_q消息m,0<m<N,mQRpQRq
  • s=Sigk(m)=m mod (p×q)s = Sig_k(m) = \sqrt{m}\ mod\ (p\times q)s=Sigk(m)=m mod (p×q)

验证过程

m≡s2 mod Nm\equiv s^2\ mod \ Nms2 mod N

二次剩余集

n为正整数,整数a满足
gcd(a,n)=1gcd(a,n) = 1gcd(a,n)=1
x2=a mod n有解x^2=a\ mod \ n有解x2=a mod n有解
a为mod n的平方剩余

如选n=7
x2=1 mod 7x=1/6x^2=1\ mod \ 7\quad x = 1/6x2=1 mod 7x=1/6
x2=2 mod 7x=3/4x^2=2\ mod \ 7\quad x = 3/4x2=2 mod 7x=3/4
x2=3 mod 7无解x^2=3\ mod \ 7\quad 无解x2=3 mod 7无解
x2=4 mod 7x=2/5x^2=4\ mod \ 7\quad x = 2/5x2=4 mod 7x=2/5
x2=5 mod 7无解x^2=5\ mod \ 7\quad 无解x2=5 mod 7无解
x2=6 mod 7无解x^2=6\ mod \ 7\quad 无解x2=6 mod 7无解
1, 2, 4是 mod 7的二次剩余,且每个二次剩余有两个平方根

3, 5, 6是 mod 7的非二次剩余

ELGamal

参数

  • p 大素数,在ZpZ_pZp中求解离散对数十分困难
  • g 群Zp∗Z_p^*Zp的一个生成元或本原元素
  • M 消息空间 Zp∗Z_p^*Zp
  • S 签名空间 Zp−1Z_{p-1}Zp1
  • x 用户密钥 x∈Zp∗x\in Z_p^*xZp
  • y 用户公钥 y≡gx mod py\equiv g^x\ mod \ pygx mod p

p,g,y公钥,x密钥

签名过程

  1. 选择随机数k∈Zp∗m∈Mk\in Z_p^*\quad m\in MkZpmM
  2. 得到H(m)H(m)H(m)
  3. 得到r=gk mod pr = g^k\ mod\ pr=gk mod p
  4. 得到s=[H(m)−xr]k−1 mod (p−1)s = [H(m) - xr]k^{-1} \ mod\ (p-1)s=[H(m)xr]k1 mod (p1)
  5. 得到签名Sigk(m)=(r,s),m与(r,s)Sig_k(m)=(r,s), m与(r,s)Sigk(m)=(r,s),m(r,s)发给对方

验证过程

  1. 得到m与(r,s)m与(r,s)m(r,s)
  2. 计算H(m)H(m)H(m)
  3. 验证
    Verk(H(m),(r,s))==true⇔yrrs=gH(m) mod pVer_k(H(m), (r,s)) == true \Leftrightarrow y^rr^s=g^{H(m)}\ mod\ pVerk(H(m),(r,s))==trueyrrs=gH(m) mod p
    (rx+sk)=H(m) mod (p−1)(rx+sk)=H(m)\ mod\ (p-1)(rx+sk)=H(m) mod (p1)
    得到
    yrrs=gH(m) mod py^rr^s=g^{H(m)}\ mod\ pyrrs=gH(m) mod p

Example

  1. p = 467, g = 2, x = 127
  2. 得到y=gx=2127=132 mod 467y = g^x = 2^{127}=132 \ mod\ 467y=gx=2127=132 mod 467
  3. 得到m的哈希值H(m)=100H(m)=100H(m)=100,选随机数k = 213 (注意213和466互质,且213−1=431 mod 466213^{-1} = 431\ mod \ 4662131=431 mod 466)
  4. r=2213=29 mod 467r = 2^{213}=29\ mod\ 467r=2213=29 mod 467 s=(100−127×29)×431=51 mod 466s = (100-127\times 29)\times 431 = 51\ mod\ 466s=(100127×29)×431=51 mod 466
  5. 验证:收信人计算出H(m)=100H(m) = 100H(m)=100,132292951=189 mod 467132^{29}29^{51}=189\ mod\ 467132292951=189 mod 467, 2100=189 mod 4672^{100}=189\ mod\ 4672100=189 mod 467

安全性

不知道<消息,签名>对的时候,伪造签名 近似 求离散对数

Attacker若掌握同一随机数k下两个消息m1,m2m_1,m_2m1,m2的合法签名(r1,s1),(r2,s2)(r_1,s_1),(r_2,s_2)(r1,s1),(r2,s2)会构造如下方程
m1=r1x+s1km2=r2x+s2km_1=r_1x+s_1k\\ m_2=r_2x+s_2km1=r1x+s1km2=r2x+s2k
攻击者解此房产可求出x和k

确保安全性需要选签名的时候选择不同随机数k

Schnorr签名体制

参数

  • q,p 大素数,q|p-1, 在ZpZ_pZp中求解离散对数 十分困难
  • g ZpZ_pZp中乘群Zp∗Z_p^*Zp的一个元素,满足gq=1 mod pg^q = 1\ mod\ pgq=1 mod p
  • M 消息空间, Zp∗Z_p^*Zp
  • S 签名空间 Zp∗×Zp−1Z_p^*\times Z_{p-1}Zp×Zp1
  • x 用户密钥 1<x<q1 < x < q1<x<q
  • y 用户公钥y≡gx mod py\equiv g^x\ mod \ pygx mod p

p,q,g,y公钥,x密钥

过程

  1. user 使用随机数 k∈Zq,m∈Mk\in Z_q, m\in MkZq,mM
  2. 计算w=gk mod pw=g^k\ mod\ pw=gk mod p
  3. 计算r=H(w∣∣m)r = H(w||m)r=H(w∣∣m) ||表示拼接
  4. 计算s=k+xr mod ps = k+xr\ mod\ ps=k+xr mod p
  5. 签名 Sigk(m)=(r,s)Sig_k(m)=(r,s)Sigk(m)=(r,s)作为签名,将m和(r,s)(r,s)(r,s)送给对方

验证

  1. 收到消息mmm和签名(r,s)(r,s)(r,s)
  2. 计算H(m)H(m)H(m)
  3. 计算w′=gsy−r mod pw' = g^s y^{-r}\ mod\ pw=gsyr mod p
  4. 计算H(w′∣∣m)H(w'||m)H(w∣∣m)
  5. 验证H(w′∣∣m)=r,即Ver(y,(e,s),m)=trueH(w'||m) = r, 即Ver(y,(e,s),m) = trueH(w∣∣m)=r,Ver(y,(e,s),m)=true

安全性

Schnorr与ElGamal区别

  1. E体制中,g是ZpZ_pZp本原元素;S体制中,g是Zp∗Z_p^*Zp中子集Zq∗Z_q^*Zq的本原元,它不是Zp∗的本原元Z_p^*的本原元Zp的本原元
  2. S的签名比E短,由∣q∣|q|q∣H(m)∣|H(m)|H(m)决定
  3. w=gk mod pw = g^k\ mod\ pw=gk mod p可以预先计算,签名要一次乘法、一次加法,签名速度快,适合智能卡应用
  4. S签名短,安全性逊于E签名

DSS签名体制

DSA事故DSS签名标准中采用的数字签名算法

参数

  • p 大素数,2L−1<p<2L2^L-1<p<2^L2L1<p<2L, 512≤L≤1024512\le L \le 1024512L1024
  • q:(p-1)的素因子,且2159<q<21602^{159}<q<2^{160}2159<q<2160 字长160b
  • g g=h(p−1)/q mod pg=h^{(p-1)/q}\ mod\ pg=h(p1)/q mod p
  • x 用户私钥 1<x<q1 < x < q1<x<q
  • y 用户公钥 y=gx mod py = g^x\ mod\ py=gx mod p
    p,q,g,y公钥,x是私钥

签名

  1. user使用随机数
  2. 计算H(m)H(m)H(m)
  3. 计算r=(gk mod p) mod qr = (g^k\ mod\ p)\ mod\ qr=(gk mod p) mod q
  4. 计算s=[k−1(H(m)+xr)] mod qs = [k^{-1}(H(m)+xr)]\ mod\ qs=[k1(H(m)+xr)] mod q
  5. 签名Sigk(m)=(r,s)Sig_k(m) = (r,s)Sigk(m)=(r,s) 将m和(r,s)送给对方

验证

  1. 收到m与(r,s)
  2. H(m)H(m)H(m)
  3. w=s−1 mod qw=s^{-1}\ mod\ qw=s1 mod q
  4. u1=[H(m)w] mod qu_1 = [H(m)w]\ mod\ qu1=[H(m)w] mod q
  5. u2=rw mod qu_2 = rw\ mod\ qu2=rw mod q
  6. v=[(gu1yu2) mod p] mod qv = [(g^{u1}y^{u2})\ mod\ p]\ mod\ qv=[(gu1yu2) mod p] mod q
  7. 验证v=rv = rv=r

在这里插入图片描述

在这里插入图片描述

ESIGN

  1. n, n=p2qn = p^2qn=p2q大合数,公钥
  2. p,q 两个大素数
  3. M 消息空间
  4. S 命名空间
  5. k 安全参数

签名

  1. 选择随机数 $ 0<r<pq $
  2. 计算H(M)H(M)H(M)
  3. 计算w=大于等于[(H(M)−rk) mod n]/pqw = 大于等于[(H(M) - r^k)\ mod\ n]/ pqw=大于等于[(H(M)rk) mod n]/pq的最小整数
  4. 计算s=r+[(w/krk−1 mod p)]×pqs = r + [(w/kr^{k-1}\ mod\ p)]\times pqs=r+[(w/krk1 mod p)]×pq
  5. Sigk(M,k)=sSig^{k}(M,k)=sSigk(M,k)=s作为签名,M和s送给对方

验证

  1. 收到M和s
  2. 计算H(M)H(M)H(M)
  3. 计算srk mod ps^{rk}\ mod\ psrk mod p
  4. 计算 a,它是大于等于2n/32n/32n/3最小整数
  5. 验证 Verk(H(M),s)=true⇔H(M)≤sk∧sk mod n<H(M)+2aVer_k(H(M),s) = true \Leftrightarrow H(M)\le s^k \land s^k\ mod\ n < H(M) + 2^aVerk(H(M),s)=trueH(M)sksk mod n<H(M)+2a

算法可以用预计算提高签名速度
发送方预计算:u=rk mod nv=1/(krk−1) mod pu = r^k\ mod\ n\quad v = 1/(kr^{k-1})\ mod\ pu=rk mod nv=1/(krk1) mod p

计算w:w = 大于等于[H(M)−u mod n]/pq[H(M)-u\ mod\ n]/pq[H(M)u mod n]/pq的最小整数


计算s s=r+(wv mod p)×pqs = r + (wv\ mod\ p)\times pqs=r+(wv mod p)×pq

通过预先计算,让速度提高十倍。K = 2,3会被破解,建议k = 8,16,32,64,128,256,1024

Okamoto

  1. p,q: 大素数,p至少512bit
  2. q: (p-1)的素因子,q长约140bit
  3. g1,g2:全局公钥,与q同长
  4. s1,s2:秘钥,与q同长
  5. M: 消息空间 M∈ZP∗M\in Z^*_{P}MZP
  6. S: 签名空间 ZP∗×ZP−1Z_P^*\times Z_{P-1}ZP×ZP1
  7. v: 用户公钥 v=g1−s1g2−s2 mod pv = g_1^{-s1}g_2^{-s2}\ mod\ pv=g1s1g2s2 mod p
  8. p,q,g1,g2,v公钥, s1,s2密钥

如何签名?

  1. 选随机数 r1,r2, 满足0<r1,r2<q0 <r_1,r_2<q0<r1,r2<q
  2. e=H(g1r1g2r2 mod p,M)e = H(g_1^{r_1}g_2^{r_2}\ mod\ p, M)e=H(g1r1g2r2 mod p,M)
  3. y1=(r1+es1) mod qy_1 = (r_1 + es_1)\ mod\ qy1=(r1+es1) mod q
  4. y2=(r2+es2) mod qy_2 = (r_2 + es_2)\ mod\ qy2=(r2+es2) mod q
  5. Sigk(M,k)=S=(e,y1,y2)Sig_k(M,k)=S=(e,y_1,y_2)Sigk(M,k)=S=(e,y1,y2)做签名,M和S送给对方

g1y1g2y2ve mod p=g1r1es1g2r2rs2(g1−s1g2−s2)e mod p=g1r1g2r2 mod pg_1^{y_1}g_2^{y_2}v^e\ mod\ p \\ =g_1^{r_1es_1}g_2^{r_2rs_2}(g_1^{-s1}g_2^{-s_2}) ^e\ mod\ p \\ = g_1^{r_1}g_2^{r_2}\ mod\ pg1y1g2y2ve mod p=g1r1es1g2r2rs2(g1s1g2s2)e mod p=g1r1g2r2 mod p

所以
H(g1y1g2y2ve mod p,M)=H(g1r1g2r2 mod p,M)=eH(g_1^{y_1}g_2^{y_2}v^e\ mod\ p, M) = H(g_1^{r_1}g_2^{r_2}\ mod\ p, M) = eH(g1y1g2y2ve mod p,M)=H(g1r1g2r2 mod p,M)=e

OSS签名体制

  1. n 大整数
  2. k 随机数,满足(k, n) = 1
  3. h 满足 h=−k−2 mod nh = -k^{-2}\ mod\ nh=k2 mod n
  4. M: 消息空间 M∈ZP∗M\in Z^*_{P}MZP
  5. S: 签名空间 ZP∗×ZP∗Z_P^*\times Z_{P}^*ZP×ZP
  6. h,n是公钥,k是密钥

签名过程

  1. 选随机数r满足(r, n) = 1
  2. 计算s1=(M/r+r)/2 mod ns_1 =(M/r + r)/2\ mod\ ns1=(M/r+r)/2 mod n
  3. 计算s2=k(M/r−r)/2 mod ns_2 =k(M/r - r)/2\ mod\ ns2=k(M/rr)/2 mod n
  4. Sigk(M,k)=S=(s1,s2)Sig_k(M,k) = S = (s_1,s_2)Sigk(M,k)=S=(s1,s2)

验证过程

  1. 收到M和(s1,s2)(s_1,s_2)(s1,s2)
  2. 计算M′=s12+h×s+22 mod nM^{'} = s_1^2+h\times s+2^2\ mod\ nM=s12+h×s+22 mod n
  3. 验证Verk(H(M),r,s)=true⇔M=M′Ver_k(H(M), r, s) = true \Leftrightarrow M = M^{'}Verk(H(M),r,s)=trueM=M

缺陷:
对于二次,三次多项式构造的签名并不安全
四次多项式已被拱北
ESIGN在OSS上提出的新方案

离散对数

  1. p: 大素数
  2. q: (p-1)的素因子
  3. g: g∈ZP∗∧gq=1 mod pg\in Z_P^* \land g^q=1\ mod\ pgZPgq=1 mod p
  4. M: 消息空间 M∈ZP∗M\in Z^*_{P}MZP
  5. S: 签名空间
  6. x: 用户密钥,1<x<q1< x<q1<x<q
  7. y:用户公钥 y=gx mod py = g^x\ mod\ py=gx mod p

p,q,g,y公钥,x密钥

签名过程

  1. 选择随机数k, 0<k<q0<k<q0<k<q
  2. 计算H(m)
  3. 计算 r=gk mod pr = g^k\ mod\ pr=gk mod p
  4. 签字 ak=b+cx mod qak = b + cx\ mod\ qak=b+cx mod q
  5. Sigk(m)=(r,s)Sig_k(m) = (r,s)Sigk(m)=(r,s)作为签名,将m和(r,s)送给对方

验证

  1. 收到m和(r,s)
  2. Ver(M,r,s)=true⇔ra=gbyc mod qVer(M,r,s) = true \Leftrightarrow r^a=g^by^c\ mod\ qVer(M,r,s)=truera=gbyc mod q

以上签名可以看作其特例

abc对应体制
±r± r±r±s±s±s±H(m)±H(m)±H(m)Yen; Laih
±r± r±r±H(m)±H(m)±H(m)±s±s±sAgnew; Yen
±s±s±s±r± r±r±H(m)±H(m)±H(m)
±s±s±s±H(m)±H(m)±H(m)±r± r±rElGamal; DSA
±H(m)±H(m)±H(m)±s±s±s±r± r±rSchonorr; Nyberg
±H(m)±H(m)±H(m)±r± r±r±s±s±s

11. 其他签名

  1. 不可否认签名
  2. 防失败签名 fail-stop signature
  3. 盲签名 blind signature
  4. 群签名 group signature (代表一个群体,匿名)
  5. 代理签名 proxy
  6. 指定证实人签名 designate confirmer signature
  7. 一次性签名 one time

消息认证码MAC基本用途

  1. 消息认证
  2. 消息认证与保密:计算MAC后加密
  3. 消息认证与保密:先加密后计算MAC

与杂凑算法/加密/签名结合方案

  1. 保密性 + 消息认证
  2. 仅消息认证
  3. 即消息认证,也有数字签名
  4. 提供保密性,消息认证,数字签名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值