定理(REACT)の証明のアイデア
攻撃者Aが構成(REACT)の暗号文 y* = (a*←Enc(pk,r*), b*=G(r*)+m*, c*=H(r*,m*,a*,b*)) を入手しても、
- Encが一方向なので、r* はわからない。
- r*が分からないと、G(r*)はm*と同じサイズの(r*とは独立な)ランダム文字列。
- よって、G(r*)+m* は m* を完全に隠す。
攻撃者Aが構成(REACT)の妥当な暗号文 y = (a,b,c) を生成したとすると、
- a は a ← Enc(pk,r) となる r を決定する。
- ただし、Encは確率的なので、テクニカルには平文検査オラクルが必要となる。
- このrについて、 m = b - G(r) とするとき、等式 c = H(r,m,a,b) が成り立っていなければならない。
- よって、Aはrを知っているはずである。
- よって、Aはyの復号文 m = b - G(r) を知っているはずである。
- Aにとって復号オラクルは意味がない。
定理(REACT)の証明
構成(REACT)に対する任意のCCA攻撃者をAとする。Aの成功確率を 1/2 + ε(n) とおく(識別利得はε(n))。
Aを用いてベースの
公開鍵暗号(Gen,Enc,Dec) の平文検査攻撃におけるインバーターBを構成する:
インバーターB: pk, a*(← Enc(pk,r*))を入力として、
- (REACTの公開鍵としての)pkを入力としてAを起動する。
- AからGオラクルに対する問い合わせrを受け取ったら、
- (a*,r)を平文検査オラクルに尋ね、返答としてtrueを受けっとたら、rを出力して終了。
- G[r]が未定義ならば、g ← {0,1}l, G[r] = g
- g = G[r]を返答する。
- AからHオラクルに対する問い合わせ(r,m,a,b)を受け取ったら、
- (a*,r)を平文検査オラクルに尋ね、返答としてtrueを受けっとたら、rを出力して終了。
- H[r,m,a,b]が未定義ならば、h ← {0,1}k, H[r,m,a,b] = h
- h = H[r,m,a,b]を返答する。
- Aから復号オラクルに対する問い合わせy=(a,b,c)を受け取ったら、
- c=H[r,m,a,b]となる r,m をH記憶から検索する。
- みつかれば m を、みつからなければ⊥を返答する。
- Aからチャレンジクエリ(m0,m1)を受け取ったら、
- β← {0,1}, g* ← {0,1}l, c* ← {0,1}k, y* = (a*, b*=g*+mβ, c*)
- /* このとき、G,Hに対し、g* = G(r*), c* = H(r*,mβ,a*,b*) というimplicitな関係を定義していることに注意。*/
- y*を返答する。
- Aが終了したら、終了する。
[攻撃者Bの解析]:
- AskR: 『AがGオラクルまたはHオラクルにr*をたずねる。』
- Fake: 『Aが復号オラクルにy=(a,b,c)を問い合わせ、a ← Enc(pk,r), m = b - G(r) について、
- c = H(r,m,a,b)が成り立っているのに、(つまり、問い合わせyは妥当な暗号文であるのに、)
- AはHオラクルに(r, m, a, b)を問い合わせていない。』
- Fakeが起きない限り、復号オラクルのシミュレーションは正しい。
- シミュレートされた復号オラクルの返答は復号アルゴリズムの返答に等しい。
- さらに、Fakeが起きない限り、
- AskRがおきないうちは、BのAに対するシミュレーションは完全である。(g*やc*がテキトウであることがバレナイ)
- AskRがおきれば、Bは直ちに成功する。
- AskRが最後までおきなかったら、Aの成功確率は高々1/2である。
条件¬FakeのもとでのAの成功確率を 1/2 + ε'(n) とする。
条件¬Fakeのもとでの確率をPrNoFake[・]とかくことにすると、
- 1/2+ε'(n) = PrNoFake[Aが成功する | AskR] PrNoFake[AskR] + PrNoFake[Aが成功する | ¬AskR] PrNoFake[¬AskR]
- ≦ PrNoFake[AskR] + 1/2 = Pr[Bが成功する] + 1/2.
よって、仮定より(Gen,Enc,Dec)は一方向なので、ε'(n)はネグリジブルである。
さらに、
- 1/2 +ε'(n) = Pr[Aが成功する | ¬Fake] ≧ Pr[Aが成功する] - Pr[Fake] = 1/2 + ε(n) - Pr[Fake]
より
- ε(n) ≦ ε'(n) + Pr[Fake] .
よって、後は以下の主張を示せば、定理の証明は完了。
主張 Pr[Fake]はネグリジブルである。
証明 復号クエリy=(a,b,c)に対して、AはHオラクルに(r,m,a,b)を問い合わせていないのに、
- a ← Enc(pk, r), m = b - G(r), c = H(r,m,a,b)
が成り立っているとする。
- (r,m,a,b) = (r*,mβ,a*,b*) のとき:
- y = y* となるので、ゲームのルールより禁止。
- (r,m,a,b) ≠ (r*,mβ,a*,b*) のとき:
- H(r,m,a,b)は、チャレンジ暗号文y*に含まれるH(r*,m*,a*,b*)とは独立な確率変数。
- 仮定より、H(r,m,a,b)はAにHオラクル経由でも入力されていない。
- 以上より、AのviewはH(r,m,a,b)と独立。したがって、Aの出力したcもH(r,m,a,b)と独立。
- よって、c = H(r,m,a,b) となる確率はネグリジブルである。
Q.E.D.
Q.E.D.
最終更新:2009年10月10日 20:06