在密码学中,ElGamal加密算法是一个基于Diffie-Hellman密钥交换的非对称加密算法,它在1985年由塔希尔·盖莫尔提出,既可用于加密,也可用与签名。该体制的安全性是基于中有限群上的离散对数的困难性。
一、参数
令是一个有p个元素的有限域,p是一个素数,令g是(中除去0元素)中的一个本原元(或称生成元)。明文集M为,密文集C为 × ,S为签名空间 × ;
私钥:选择一个随机数为私钥, < p
公钥:选定g,计算公钥 = mod p,完整公钥为{p,g, }
二、EIGamal加密
选择随机数k ,且(k,p-1)= 1,即互素,计算:
= mod p (随机数k被加密)
= mod p (明文被随机数k和公钥加密)
M是发送的明文组。密文由级联构成,即密文C = ( || )。
密文由明文和所选的随机数k来定,因而是非确定性加密,一般称为随机化加密,由于不同时刻的随机数k不同,对同一明文加密的密文也不同。
三、EIGamal解密
接收方接收到密文组C后,计算:
M = / = / = / mod p
就能得到相应的明文。
四、例子
假设Alice与Bob是通信的双方,p = 19,g = 10
1)Alice选择 = 5;
2)计算 = mod p = mod 19 = 3;
3)Alice的私钥为5;公钥为 {p,g,}
4)现在Bob想将明文M = 17加密后发送给Alice,则做如下计算:
a.Bob选择随机数k = 6;
b.计算 K = = mod 19 = 729 mod 19 = 7;
c.计算 = mod p = mod 19 = 11
= MK mod p = 17 × 7 mod 19 = 5;
5)Bob将发送给Alice密文,
C = ( || )= (11 || 5);
6)Alice收到密文后进行解密:
M = / mod p= 5 / mod 19 = 17;
五、EIGamal签名
给定消息M发送这对其进行签名,进行如下计算:
1)选择秘密随机数k ;
2)计算,r = mod p,
mod (p-1);
3)将 = S = (r || s)作为签名,将M,
(r || s)送给对方;
4)验证:接收者先计算,并按下式验证:
= 真 = mod p
这是因为 = = mod p,
有(rx+sk) = mod (p-1),
故有 = mod p。