• 追加された行はこの色です。
  • 削除された行はこの色です。
  • 拡張ElGamal暗号 へ行く。

*目次 [#qf115336]

#contents

*宣伝 [#u79042e4]

 当サイトにおける暗号に関するページでは、説明が足りなかったり、誤った記述をしていたりするところがあります。今後、少しずつ修正する予定です。~

 暗号理論の『暗号技術のすべて』が発売されています。初心者向けの暗号本です。これまで暗号本に何度か挑戦しつつも挫折してしまった方、学校の課題で悩んでいる方、資格試験にて暗号の問題が苦手な方などにお勧めです。

[[&ref(http://s-akademeia.sakura.ne.jp/main/books/cipher/img/cover_mini.jpg,nolink,『暗号技術のすべて』宣伝サイト);>http://s-akademeia.sakura.ne.jp/main/books/cipher/]]

 興味がある方は[[宣伝サイト:http://s-akademeia.sakura.ne.jp/main/books/cipher/]]を参照してください。[[Amazon:https://www.amazon.co.jp/dp/4798148814/securityakade-22]]でも発売中です。


*拡張ElGamal暗号の仕様 [#q61cda47]

 [[公開鍵暗号]]は鍵生成アルゴリズム・暗号化アルゴリズム・復号アルゴリズムの3つのアルゴリズムで構成される。よって、拡張ElGamal暗号も3つのアルゴリズムで構成されている。

**鍵生成アルゴリズム [#ycdfba13]

 セキュリティパラメータを入力とする。

1:q|p-1を満たす大きな素数p,qを生成する。

2:位数がqとなる、&mimetex("\mathbb{Z}_q^*");の元αを生成する。

3:0≦x<qとなるxをランダムに選択し、次のようにyを計算する。

&mimetex("y=\alpha^x \pmod{p}");

4:公開鍵pk=(p,q,α,y)、秘密鍵sk=xを出力する。


**暗号化アルゴリズム [#fe4e3cdf]

 αで構成される巡回群の元を平文mとし、mとpkを入力とする。

1:0≦r<qとなるrをランダムに選択する。

2:次のようにcSUB{1};,cSUB{2};を計算する。

&mimetex("c_1=\alpha^r \pmod{p}");

&mimetex("c_2=my^r \pmod{p}");

3:ステップ2で計算したcSUB{1};,cSUB{2};を組として、暗号文cとする。そのc=(cSUB{1};,cSUB{2};)を出力する。


**復号アルゴリズム [#x52d39a2]

 暗号文c=(cSUB{1};,cSUB{2};)、skを入力とする。

1:&mimetex("\frac{c_2}{c_1^x} \pmod{p}");を計算して出力する。


**アルゴリズムの補足 [#r0f134cb]

 以上の3つのアルゴリズムが拡張ElGamal暗号の仕様になる。いくつか補足したい部分がある。

***扱っている群について [#sc4011a6]

 [[ElGamal暗号]]で用いた群は&mimetex("\mathbb{Z}_q^*");であった。&mimetex("\mathbb{Z}_q^*");の部分群をうまく使うことで、&mimetex("\mathbb{Z}_q^*");のときのDL問題・CDH問題・DDH問題よりも解くのが困難になるのである。HがGの部分群であるとは、HがGの部分集合であり、なおかつHがGと演算が同じであると定義される。

 部分群を用いた方が問題が困難になるという事実を利用したのが拡張ElGamal暗号である。そのため、拡張ElGamal暗号の鍵生成アルゴリズムの中に、&mimetex("\mathbb{Z}_q^*");の部分群を使うための準備が含まれているのである。


***鍵生成アルゴリズムのp,qの生成方法 [#b4a7e926]

 鍵生成アルゴリズムのステップ1における「q|p-1」とは、qがp-1を割り切るという意味である。例えば、p=2q+1の関係などがそうである。このような関係である素数p,qは次のように生成することができる。

1:大きな素数qを生成する。

2:乱数rを選び、&mimetex("p=2rq+1");とする。

3:pが素数かどうかを確認し、素数でないならステップ1に戻る。もしpが素数であれば、(p,q)はq|p-1を満たしている。


***αの存在保証 [#k2b8d914]

 また、鍵生成アルゴリズムのステップ2において、位数([[元の位数]])という言葉が登場している。gの位数kとは、&mimetex("g^k \pmod{p}=1");を満たすような最小の値のことである。

 ステップ2で主張する位数がqとなる&mimetex("\mathbb{Z}_q^*");の元αが存在することを保証するのは、ステップ1によってq|p-1が成り立つからである。これは[[元の位数と原始元に関係する定理:http://akademeia.info/index.php?%B8%B6%BB%CF%B8%B5#b5c44218]]から言える。


***αの生成方法 [#ge7afe3f]

 そして、このαの生成方法は、&mimetex("\mathbb{Z}_q^*");の原始元gを求めて、&mimetex("\alpha =g^{2r} \pmod{p}");を計算すればよい。このαの位数はqになっている。即ち、&mimetex("\alpha^q \equiv 1 \pmod{p}");が成り立つ。しかも、このαの位数はqのみである。この事実は次のように証明できる。

 p-1=2rqかつ&mimetex("\alpha =g^{2r} \pmod{p}");より、

&mimetex("\alpha^q");~
&mimetex("=(g^{2r})^q");~
&mimetex("=g^{2rq}");~
&mimetex("=g^{p-1}"); (p-1=2rq)~
&mimetex("=1 \pmod{p}"); (∵フェルマーの小定理)

 また、&mimetex("\alpha^i \equiv 1 \pmod{p}");となるi(1≦i<q)が存在すると仮定すると、

(左辺)~
&mimetex("=\alpha^i");~
&mimetex("\equiv (g^{2r})^i");~
&mimetex("=g^{2ri}");

と計算できるので、&mimetex("g^{2ri} \equiv 1 \pmod{p}");が成り立つ。

 ここでgの位数は2ri<2rq=p-1より小さい。これはgが原始元であることに反する。

 よって、&mimetex("\alpha^i \equiv 1 \pmod{p}");となるi(1≦i<q)は存在しない。ゆえに、αの位数はqのみである。 □


***巡回群<α>について [#vb020e70]

 &mimetex("\alpha^q \equiv 1 \pmod{p}");が成り立つため、任意の整数iに対して&mimetex("\alpha^i");は&mimetex("\alpha^{i \pmod{q}} \pmod{p}");と考えればよい。つまり、αの指数部はmod qの世界で考えればよいのである。

 よって、このαの巡回群はq個であり、この巡回群の要素は&mimetex("1 \pmod{p},\alpha \pmod{p},\alpha^2 \pmod{p}, \cdots, \alpha^{q-1} \pmod{p},");になる。この巡回群を<α>と定義する。


*完全性 [#g089b974]

 アルゴリズムが定義されたならば、まず完全性を確認する必要がある。(公開鍵暗号の)完全性とは復号アルゴリズムを実行すると、平文に戻ることである。つまり、&mimetex("\frac{c_2}{c_1^x} \pmod{p}");を式展開して、mになれば完全性が成り立つ。

&mimetex("\frac{c_2}{c_1^x} \pmod{p}");~
&mimetex("=\frac{my^r}{\alpha^{rx}}");~
&mimetex("=\frac{m\alpha^{xr}}{\alpha^{rx}}");~
&mimetex("=m"); □

 よって、完全性が示された。


*安全性 [#p33ac0bd]

**DDH仮定⇒IND-CPA安全 [#u17a6439]

[定理]<α>に対するDDH問題が困難であるならば、拡張ElGamal暗号はIND-CPA安全である。

 即ち、<α>に対する[[DDH仮定]]の下で、拡張ElGamal暗号はIND-CPA安全である。

[証明]これを証明するために対偶で考える。つまり、IND−CPA安全を解くアルゴリズムAが存在するならば、<α>に対するDDH問題を解くアルゴリズムBが存在することを示すことができればよい。ここでAの成功確率を(1/2)+εとする。

 証明には帰着法を使う。Aの力を利用して、Bを構成することができ、そのBの成功確率がε以上であればよいのである。

 まずBの構成を示す。~
 Bに(α,β,γ,δ)=(α,αSUP{x};,αSUP{y};,αSUP{z};)が与えられるとする。Bの目的はうまく細工をすることにより、Aの力を利用して、z=xy mod qかどうかを有意な確率で判定することである。~
 Bは(α,β,γ,δ)を入力とし、pk=(p,q,α,β)をAに公開鍵として与える。このとき、このpkが拡張ElGamal暗号の公開鍵と同じ分布の必要があるが、p,q,α,βすべて同一なため敵はBの中で動作していることに気が付かないので、問題ない。~
 次に、AはCPA攻撃者なので2つの平文mSUB{0};,mSUB{1};を外に送る。AはBの内部でmSUB{0};,mSUB{1};を送信する。Bはそれらを受け取ったら、1ビットのbをランダムに選択する。そして、Bはc=(γ,mSUB{b};γ)を暗号文としてAに送信する。ここでBが細工しているのである。このcも拡張ElGamal暗号の仕様通りに作られた(cSUB{1};,cSUB{2};)とまったく同一の分布を示すため、AはBの中にいることに気付かないため、問題ない。つまり、Aはcが細工されているのに気付かないのである。~
 Aは最後にbの推測として&mimetex("\tilde{b}");をローカル出力する。~
 Bは&mimetex("\tilde{b}");を見て、&mimetex("b = \tilde{b}");が成り立っていれば1(ここではz=xyが成り立っていることを意味する)を出力し、&mimetex("b \not{=} \tilde{b}");が成り立っていれば0(ここではz≠xyが成り立っていることを意味する)をローカル出力する。~
 以上でBの構成は完了である。

 次に、Bの成功確率を調べる必要がある。

[1]z=xyの場合

 pkとcは拡張ElGamal暗号の仕様通りのpk,cと分布がまったく同一である。~
 よって、仮定よりAは&mimetex("\frac{1}{2} + \epsilon");以上の確率で、&mimetex("b = \tilde{b}");となる&mimetex("\tilde{b}");を出力するはずである。

 ゆえに、z=xyの場合にBは&mimetex("\frac{1}{2} + \epsilon");以上の確率で1を出力する。つまり、Bは&mimetex("\frac{1}{2} + \epsilon");以上の確率でz=xyであることを判定できる。

[2]z≠xyの場合

 pkは拡張ElGamal暗号の仕様通りのpkと分布がまったく同一である。また、c=(γ,mSUB{b};γ)=(γ,mSUB{b};αSUP{z};)である。zが一様ランダムに取られているので、&mimetex("\alpha^z");は&mimetex("\mathbb{Z}_q^*");上で一様分布しており、&mimetex("m_b \alpha^z");も&mimetex("\mathbb{Z}_q^*");上で一様分布である。よって、このcは完全にbの情報を隠している。よって、Aは&mimetex("\frac{1}{2}");の確率でしか、&mimetex("b = \tilde{b}");となる&mimetex("\tilde{b}");を出力するしかない。

 ゆえに、z≠xyの場合にBは&mimetex("\frac{1}{2}");の確率で1を出力する。

 したがって、[1][2]より、Bの成功確率は次のように計算できる。

&mimetex("Adv(B)");~
&mimetex("= \Pr[ B \, outputs \, 1 \|z=xy] - \Pr[B \, outputs \,1 \|z \not{=} xy ]");~
&mimetex("\ge (\frac{1}{2} + \epsilon) - \frac{1}{2}");~
&mimetex("= \epsilon");

 つまり、Bの成功確率はε以上であることがわかった。つまり、Aの存在を仮定して、Bの存在を示すことができる。

 しかし、<α>に対するDDH問題が困難であることを仮定すれば、Bの存在と矛盾する。よって、拡張ElGamal暗号をIND-CPA攻撃に成功する敵は存在しない。つまり、<α>に対するDDH問題が困難であるならば、拡張ElGamal暗号はIND-CPA安全であることが言える。 □

*参考文献 [#qa159b96]

-『現代暗号の基礎数理』
-ゼミノート
-WB41