定理(2DH)の証明のアイデア

プロトコル(2DH)のトランスクリプトは
  • (Pi, s, α), (Pj, s, β).
ここで、
  • α = gx, β = gy.
出力されるセッション鍵は
  • γ = αy = βx = gxy.

AMモデルなので、攻撃者はメッセージの改ざんや挿入はできない。
判定DH仮定より、攻撃者にとってセッション鍵γ = gxy は一様ランダム。

定理(2DH)の証明

構成(2DH)が定義(SK安全)の条件1を満たすことは明らか。
条件2を満たすことを示す。
構成(2DH)に対する、AMモデルにおける、任意の攻撃者をAとする。
Aのセッション呼び出し回数の上限をlとおく。

Aを用いて判定DH問題の識別者Dを構成する:
識別者D: (q, g, α*, β*, γ*)を入力として、
  • ※ γ*がDH(g,α*, β*)なのか一様ランダムなのか、判定したい。
  • r ← {1,...,l}
  • (q,g)を2DHプロトコルの公開パラメータにセットし、攻撃者Aを呼び出す:
    • Aが第n(≠r)番目のセッションについて、あるパーティPkに実行要求または入力メッセージを発したら、
      • パーティPkの代わりにプロトコル2DHをオネストに実行し返答を返す。
    • AがPiに第r番目のセッションの実行要求(Pi,Pj,sr)を発したら、
      • Piの出力メッセージとして、(Pi, sr, α*)を返す。
    • AがPjに入力メッセージとして(Pi, sr, α*)を発したら、
      • Pjの出力メッセージとして(Pj, sr, β*)を返し、Pjでローカル出力が生成されたことを知らせる。
    • AがPiに入力メッセージとして(Pi, sr, β*)を発したら、
      • Piでローカル出力が生成されたことを知らせる。
    • AがあるパーティPkにコラプト命令を発したら、
      • k = i or j で、第r番目のセッションがまだ失効していないならば、
        • b' ← {0,1}を出力してアボート。※ DはPiとPjの内部状態は知らない。
      • そうでないならば、パーティPkのすべての内部状態を返す。
    • Aがあるパーティ内のあるセッションにセッション状態開示クエリを発したら、
      • 該当セッションがsrなら、b' ← {0,1}を出力してアボート。※ Dはセッションsrの内部状態は知らない。
      • そうでないならば、該当セッションの状態を返す。
    • Aがあるパーティ内のあるセッションにセッション出力クエリを発したら、
      • 該当セッションがsrで、
        • セッションsrが未失効なら、b' ← {0,1}を出力して停止。※ Dはセッションsrの内部状態は知らない。
        • セッションsrが失効なら、空文字を返す。
      • そうでないならば、該当セッションのセッション鍵を返す。
    • Aがあるパーティ内のあるセッションにセッション失効クエリを発したら、
      • オネストに対応する。
    • Aがあるパーティ内のあるセッションをテストセッションに指定したら、
      • 該当セッションがsrでなければ、b' ← {0,1}を出力して停止。
      • 該当セッションがsrならば、γ* を返す。
  • Aが出力b'で停止したら、
    • b' を出力して停止する。

[識別者Dの解析:]
イベント GoodChoice: 『テストセッションが第r番目のセッションsrである』
  • Pr[ b' = b | ¬GoodChoice ] = 1/2.
  • Pr[ b' = b | GoodChoice ] = Pr[ (AMモデルで)Aが成功 ] =: 1/2 + ε.
    • AMモデルなので、Dによるテストセッションsrのシミュレーション、とくにγ*の分布は正しい。
      • Aはα*やβ*を書き換えられない。

よって、
  • Pr[ Dが成功 ] = Pr[ b' = b ]
  • = Pr[¬GoodChoice]・(1/2) + Pr[GoodChoice]・(1/2 + ε)
  • = (1-1/l)・(1/2) + (1/l)・(1/2 + ε)
  • = 1/2 + ε/l.

よって、判定DH仮定より、ε/l はネグリジブル。
よって、εもネグリジブル。

Q.E.D.

















最終更新:2009年12月02日 17:55