数据完整性算法_ElGamal数字签名方案

版权声明:转载请附上文章地址 https://blog.csdn.net/weixin_38134491/article/details/84937845

ElGama数字签名方案是五种签名方案中的一种,我们知道ElGama加密方案是使用用户的公钥进行加密,使用用户的私钥进行解密。但ElGama数字签名方案是使用私钥进行加密,公钥进行解密。

ElGama方案遵循数字签名的一般的三个步骤,即

  1. 产生公钥/私钥对
  2. 产生数字签名
  3. 验证签名 
  • 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所以签名是合法的

猜你喜欢

转载自blog.csdn.net/weixin_38134491/article/details/84937845