Elgamal

1. 前言

学习资料:《密码学引论》

学习视频:Elgamal 算法总结_哔哩哔哩_bilibili

2. 基本概述

2.1 ELGamal

ELGamal加密算法是一个基于Diffie-Hellman的非对称加密算法,它在1985年由塔希尔·盖莫尔提出。GnuPG和PGP等很多密码学系统中都应用到了ElGamal算法。

ElGamal加密算法可以定义在任何循环群 G {\displaystyle G} G上。它的安全性取决于 G {\displaystyle G} G上的离散对数难题。

2.2 生成元

参考:生成元 - 香蕉空间

设 X 是一个代数结构, 例如。称其中一族元素 { x i } i ∈ I \{x_i \} _{i\in I} {xi}iI是其生成元, 指的是 X 中包含 { x i } i ∈ I \{x_i \} _{i\in I} {xi}iI的子结构只有 X 本身. 此时也称 { x i } i ∈ I \{x_i \} _{i\in I} {xi}iI生成 X.

通俗的例子:

  • 群 G 的子集 S 生成 G 当且仅当 G 的每个元素都是 S 中元素及其逆元的有限乘积.
  • 环 R 的子集 S 生成 R 当且仅当 R 的每个元素都是 S 中元素的有限乘积的 Z-线性组合.
  • 域 F 的子集 S 生成 F 当且仅当 F 的每个元素都是 S 中元素经有限步加减乘除所得.
  • 设 R 是环. 则 R-模 M 的子集 S 生成 M 当且仅当 M 的每个元素都是 S 中元素的 R-线性组合.
  • 一般地,空集生成始对象, 因其子对象只有自身。所以平凡群、整数环、零模都在各自的范畴中被空集生成。

2.3 群

参考:群 - 香蕉空间
是一种代数结构,粗略地说,群是带有乘法运算的集合,并且这种乘法性质满足若干性质

等价地说:群是四元组 ( G , e , m , i ) (G,e,m,i) (G,e,m,i),其中

  • G是集合, e ∈ G e\in G eG是一个元素,称为单位元
  • m : G × G ⟶ G m:G\times G\longrightarrow G m:G×GG G G G上的二元运算,一般记为 ( a , b ) ↦ a b (a,b)\mapsto ab (a,b)ab a ⋅ b a\cdot b ab称为乘法
  • i i i G ⟶ G G \longrightarrow G GG G G G上的一元运算,一般记为 a ↦ a − 1 a\mapsto a^{-1} aa1,称为逆

它们满足结合律、单位率、逆元:

  • 单位率:对任意 a ∈ G a\in G aG,有 e a = a = a e ea=a=ae ea=a=ae,其中 e e e G G G的单位元
  • 逆元:对任意 a ∈ G a\in G aG a a − 1 = e = a − 1 a aa^{-1}=e=a^{-1}a aa1=e=a1a,其中 e e e G G G的单位元

在无歧义时,此四元组也被简称为 ( G , m ) (G,m) (G,m) G G G

2.4 循环群

参考:循环群 - 香蕉空间

称群 G G G为循环群,如果存在 g ∈ G g\in G gG,使得 G = { g n ∣ n ∈ Z } G=\{ g^n| n\in \mathbb{Z} \} G={gnnZ}其中, Z \mathbb{Z} Z是无限循环群
循环群一定同构于下列之一:

  • 无限循环群 Z \mathbb{Z} Z
  • 有限循环群 Z / n Z \mathbb{Z}/n \mathbb{Z} Z/nZ,其中 n n n是正整数,该群有时也记为 Z \mathbb{Z} Z,前提是不与 p p p进整数的记号混淆

3. 算法原理

3.1 密钥生成

  • 随机地选择一个大素数 p p p,要求 p − 1 p-1 p1有大素数因子,再选择一个模 p p p的本原元 α \alpha α。将 p p p α \alpha α公开
  • 用户随机地选择一个整数 d d d作为自己保密的解密钥, 2 ≤ d ≤ p − 2 2 \le d \le p-2 2dp2
  • 计算 y = α d   m o d   p y=\alpha^d \bmod p y=αdmodp,取 y y y为自己公开的加密钥
  • 由公开加密钥 y y y计算秘密钥 d d d,必须求解离散对数问题,而这是极困难的

由上述可以看出,公钥为 ( p , α , y ) (p,\alpha,y) (p,α,y)私钥 d d d

3.2 加解密

将明文消息 M ( 0 ≤ M ≤ p − 1 ) M(0 \le M\le p-1) M(0Mp1)加密成密文的过程如下:

  1. 随机地选取一个整数 k k k 2 ≤ k ≤ p − 2 2\le k \le p-2 2kp2
  2. 计算: U = y k   m o d   p ; C 1 = α k   m o d   p ; C 2 = U M   m o d   p U=y^k \bmod p;C_1 =\alpha ^k \bmod p;C_2=UM \bmod p U=ykmodpC1=αkmodpC2=UMmodp
  3. C = ( C 1 , C 2 ) C=(C_1,C_2) C=(C1,C2)作为密文

解密的过程如下:

  1. 计算 V = C 1 d   m o d   p V=C_1^d \bmod p V=C1dmodp
  2. 计算 M = C 2 V − 1   m o d   p M=C_2 V^{-1} \bmod p M=C2V1modp

例子:已知 p = 17 , α = 2 , x = 5 p=17,\alpha=2,x=5 p=17,α=2,x=5

可计算出 y = α x   m o d   p = 2 5   m o d   17 = 15 y=\alpha^x\bmod p =2^5 \bmod 17=15 y=αxmodp=25mod17=15,那么公钥为 ( p , α , y ) = ( 17 , 2 , 15 ) (p,\alpha,y)=(17,2,15) (p,α,y)=(17,2,15)

k = 3 , m = 5 k=3,m=5 k=3,m=5,则有 C 1 = α k   m o d   p = 2 3   m o d   17 = 8 C_1=\alpha ^k \bmod p=2^3 \bmod 17=8 C1=αkmodp=23mod17=8 C 2 = M y k   m o d   p = 11 C_2=My^k \bmod p=11 C2=Mykmodp=11

密文即为 ( 8 , 11 ) (8,11) (8,11)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值