定理(Okamoto)の証明のアイデア

pk = (q, g1, g2, X), sk = (q, g1, g2, x1, x2)に関する、
岡本プロトコルのトランスクリプトは
  • コミットメント (Y), チャレンジ (c), レスポンス (z1, z2).
これについて、
  • g1z1g2z2 =? YXc
が成り立てば、検証者Vは受理。

コンカレントな攻撃者Aを用いて、
離散対数問題 (q, g1, g2) を解くアルゴリズムBを構成できる。
Bは、
  • x1, x2Zq, X = g1x1g2x2
として秘密鍵sk = (q, g1, g2, x1, x2)を知った状態でシミュレートできることがポイント。

定理(Okamoto)の証明

岡本プロトコルに対する任意のコンカレントな攻撃者をA=(A1 , A2)とする。
Aを用いて、GenGに関する離散対数問題アルゴリズムBを構成する:

B: (q, g1, g2)を入力として、
  • ※ Bは g2 = g1w となるwを求めたい。
  • x1, x2Zq, X = g1x1g2x2
  • pk = (q, g1, g2, X)を入力として、A1を起動する。
    • A1が証明者クローンとのやりとりを要求したら、
      • 秘密鍵sk = (q, g1, g2, x1, x2)を用いてオネストに対応する。
  • A1の出力stを受け取り、A2をstを入力として起動する。
  • ※ ここで、A2(st)は決定的としてよい。(stにランダムテープが含まれているとしてよい。)
    • A2からYを受け取ったら、c ← {0,1}l を返す。
    • A2から(z1,z2)を受け取ったら、
      • g1z1g2z2 = YXc でないならばアボート。
  • A2を再びstを入力として起動する。
    • A2からYを受け取り、c' ← {0,1}l を返す。 ※ A2(st)は決定的なので、必ず前と同じY.
    • A2から(z'1,z'2)を受け取ったら、
      • g1z'1g2z'2 = YXc' でないならばアボート。
  • c = c' ならばアボート。
  • (c - c')x2 = z2 - z'2 ならばアボート。
  • w = (z1 - z'1 - (c - c')x1)/((c - c')x2 - (z2 - z'2)) を出力して停止。
    • ※ g1z1g2z2 =? YXc
    • g1z'1g2z'2 =? YXc'
    • よって、
    • g1z1-z'1g2z2-z'2 = Xc-c'.
    • X = g1x1g2x2 より, w = DLogg1(g2)とおくと、
    • z1-z'1 + w (z2-z'2) = (c-c')(x1 + w x2)
    • よって、
    • w = (z1 - z'1 - (c - c')x1)/((c - c')x2 - (z2 - z'2)).

[Bの解析]:
明らかに、Bがアボートしなければ、その出力wは離散対数問題(q, g1, g2)の正しい解。よって、
  • Pr[Bが離散対数問題を解く] = Pr[Bがアボートしない].
一方、BのAに対するシミュレーションは完ぺきなので、
  • Pr[Bがアボートしない] ≧ Pr[証明者Q=A2(st)に対し、イベントRESが成立] - Pr[(c - c')x2 = z2 - z'2].
補題(Reset)より
  • Pr[RES] ≧ (Pr[Aがなりすましに成功] - 1/2l)2.
また、AのviewはXのみに依存し、x2とは独立なので、
  • Pr[(c - c')x2 = z2 - z'2] ≦ 1/2l.
以上より、
  • Pr[Bが離散対数問題を解く] ≧ (Pr[Aがなりすましに成功] - 1/2l)2 - 1/2l.
仮定より、
  • l はスーパーログなので、1/2lはネグリジブル。
  • Pr[Bが離散対数問題を解く]もネグリジブル。
よって、Pr[Aがなりすましに成功]もネグリジブル。(ただし、ネグリジブルの「度合い」は半分。)

Q.E.D.


























最終更新:2009年11月11日 15:29