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

pk = (N, e, X), sk = (N, e, x)に関する、GQプロトコルのトランスクリプトは
  • コミットメント (Y), チャレンジ (c), レスポンス (z).
これについて、
  • ze? YXc (mod N)
が成り立てば、検証者Vは受理する。

[トランスクリプトから秘密鍵xの(大事な)情報が漏れないこと]
トランスクリプトは、秘密鍵x を用いなくても、
  • z' ← ZN*, c' ← {0,1}l, Y' = z'e X-c' mod N
と生成できる。
よって、トランスクリプトは(秘密鍵xをもたない)誰にでも生成できる。

[秘密鍵xをもたなければ、証明者になりすませないこと]
攻撃者Aがなりすましを試み、コミットメントYを送った時点を考える。
Aが(無視できない確率で)なりすましに成功するならば、Aは、
2通りのc1、c2に対し、それぞれ、妥当な応答z1、z2を返せるはず:
  • z1e ≡ YXc1 (mod N),
  • z2e ≡ YXc2 (mod N).
このとき、
  • (z1/z2)e ≡ Xc1-c2 (mod N).
これから、we ≡ X (mod N) となるwを効率的に計算できる。
つまり、Aは秘密鍵w=xを知っている。

定理(GQ1)の証明

GQプロトコルに対する任意の受動的な攻撃者をA=(A1 , A2)とする。
Aを用いて、primeGenRSAが生成する(e,N)について、
RSA問題(e,N,X)を解くアルゴリズムBを構成する:

B: (e, N, X)を入力として、
  • ※ Bは we ≡ X (mod N) となるwを計算したい。
  • pk = (e, N, X) を入力としてA1を起動する:
    • A1 がトランスクリプトを要求したら、
      • z' ← ZN*, c' ← {0,1}l, Y' = z'e X-c' mod N
      • (Y', c', z')を返す。
  • A1の出力stを受け取り、A2をstを入力として起動する。
  • ※ ここで、A2(st)は決定的としてよい。(stに必要なランダムテープが含まれているとしてよいから。)
    • A2からYを受け取ったら、c1 ← {0,1}l を返す。
    • A2からz1を受け取ったら、
      • z1e? YXc1 (mod N) でないならば、アボート。
  • A2を再びstを入力として起動する。
    • A2から(先と同一の)Yを受け取り、c2 ← {0,1}l を返す。 
    • A2からz2を受け取ったら、
      • z2e? YXc2 (mod N) でないならば、アボート。
  • c1 = c2 ならばアボート。
  • (z1/z2)e ≡ Xc1-c2 (mod N) より、we ≡ X (mod N) となるwを計算し、出力する。
  • ※ gcd(c1 - c2, e) = 1 なので 補題(CS)を適用できる。

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

Q.E.D.


























最終更新:2009年11月19日 17:57