ELGamal算法及其原根的求取

ELGamal 是 RSA 之外的另一个公钥加密体系,于 1985 年提出。相较于 RSA,ELGamal 的运算速度更慢,密文长度更大;其优势是对于质数大小的要求更低一些,而且由于随机数的选取,即使是同一个私钥,加密同样的信息,也会得到不同的结果,提高了安全性。

数学基础

设$G$是一个具有代数运算$\circ$的非空集合,满足:

  • 结合律:$\forall a,b,c\in G$,有$(a\circ b)\circ c=a\circ(b\circ c)$;
  • 单位元:$\exists e\in G$,满足$\forall a\in G,e\circ a=a\circ e=a$;
  • 逆元:$\forall a\in G$,存在$a^{-1}\in G,a\circ a^{-1}=a^{-1}\circ a=e$;

称$G$关于$\circ$构成一个(group)。满足交换律的群称为交换群(阿贝尔群)。根据元素是否有限,群分为有限群和无限群;有限群$G$中的元素个数称为群的,记为$|G|$。

在模$m$的简化剩余系中,考虑模$m$意义下的乘法运算;乘法满足结合律,$1$是单位元,且由扩展欧几里得算法每个元素都有模$m$意义下的乘法逆元。因此,模$m$的简化剩余系关于模$m$意义下的乘法构成一个群,记作$Z_m^\ast$。

循环群

在群上定义幂运算,即$a^n=a\circ a\circ…\circ a$(共$n$个$a$),同时规定:

  • $a^0=e$
  • $a^{-n}=(a^{-1})^n$

对于群中的元素$a$,其阶$|a|$指的是使$a^m=e$成立的最小正整数$m$。若群$G$中存在元素$a$,使得$G$中所有元素都能由$a$的幂表示,则称$G$为循环群,元素$a$为$G$的生成元,记作$G=\langle a\rangle$。

原根

设$gcd(a,m)=1$,若使$a^d\equiv 1\pmod m$成立的最小正整数$d=\varphi(m)$,则称$a$是模$m$的原根。藉由原根的概念,我们来证明当$m$有原根时,模$m$的简化剩余系乘群是一个循环群,其生成元为$m$的原根

显然$|Z_m^\ast|=\varphi(m)$,考虑$m$的一个原根$a\in Z_m^\ast$,若要证明$Z_m^\ast$是以$a$为生成元的循环群,则只需证

在模$m$意义下两两不同。设正整数$x,y$满足

则有$a^{y-x}\equiv1\pmod m$,易知$0<y-x<\varphi(m)$,这与$a$是模$m$的原根矛盾,因此

在模$m$意义下两两不同。反之,这也证明$Z_m^\ast$中不是$m$原根的元素一定不是生成元。

上面我们证明了$Z_m^\ast$的生成元和$m$的原根是一一对应的关系,与此同时,我们还容易证明有限循环群$G$生成元的个数为$\varphi(|G|)$,进而可以得到$m$原根的个数恰为$\varphi(\varphi(m))$。另外,并非所有正整数都有原根,只有当$m=2,4,p^n,2p^n$($p$为奇素数,$n$为正整数)时,$m$才有原根。

离散对数问题

设$G=\langle a\rangle$,群$G$中的离散对数问题是指:给定$G$中元素$h$,找到正整数$k$满足

我们把$k$称为$h$相对于生成元的离散对数,记作

$Z_m^\ast$中,已知生成元和指定元素,求离散对数的问题是一个困难问题;如同 RSA 中蕴含的困难问题是大数质因数分解,ELGamal 的安全性基于离散对数的求解难题。

算法流程

密钥生成

  1. 取一个较大素数$p$;
  2. 求$Z_p^\ast$的一个生成元$g$;
  3. 任取$1<\alpha<p-1$,计算$\beta=g^\alpha\bmod p$;

其中$(p,g,\beta)$作为公钥,$\alpha$作为私钥。

加密

  1. 给定待加密信息$x$,选择随机整数$1<k<p-1$;
  2. 计算$E(x,k)=(r,s)$,其中$r=g^k\bmod p$,$s=x\beta^k\bmod p$;

$(r,s)$就是加密完成后的信息。

解密

  1. 收到信息$(r,s)$;
  2. 计算$D(r,s)=sr^{-\alpha}\bmod p=xg^{\alpha k}g^{-\alpha k}\bmod p=x$;

这样就得到明文$x$。

原根的求取

在实际使用 ELGamal 加密时,一个难点在于如何获取较大素数的原根。我们知道有限群中任意元素的阶整除群的阶,那么对于$Z_p^\ast$而言,所有元素的阶都是$\varphi(p)=p-1$的因数。这为我们提供了一种方法:

  1. 随机生成大质数$q$,直到$p=2q+1$也是质数;
  2. 随机选取$1<g<p-1$,那么$g$的阶必然是$p-1=2q$的因数,即$g$的阶只有$2,q,2q$三种可能。
  3. 若$g^2\equiv1\pmod p$或$g^q\equiv1\pmod p$,说明$g$不是$p$的原根,否则$g$即为求得的一个原根。

随机选取$g$的形式虽然看起来时间开销无法保障,但是对于$p=2q+1$而言,其原根的个数有$\varphi(\varphi(p))=q-1$之多,即每次随机选取有$\frac{1}{2}$的概率选取到原根,所以实际上不会花费很多时间。


ELGamal算法及其原根的求取
https://ch3chohch3.github.io/2022/11/15/elgamal/
作者
CH3CHOHCH3
发布于
2022年11月15日
许可协议