ElGamal数字签名
ElGamal数字签名方案使用私钥加密,公钥解密。
ElGamal数字签名方案的基本元素是素数q和a,其中a是q的原根。用户A通过以下步骤产生公钥/私钥对:
- 生成随机整数x,使得 1<x<q-1
- 计算y=a^x mod q
- A的私钥是x,公钥是{q,a,y}
要对消息M签名,用户A首先计算哈希值m=H(M),这里m是一个满足0<=m<=q-1的整数,然后A通过下列步骤产生数字签名:
- 选择一个随机整数k,使得1<=k<=q-1,并且gcb(k,q-1)=1,即k与q-1互素
- 计算s1=a^k mod q
- 计算k^(-1) mod (q-1) 即 计算k模q-1的逆
- 计算s2=k^(-1)(m-xs1)mod(q-1)
- 签名包括(s1,s2)对
任意用户B都能通过如下步骤验证签名:
- 计算v1=a^m mod q
- 计算 v2=(y^s1)(s1^s2) mod q
- 如果v1=v2,则签名合法
举例如下:
下图是10 (mod 19)的整数幂(其中a是10)
可以理解为
由知道此处取a=10,q=19
假设Alice想用哈希值m=14来对消息进行签名:
- 选择x=16
- 计算y=a^x mod q = 10^16 mod 19 =4 (可查看上图查找)
- Alice的私钥为16,公钥为{q,a,y}={19,10,4}
假设Alice想用哈希值m=14对消息进行签名:
- Alice选择k=5,因为gcb(5,18)=1(并且,k的选择要在1-18间)
- s1=a^k mod q = 10^5 mod 19 = 3
- k^(-1) mod (q-1) =5^(-1) mod 18 =11 (分数模运算)
- s2=k^(-1)(m-xs1)mod(q-1) =( (k^(-1) mod (q-1) ) ((m-xs1) mod (q-1)) ) mod (q-1) = 11 x2 mod 18 =4
Bob可以对签名进行验证
- v1=a^m mod q = 10 ^14 mod 19 = 16
- v2=(y^s1)(s1^s2) mod q =(4^3) (3^4) mod 19 = 5184 mod 19 =16
- 因此签名有效
版权声明:本文为ggj0727原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。