数字签名基本概念
- R1:receiver确认、证实sender的签名,这个签名不能被伪造
- S:sender发送出签名的教习给receiver,不能否认他签发的消息
- R2:receiver堆收到的签名消息不能否认,收报认证
- T:第三方可以确认手法收发双方之间的消息传输,但不可伪造
与消息认证的区别:
消息认证:只用于防范第三者破坏,未验证sender身份(RS双方没有利害冲突)
- receiver验证sender身份是否被篡改
- receiver验证消息是否被篡改
数字签名:(RS双方存在利害冲突)
- 数字签名确定消息来源的真实性
- 数字签名保证实体身份的真实性
- 不可否认
与公钥加密的区别
公钥
- A用B公开密钥加密data后,发送data(已加密)给B
- B用私钥堆密文解密得到明文
签名
- A用私钥加密消息m签名,将m与签名发送给B
- B 收到A签名,使用A公钥验证签名有效性
- 签名消息可能要多年以后验证
- 签名可能要多次严正
- 签名安全性、防伪造要求高
- 签名速度要比验证速度快
分类
消息是否被压缩分类:
- 对整体消息签名
- 对压缩的消息签名
按消息/签名对应关系划分
- 确定性deterministic数字签名:消息与签名一一对应。对同意消息签名永不变化 —— RSA/Rabin算法
- 随机化 randomized
构成
- 签名算法 signature algorithm
- 验证算法 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\}∀k∈K,m∈M签名算法: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=p∗q
选e计算出d让 ed≡1 mod ϕ(n)ed \equiv 1\ mod\ \phi(n)ed≡1 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\ n∀m∈Zn,签名s=Sigk(m)=md mod n
验证真实性:签名者才知道私钥d,其他人难以伪造
m≡se mod nm\equiv s^e\ mod \ nm≡se mod n
Rabin
N=pqN = pqN=pq。 p和q都是大质数
m,s∈QRp∩QRqm,s\in QR_p\cap QR_qm,s∈QRp∩QRq 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,m∈QRp∩QRq
- 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 \ Nm≡s2 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}Zp−1
- x 用户密钥 x∈Zp∗x\in Z_p^*x∈Zp∗
- y 用户公钥 y≡gx mod py\equiv g^x\ mod \ py≡gx mod p
p,g,y公钥,x密钥
签名过程
- 选择随机数k∈Zp∗m∈Mk\in Z_p^*\quad m\in Mk∈Zp∗m∈M
- 得到H(m)H(m)H(m)
- 得到r=gk mod pr = g^k\ mod\ pr=gk mod p
- 得到s=[H(m)−xr]k−1 mod (p−1)s = [H(m) - xr]k^{-1} \ mod\ (p-1)s=[H(m)−xr]k−1 mod (p−1)
- 得到签名Sigk(m)=(r,s),m与(r,s)Sig_k(m)=(r,s), m与(r,s)Sigk(m)=(r,s),m与(r,s)发给对方
验证过程
- 得到m与(r,s)m与(r,s)m与(r,s)
- 计算H(m)H(m)H(m)
- 验证
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))==true⇔yrrs=gH(m) mod p
(rx+sk)=H(m) mod (p−1)(rx+sk)=H(m)\ mod\ (p-1)(rx+sk)=H(m) mod (p−1)
得到
yrrs=gH(m) mod py^rr^s=g^{H(m)}\ mod\ pyrrs=gH(m) mod p
Example
- p = 467, g = 2, x = 127
- 得到y=gx=2127=132 mod 467y = g^x = 2^{127}=132 \ mod\ 467y=gx=2127=132 mod 467
- 得到m的哈希值H(m)=100H(m)=100H(m)=100,选随机数k = 213 (注意213和466互质,且213−1=431 mod 466213^{-1} = 431\ mod \ 466213−1=431 mod 466)
- 有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=(100−127×29)×431=51 mod 466
- 验证:收信人计算出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∗×Zp−1
- x 用户密钥 1<x<q1 < x < q1<x<q
- y 用户公钥y≡gx mod py\equiv g^x\ mod \ py≡gx mod p
p,q,g,y公钥,x密钥
过程
- user 使用随机数 k∈Zq,m∈Mk\in Z_q, m\in Mk∈Zq,m∈M
- 计算w=gk mod pw=g^k\ mod\ pw=gk mod p
- 计算r=H(w∣∣m)r = H(w||m)r=H(w∣∣m) ||表示拼接
- 计算s=k+xr mod ps = k+xr\ mod\ ps=k+xr mod p
- 签名 Sigk(m)=(r,s)Sig_k(m)=(r,s)Sigk(m)=(r,s)作为签名,将m和(r,s)(r,s)(r,s)送给对方
验证
- 收到消息mmm和签名(r,s)(r,s)(r,s)
- 计算H(m)H(m)H(m)
- 计算w′=gsy−r mod pw' = g^s y^{-r}\ mod\ pw′=gsy−r mod p
- 计算H(w′∣∣m)H(w'||m)H(w′∣∣m)
- 验证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区别
- E体制中,g是ZpZ_pZp本原元素;S体制中,g是Zp∗Z_p^*Zp∗中子集Zq∗Z_q^*Zq∗的本原元,它不是Zp∗的本原元Z_p^*的本原元Zp∗的本原元
- S的签名比E短,由∣q∣|q|∣q∣和∣H(m)∣|H(m)|∣H(m)∣决定
- w=gk mod pw = g^k\ mod\ pw=gk mod p可以预先计算,签名要一次乘法、一次加法,签名速度快,适合智能卡应用
- S签名短,安全性逊于E签名
DSS签名体制
DSA事故DSS签名标准中采用的数字签名算法
参数
- p 大素数,2L−1<p<2L2^L-1<p<2^L2L−1<p<2L, 512≤L≤1024512\le L \le 1024512≤L≤1024
- 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(p−1)/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是私钥
签名
- user使用随机数
- 计算H(m)H(m)H(m)
- 计算r=(gk mod p) mod qr = (g^k\ mod\ p)\ mod\ qr=(gk mod p) mod q
- 计算s=[k−1(H(m)+xr)] mod qs = [k^{-1}(H(m)+xr)]\ mod\ qs=[k−1(H(m)+xr)] mod q
- 签名Sigk(m)=(r,s)Sig_k(m) = (r,s)Sigk(m)=(r,s) 将m和(r,s)送给对方
验证
- 收到m与(r,s)
- H(m)H(m)H(m)
- w=s−1 mod qw=s^{-1}\ mod\ qw=s−1 mod q
- u1=[H(m)w] mod qu_1 = [H(m)w]\ mod\ qu1=[H(m)w] mod q
- u2=rw mod qu_2 = rw\ mod\ qu2=rw mod q
- v=[(gu1yu2) mod p] mod qv = [(g^{u1}y^{u2})\ mod\ p]\ mod\ qv=[(gu1yu2) mod p] mod q
- 验证v=rv = rv=r


ESIGN
- n, n=p2qn = p^2qn=p2q大合数,公钥
- p,q 两个大素数
- M 消息空间
- S 命名空间
- k 安全参数
签名
- 选择随机数 $ 0<r<pq $
- 计算H(M)H(M)H(M)
- 计算w=大于等于[(H(M)−rk) mod n]/pqw = 大于等于[(H(M) - r^k)\ mod\ n]/ pqw=大于等于[(H(M)−rk) mod n]/pq的最小整数
- 计算s=r+[(w/krk−1 mod p)]×pqs = r + [(w/kr^{k-1}\ mod\ p)]\times pqs=r+[(w/krk−1 mod p)]×pq
- Sigk(M,k)=sSig^{k}(M,k)=sSigk(M,k)=s作为签名,M和s送给对方
验证
- 收到M和s
- 计算H(M)H(M)H(M)
- 计算srk mod ps^{rk}\ mod\ psrk mod p
- 计算 a,它是大于等于2n/32n/32n/3最小整数
- 验证 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)=true⇔H(M)≤sk∧sk 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/(krk−1) 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
- p,q: 大素数,p至少512bit
- q: (p-1)的素因子,q长约140bit
- g1,g2:全局公钥,与q同长
- s1,s2:秘钥,与q同长
- M: 消息空间 M∈ZP∗M\in Z^*_{P}M∈ZP∗
- S: 签名空间 ZP∗×ZP−1Z_P^*\times Z_{P-1}ZP∗×ZP−1
- v: 用户公钥 v=g1−s1g2−s2 mod pv = g_1^{-s1}g_2^{-s2}\ mod\ pv=g1−s1g2−s2 mod p
- p,q,g1,g2,v公钥, s1,s2密钥
如何签名?
- 选随机数 r1,r2, 满足0<r1,r2<q0 <r_1,r_2<q0<r1,r2<q
- 算 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)
- 算 y1=(r1+es1) mod qy_1 = (r_1 + es_1)\ mod\ qy1=(r1+es1) mod q
- 算 y2=(r2+es2) mod qy_2 = (r_2 + es_2)\ mod\ qy2=(r2+es2) mod q
- 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(g1−s1g2−s2)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签名体制
- n 大整数
- k 随机数,满足(k, n) = 1
- h 满足 h=−k−2 mod nh = -k^{-2}\ mod\ nh=−k−2 mod n
- M: 消息空间 M∈ZP∗M\in Z^*_{P}M∈ZP∗
- S: 签名空间 ZP∗×ZP∗Z_P^*\times Z_{P}^*ZP∗×ZP∗
- h,n是公钥,k是密钥
签名过程
- 选随机数r满足(r, n) = 1
- 计算s1=(M/r+r)/2 mod ns_1 =(M/r + r)/2\ mod\ ns1=(M/r+r)/2 mod n
- 计算s2=k(M/r−r)/2 mod ns_2 =k(M/r - r)/2\ mod\ ns2=k(M/r−r)/2 mod n
- Sigk(M,k)=S=(s1,s2)Sig_k(M,k) = S = (s_1,s_2)Sigk(M,k)=S=(s1,s2)
验证过程
- 收到M和(s1,s2)(s_1,s_2)(s1,s2)
- 计算M′=s12+h×s+22 mod nM^{'} = s_1^2+h\times s+2^2\ mod\ nM′=s12+h×s+22 mod n
- 验证Verk(H(M),r,s)=true⇔M=M′Ver_k(H(M), r, s) = true \Leftrightarrow M = M^{'}Verk(H(M),r,s)=true⇔M=M′
缺陷:
对于二次,三次多项式构造的签名并不安全
四次多项式已被拱北
ESIGN在OSS上提出的新方案
离散对数
- p: 大素数
- q: (p-1)的素因子
- g: g∈ZP∗∧gq=1 mod pg\in Z_P^* \land g^q=1\ mod\ pg∈ZP∗∧gq=1 mod p
- M: 消息空间 M∈ZP∗M\in Z^*_{P}M∈ZP∗
- S: 签名空间
- 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密钥
签名过程
- 选择随机数k, 0<k<q0<k<q0<k<q
- 计算H(m)
- 计算 r=gk mod pr = g^k\ mod\ pr=gk mod p
- 签字 ak=b+cx mod qak = b + cx\ mod\ qak=b+cx mod q
- Sigk(m)=(r,s)Sig_k(m) = (r,s)Sigk(m)=(r,s)作为签名,将m和(r,s)送给对方
验证
- 收到m和(r,s)
- Ver(M,r,s)=true⇔ra=gbyc mod qVer(M,r,s) = true \Leftrightarrow r^a=g^by^c\ mod\ qVer(M,r,s)=true⇔ra=gbyc mod q
以上签名可以看作其特例
| a | b | c | 对应体制 |
|---|---|---|---|
| ±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±s | Agnew; Yen |
| ±s±s±s | ±r± r±r | ±H(m)±H(m)±H(m) | |
| ±s±s±s | ±H(m)±H(m)±H(m) | ±r± r±r | ElGamal; DSA |
| ±H(m)±H(m)±H(m) | ±s±s±s | ±r± r±r | Schonorr; Nyberg |
| ±H(m)±H(m)±H(m) | ±r± r±r | ±s±s±s |
11. 其他签名
- 不可否认签名
- 防失败签名 fail-stop signature
- 盲签名 blind signature
- 群签名 group signature (代表一个群体,匿名)
- 代理签名 proxy
- 指定证实人签名 designate confirmer signature
- 一次性签名 one time
消息认证码MAC基本用途
- 消息认证
- 消息认证与保密:计算MAC后加密
- 消息认证与保密:先加密后计算MAC
与杂凑算法/加密/签名结合方案
- 保密性 + 消息认证
- 仅消息认证
- 即消息认证,也有数字签名
- 提供保密性,消息认证,数字签名
文章详细介绍了数字签名的基本概念,包括RSA、Rabin、ElGamal等签名体制的工作原理和安全性。数字签名用于确认消息来源的真实性,防止消息被篡改,并提供不可否认性。同时,对比了消息认证和公钥加密的区别,并讨论了签名的速度和安全性要求。

被折叠的 条评论
为什么被折叠?



