5.5.3 ElGamal数字签名

5.5.3 ElGamal数字签名

ElGamal签名方案是由ElGamal在1985年提出的,其安全性是基于有限域上离散对数求解的困难性。该算法既可用于签名,也可用于加密,且该数字签名是随机化的签名方案,即对于给定的消息其签名结果不是确定值。

1.发送方密钥的生成

(1)随机产生一个大素数p,以及乘法群上的一个生成元g;

(2)随机选择整数a,1≤a≤p-2,计算y=ga mod p,则公钥是p,g,y(),私钥是a。

2.签名过程

(1)随机选择一个数k,并满足1≤k≤p-2和gcd(k,p-1)=1,计算r=gk mod p;

(2)计算k-1 mod(p-1);

(3)计算s=k-1{h(m)-ar}mod(p-1),则对消息m的签名为(r,s)。

3.验证过程

(1)获得公钥p,g,y(),验证1≤r≤p-1,否则拒绝该签名;

(2)计算v1=yrrs mod p;

(3)计算h(m)和v2=gh(m)mod p,当且仅当v1=v2时接受签名。

例5-6 利用ElGamal签名方案完成签名。

密钥生成过程如下。

(1)发送方选择素数p=2 357和Z*p上的生成元g=2;

(2)发送方选择私钥a=1 751,并计算

y=ga mod p=21751 mod 2 357=1 185

则公钥为p=2 357,g=2,y=1 185()。

签名生成过程如下。

为简单起见,选择Hash函数为h(m)=m。

(1)发送方选择随机数k=1 529,计算

r=gk mod p=21529 mod 2 357=1 490

(2)计算k-1 mod(p-1)=245;

(3)计算

s=k-1{h(m)-ar}mod(p-1)=245{1 463-1 751×1 490}mod 2 356=1 777

则对消息m=1 563的签名为r=1 490,s=1 777(

)。

签名验证过程如下。

(1)接收方计算

v1=yrrs mod p=1 1851490×1 4901777 mod 2 357=1 072

(2)计算

h(m)=1 463和v2=gh(m)mod p=21463 mod 2 357=1 072

因为v1=v2,所以接受签名。

4.ElGamal签名的安全性

(1)在ElGamal签名方案中,伪造一个签名成功的概率为1/p,当p很大时,成功的概率可以忽略。其中,Hash函数起到了重要的作用,因为若不采用Hash函数,则签名很容易被伪造成功。

(2)对于不同的消息,必须选择不同的随机数k,因为多次使用相同的随机数,可以推算出私钥。

(3)签名的验证者需要验证0<r<p,因为不满足此条件的系统,可以根据一个有效的签名为任意的消息生成有效的签名。

(4)在签名前,必须使用Hash函数对消息m进行计算。否则攻击者很容易成功伪造出其他消息的有效签名:任选一整数对(u,v),gcd(v,p-1)=1。计算r=auyv mod p=au+av mod p和s=-rv-1 mod(p-1)。则(r,s)就是对消息m=su mod(p-1)的一个有效签名,因为