一、ElGamal数字签名的基本要素

1)a和q,q是素数,a是q的本原根。
2)签名方生成随机整数XA,(1<XA<q−1)X_A,(1<X_A<q-1)XA​,(1<XA​<q−1),计算YA=aXA(modq)Y_A=a^{X_A}\pmod qYA​=aXA​(modq),得到公钥{q,a,YAq,a,Y_Aq,a,YA​},私钥XAX_AXA​。

二、ElGamal数字签名核心思想

签名方用私钥生成签名,然后将原文件和签名发送给验证方,验证方用公钥对签名解密得到原文件,并做比对。在ElGamal中,原文件是V1=am(modq)V_1=a^m \pmod qV1​=am(modq),私钥是XAX_AXA​,生成的签名是(S1,S2)(S_1,S_2)(S1​,S2​),验证是用公钥{q,a,YAq,a,Y_Aq,a,YA​}和签名(S1,S2)(S_1,S_2)(S1​,S2​)结合起来运算,得到V2=S1S2×YAS1(modq)V_2=S_1^{S_2} \times Y_A^{S_1}\pmod qV2​=S1S2​​×YAS1​​(modq),并对比V1V_1V1​和V2V_2V2​。在这之中,验证是恢复原文件的过程,这里重点讨论这一过程。该过程的还原思路建立在这个等式下:

1)am−S1XA×aS1XA≡am(modq),S11) a^{m-S_1X_{A}} \times a^{S_1X_{A}}\equiv a^{m} \pmod{q},S_11)am−S1​XA​×aS1​XA​≡am(modq),S1​是常数;
2)2)2) 对于任意整数i,j,ai=aj(modq)i,j,a^{i}=a^{j}\pmod{q}i,j,ai=aj(modq),当且仅当i≡j(modq−1)i \equiv j \pmod{q-1}i≡j(modq−1).

这里暂且还不知道S1S_1S1​是什么,就当作常数来看;

根据YA=aXA(modq),有aS1XA=YAS1(modq)Y_A=a^{X_A} \pmod q,有a^{S_1X_{A}}=Y_A^{S_1}\pmod qYA​=aXA​(modq),有aS1​XA​=YAS1​​(modq)
于是am−S1XA×aS1XA≡am−S1XA×YAS1(modq)a^{m-S_1X_{A}} \times a^{S_1X_{A}}\equiv a^{m-S_1X_{A}} \times Y_A^{S_1}\pmod qam−S1​XA​×aS1​XA​≡am−S1​XA​×YAS1​​(modq);

此时等式右边就构成了验证逻辑,只要签名方给出S1S_1S1​和(m−S1XA)(m-S_1X_A)(m−S1​XA​),验证方就能用公钥验证。但是此时一个关键问题是知道了S1S_1S1​,(m−S1XA)(m-S_1X_A)(m−S1​XA​)中的私钥XAX_AXA​就能被算出来。所以要么隐藏S1S_1S1​,要么隐藏(m−S1XA)(m-S_1X_A)(m−S1​XA​)。ElGamal数字签名则是隐藏了(m−S1XA)(m-S_1X_A)(m−S1​XA​),选择将其增加一层加密,加密的密钥用离散对数将其保护起来:

选择随机整数KKK,满足1≤K≤q−1,且K和q−11\leq K\leq q-1,且K和q-11≤K≤q−1,且K和q−1互素,并计算K−1(modq−1)K^{-1}\pmod{q-1}K−1(modq−1)

随机整数KKK就是实际上的密钥。至于为什么K−1K^{-1}K−1是模q−1q-1q−1,是因为欧拉定理。

计算K−1×(m−S1XA)K^{-1}\times(m-S_1X_A)K−1×(m−S1​XA​),令S2=K−1×(m−S1XA)S_2=K^{-1}\times(m-S_1X_A)S2​=K−1×(m−S1​XA​)。
原式化为aK×S2×YAS1a^{K\times S_2}\times Y_A^{S_1}aK×S2​×YAS1​​

这样的话,只要给出aKa^KaK和S1、S2S_1、S_2S1​、S2​就能完成密钥。

