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