定理(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 は、σの作り方から、
をもみたすので、必要ならば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,Z ≡c 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にデコミットを命じたら、
- AがオネストパーティCをコラプトしたら、
- Cがまだコミットしていなければ、1/2の確率で0を出力してアボートもしくは続行。
- Cがすでにコミットしていれば、(c, rc) をAに渡す。
- 出力.
[識別者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がコラプトされるとき、
以上より、
- 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