proof)とは、証明者(Prover)が検証者(Verifier)に、 自分の持っている命題が真であることを伝えるのに、真であること以外、 何の知識も伝えることなく証明できるような対話(非対話)知識証明プロトコルである。 by Wikipedia Alice (Prover)は命題Pが真(True)である事を誰かに証明したい 命題P: 私は二十歳以上だ 命題P: 私はある暗号の秘密鍵 を知っている ちょっと何いってるのか わからない
[inputの金額の合計]=[outputの金額の合計] (手数料は0とする) また、送金額は0以上の値 BCネットワーク TX data [input] 100coin from: Tom to: Alice [output] Enc(80coin) from: Alice to: Bob [output] Enc(50coin) from: Alice to: Alice 悪いAlice Aliceは100coin分のunspent transactionのうち80をBobに送金、20をAliceに送金(おつ り)するが、送金額が暗号化されている事をいいことに、おつりを50にちょろまかした。 マイナーは復号化鍵をもっていないので金額不正に気付かない! 困るわ~ Miner Miner
Zerocoinのイメージ Alice Bob Carol Zerocoin Pool(宛先ブランクcoinたち) Commit: SHA(x) Commit: SHA(y) A or Bのシード を知ってるよ 1コインGet!! シード値:x ? BC上の別ユーザは リンクが分からない Zerocoinでは、Pedersen commitmentを利用して Bobの2重引き落しを防いでいる!!
Schnorr 離散群:G=<g>、生成元:g、元A∈Gが与えられた際に(G, g, A) prover:Pはverifier:Vに対して”A=g^x”となる”x”を知っている事をゼロ知識証明したい。 ※以下の全ての話はHVZKIP: Honest Verifier Zero Knowledge Interactive Proofモデル つまりVerifierは正しく乱数を生成する P V r ∈ Z|G| :乱数を生成 T=g^r T=g^r c∈ Z|G| :乱数を生成 c s=cx+rを計算 s Check!! g^s=(A^c)・T Zero Knowledge proofの3要素 1. Completeness:正しい知識を持っているPはプロトコルを成功させる(negligibleな失敗はOK) 2. Soundness:逆に正しい知識を持っていないPは失敗する(negligibleな成功はOK) 3. Zero Knowledge:verifier Vが対話証明中に得られるデータは、正しいPなしでもsimulateできる ※simulateのレベルは色々あるがsimulatorからget出来る情報の分布がPから得られる情報の分布と完全に一致する事が望ましい
1. [inputの金額の合計]=[outputの金額の合計]だろうか? 2. 送金額は[0~最大送金額]のインターバルに入っているか? Aliceは 命題P1 :input金額=output金額となる。 命題P2 :暗号文は[0~最大送金額]インターバルに入る。 に対するゼロ知識証明をトランザクションに付与する BCネットワーク TX data [input] 100coin from: Tom to: Alice [output] Enc(80coin) from: Alice to: Bob [output] Enc(50coin) from: Alice to: Alice Alice π1 , π2 : P1 , P2 に 対するゼロ知識証明 マイナーは、送金額は分から ないが、Aliceが不正していな い事は確認出来る