1.简介
前面已经介绍过ElGamal加密系统,ElGamal数字签名使用的是相同的密钥,但是使用的算法不同。该算法创建了两个数字签名。在验证步骤中,这两个签名应该相吻合。这里的密钥生成过程和ElGamal加密系统的生成过程一样。公钥仍然是(E1,E2,P),私钥仍然是D。
2.签名过程
签名过程如下:
(1)发送方选择一个随机数R。
(2)发送方使用等式
S
1
=
E
1
R
m
o
d
P
S1=E1^R\quad mod\quad P
S1=E1RmodP计算出第一个签名S1。
(3)发送方使用等式
S
2
=
(
M
−
D
×
S
1
)
×
R
−
1
m
o
d
(
P
−
1
)
S2=(M-D\times S1)\times R^{-1}\quad mod\quad (P-1)
S2=(M−D×S1)×R−1mod(P−1)计算出第二个签名S2,这里M是需要进行签名的原始消息。
(4)发送方把M、S1和S2发送给接收方。
3.验证过程
验证过程如下:
(1)接收方使用等式
V
1
=
E
1
M
m
o
d
P
V1=E1^M\quad mod\quad P
V1=E1MmodP进行验证的第一部分V1。
(2)接收方使用等式
V
2
=
E
2
S
1
×
S
1
S
2
m
o
d
P
V2=E2^{S1}\times S1^{S2}\quad mod\quad P
V2=E2S1×S1S2modP进行验证的第二部分V2。
(3)如果V1=V2,则认为该签名是合法的,否则认为该签名是不合法的。