PromleeBlog
网站地图
关于博客
菜单
学习
Security Theory
Public Enc
ElGamal加密
ElGamal加密
📅
ElGamal加密概述
ElGamal加密过程
示例:ElGamal加密
ElGamal加密概述 (ElGamal Encryption Overview)
🔗
一种概率加密方案。
如果判定Diffie–Hellman问题难以求解,就可以提供IND-CPA (INDistinguishability under Chosen-Plaintext Attack) 安全性。
👨💻
判定Diffie–Hellman问题 (DDH, Decisional Diffie-Hellman)
给定
g
,
g
a
,
g
b
g, g^a, g^b
g
,
g
a
,
g
b
和
X
X
X
,判断
X
X
X
是
g
a
b
g^{ab}
g
ab
还是
g
c
g^c
g
c
,其中c是随机值。
如果认为DDH问题是困难的,那么同一实例的CDH问题也同样困难。
原始ElGamal加密方案具有乘法同态性。
E
K
p
u
b
(
M
1
)
⋅
E
K
p
u
b
(
M
2
)
=
E
K
p
u
b
(
M
1
⋅
M
2
)
E_{K_{pub}}(M_1) \cdot E_{K_{pub}}(M_2) = E_{K_{pub}}(M_1 \cdot M_2)
E
K
p
u
b
(
M
1
)
⋅
E
K
p
u
b
(
M
2
)
=
E
K
p
u
b
(
M
1
⋅
M
2
)
通过通用变换,可以提供IND-CCA2 (INDistinguishability under Chosen-Ciphertext Attack) 安全性。
乘法同态性
是指直接将加密后的值相乘,再解密所得结果,就能得到与原始值乘积相同的结果。
这一性质使我们能够在保护数据隐私的同时,对加密形式的数据进行计算。
ElGamal加密过程 (ElGamal Encryption Process)
🔗
密钥生成
选择素数
p
p
p
。
在
Z
p
∗
\mathbb{Z}_p^*
Z
p
∗
的子群
G
\mathbb{G}
G
中,选择生成元
g
g
g
。
该子群的阶为
q
q
q
。
从
Z
q
\mathbb{Z}_q
Z
q
中选择随机元素
x
x
x
,并计算
X
=
g
x
(
m
o
d
q
)
X = g^x \pmod{q}
X
=
g
x
(
mod
q
)
。
输出公钥
pk
=
(
p
,
q
,
g
,
X
)
\text{pk} = (p, q, g, X)
pk
=
(
p
,
q
,
g
,
X
)
和私钥
sk
=
x
\text{sk} = x
sk
=
x
。
加密
从
Z
q
\mathbb{Z}_q
Z
q
中选择随机元素
r
r
r
。
计算
C
1
=
g
r
C_1 = g^r
C
1
=
g
r
和
C
2
=
M
⋅
X
r
C_2 = M \cdot X^r
C
2
=
M
⋅
X
r
,然后输出密文
C
T
=
(
C
1
,
C
2
)
CT = (C_1, C_2)
CT
=
(
C
1
,
C
2
)
。
解密
给定私钥
sk
=
x
\text{sk} = x
sk
=
x
和密文
C
T
=
(
C
1
,
C
2
)
CT = (C_1, C_2)
CT
=
(
C
1
,
C
2
)
,
计算
C
2
/
(
C
1
)
x
(
=
M
⋅
X
r
/
(
g
r
)
x
=
M
)
C_2 / (C_1)^x (= M \cdot X^r / (g^r)^x = M)
C
2
/
(
C
1
)
x
(
=
M
⋅
X
r
/
(
g
r
)
x
=
M
)
,输出明文
M
M
M
。
示例:ElGamal加密
🔗
p
=
23
,
q
=
11
,
g
=
2
,
x
=
6
,
M
=
9
p = 23, q = 11, g = 2, x = 6, M = 9
p
=
23
,
q
=
11
,
g
=
2
,
x
=
6
,
M
=
9
公钥:
pk
=
(
23
,
11
,
2
,
8
)
\text{pk} = (23, 11, 2, 8)
pk
=
(
23
,
11
,
2
,
8
)
,私钥:
sk
=
6
\text{sk} = 6
sk
=
6
。
加密
当
r
=
3
r = 3
r
=
3
时,
C
1
=
2
3
=
8
C_1 = 2^3 = 8
C
1
=
2
3
=
8
C
2
=
9
⋅
8
3
=
9
⋅
512
=
4608
C_2 = 9 \cdot 8^3 = 9 \cdot 512 = 4608
C
2
=
9
⋅
8
3
=
9
⋅
512
=
4608
解密
M
=
4608
/
8
6
=
9
M = 4608 / 8^6 = 9
M
=
4608/
8
6
=
9
ElGamal加密 | PromleeBlog