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}i∈I是其生成元, 指的是 X 中包含 { x i } i ∈ I \{x_i \} _{i\in I} {xi}i∈I的子结构只有 X 本身. 此时也称 { x i } i ∈ I \{x_i \} _{i\in I} {xi}i∈I生成 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 e∈G是一个元素,称为单位元
- m : G × G ⟶ G m:G\times G\longrightarrow G m:G×G⟶G是 G G G上的二元运算,一般记为 ( a , b ) ↦ a b (a,b)\mapsto ab (a,b)↦ab或 a ⋅ b a\cdot b a⋅b称为乘法
- i i i: G ⟶ G G \longrightarrow G G⟶G是 G G G上的一元运算,一般记为 a ↦ a − 1 a\mapsto a^{-1} a↦a−1,称为逆
它们满足结合律、单位率、逆元:
- 单位率:对任意 a ∈ G a\in G a∈G,有 e a = a = a e ea=a=ae ea=a=ae,其中 e e e是 G G G的单位元
- 逆元:对任意 a ∈ G a\in G a∈G, a a − 1 = e = a − 1 a aa^{-1}=e=a^{-1}a aa−1=e=a−1a,其中 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
g∈G,使得
G
=
{
g
n
∣
n
∈
Z
}
G=\{ g^n| n\in \mathbb{Z} \}
G={gn∣n∈Z};其中,
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 p−1有大素数因子,再选择一个模 p p p的本原元 α \alpha α。将 p p p和 α \alpha α公开
- 用户随机地选择一个整数 d d d作为自己保密的解密钥, 2 ≤ d ≤ p − 2 2 \le d \le p-2 2≤d≤p−2
- 计算 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(0≤M≤p−1)加密成密文的过程如下:
- 随机地选取一个整数 k k k, 2 ≤ k ≤ p − 2 2\le k \le p-2 2≤k≤p−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=ykmodp;C1=αkmodp;C2=UMmodp
- 取 C = ( C 1 , C 2 ) C=(C_1,C_2) C=(C1,C2)作为密文
解密的过程如下:
- 计算 V = C 1 d m o d p V=C_1^d \bmod p V=C1dmodp
- 计算 M = C 2 V − 1 m o d p M=C_2 V^{-1} \bmod p M=C2V−1modp
例子:已知 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)