目录

EIGamal公钥密码算法

一、相关数学基础

二、算法原理

三、算法详细流程

四、特点和安全性


EIGamal公钥密码算法

ElGamal公钥密码算法是1985年由塔希尔·盖莫尔提出,是一个基于迪菲-赫尔曼密钥交换的非对称加密算法,是在密码协议中有着重要应用的一类公钥密码算法,其安全性是基于有限域上离散对数学问题的难解性。它至今仍是一个安全性良好的公钥密码算法,是一种既可用于加密又可用于数字签名的公钥密码算法。

一、相关数学基础

有限域、阶、本原元

二、算法原理

ElGamal算法的可靠性基础:有限域上离散对数的问题的难解性。

三、算法详细流程

1、参数定义和密钥生成

  • 取大素数 p ,要求p-1有大素数因子,再选择一个模p的本原元g;
  • 随机选取一整数 x (2 <= x <= (p - 2),
  • 计算 y = g^x (mod p)
  • (p,g,x) 是私钥、((p,g,y) 是公钥

2、加、解密、签名

加密M:

  • 假定:用户A发送明文M给用户B,A加密明文M得到密文C;
  • A将M编码为一个在0到p-1之间的整数m作为传输的明文;
  • 随机选取一整数 r (2 <= r<= (p - 2) 且 k 与 (p - 1) 互素);
  • 计算 c1= g^r mod p,c2 = m*y^r mod p(y为用户B的公钥);
  • 得到密文 C = (c1, c2);
  • 用户A把密文C传给用户B;

解密C:

  • 用户B接受到密文,计算明文m;
  • m = c2 * c1^(-x) mod p ;(x为用户B的私钥)
  • 注解:c2 * c1^(-x) mod p Ξ m * y^r * g^(-xr) Ξ m * g^(xr) * g^(-xr) Ξ m

签名:

四、特点和安全性

  • 引入随机数:增强了算法的不确定性;
  • 参数选取:参数P应足够大,应为150位以上的十进制数,且P-1应有大素数因子;r及解密密钥不应太小;加密使用的随机数必须是一次性的;
  • 应用:GnuPG和PGP等很多密码学系统。

ElGamal加密过程需要两次模指数运算和一次模乘积运算,解密过程需要模指数运算,求逆运算和模乘积运算各一次。每次加密运算需要选择一个随机数,所以密文既依赖于明文,又依赖于选择的随机数,故对于同一个明文,不同的时刻生成的密文不同。另外,El-Gamal加密使得消息扩展了两倍,即密文的长度是对应明文长度的两倍。

注:

如有错误、侵权,请联系笔者更改删除!!!

(九)EIGamal公钥密码算法相关推荐

  1. ElGamal公钥密码算法(Python实现)

    本文目录 一.实验目的(包括实验环境.实现目标等等) 1. 实验环境 2. 实现目标 二.方案设计(包括背景.原理.必要的公式.图表.算法步骤等等) 1. 背景 2. 离散对数困难问题 3. EIGa ...

  2. 国密算法Go语言实现(详解)(九) ——SM2(椭圆曲线公钥密码算法)

    国密算法Go语言实现(详解)(九) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...

  3. 非常值得一看—九种滤波算法C语言实现

    关注"嵌入式软件开发学习圈"免费获取更多学习教程 今天带着大家学习滤波算法c语言(九种滤波算法)实现,以及代码,大家可以学习了解下.... 1.限幅滤波算法(程序判断滤波算法) 方 ...

  4. 九大排序算法Java实现

    之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂 ...

  5. apriori算法代码_sklearn(九)apriori 关联规则算法,以及FP-growth 算法

    是什么: apriori算法是第一个关联规则挖掘算法,利用逐层搜索的迭代方法找出数据库中的项集(项的集合)的关系,以形成规则,其过程由连接(类矩阵运算)与剪枝(去掉没必要的中间结果)组成.是一种挖掘关 ...

  6. 【Java数据结构与算法】第十九章 贪心算法、Prim算法和Kruskal算法

    第十九章 贪心算法.Prim算法和Kruskal算法 文章目录 第十九章 贪心算法.Prim算法和Kruskal算法 一.贪心算法 1.介绍 2.支付问题 二.Prim算法 1.最小生成树 2.介绍 ...

  7. c语言折半排序的程序,C语言实现九大排序算法的实例代码

    直接插入排序 将数组分为两个部分,一个是有序部分,一个是无序部分.从无序部分中依次取出元素插入到有序部分中.过程就是遍历有序部分,实现起来比较简单. #include void insertion_s ...

  8. 【笔记】三张图读懂机器学习:基本概念、五大流派与九种常见算法

    文章目录 [笔记]三张图读懂机器学习:基本概念.五大流派与九种常见算法 Chapter 1: A look at Machine learning 1.What is it? 2.How does m ...

  9. SM2椭圆曲线公钥密码算法(Python实现)

    本文目录 一.实验目的(包括实验环境.实现目标等等) 1. 实验环境 2. 实现目标 3. 实验中需要导入的库 二.方案设计(包括背景.原理.必要的公式.图表.算法步骤等等) 1. 实验背景 2. 实 ...

最新文章

  1. 【廖雪峰python入门笔记】list_倒序访问
  2. 利用kickstart实现pxe自动安装linux
  3. redis主从复制,读写分离
  4. python读取excel-python读写Excel
  5. 2019腾讯科学WE大会:在小宇宙里看见大宇宙的轮廓
  6. c++ qt获取电脑的内存_Qt官方示例信号量
  7. prim算法 最小生成树
  8. scala数据类型_Scala数据类型示例教程
  9. Windows下使用c++编译hiredis.lib,Win32_Interop.lib
  10. 基于图书管理系统的需求分析之可行性分析安全需求分析系统需求分析
  11. python编写程序统计一元人民币换成一分、两分和五分的所有兑换方案个数(用while循环)
  12. 课程设计:波形发生器
  13. 用c 语言乘法运算结果,c中的基本运算
  14. 产品工作_技术与产品的异同
  15. IMU(LPMS-B2)分析随机误差
  16. 这辈子你会遇见谁,早已命中注定
  17. 几种常见窗函数及其MATLAB实现
  18. S3C6410 中的 cascaded irqdomain 之 gpio
  19. css控制中文字体间距
  20. 壳聚苯乙烯/单分散核-壳结构/中空/介孔二氧化硅微球的研究

热门文章

  1. EduCoder 计算机网络实验 DNS协议分析
  2. Hbase伪分布式部署
  3. 【原创】ThinkpadX240更换三键触摸板注意事项
  4. 11自由度非线性整车动力学模型微分方程介绍(汽车悬架、制动和转向三大子系统耦合)
  5. 免费分享!最新的大数据学习资料与电子书!!
  6. C++ 吃透回溯算法
  7. 不是吧,还有人不知道计算机以及Linux基础知识?
  8. React之Refs的使用
  9. Kaggle下载数据集时手机号码验证解决方案
  10. C++ multimap实践