基本概念
- 数字签名
- 用于对消息进行签名,以防消息的伪造或者篡改,也可用于鉴别通信双方的身份。
- 可以做到身份认证、保持数据完整性、不可否认性。
特性
- 可信
- 可验证签名的有效性。
- 不可伪造
- 除合法签名者,其他人伪造签名是困难的。
- 不可复制
- 一个消息的签名不能复制为另一个消息的签名。
- 不可改变
- 签名后的消息不能被篡改。
- 不可抵赖
- 签名者事后不能否认自己的签名。
RSA数字签名
体制参数(重要)
- 选取大素数
p
和q
(100-200
位十进制数字); - 计算
n=pq
,其欧拉函数为:
ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n)=(p-1)(q-1) ϕ(n)=(p−1)(q−1) - 随机选取一整数
e
,保证:
1 ≤ e < ϕ ( n ) , g c d ( ϕ ( n ) , e ) = 1 1 \leq e < \phi(n),gcd(\phi(n),e)=1 1≤e<ϕ(n),gcd(ϕ(n),e)=1 - 计算
e
的逆元d
:
d = e − 1 ( m o d ϕ ) ( n ) d=e^{-1}\pmod \phi(n) d=e−1(modϕ)(n) - 以
n
、e
为公钥,d
为私钥。
签名
- 设消息为
m
。
m ∈ Z n , s ≡ ( m o d n ) m\in Z_n,s\equiv \pmod n m∈Zn,s≡(modn)
验证
- 接收方收到消息
m
和签名s
。
m = = s d ( m o d n ) m==s^d\pmod n m==sd(modn) - 成立则有效。
安全性
困难问题
- 大数分解
缺点
情景一
对 任 意 y ∈ Z n 可 计 算 x ≡ y e ( m o d n ) 对任意y\in Z_n\\ 可计算x\equiv y^e\pmod n 对任意y∈Zn可计算x≡ye(modn)
- 任何人可伪造对随机消息x的签名。
情景二
H a c k e r g o t s i g n e d m e s s a g e x 1 , x 2 y 1 ≡ x 1 e ( m o d n ) y 2 ≡ x 2 e ( m o d n ) T h e s i g n a t u r e y 1 y 2 o f m e s s a g e x 1 x 2 c a n b e f o r g e d Hacker\ got\ signed\ message\ x_1,x_2\\ y_1\equiv x_1^e\pmod{n}\\ y_2\equiv x_2^e\pmod{n}\\ The\ signature\ y_1y_2\ of\ message\ x_1x_2\ can\ be\ forged Hacker got signed message x1,x2y1≡x1e(modn)y2≡x2e(modn)The signature y1y2 of message x1x2 can be forged
情景三
- 签名速度慢。
解决方案
- 签名之前求消息的哈希值。
一般化描述
M e s s a g e : m P r i v a t e k e y : x P u b l i c k e y : y S i g n a t u r e a l g o r i t h m : s ≡ S i g x ( m ) V e r i f i c a t i o n a l g o r i t h m : V e r y ( s , m ) V e r y ( s , m ) = { T r u e s = S i g x ( m ) F a l s e s ≠ S i g x ( m ) Message:m\\ Private\ key:x\\ Public\ key:y\\ Signature\ algorithm:s\equiv Sig_x(m)\\ Verification\ algorithm:Ver_y(s,m)\\ Ver_y(s,m)=\left\{ \begin{aligned} True\ s=Sig_x(m)\\ False\ s\neq Sig_x(m) \end{aligned} \right. Message:mPrivate key:xPublic key:ySignature algorithm:s≡Sigx(m)Verification algorithm:Very(s,m)Very(s,m)={True s=Sigx(m)False s=Sigx(m)
- 安全性
- 通过
m
和s
难以:求x
或者伪造m’
使得m’
和s
验证为真。
- 通过
DSS
密钥生成
S e l e c t p r i m e p : 2 L − 1 < p < 2 L 512 ≤ L ≤ 1024 , 64 ∣ L S e l e c t p r i m e q : q ∣ p − 1 , 2 159 < q < 2 1 60 S e l e c t g e n e r a t o r g : g ≡ h ( p − 1 ) / q ( m o d p ) 1 < h < p − 1 , h ( p − 1 ) / q ( m o d p ) > 1 R a n d o m l y s e l e c t x : 0 < x < q , y = g x ( m o d p ) Select\ prime\ p:2^{L-1}<p<2^L\\ 512\leq L\leq 1024,64|L\\ Select\ prime\ q:q|p-1,2^{159}<q<2^160\\ Select\ generator\ g:g\equiv h^{(p-1)/q}\pmod{p}\\ 1<h<p-1,h^{(p-1)/q}\pmod{p}>1\\ Randomly\ select\ x:0<x<q,y=g^x\pmod{p}\\ Select prime p:2L−1<p<2L512≤L≤1024,64∣LSelect prime q:q∣p−1,2159<q<2160Select generator g:g≡h(p−1)/q(modp)1<h<p−1,h(p−1)/q(modp)>1Randomly select x:0<x<q,y=gx(modp)
- 公开参数:
p
、q
和g
。 - 公钥:
y
- 私钥:
x
签名
- 随机选取一个整数
k
,满足0<k<q
。 - 计算:
r = ( g k ( m o d p ) ) ( m o d q ) s = k − 1 ( h ( m ) + x r ) ( m o d q ) r=(g^k\pmod{p})\pmod{q}\\ s=k^{-1}(h(m)+xr)\pmod{q} r=(gk(modp))(modq)s=k−1(h(m)+xr)(modq) - 消息
m
的签名为(r,s)
。
h
为哈希函数,DSS
中其为SHA-1
。
验证
- 计算:
w = s − 1 ( m o d q ) u 1 = h ( m ) w ( m o d q ) u 2 = r w ( m o d q ) v = ( g u 1 y u 2 ( m o d p ) ) ( m o d q ) w=s^{-1}\pmod{q}\\ u_1=h(m)w\pmod{q}\\ u_2=rw\pmod{q}\\ v=(g^{u_1}y^{u_2}\pmod{p})\pmod{q} w=s−1(modq)u1=h(m)w(modq)u2=rw(modq)v=(gu1yu2(modp))(modq) - 验证
v=r
,等式成立则为有效签名。
ElGamal签名体制
体制参数
- 大素数
p
- 生成元
g
- 密钥
x
- 公钥
y=g^x mod p
签名
k ∈ Z p − 1 ∗ S i g ( m , k ) = ( r , s ) r = g k ( m o d p ) s = k − 1 ( H ( m ) − x r ) ( m o d p − 1 ) k\in Z^*_{p-1}\\ Sig(m,k)=(r,s)\\ r=g^k\pmod{p}\\ s=k^{-1}(H(m)-xr)\pmod{p-1} k∈Zp−1∗Sig(m,k)=(r,s)r=gk(modp)s=k−1(H(m)−xr)(modp−1)
验证
y r r s ≡ g H ( m ) ( m o d p ) y^rr^s\equiv g^{H(m)}\pmod{p} yrrs≡gH(m)(modp)
交互证明系统
- 概念
P
知道某一秘密(如公钥密码体制的秘密钥或一平方剩余x
的平方根),P
希望使V
相信自己的确掌握这一秘密。
- 方法
- 每轮
V
都向P
发出一询问,P
向V
做出一应答。 - 所有轮执行完后,
V
根据P
是否在每一轮对自己发出的询问都能正确应答,以决定是否接受P
的证明。
- 每轮
- 要求
- 完备性
- 若
P
知道秘密,V
则接受证明。
- 若
- 可靠性
P
以一定概率使V
接受证明,则P
知道相应的秘密。
- 完备性
Fiat-Shamir身份识别方案
- 证明者
P
- 验证者
V
协议
1. P r a n d o m l y s e l e c t r ( 0 < r < n ) , C a l c u l a t e a ≡ r 2 ( m o d n ) , s e n d a t o V 2. V r a n d o m l y s e l e c t e ∈ { 0 , 1 } , s e n d e t o P 3. P c a l c u l a t e b ≡ r y e ( m o d n ) , s e n d b t o V 4. I f b 2 ≡ a x e ( m o d n ) , t h e n V a c c e p t v e r i f i c a t i o n 1.P\ randomly\ select\ r(0<r<n),\\ Calculate\ a\equiv r^2\pmod{n},send\ a\ to\ V\\ 2.V\ randomly\ select\ e\in\{0,1\},send\ e\ to\ P\\ 3.P\ calculate\ b\equiv ry^e\pmod{n},send\ b\ to\ V\\ 4.If\ b^2\equiv ax^e\pmod{n},then\ V\ accept\ verification 1.P randomly select r(0<r<n),Calculate a≡r2(modn),send a to V2.V randomly select e∈{0,1},send e to P3.P calculate b≡rye(modn),send b to V4.If b2≡axe(modn),then V accept verification
P
申明自己知道a
的平方根。e
是V
的询问。b
是P
对询问的应答。
性质
- 完备性
P
、V
遵守协议,若P
知道y
则应答正确,V
接受证明。
- 可靠性
- 假冒者最高能以
1/2
的概率欺骗。 - 通过执行多次降低欺骗率。
- 假冒者最高能以
Schnorr身份识别方案
体制参数
p
和q
是大素数,且q|(p-1)
。
q
至少140
位,p
至少512
位。
g
为q
阶元。
g q ≡ 1 ( m o d p ) g^q\equiv 1\pmod{p} gq≡1(modp)h
是输出t
位的单向函数。
t
是安全参数。
- 公钥
y
和私钥x
。
y = g − x ( m o d p ) y=g^{-x}\pmod p y=g−x(modp)
p
、q
、h
、y
公开,x
保密。
签名&验证
P
→
V
:
r
≡
g
k
(
m
o
d
p
)
,
1
≤
k
≤
q
−
1
V
→
P
:
e
=
H
(
r
,
m
)
P
→
V
:
s
=
k
+
x
e
(
m
o
d
q
)
V
:
r
=
=
g
s
×
y
e
(
m
o
d
p
)
P\rightarrow V:r\equiv g^k\pmod{p},1\leq k\leq q-1\\ V\rightarrow P:e=H(r,m)\\ P\rightarrow V:s=k+xe\pmod{q}\\ V:r==g^s\times y^e\pmod{p}
P→V:r≡gk(modp),1≤k≤q−1V→P:e=H(r,m)P→V:s=k+xe(modq)V:r==gs×ye(modp)