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

CRS (pk0, pk1, σ)について、
プロトコルUCCOneTimeのコミットメント y は
  • y = Gpk0(r) または Gpk1(r) + σ.

CRSモデルなので、攻撃者AはCRSを要求する。
これに対し、シミュレーターSはCRSとして(pk0, pk1, σ) を
  • (sk0, pk0) ← f.Gen,  (sk1, pk1) ← f.Gen
  • σ = Gpk0(r0) + Gpk1(r1)
とつくる。Gの疑似乱数性により、このσはAにとって真のCRSと区別がつかない。

抽出可能性:
攻撃者Aがコミットメント y* を生成したら、シミュレータSは、
  • sk0を用いて、y*がGpk0のイメージか否か判定する。
  • そうならば y*は0へのコミット、そうでないならば y*は1へのコミットと判断する。

両義性:
シミュレータSは、オネストなコミッターの代理として、
  • コミットメント y = Gpk0(r0)
を生成する。y は、σの作り方から、
  • y = Gpk1(r1) + σ
をもみたすので、必要ならば0にも1にもデコミットできる。

定理(UCCOneTime)の証明

プロトコルUCCOneTimeをπとし、任意の効率的な攻撃者Aと環境Zを取る。

(ブラックボックス)シミュレータS:
  • [初期化]
    • 偽のCRS (pk0, pk1, σ) を生成する:
      • (sk0, pk0) ← f.Gen,  (sk1, pk1) ← f.Gen
      • σ = Gpk0(r0) + Gpk1(r1).
    • 攻撃者Aのプログラムを内部で起動する。
    • 以降、任意のタイミングで、
      • 攻撃者AがCRSを求めたら、(pk0, pk1, σ) を返答する。
      • (外部の)環境Zと(内部でシミュレートしている)攻撃者Aの間でメッセージのやりとりが発生したら、そのまま中継する。
  • [オネストパーティのコミットメント] FCOMから (Reciept, sid=(C,R,sid'))を受け取ったら、
    • y = Gpk0(r0) とし、(Com, sid, y)のRへの送信をCの名前で攻撃者Aに依頼する。
  • [オネストパーティのデコミットメント] FCOMから (Open, sid=(C,R,sid'), b)を受け取ったら、
    • b = 0 ならば、(0, r0)のRへの送信をCの名前で攻撃者Aに依頼する。
    • b = 1 ならば、(1, r1)のRへの送信をCの名前で攻撃者Aに依頼する。
  • [コラプトパーティのコミットメント] 攻撃者AにコラプトされたパーティCが(Com, sid=(C,R,sid'), y*)をRへ送ったら、
    • sk0を用いて、y*がGpk0のイメージか否か判定する。
    • そうならば b' = 0 とし、そうでないならば b' = 1 とする。
    • Cの名前で(Commit, sid, b')をFCOMに渡す。
  • [コラプトパーティのデコミットメント] 攻撃者AにコラプトされたパーティCが(Open, sid=(C,R,sid'), b*)をRへ送ったら、
    • b*とb'が異なるならば、アボート。
    • そうでないならば、Cの名前で(Open, sid)をFCOMに渡す。
  • [コラプト要求] 攻撃者Aから (Corrupt-committer, sid=(C,R,sid')) を受け取ったら、
    • 自身も (Corrupt-committer, sid=(C,R,sid')) を FCOMに渡し、
      • bを受け取ったら、Cの内部状態として (b, rb) をAに渡す。
    • (さらに、攻撃者Aが新たに値 b' を提供しても、無視する。)

このシミュレータSが
  • IDEALFCOM,S,Zc EXECπ,A,Z
をみたすことを示したい。

そのためにハイブリッドな分布HYBπ,A,Zを用意する:
  • HYBπ,A,Z: 以下を除いてEXECπ,A,Zと同じ:
    • CRSのσは σ = Gpk0(r0) + Gpk1(r1) とつくる。
    • オネストパーティの0へのコミットメントは y = Gpk0(r0) でシミュレート。
    • オネストパーティの1へのコミットメントは y = Gpk1(r1) + σ でシミュレート。
    • (デコミットメントはπの指示通り (b, rb) を送信。)

主張1  EXECπ,A,Z  ≡c  HYBπ,A,Z.

証明. 攻撃者Aと環境Zを用いて、疑似乱数生成器Gの識別者Dを構成する:

識別者D 文字列zと公開鍵pkを入力として、
  • ※ zが疑似ランダムか真にランダムかを識別したい。
  • 初期化.
    • ランダムビット c を選択し、pk1-c = pk とする。
    • ※ cは後のシミュレーションで、Zの指示に基づいて、コミッターがコミットするビット b の推測。
    • もう一つの鍵ペア (skc, pkc) ← f.Gen を生成。
    • ランダムな rc ← {0,1}n をとり、σ = Gpkc(rc) + z とする。
    • ※ r1-cはわからない(または存在しない)ことに注意。
  • シミュレーション.
    • (pk0, pk1, σ) をCRSとしてA,Zとの間でリアルライフプロトコルをシミュレートする。
    • ZがオネストパーティCにビットbのコミットを命じたら、
      • b ≠ c のときは、0を出力してアボート。
      • b = c のときは、
        • b = 0のとき、Cの名前で Gpk0(r0) をRへ送信。
        • b = 1のとき、Cの名前で Gpk1(r1) + σ をRへ送信。
    • ZがオネストパーティCにデコミットを命じたら、
      • Cの名前で (c, rc) をRへ送信。
    • AがオネストパーティCをコラプトしたら、
      • Cがまだコミットしていなければ、1/2の確率で0を出力してアボートもしくは続行。
      • Cがすでにコミットしていれば、(c, rc) をAに渡す。
  • 出力.
    • (まだアボートしていなければ)Zの出力を出力。

[識別者Dの解析]
zが真にランダムとする。D内のシミュレーションにおいて、
  • コミッターCがオネストならば、
    • cはZのviewに属さないので、b = c となる確率は 1/2.
    • b ≠ c ならば、Zは常に0を出力。
    • b = c ならば、ZのviewはREAL(=EXECπ,A,Z)におけるそれと同一なので、ZはREALと同じ確率で1を出力。
    • 以上より、ZはREALの半分の確率で1を出力
  • コミッターCがコラプトされるとき、
    • トリビアルに、ZはREALの半分の確率で1を出力
以上より、
  • Pr[D = 1 | zが真にランダム] = Pr[ D内のZが1を出力 | zが真にランダム] = 1/2 Pr[EXECπ,A,Z = 1].
全く同様にして、
  • Pr[D = 1 | zが疑似ランダム] = Pr[ D内のZが1を出力 | zが疑似ランダム] = 1/2 Pr[HYBπ,A,Z = 1].
Gは疑似乱数生成器なので上の2つの確率の差はネグリジブル。よって、主張を得る。  q.e.d.

主張2  HYBπ,A,Z  ≡c  IDEALFCOM,S,Z.

証明. HYBとIDEALの唯一の違いは、
  • HYBでは、コラプトパーティの言いなりにコミット・デコミットが実行される。
  • IDEALでは、コラプトパーティのコミットメントy*からb'を取り出し、b'にFCOMでコミットする。
    • (その後、コラプトパーティはb*にデコミットしようとする。)
よって、主張を示すには、IDEALにおいて、『b' ≠ b*』となること、すなわち、
  • イベント『y*がGpk0のイメージで、同時にy*+σがGpk1のイメージである』
がネグリジブルな確率でしか起きないことを示せばよい。

攻撃者Aと環境Zを用いて、疑似乱数生成器Gの識別者Dを構成する:

識別者D 文字列zと公開鍵pkを入力として、
  • ※ zが疑似ランダムか真にランダムかを識別したい。
  • 初期化.
    • pk1 = pk とし、もう一つの鍵ペア (sk0, pk0) ← f.Gen を生成。
    • ランダムな r0 ← {0,1}n をとり、σ = Gpk0(r0) + z とする。
  • シミュレーション.
    • (pk0, pk1, σ) をCRSとしてS,Zとの間でIDEALをシミュレートする。
    • Zがオネストパーティにコミットを命じたら、0を出力してアボートする。
    • 攻撃者AにコラプトされたパーティCがコミットメント y* をRへ送ったら、
      • sk0を用いて y* がGpk0のイメージか否か判定する。
      • そうであったとき、さらにCがy*を b*=1 にデコミットしたら(これが問題のイベント)、1を出力して停止。
      • それ以外の場合は、0を出力して停止。

[識別者Dの解析]
Dが1を出力するのは、あるr0*とr1*があって、
  • Gpk0(r0*) = Gpk1(r1*) + (Gpk0(r0) + z)
となるときのみ。このとき、
  • z ∈ { Gpk0(r0) + Gpk0(r0*) + Gpk1(r1*) | r0, r0*, r1* ∈ {0,1}n }.

zが真にランダムのとき、この確率は高々 2-n

よって、Gは疑似乱数生成器なので、zが疑似ランダムのときもDが1を出力する確率はネグリジブル。
すなわち、IDEALで懸案のイベントが発生する確率はネグリジブル。  q.e.d.

主張1, 主張2 より定理を得る。
Q.E.D.
























最終更新:2010年01月07日 17:35