elgamal算法_ElGamal

ElGamal算法是一种基于离散对数难题的加密方法,与Diffie-Hellman算法相关。它涉及到选择素数q和本原根α,用户Alice生成私钥和公钥,Bob使用Alice的公钥进行加密。解密过程包括幂运算和乘法。寻找素数p的本原根是关键,可以通过特定条件减少因子数量。在实现中,概率素数检验能提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ElGamal算法是一种常见加密算法, 与Diffie-Hellman算法有密切关联。

该算法安全性依赖于计算有限域上离散对数难题:求解离散对数(目前)是困难的,其逆运算指数运算简单。
算法思路:
假设有2个用户Alice 和 Bob,Bob欲使用ElGamal加密算法向Alice发送信息。对于Alice,首先要选择一个素数q, α是素数q的本原根。 [本原根的概念对应模q乘法群(需循环群)中的生成元。

  • Alice产生一个
    ,
    ∈(1, q - 1)
  • 计算
    =
    mod q
  • A的私钥为
    , 公钥为 {q, α,
    }

公钥存在于某个可信公开中心目录,任何用户都可访问对于Bob, 首先去上述中心目录访问得Alice的公钥 {q, α,

}

然后将自己欲发送的明文M, (M ∈ [1, q - 1])洗干净备好。
  • 选一个随机整数k, k ∈ [1, q - 1]
  • 计算可解密自己密文的秘钥 PrivateK =
    mod q

    C1 =
    mod q , C2 = PrivateK * M mod q
  • 明文对发送给Alice

Alice收到明文对:

  • PrivateK =
    mod
  • M = C2 *
    mod q

到这里..发现算法大多就是一些乘法,求幂之类的运算。剩下个关键内容就是如何寻找素数p的本原根,或者说如何找有限域GF(p)中的生成元。
我们在群这个概念里讨论。
p是素数,令Zp = {1, 2, 3, ..., p - 1},因为考虑乘法,去掉了0元素。
2个定理:

  • Euler定理:设P和a是互素的两个整数,则有aφ(p)=1 mod p
  • 拉格朗日定理: 设 G 是有限群, H 是 G 的子群,|H| 整除 |G|

回顾这样2个概念:设G是群, a∈G, 使得等式ak = e成立的最小整数k称为元素a的阶。而群的阶是指该群中的元素个数。值得留意的是,以某个生成元去生成某个子群,该子群的阶就是该元素的阶(当然了)。
因Zp中所有元素与p互素,由欧拉定理,Zp中所有元素的阶不超过p-1,(因为群的阶φ(p)是p-1,而至少有aφ(p)=1 mod p)。
对于Zp中的任一元素,以该元素为生成元形成的一个循环群,设为S(群S的阶在数值上即该元素的阶),根据群的封闭性可知S必然为Zp的子群,根据拉格朗日定理,可知Zp的元素的阶必然是|Zp| (即p-1)的因子。
于是可以得到这样一个结论:若有这样一个元素a,其阶为Ka, Ka是p-1的平凡因子(即因子1 或者因子p-1), 那么a或者是单位元,或者是生成元。 又知Zp的单位元是1,那么根据单位元的唯一性,可知若a非1,则a必为生成元。问题在于,p-1的因子可能很多,我们还不是得一个个去找到阶是p-1的平凡因子的元素?
为此,我们构造一种特殊的素数,使得p-1的因子数量很少。取p - 1 = 2 * Q ,其中p是素数,Q也是素数。 因为Q是素数,因子仅1, Q。所以p - 1的因子只有 {1, 2, Q, p - 1}四个。
到此已经非常明朗,我们找到满足上述条件的素数p,然后在Zp中寻找这样一个元素a,a的阶非2,非Q,即a^2 mod p != 1 && a^Q mod p != 1,若a又非单位元1,那么a必然是生成元
留意Zp未必一定有生成元, 若1 到 (p - 1)经上述检验都不满足, 考虑另取一个素数p。至于代码实现上出现的问题:若mpz_probab_prime_p(tmp.mt, 6) == 1 改为 mpz_probab_prime_p(tmp.mt, 6) == 2,p一旦较大,程序运行速度很慢。取2为真素数检验,速度很慢,1为概率素数检验,速度快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值