ElGamal数字签名

ElGamal数字签名方案使用私钥加密,公钥解密。

ElGamal数字签名方案的基本元素是素数q和a,其中a是q的原根。用户A通过以下步骤产生公钥/私钥对:

  1. 生成随机整数x,使得 1<x<q-1
  2. 计算y=a^x mod q
  3. A的私钥是x,公钥是{q,a,y}

要对消息M签名,用户A首先计算哈希值m=H(M),这里m是一个满足0<=m<=q-1的整数,然后A通过下列步骤产生数字签名:

  1. 选择一个随机整数k,使得1<=k<=q-1,并且gcb(k,q-1)=1,即k与q-1互素
  2. 计算s1=a^k mod q
  3. 计算k^(-1) mod (q-1) 即 计算k模q-1的逆
  4. 计算s2=k^(-1)(m-xs1)mod(q-1)
  5. 签名包括(s1,s2)对

任意用户B都能通过如下步骤验证签名:

  1. 计算v1=a^m mod q
  2. 计算 v2=(y^s1)(s1^s2) mod q
  3. 如果v1=v2,则签名合法

举例如下:

下图是10 (mod 19)的整数幂(其中a是10)

可以理解为

知道此处取a=10,q=19

假设Alice想用哈希值m=14来对消息进行签名:

  1. 选择x=16
  2. 计算y=a^x mod q = 10^16 mod 19 =4 (可查看上图查找)
  3. Alice的私钥为16,公钥为{q,a,y}={19,10,4}

假设Alice想用哈希值m=14对消息进行签名:

  1. Alice选择k=5,因为gcb(5,18)=1(并且,k的选择要在1-18间)
  2. s1=a^k mod q = 10^5 mod 19 = 3
  3. k^(-1) mod (q-1) =5^(-1) mod 18 =11  (分数模运算)
  4. 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可以对签名进行验证

  1. v1=a^m mod q = 10 ^14  mod  19 = 16
  2. v2=(y^s1)(s1^s2) mod q  =(4^3) (3^4) mod 19 = 5184 mod 19 =16
  3. 因此签名有效

ElGamal数字签名相关推荐

  1. 信息安全——ELGamal数字签名方案的实现

    ELGamal数字签名方案的实现 1. 问题描述 为简化问题,我们取p=19,g=2,私钥x=9,则公钥y=29 mod 19=18.消息m的ELGamal签名为(r,s),其中r=gk mod p, ...

  2. 密码学之ElGamal 数字签名 密钥产生 数字签名 验证 python实现

    ElGamal 数字签名 实验目的 通过实验了解数字签名的过程(签名过程和认证过程),掌握 ElGamal签名方案. 实验原理 ElGamal 数字签名的实现过程 1密钥产生:Alice 要对一个消息 ...

  3. elgamal签名算法c语言,ELGamal数字签名.doc

    ELGamal数字签名 摘要 随着网络的发展,人们之间的各种交流变得越来越来方便,但同时也对信息传递的安全提出了新的要求,数字签名随之广泛的深入到了人们的日常生活中. ELGamal作为目前应用比较广 ...

  4. ElGamal公钥密码算法及ElGamal数字签名方案实现

    ElGamal公钥密码算法是在密码协议中有着重要应用的一类公钥密码算法,其安全性是基于有限域上离散对数学问题的难解性.它至今仍是一个安全性良好的公钥密码算法.它既可用于加密又可用于数字签名的公钥密码体 ...

  5. elgamal java_eclipse实现ElGamal数字签名

    ElGamal数字签名,供大家参考,具体内容如下 一.实验目的 学习ElGamal算法在数字签名方面的使用,掌握教科书版本的ElGamal数字签名算法的编写,掌握ElGamal加密算法和ElGamal ...

  6. ElGamal数字签名笔记

    一.ElGamal数字签名的基本要素 1)a和q,q是素数,a是q的本原根. 2)签名方生成随机整数XA,(1<XA<q−1)X_A,(1<X_A<q-1)XA​,(1< ...

  7. elgamal签名算法c语言,elgamal数字签名方案

    Elgamal算法由T.E1Gamal在1985年发表的一篇论文中提出,是Rabin体制的一种变型.其修正形式已被美国国家标准技术研究所作为数字签名标准(DS),其核心就是著名是数字签名方法(DSA) ...

  8. 【密码学原理】数字签名(ElGamal签名,Schnorr签名,椭圆曲线签名,RSA-PSS签名)

    数字签名是公钥密码学发展过程中最重要的概念之一,产生和使用数字签名过程的一般模型如图所示 消息认证可以保护消息交换双方不受第三方的攻击,但是不能处理通信双方自身发生的攻击.例如对下图中的某种方式进行攻 ...

  9. 密码学基础知识(八)略说数字签名

    简略说说数字签名体制DSS: 怎么说呢,咱们之前在公钥密码那大致说了说,现在结合之前的DSA,ElGamal 等说一说. 首先,数字签名不能伪造,不能复制,不能篡改,不能抵赖,可验证. 那签名是啥呢, ...

最新文章

  1. mysql执行事务的语句_详解MySQL执行事务的语法和流程
  2. Oracle Dataguard中备库中归档日志不同步
  3. .NET设计模式系列文章
  4. Linux操作系统下软件的安装方法大全
  5. 一个简单的线性拟合问题,到底有多少种做法
  6. 【大会】声音叫醒耳朵,语音连接网络
  7. batchplot插件用法_Batchplot批量打印怎么用?Batchplot批量打印教程
  8. 为什么大多数编程语言性能对比都有问题?
  9. Spring MVC Interceptor
  10. JavaScript中“基本类型”之争
  11. 顺序表实验——顺序表的基本操作
  12. scrum敏捷开发流程介绍和心得
  13. Linux 误删文件后恢复文件
  14. 微服初识/优缺点2020-09-03
  15. 行业步入快速发展期,万亿级“虚拟蛋糕“将被如何瓜分?
  16. pythonmath库round计算_Python tensorflow.math.round()用法及代码示例
  17. <Linux> Ubuntu kernel 源码编译 替换
  18. 新安装的office(已激活),出现新建没有Word
  19. python matplotlib的常见参数以及画图示例
  20. android 地铁地图api,入门指南-地铁图 JS API | 高德地图API

热门文章

  1. 仿ifeng可翻阅上下滚动新闻
  2. 公司申请高新认定需要有多少个软件著作权证书?
  3. 00_51入门知识累计_C51简介
  4. Clickhouse 生成日历表
  5. python手写字体程序_深度学习---手写字体识别程序分析(python)
  6. 模型、数据分布稳定性
  7. Kafka(9)副本(leader、flower、isr说明)
  8. 华为设备配置静态路由与静态BFD联动
  9. IE里Window的Method列表
  10. 方案怎么写,才能打动客户?哪些内容才是客户眼中的干货?