Elgama算法是基于离散对数的算法,应用于数字签名标志DSS、S/MIME电子邮件标准,
与Diffie-Hellman一样,Elgama算法也是用户共同选择一个素数q,α是q的素根,用户A生成的秘钥对如下:
- 随机生成整数 XA,1<XA<q-1
- 计算 YA=α^XA mod q
- A的私钥为 XA, 公钥为 {q, α, YA}
其他任何用户B通过A的公钥可以加密信息:
- 将信息表示为一个整数M,1<=M<=q-1, 以分组密码序列的方式来发送信息,其中每个分块的长度不小于整数q
- 选择任意整数k,1<=k<=q-1
- 计算一次秘钥 k=(YA)^k mod q
- 将M加密城明文对 (C1,C2), C1=α^k mod q, C2=K·M mod q
用A恢复明文:
- 计算 K= (C1)^XA mod q 恢复秘钥
- 计算 M=(C2·K^-1) mod q
以上是Elgama算法加密全部过程