定理(CS暗号)の証明のアイデア

攻撃者Aが構成(CS暗号)の公開鍵と暗号文
  • pk = (g1, g2, h=g1xg2y, c=g1a g2b, d=g1a' g2b'),
  • C* = (g1r*, g2r*, hr*m*=(g1r*)x(g2r*)ym*, (cdα*)r*=(g1a+α*a'g2b+α*b')r*)
を入手したとする。
まず、DDH仮定を用いて、(g1, g2, g1r*, g2r*)を(g1, g2,g3, g4)に置き換えると、
  • pk = (g1, g2, g1xg2y, g1a g2b, g1a' g2b'),
  • C* = (g3, g4, g3xg4ym*, g3a+α*a'g4b+α*b').
x,yはランダムなので、(g1xg2y, g3xg4y)をランダムな2要素(γ,δ)に置き換えてよい:
  • pk = (g1, g2, γ, g1a g2b, g1a' g2b'),
  • C* = (g3, g4, δm*, g3a+α*a'g4b+α*b')
δはm*にしか掛っていないので、m*は完全に隠される。

攻撃者Aが構成(CS暗号)の妥当な暗号文 c = (u,v,w,e) を生成したとすると、
  • α=H(u,v,w)に対し、e = ua+αa'vb+αb'
を満たさなければならない。
これを成り立たせるには、αはハッシュ値でその値を自由にコントロールすることができないので、Aはu, vを
  • u = g1s, v = g2s
という形で生成しなければならず、このとき、Aが復号オラクルから受け取る返答は、
  • uxvy = (g1x g2y)s = hs
となり、x, y に関する新しい情報は全く含まない。よって、m*は隠されたまま。

定理(CS暗号)の証明

構成(CS暗号)に対する任意のCCA攻撃者をAとする。Aを用いて判定DH仮定における識別者Dを構成する:

識別者D: par=(q,g1), (g2,g3,g4)を入力として、
  • pkを入力としてAを起動する。ただし、
    • x, y, a, b, a', b' ← Zq
    • h = g1x g2y, c = g1a g2b, d = g1a' g2b'
    • pk = (g1,g2,h,c,d,H), sk = (x,y,a,b,a',b').
  • Aからチャレンジクエリ(m0,m1)を受け取ったら、
    • 0または1をランダムに選択し、βとする。
    • C* = (u*=g3, v*=g4, w*=g3xg4ymβ, e*=g3a+α*a'g4b+α*b')を応答する。(α* := H(u*, v*, w* ))
  • Aから復号オラクルに対する問い合わせを受け取ったら、skを用いて復号し、結果を応答する。
  • Aが出力β'で終了したら、β =? β' の1ビットを出力とする。

識別者Dの解析:
  • 入力(g1, g2, g3, g4)がDH組であるとき:
    • あるランダムなrについて、g3 = g1r, g4 = g2r. このとき、
      • g3xg4ymβ = (g1xg2y)r mβ = hr mβ,
      • g3a+α*a'g4b+α*b' = (g1ag2b (g1a'g2b')α*)r = (cdα*)r.
    • よって、C* = Enc(pk, mβ; r). すなわち、DのAに対するシミュレーションは完ぺき。
    • 以上より、Pr[D = 1 | DH] = Pr[Aが成功].

入力(g1, g2, g3, g4)はランダムな組であるとする。
Aが復号クエリをまったく用いなかったとすると、Aが受け取る秘密鍵x,yに関する情報は、公開鍵h経由の、
  • h=g1xg2y と w*=g3xg4ymβのみ。
x,yは独立にそれぞれランダムなので、hとg3xg4yも独立にそれぞれランダム。
よって、このときg3xg4yはmβを完全に隠し、Pr[Aが成功] = 1/2.

あとは、Aの復号クエリがx,yについて追加情報を与えないことを示せばよい。
復号クエリ(u,v,w,e)がbadであるとは、『(g1,g2,u,v)がDH組でない』ことと定義する。
(badでない復号クエリをgoodと呼ぶ。)

主張1 goodな復号クエリに対する応答は、Aに秘密鍵x,y,a,b,a',b' に関する追加情報を全く漏らさない。

証明 (u=g1s,v=g2s,w,e)をgoodな復号クエリとする。
このとき、Aが返答として受け取る情報は高々m = w/(uxvy).
ここで、uxvy = (g1x g2y)s = hs.
これは、秘密鍵x,y,a,b,a',b' に関する追加情報を全く与えない。(x,yを知らなくてもsを知っていたら生成できるから。)Q.E.D.

主張2 Aがbadで(ありながら復号アルゴリズムの検証式をパスする)妥当な復号クエリを発する確率はネグリジブルηである。

証明 Aがbadで妥当な復号クエリC=(u=g1r1,v=g2r2,w,e)を初めて発したとする。
  • (u,v,w) = (u*,v*,w*)のとき:
    • Cの妥当性より、α=α*となり、C=C*となる。これはゲームのルールとして禁止されている。
  • (u,v,w)≠(u*,v*,w*) かつ H(u,v,w) = H(u*,v*,w*)のとき:
    • Hの衝突が得られ、Hの衝突困難性に反する。O.K.
  • H(u,v,w)≠H(u*,v*,w*)のとき:
    • α = H(u,v,w), α* = H(u*,v*,w*), γ = logg1(g2)とする。
    • Aが復号クエリCを発する前に知っていた、秘密鍵a,b,a',b'についての情報は、公開鍵とチャレンジ暗号文を経由して、以下の高々3次元分である:
      • logg1(c) = a + bγ, logg1(d) = a' + b'γ, logg1(e*) = (a+α*a')r1* + (b+α*b')r2
      • ( r1* := logg1(g3), r2* := logg2(g4) )
    • 一方、復号クエリCの妥当性より、 logg1(e) = (a+αa')r1 + (b+αb')r2γ.
    • 以上4次元分の情報はa,b,a',b'を一意的に決定する(r1*≠r2*,α≠α*,r1≠r2)。
    • すなわち、Aがbadで妥当な復号クエリを発するとすると、Aは高々3次元分の情報で、秘密鍵a,b,a',b'を一意に数学的に特定することとなる。
    • よって、Pr[Aがbadで妥当な復号クエリを発する] ≦ 1/q. Q.E.D.

主張1、主張2より、
  • Pr[D=1 | Random] = 1/2 + η.
よって、Dの識別利得は
  • | Pr[Aが成功] - (1/2 + η) | ≧ (Aの識別利得) - η.
判定DDH仮定より、Dの識別利得はネグリジブル。よって、Aの識別利得もネグリジブルである。
Q.E.D.















最終更新:2009年10月10日 20:41