Diffie Hellman 密钥交换原理及ElGamal加密算法

本文最后更新于:2022年7月21日 下午

Diffie Hellman 密钥交换原理及ElGamal加密算法

密钥交换指的是两名用户在不安全信道中,在没有任何预先消息的情况下商量出一个密钥,从而建立一个安全信道。

Diffie和Hellman是两个人,他们在1976年发明了这个算法。

算法安全性基于离散对数问题:已知p是质数,g和x是整数,计算y=gx mod py=g^x\ mod\ p快。但是已知p,g,y,计算x很困难。

过程

  1. Alice和Bob先选择一个质数p和一个整数g(公开)
  2. Alice选择一个秘密整数a,计算A=ga mod pA=g^a\ mod\ p,然后将A发送给Bob(A公开)
  3. Bob选择一个秘密整数b,计算B=gb mod pB=g^b\ mod\ p,然后将B发送给Alice(B公开)
  4. Alice计算Ka=Ba mod p=gab mod pK_a=B^a\ mod\ p=g^{ab}\ mod\ p
  5. Bob计算Kb=Ab mod p=gab mod pK_b=A^b\ mod\ p=g^{ab}\ mod\ p
  6. 可知Ka=KbK_a=K_b

ElGamal加密算法

本原根

满足am1(mod n)a^m\equiv1(mod\ n),且m=ϕ(n)m=\phi(n),则aann的本原根。

Elgamal加密算法是基于Diffie Hellman 密钥交换的非对称加密算法,过程如下:

  1. 选择质数pp,公开
  2. 计算模pp情况下的本原根gg,公开
  3. 选择整数XA<pX_A<p作为私钥
  4. 计算公钥YA=gXA mod pY_A=g^{X_A}\ mod\ p
  5. 设明文MM,随机选择整数kk,使kkp1p-1互质
  6. 计算C1=gk mod pC_1=g^k\ mod\ p
  7. 计算C2=(YA)kM mod pC_2=(Y_A)^kM\ mod\ p
  8. 密文为(C1,C2)(C_1,C_2)
  9. 解密明文为M=C2C1XA mod pM=\frac{C_2}{C_1^{X_A}}\ mod\ p