ElGamal暗号とは離散対数問題を用いた公開鍵暗号方式である。
以下の手順で公開鍵と秘密鍵の生成を行う。
組$ (p, g, y)$ が公開鍵、$s$ が秘密鍵となる。
公開鍵 $(p, g, y)$ を用いて、以下の手順により暗号化を行う。
組 $(c_1, c_2)$が暗号文となる。
以下のように平文$m$を計算する。
$$m = c_2 (c_1 ^ s) ^{-1} \bmod p$$
$c_1 ^s$ のモジュラ逆数 $(c_1 ^ s) ^ {-1}$は、フェルマーの小定理や拡張ユークリッド互除法を用いて計算できる。
ElGamal 暗号の安全性と健全性について示す。
$g, p, y (= g ^ s \bmod p) $ を用いて秘密鍵$s$ を求めることは、理論上可能である。
しかし離散対数問題により、現実的な時間で計算するのは難しい。
以下に復号が成り立つことを示す。
$$c_2 (c_1^s)^{-1} \equiv \frac{c_2}{c_1^s} \equiv \frac{my^r}{(g^r)^s} \equiv \frac{m(g^s)^r}{(g^r)^s} \equiv \frac{m g^{rs}}{g^{rs}} \equiv m \pmod p$$
離散対数問題に基づく公開鍵暗号である、ElGamal暗号の手順、安全性、健全性についてまとめた。
$s$:秘密鍵
$r$:乱数
$p$:法(公開鍵)
$g$:原始根(公開鍵)
$y = g^s \bmod p$:公開鍵
$c_1 = g^r \bmod p$:暗号文
$c_2 = my^r \bmod p$:暗号文