Upgrade to Pro — share decks privately, control downloads, hide ads and more …

zk-SNARKの理論【2021/03/04 ETHTerakoya × Blockchain...

zk-SNARKの理論【2021/03/04 ETHTerakoya × Blockchain EXE】

「次世代リサーチャーから見るブロックチェーン技術の可能性とは?」(2021/3/4)

tsubaki kyosuke

March 13, 2021
Tweet

More Decks by tsubaki kyosuke

Other Decks in Technology

Transcript

  1. zk-SNARKとは zk-SNARK(Zero Knowledge Succinct Non-interactive Arguments of Knowledge)とは非対話型ゼロ知 識証明を構築している技術。 l

    ブロックチェーン におけるトランザクションの秘匿化 l イーサリアムのスケーリング問題のソリューション などに応用されている。 また、zk-SNARKは「Pinocchio Protocol」と呼ばれる「暗号学的仮定のみに依存し、一般的な計算を 効率的に検証するために構築されたシステム」のもとで構築されており、簡潔でありながら、強力 なセキュリティを実現している。
  2. zk-SNARKの流れ l関数𝑓(𝑥, 𝑤)は入力が正しい場合のみ1を出力し、正しくない場合は0を出力する関数。 l証明者は検証者に対して𝑓 𝑥, 𝑤 = 1となるような証拠𝑤を持っていることをそれ自体を 明らかにせずに証明したい。 l証明者は「正しい証拠𝑤を持っている」ことを証明する証明𝜋を作り、検証者に送る。

    l検証者は受け取った証明𝜋を検証し、それが正しい場合は受け入れ、正しくない場合は 拒否する。 証明者と検証者の間に「信頼できる第三者」をおくことで、非対話のゼロ知識証明を構築 し、効率的で安全性の高い証明が可能になる。
  3. zk-SNARKの構成 l Generator 信頼できる第三者。セットアップとして事前に CRS(common reference string)を生成し、 𝑝𝑘と vkをそれぞれ証明者と検証者に送る。 l

    証明者 𝑝𝑘と𝑥を受け取り、𝑤から証明𝜋を作成し、検証 者に送る。 l 検証者 vkと証明𝜋と𝑥を受け取り、その証明が正しいも のであれば受理し、そうでなければ拒否する。
  4. 代数的性質へ変換 l 関数𝑓が加算、乗算ゲートからなる演算回路として表現できる。 l この演算回路から目的多項式𝑡(𝑥)と関数𝑓を表す3つの多項式の組 𝑣!(𝑥), … , 𝑣"(𝑥) ,

    𝑤!(𝑥), … , 𝑤"(𝑥) , 𝑦! 𝑥 , … , 𝑦" 𝑥 が得 られる。(これらは左入力多項式、右入力多項式、出力多項式と呼ばれる。) l この回路に入力を与えると𝑐# , … , 𝑐" を得ることができる。この値は回路の入出力と各ゲートの出力値(中間値)を表す。 l この𝑐# , … , 𝑐" と3つの多項式の組の線形結合から以下のような多項式𝑝(𝑥)を作ることができる。 𝑝 𝑥 = 𝑣! 𝑥 + / $%# " 𝑐$ 0 𝑣$ 𝑥 0 𝑤! 𝑥 + / $%# " 𝑐$ 0 𝑤$ 𝑥 − 𝑦! 𝑥 + / $%# " 𝑐$ 0 𝑦$ 𝑥 l 回路に対する入力が「正しい」場合、𝑝(𝑥)は𝑡(𝑥)を割り切ることができ、ℎ 𝑥 𝑡 𝑥 = 𝑝(𝑥)を満たすようなℎ(𝑥)が存在する。 l 「正しくない」場合は割り切ることができず、上式を満たすようなℎ(𝑥)は存在しない 「𝑓 𝑥, 𝑤 = 1となる証拠𝑤を持っている」 「ℎ 𝑥 𝑡 𝑥 = 𝑝(𝑥)を満たす多項 式ℎ(𝑥)を知っている」
  5. 多項式の検証 𝑝 𝑥 = 𝑣! 𝑥 + & "#$ %

    𝑐" ( 𝑣" 𝑥 ( 𝑤! 𝑥 + & "#$ % 𝑐" ( 𝑤" 𝑥 − 𝑦! 𝑥 + & "#$ % 𝑐" ( 𝑦" 𝑥 𝑝 𝑥 = 𝑣, 𝑥 + 𝑣 𝑥 1 𝑤, 𝑥 + 𝑤 𝑥 − 𝑦, 𝑥 + 𝑦 𝑥 𝑡 𝑥 , 𝑣! 𝑥 , 𝑤! 𝑥 , 𝑦! 𝑥 ℎ 𝑥 , 𝑣 𝑥 , 𝑤 𝑥 , 𝑦(𝑥) 証明𝜋= ℎ 𝑥 𝑡 𝑥 = 𝑝(𝑥) 送られてきた多項式が正しいか検証 証明者 検証者 𝑐" , … 𝑐# 演算回路から得られた3つの多項式の組と𝑐" , … , 𝑐# の線形結合 証明者のみが知っている値 ? ℎ 𝑥 𝑡 𝑥 = 𝑝(𝑥)を満たすℎ 𝑥 を持って いるという証明 回路に入力を与えると得られる
  6. 多項式を隠蔽する 一方向性関数𝐸 𝐸 𝑥 = 𝑔4 性質: 𝑥から𝑔!を作ることは簡単だが、 𝑔!から𝑥を特定するのは難しい (離散対数問題)

    一方向性関数𝐸(𝑥)でℎ 𝑥 , 𝑣 𝑥 , 𝑤 𝑥 , 𝑦(𝑥)を隠蔽 して検証者に送る。 このとき、これらの多項式の詳細を知ることは難し いため、検証者は𝒄𝟏, … 𝒄𝒎 の値を盗むことはできな い。 𝑐/, … 𝑐0 を知るということは回路を満たす入力を 知っていることになる。 𝐸 ℎ 𝑥 , 𝐸 𝑣 𝑥 , 𝐸 𝑤 𝑥 , 𝐸 𝑦 𝑥 証明者 検証者 証明𝜋 =
  7. ペアリングによる検証 例えば、証明者は𝑥9 𝑥: +𝑥; : = 0を満たす(𝑎9 𝑎: 𝑎; )を知っていること検

    証者にその値を明らかにせずに証明することができる。 𝑒(𝑔, 𝑔)<!<"=<# " = e(𝑔<!, 𝑔<") , 𝑒(𝑔<#, 𝑔<#) = 𝑒(𝑔, 𝑔)> 写像𝑒が双線形性を持つとき、その写像をペアリングと呼ぶ。 ペアリングにより「IDベース暗号」や「検索可能暗号」、「関数型暗号」 などの技術を実現できる。 ?
  8. ペアリングによる多項式の検証 𝑔-(.), 𝑔/(.), 𝑔0(.), 𝑔 1(.) 証明者 検証者 𝑒 𝑔-

    . , 𝑔2 . = 𝑒(𝑔, 𝑔)- . 2 . = 𝑒(𝑔, 𝑔) /(3/ . 4 0(30 . 5 1(31 . = 𝑒(𝑔/( . 𝑔/ . , 𝑔0( . 𝑔0 . )/𝑒(𝑔1( . 𝑔1 . , 𝑔) 𝑡 𝑥 , 𝑣! 𝑥 , 𝑤! 𝑥 , 𝑦! 𝑥 多項式の詳細を知ることは難しいが、 ℎ 𝑥 𝑡(𝑥) = 𝑝(𝑥)が成り立つかどうかの 検証は可能 証明𝜋 =
  9. 非対話のゼロ知識証明 𝑔-(.), 𝑔/(.), 𝑔0(.), 𝑔 1(.) pk vk pk 𝑔$&(&),

    … , 𝑔$(&) , 𝑔(&(&), … , 𝑔((&) , 𝑔)&(&), … , 𝑔)(&) vk 𝑔*(&), 𝑔$&(&), 𝑔(&(&), 𝑔)&(&) 𝑔$(&) = 𝑔$& & +,'-$' & +⋯+,()$((&) = 𝑔$&(&) 4 𝑔,'-$' & 4 ⋯ 4 𝑔,()$((&) = (𝑔$&(&))" 4 (𝑔$'(&)),' 4 ⋯ 4 (𝑔$((&)),( 𝑒 𝑔! " , 𝑔# " = 𝑒(𝑔$! " 𝑔$ " , 𝑔%! " 𝑔% " )/𝑒(𝑔&! " 𝑔& " , 𝑔) 0/1 検証者 証明者 Generator 証明𝜋 = public input 𝑥 public input 𝑥 private input 𝑤 𝑐" , … , 𝑐# 演算回路の入力から取得