目录

  • 简介
  • 本原元
  • 算法流程
    • 1.密钥生成
    • 2.加密
    • 3.解密

简介

上一篇介绍了非对称加密算法中的RSARSA算法简介,这次看一下ElGamal算法。
首先它是一个基于迪菲-赫尔曼密钥交换的非对称加密算法。它在1985年由塔希尔·盖莫尔提出。它可以定义在任何循环群G上。它的安全性取决于G上的离散对数难题。(RSA基于大数的因数分解)

在介绍算法原理之前先熟悉几个概念:

设n>1,a和n互质,则必有一个x (1≤x ≤n-1)使得: ax ≡ 1 (mod n )
满足ax ≡ 1 (mod n ) 的最小整数x , 称为a模n的阶。符号表示为Ordn(a)

观察方程 ax ≡1(modn) 根据欧拉定理,显然我们可以知道φ(n) 是方程的一个解,但它未必是最小的,所以不一定是阶,而当φ(n) 是a模n的阶时,我们称a为n的一个本原元。

本原元

当a模n的阶为φ(n),也就是说当且仅当x是φ(n)的倍数,使得ax ≡1(mod n)成立,此时称a为n的本原元。
举个例子:

这些余数构成了一个模7的完全剩余系1,2,3,4,5,6,也就是对于任意a,都可以找到x0使得:
5x0 ≡a (mod 7)。

本原元求解Python:

# 用辗转相除求最大公因子
def gcd(a, b):r = a % bwhile r != 0:a = bb = rr = a % breturn b# 欧拉函数
def euler(a):cnt = 0for i in range(1, a):if gcd(a, i) == 1:cnt += 1return cnt# 阶
def order(a, n, b):#   输出b在mod(a)中的阶#   n是mod(a)群的阶p = 1while p <= n and b ** p % a != 1:p += 1if p <= n:return pelse:return -1# 求本原元
def primitive_root(a):n = euler(a)for b in range(2, a):if order(a, n, b) == n:return bprint(primitive_root(37))
# 可以看到,是2

算法流程


同样是通过一个案例来介绍,还是Alice欲使用ElGamal加密算法向 Bob 发送信息。。

1.密钥生成

  1. 对于Bob,首先要随机选择一个大素数p,且要求p-1有大素数因子。再选择一个模p的本原元α。将p和α公开。我们为了方便计算取p = 37,则Z37的一个本原元α = 2.

  2. 随机选择一个整数d作为密钥,2≤d≤p-2 。我们选择d = 5,

  3. 计算β=αd mod p,β=25 mod 37 = 32

2.加密

假设Alice 想发送消息 x = 29

  1. 首先选取随机数k , 假设k = 7
    则: y1 = αk mod p = 27 mod 37 = 17
    y2 = x βk mod p = 29×327 mod 37 = 33
  2. 将密文y = (17,33)发送给Bob

3.解密

Bob收到密文y = (17,33) 后恢复明文如下:
x = y2 (y1d) -1 mod p
= 33 (175) -1 mod 37
= 33×2 mod 37
= 29

