密码学之公钥密码体系(3):Elgamal算法


公钥密码体系之Elgamal算法3

1. ElGamal算法

ElGamal算法是基于离散对数求解困难的加密体系。与RSA算法一样,都能用于数据加密和数据签名。但是两者的原理不一样,ELGmal算法基于离散对数问题,而RSA算法基于大数分级困难问题。此外,对于ElGamal算法对于使用相同的私钥,对相同的明文进行加密,每次得到的加密结果却不一样,这是ElGamal算法另一个重要特征。

2. ElGamal算法基本原理

2.1 ElGamal密钥生成
  1. 随机选择一个大素数$p$,且要求 $p-1$有大素数因子。再选择一个模$p$的本原元$g$。将$p$和$g$公开。
  2. 随机选择一个整数$x$作为私钥,$2≤x≤ p-2$
  3. 计算
    取$y$为公钥
2.2 ElGamal加密过程
  1. 对明文$M$进行加密,随机地选取一个整数$k$,$2≤k≤p-2$,并要求$k$与$p-1$互素
  2. 计算:
  3. 密文对为$(a,b)$,并且密文的大小时明文的两倍。
2.3 ElGamal解密过程
  1. 由密文可得明文$M$,计算其中$x$为私钥。
  2. 解密过程和Diffie-Hellman密钥交换过程极为类似。
  3. 下面给出了加密和解密过程
    在这里插入图片描述
2.4 ElGamal签名过程
签名:
  1. 对消息$M$进行签名时,首先选择一个随机数$k$,并要求$k$与$p-1$互素。
  2. 计算:
  3. 利用扩展欧几里得算法,求出b:
  4. 签名结果为(a,b)。需要注意的是,k需要保密。
验签:
  1. 需要验证下面公式成立:
  2. 下面给出签名和验签的大致流程
    在这里插入图片描述
  3. 需要注意的是,在每次使用ElGamal算法进行签名时,都需要更新随机数k。
    具体案例:
  4. 选择$p=11,g=2$,私人秘钥$x=8$,计算:
  5. 因此,公开秘钥是$y=3,g=2,p=11$
  6. 对消息$M=5$进行签名,首先随机选择随机数$k=9$,验证$gcd(9,10)=1$,计算:利用欧几里得算法求b:求解得到$b=3$,于是签名对$(a,b)$为$(6,3)$
  7. 验签上述签名的正确性,只需要验证下面:
2.5 ElGamal算法软件算法实现的快慢

具有160 bit的指数的ElGamal算法对不同模数长度的快慢表
在这里插入图片描述


文章作者: Janice
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Janice !
评论
  目录