算法原理
1 密钥生成
(1)随机选择一个大素数p,且要求p-1有大素数因子。再选择一个模p的本原元α(原根)。将p和α公开。设 p 为素数,若存在一个整数 α ,使得
α
1
,
α
2
,
α
3
\alpha^{1}, \alpha^{2},\alpha^{3}
α1,α2,α3 ,…,
α
p
−
1
\alpha^{p-1}
αp−1,关于模 p 互不同余,则称α为模 p 的本原元。
(2)随机选择一个整数d作为密钥,
1
<
d
<
p
−
1
1<d<p-1
1<d<p−1。
(3)计算
y
=
α
d
m
o
d
p
y=\alpha^{d} \quad mod\quad p
y=αdmodp,取y为公钥。
2 ElGamal加密
(1) 对于明文M加密,随机地选取一个整数k,
1
<
k
<
p
−
1
1<k<p-1
1<k<p−1。
(2)
U
=
y
k
m
o
d
p
U=y^{k} \quad mod\quad p
U=ykmodp
(3)
C
1
=
α
k
m
o
d
p
C_{1}=\alpha^{k} \quad mod\quad p
C1=αkmodp
(4)
C
2
=
U
M
m
o
d
p
C_{2}=UM \quad mod\quad p
C2=UMmodp
(5) 密文为
(
C
1
,
C
2
)
(C_{1},C_{2})
(C1,C2)
3 ElGamal解密
(1)
V
=
C
1
d
m
o
d
p
V=C_{1}^{d} \quad mod\quad p
V=C1dmodp
(2)
M
=
C
2
V
−
1
m
o
d
p
M=C_{2}V^{-1} \quad mod\quad p
M=C2V−1modp
例题1
在EIgamal算法中,已知p=5, m=3, 对m进行加密。
例题2
在EIgamal算法中,已知p=5, m=4, 对m进行加密。