ElGamal加密算法简介相关推荐

  1. Elgamal 加密算法

    Elgamal 加密算法 1.ElGamal算法简介 2.ElGamal算法原理 3.c语言代码实现 4.测试结果 1.ElGamal算法简介 ElGamal算法是由Tather ElGamal在19 ...

  2. [密码学] ElGamal加密算法与离散对数

    文章目录 前言 离散对数问题 ElGamal加密算法 算法描述 密钥生成 加密算法 解密算法 椭圆曲线群上的ElGamal加密 密钥生成 加密算法 解密算法 优势 点压缩 离散对数问题的困难性 穷举搜 ...

  3. RSA算法原理——(1)目前常见加密算法简介

      艾伦·麦席森·图灵在二战期间主要负责破译德国人的密码系统Enigma,破解密码需要大量的计算,图灵深知工欲善其事必先利其器的道理,于是一台叫作CO-LOSSUS的计算机在1943年被研制出来,后来 ...

  4. Elgamal加密算法原理及实现

    目录 一.概述 二.知识准备 1.阶 2.本原元 三.算法流程 1.密钥生成 2.加密 3.解密 四.代码实现 一.概述 Rsa是基于大质数分解难题:而Elgamal是基于G上的离散对数难题 ElGa ...

  5. ElGamal加密算法|ElGamal签名算法|公钥密码|数字签名|密码学|信息安全

    ElGamal加密算法 简单介绍 EIGamal密码是除了RSA密码之外最有代表性的公开密钥密码 EIGamal是建立在离散对数的困难问题上的一种公钥体制密码 密钥产生 选一个素数p,以及小于p的两个 ...

  6. elgamal算法加解密C语言,详解ElGamal加密算法

    ElGamal公钥密码体制是1984年斯坦福大学的Tather ElGamal提出的一种基于离散对数问题困难性的公钥体制.1985年,Tather ElGamal利用ElGamal公钥密码体制设计出E ...

  7. (三)区块链钱包之加密算法简介

    (一)区块链钱包之生成助记词 (二)区块链钱包之创建钱包地址 (三)区块链钱包之加密算法简介 (四)区块链钱包之创建比特离线交易(BTC交易) (五)区块链钱包之创建以太坊交易(ETH交易) 钱包作为 ...

  8. ELGamal 加密算法及Java实现

    ElGamal算法,是一种较为常见的加密算法,它是基于1985年提出的公钥密码体制和椭圆曲线加密体系.既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题.在加密过程中,生成的 ...

  9. elgamal加密算法 java_JAVA加解密17-非对称加密算法-ElGamal算法

    一.概述 1.ElGamal算法和ECC算法基于离散对数问题 2.这个是一个单向的过程.虽然密钥对构造简单,但是只是乙方向另外一方单向传送数据进行加解密,不能反向操作 3.这里只有"公钥加密 ...

最新文章

  1. 李航等提出多粒度AMBERT模型,CLUE、GLUE上优于BERT,中文提升显著
  2. DPDK — 架构解析
  3. dynamic web module消失不见
  4. 50种不同编程语言的“Hello, World”,你会写几种?
  5. 柯马机器人示教器编程_CR 17911080,COMAU柯马机器人示教器 ,编程器更换显示器维修...
  6. 2年20亿搞自动驾驶+环卫,酷哇和中联环境成立合资子公司
  7. PHP毕业设计——许愿墙(有源码)
  8. Python 编程的最好搭档—VSCode 详细指南
  9. WEP_密码破解教程_BT3_使用_(原创技术化)
  10. Java md5加密算法
  11. 【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--1 赛后总结与分析
  12. 用JSP创建一个表格模板 .
  13. c语言socket通讯和进行进行大文件分片传输
  14. 驭势科技无人驾驶技术走向海外,AI国潮获赞满满
  15. 光谱预处理方法综述及分析策略选择
  16. 逆变器阻抗扫描 扫频法 阻抗扫描 阻抗建模验证
  17. GNSS精密单点定位(PPP)基本原理
  18. JS实现 下一个排列(下一个更大的数)
  19. 字符串的截取爬虫的时候会用到(数组和列表的区别)
  20. vuecli4安装axios以及简单使用

热门文章

  1. Java程序设计教程——第三章习题
  2. ipscan怎么用?ipscan使用方法
  3. 地图一些重要网站(地图资料篇.1)
  4. SRPG游戏开发(二十三)第七章 寻路与地图对象 - 一 A*寻路算法(A* Search Algorithm)
  5. 十进制转十六进制(python)
  6. ifstat查看网速
  7. ubuntu16.04安装avago megaraid-9460-16i驱动(raid卡驱动)
  8. 怎么查看服务器主板开启虚拟化,主板BIOS中VT虚拟化怎么开启
  9. java蜂鸣节拍器_电子课程设计-电子节拍器的设计.doc
  10. MODBUS RTU/TCP通讯实例C#(附源码)