エルガマル公開鍵暗号方式の証明
📂整数論エルガマル公開鍵暗号方式の証明
ビルドアップ

左から順に、アリス、ボブ、イブとしよう。アリスとボブはメッセージを交換する当事者で、イブはメッセージに興味を持つ消極的な攻撃者だ。オレンジ色の箱はアリスだけが知っている情報を、水色の箱はボブだけが知っている情報を、黒色の箱は公開されている(イブも知っている)情報を示している。
アリスにはボブから受け取るべきメッセージm∈Nがある。
アルゴリズム
Fp∗=Fp∖{0}={1,g,g2,⋯,gp−2} は要素数が(p−1)個の巡回群としよう。
キー設定: 非常に大きな素数pとordp(g)が大きな素数であるg∈Fp∗を選んで公開する。
アリスは自分だけが知っているキー1≤a≤p−1を決めて、A≡ga(modp)を計算して公開する。

暗号化: 一回用のランダムキーkを生成する。ボブはc1≡gk(modp)とc2≡mAk(modp)を計算して(c1,c2)をアリスに送信する。

復号化: アリスが(c1,c2)を使ってx≡(c1a)−1c2≡m(modp)を計算するとx=mを得る。イブは現実的にaを知ることができないため、mを知ることができない。

説明
実際、体系自体でgの位数ordp(g)が大きくなければならない理由はないが、単純に計算する場合の偶然の可能性を下げるためには、位数が大きい数を選ぶ方が良い。
証明
復号化
アリスはaを知っておりc1≡gk(modp)とc2≡mAk(modp)であるためkを知らなくても
(c1a)−1c2≡(gak)−1⋅c2≡(gak)−1⋅(mAk)≡(gak)−1⋅(m(ga)k)≡m(gak)−1⋅gak≡m(modp)
を簡単に計算することができる。
■
暗号化
イブはc1とc2しか知らずaとkを知らないため、離散対数問題gx≡c1a(modp)を知ることができず、知ったとしても直接解かなければならない。これは非常に難しいため、ボブはメッセージmを安全にアリスに伝えることができる。
■
参照
離散対数問題の困難さを利用したセキュリティアルゴリズム
離散対数問題に対する攻撃アルゴリズム