Elgamal数字签名原理

密码学学习 专栏收录该内容
4 篇文章 0 订阅

Elgamal数字签名

         Elgamal数字签名主要也是利用离散对数的特性来实现签名,具体方式如下:

1. 选择一个大素数P、一个本原元G、一个随机整数d,d属于[2,p-2];

2. 生成β,β=G^d mod P;

3. 此时P、G、β就是公钥,记作Kpub;

4. Elgamal数字签名记作sig(x,k)=(r,s);  x是明文的摘要,k是临时私钥的随机值,记作Kpr,r,s是构成签名的两个整数;

5. 签名生成: r=G^k mod P; s=(x-dr)k^-1 mod (p-1);

6. 生成签名后,签名随明文一起发送给接收方;

7. 接收者收到消息后计算 t=β^r · r^s mod P

8. 验证:当t≡G^x modP 则该签名有效,数据未被篡改,反之则签名无效;

 

举例:B发消息给A,对消息使用Elgamal数字签名

    1. B选择素数P=29、本原元G=2、随机整数d=12,临时私钥k=5, 明文的摘要x=26;

         2.公钥β=G^d mod P → β=4096 mod 29 → β=7

         3.B将公钥(P=29,G=2,β=7)发给A

         4.计算签名,

     r=G^k mod P → r=2^5 mod 29 → r=3

           s=(x-dr)k^-1 mod (p-1) → s=(26-36)·17 mod 28 → s=26

    5.计算签名后将r=3、s=26、x=26发送给A

    6.A收到消息后,验证签名:

      t=β^r · r^smod P → t=343 X 2541865828329 mod 29 → t=22

      t≡G^x mod P  t mod P =22, G^x mod P =67108864mod 29 =22

    7.验证成功。

  • 4
    点赞
  • 4
    评论
  • 22
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值