数字签名【持续更新】
数字签名应满足以下要求:
①签名的产生必须使用发方独有的一些信息以防伪造和否认。
②签名的产生应较为容易。
③ 签名的识别和验证应较为容易。
④ 对已知的数字签名构造一新的消息或对已知的消息构造一假冒的数字签名在计算上都是不可行的。
离散对数签名体制
ELGamal签名体制
(1)参数:P【大素数】,g【Zp中与p互素的一个生成元】,x【用户A的秘密钥:Zp中与p互素的数】,y【用户A的公开钥:y≡gx(mod p)】
(2)产生签名:对待签消息m,A执行以下操作:
①计算m的哈希值H(m)
②选择随机数k:
k
←
R
Z
p
−
1
∗
k\gets_RZ_{p-1}^*
k←RZp−1∗计算
r
≡
g
k
(
m
o
d
p
)
r≡g^k(mod\ p)
r≡gk(mod p)
③计算
s
≡
(
H
(
m
)
−
x
r
)
k
−
1
(
m
o
d
p
−
1
)
s≡(H(m)-xr)k^{-1}(mod\ p-1)
s≡(H(m)−xr)k−1(mod p−1)
(3)签名验证过程
收方已知:消息m,数字签名(r,s),哈希函数H,生成元g
验证:
V
e
r
(
y
,
(
r
,
s
)
,
H
(
m
)
)
=
T
r
u
e
⇔
y
r
r
s
≡
g
H
(
m
)
(
m
o
d
p
)
Ver(y,(r,s),H(m))=True\Leftrightarrow y^rr^s≡g^{H(m)}(mod\ p)
Ver(y,(r,s),H(m))=True⇔yrrs≡gH(m)(mod p)
(4)探讨其安全性
①对已知的消息构造一假冒的数字签名:是否知道A的秘密钥x或者知道随机数k是能否假冒A进行数字签名的关键,其是基于离散对数的安全性。
②对已知的数字签名构造一新的消息:找到H(m)的一个碰撞。
Schnorr签名体制
(1)参数
p
:
大
素
数
,
p
≥
2
512
;
q
:
大
素
数
,
q
∣
(
p
−
1
)
,
q
≥
2
160
;
g
:
g
∈
R
Z
p
∗
,
且
g
q
≡
1
(
m
o
d
p
)
。
p:大素数,p\ge2^{512};\quad q:大素数,q\mid (p-1),q\ge 2^{160};\quad g:g\in_R Z_p^*,且g^q≡1(mod\ p)。
p:大素数,p≥2512;q:大素数,q∣(p−1),q≥2160;g:g∈RZp∗,且gq≡1(mod p)。
x:用户A的秘密钥,1 < x < q;
y:用户A的公开钥,y ≡ gx (mod p);
(2)产生签名:对待签消息m,A执行以下操作:
①选择随机数k:1 < k < q,计算 r ≡ gk (mod p);
②计算
e
=
H
(
r
,
m
)
e = H(r,m)
e=H(r,m);
③计算
s
=
x
e
+
k
(
m
o
d
q
)
s = xe+k(mod\ q)
s=xe+k(mod q)
签名为
(
e
,
s
)
。
(e,s)。
(e,s)。
(3)签名验证过程
验证方:收到消息m和数字签名(e,s)。
计算:
r
′
≡
g
s
y
−
e
(
m
o
d
p
)
,
r' ≡ g^sy^{-e}(mod\ p),
r′≡gsy−e(mod p),
再计算
H
(
r
′
,
m
)
。
H(r',m)。
H(r′,m)。
验证方式为:
V
e
r
(
y
,
(
e
,
s
)
,
m
)
=
t
r
u
e
⇔
H
(
r
′
,
m
)
=
e
。
Ver(y,(e,s),m)=true\Leftrightarrow H(r',m)=e。
Ver(y,(e,s),m)=true⇔H(r′,m)=e。
正确性如下:
r
′
=
g
s
y
−
e
≡
g
x
e
+
k
−
x
e
≡
g
k
≡
r
(
m
o
d
p
)
r'=g^sy^{-e}≡g^{xe+k-xe}≡g^k≡r(mod\ p)
r′=gsy−e≡gxe+k−xe≡gk≡r(mod p)
(4)探讨其安全性
①对已知的消息构造一假冒的数字签名:是否知道A的秘密钥x是能否假冒A进行数字签名的关键,其是基于离散对数的安全性。
②对已知的数字签名构造一新的消息:解决离散对数问题找到H(m)的一个碰撞。