非对称算法的密钥对包含公钥和私钥,其中私钥由密钥属主保管,且不能泄露,公钥可以通过明文的方式分发给其它人。通过私钥加密的数据只能由公钥解密,通过公钥加密的数据只能由私钥解密,由于加密和解密使用不同的密钥,因此称为非对称加密。
非对称算法的保密性好,密钥交换方便,但其加解密速度远远慢于对称加密,因此不适合用于大数据的加解密操作。算法的典型应用包括:
(1)信息加密:使用接收方的公钥加密信息,则只有对应私钥的持有者才能解密消息
(2)密钥交换:对称算法密钥本身数据量小,但通信双方密钥交换不方便,此时可通过非对称算法交换双方密钥。
(3)数字签名:通过私钥对数据的hash值做数字签名,从而可以验证数据的完整性和不可抵赖性
(4)数字证书:数字证书用于验证公钥的合法性。
ElGamal算法是由Tather ElGamal在1985年提出的,它是一种基于离散对数难题的加密体系,与RAS算法一样,既能用于数据加密,也能用于数字签名。ElGamal算法是基于因数分解,而ElGamal算法是基于离散对数问题。与RSA算法相比,ElGamal算法哪怕是使用相同的私钥,对相同的明文进行加密,每次加密后得到的签名也各不相同,有效的防止了网络中可能出现的重放攻击。
算法原理:
1、ElGamal密钥生成
(1)随机选择一个大素数p,且要求p-1有大素数因子。再选择一个模p的本原元α。将p和α公开。
(2)随机选择一个整数d作为密钥,2≤d≤p-2 。
(3)计算y=α^d mod p,取y为公钥。
2、ElGamal加密
(1)对于明文M加密,随机地选取一个整数k,2≤k≤p-2
(2)C1=α^k mod p
(3)C2=MY^k mod p
(4)密文为(C1,C2)
3、ElGamal解密
由密文可得明文M,M=C2/C1^d mod p