版权声明:转载请附上文章地址 https://blog.csdn.net/weixin_38134491/article/details/84937845
ElGama数字签名方案是五种签名方案中的一种,我们知道ElGama加密方案是使用用户的公钥进行加密,使用用户的私钥进行解密。但ElGama数字签名方案是使用私钥进行加密,公钥进行解密。
ElGama方案遵循数字签名的一般的三个步骤,即
- 产生公钥/私钥对
- 产生数字签名
- 验证签名
- ElGama数字签名方案的基本元素q和α,用户A通过产生私钥/公钥对:在1<XA<q-1范围内随机产生整数XA,并计算YA=α^XA mod q, 那么A的私钥是XA,A的公钥是{q,α,YA}
- 用户A计算Hash值 m=H(M), 这里M是表示消息,m是0<=m<=q-1范围内的整数, 现在开始数字签名, 在1<=K<=q-1范围内随机选择整数K,并且这个K满足 gcd(K,q-1)=1,即K和q-1要互素,这时 S1=α^K mod q, 再计算 K^-1 mod (q-1), 这时 S2=K^-1 (m-XAS1) mod (q-1),此时签名是 (S1,S2)对
- 现在开始验证签名,任何用户B都可以验证,先计算 V1=α^m mod q, 再计算 V2=(YA)^S1 (S1)^S2 mod q ,如果V1=V2那么签名合法
说了这么多下面我们举个简单例子:
对于素数域GF(19), 即q=19,19的原根是{2,3,10,13,14,15} 我们选 α=10,
Alice通过如下步骤产生秘钥对:
- Alice选择XA=16
- YA=α^XA mod q =α^16 mod 19=4
- Alice的私钥是16,公钥是{q,α,YA}={19,10,4}
假设Alice要对Hash值m=14的消息进行签名:
- Alice选择K=5,其与q-1=18互素
- S1=α^k mod q =10^5 mod 19=3
- K^-1 mod (q-1)=5^-1 mod 18=11
- S2=K^-1 (m-XAS1) mod (q-1)=11 (14-16*3) mod 18=-374 mod 18=4
Bob开始验证签名:
- V1=α^m mod q=10^14 mod 19=16
- V2=(YA)^S1 (S1)^S2 mod q=4^3 3^4 mod 19=5184mod 19=16
因为V1=V2所以签名是合法的