关于离散对数的笔记:
离散对数问题,比如k=aX(modq)k=a^{X} \pmod{q}k=aX(modq)(aaa是qqq的本原根),公开kkk和aaa,可以保证XXX计算不出来,这是安全性的根本。反过来说,对于关于XXX的算法,要想保护XXX的安全,没有必要把XXX放在信道上传输,只利用离散对数将其“包装”成kkk,实际应用中传输kkk并用kkk来运算,就能完成加密和解密。

由于aKa^KaK保障了KKK的安全,所以不用担心KKK泄露。同时S1S_1S1​是任意的整数,干脆令S1=aKS_1=a^KS1​=aK,原式则可以变为:

S1S2×YAS1=am(modq)S_1^{S_2} \times Y_A^{S_1}=a^m\pmod qS1S2​​×YAS1​​=am(modq)

S1、S2S_1、S_2S1​、S2​是签名。

三、验证ElGamal签名

验证只要用给的公钥{q,a,YAq,a,Y_Aq,a,YA​}和签名(S1,S2)(S_1,S_2)(S1​,S2​),计算出V2=S1S2×YAS1(modq)V_2=S_1^{S_2} \times Y_A^{S_1}\pmod qV2​=S1S2​​×YAS1​​(modq),并和V1=am(modq)V_1=a^m \pmod qV1​=am(modq)对比即可。

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数字签名

    ElGamal数字签名 ElGamal数字签名方案使用私钥加密,公钥解密. ElGamal数字签名方案的基本元素是素数q和a,其中a是q的原根.用户A通过以下步骤产生公钥/私钥对: 生成随机整数x,使 ...

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

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

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

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

  6. elgamal java_eclipse实现ElGamal数字签名

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

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

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

  8. 散列算法和数字签名笔记

    散列算法与数字签名 在RSA加密中,如果A是发送方,B是接受方,则A用B的公钥加密信息,而B可以用自己的私钥解密信息,从而达到保密传输的作用. 但是在数字签名技术中,这个过程恰好是反过来的,即:A是发 ...

  9. 《密码编码学与网络安全》William Stalling著---学习笔记(二)【知识点速过】【数字签名+密钥管理分发+用户认证】

    提示:博文有点长,请保持耐心哦~ 前一篇文章: <密码编码学与网络安全>William Stalling著-学习笔记(一)[知识点速过][传统密码+经典对称加密算法+经典公钥密码算法+密码 ...

最新文章

  1. python语音播报-Python实现有道翻译+语音播报
  2. Linux集群系统Heartbeat
  3. iOS - Easy Custom View
  4. java ftp分片续传_Java写的支持断点续传的FTP
  5. gan学到的是什么_GAN推动生物学研究
  6. linux .run文件_Linux快捷键及目录结构
  7. 爱立信卫翰思:已囊括拉美一半以上…
  8. 第二章 Python的基本语法【Python二级题库】
  9. Java基础--文件合并器
  10. hdu 6184 三元环数目
  11. 简单的爬图片代码(python)
  12. cad2006计算机丢失,win10系统无法打开CAD2006提示“计算机中丢失ac1st16.dll”的解决方法...
  13. 用matlab 计算范德蒙德行列式,行列式计算范德蒙德行列式
  14. 【代码写春联】新年新祝福,算算你的运势,教你如何用MATLAB以烟花、对联的形式打开2022年,爱满人间(附MATLAB和Python代码实现)
  15. 2014 卧底深度解密 到底是谁抢了我的车票?
  16. linux 云主机 管理软件,常用6款云服务器管理软件(上)
  17. Juery的基本的基本操作用法
  18. 【牛客】链表的回文结构
  19. WLAN领域AP集群化的关键 CAPWAP协议
  20. vpwm的控制变频_变频器调速控制方式和PWM脉宽调整技术有什么不同

热门文章

  1. 【C语言】分支语句和循环语句
  2. 详细的python环境安装搭建过程
  3. 问的多查的多的vue面试题整理不容错过,快看有没有你被问到的题目!
  4. jmeter性能监控
  5. 使用ASP.NET制作Wap网站注意事项
  6. opencv-python 学习前的准备——Numpy-python详细教程2
  7. 油烟净化器该如何挑选?
  8. 强国公链“比特元“发行抵押数字人民币CCNY
  9. Matlab 点云均匀(等间隔)采样
  10. 课程设计_左支座加工工艺和钻φ25孔夹具设计(说明书+CAD图纸+工序卡+过程卡)