JP ZK Learning Club
  • 貢献について
  • 前提知識
    • 暗号学
      • 決定問題
      • P/NP問題
      • 計算複雑性理論
    • 数学
      • 代数的構造
      • 離散対数問題 (DLP)
      • 楕円曲線
      • 算術回路
  • PSE-Core-Program
    • Week 1
    • Week 2 さらなる暗号技術とSNARKsとSTARKs
    • Week 5 Frontier
  • zkSNARKs
    • Spartan
  • Folding Scheme
    • Nova
    • SuperNova
    • HyperNova
    • NeutronNova
    • CycleFold
  • Lookup Argument
    • 概要とLasso以前の提案
    • Lasso
  • zkVM
    • Backgrounds
      • Multi Linear extension(MLE)
      • Folding scheme
      • Lookup Singularity
      • Cycle of Curves
      • Extension Field
      • Glossary
      • CCS
      • Switch-board (Nebula)
    • Building Blocks
      • Binius
      • GKR
      • Circle STARK
      • Sum-check Protocol
    • 動作概要
    • ゼロ知識証明
      • メモリ読み込み・書き込みの一貫性
        • Merkle-Tree
        • Spice
        • Jolt-Memory-Checking
        • Nebula
        • Proof-for-Deep-Though
      • 命令の実行
      • バイトコードから命令へのデコード
    • プロジェクト
      • SP1
      • RISC-Zero
      • Jolt
      • Valida
      • Nexus
Powered by GitBook
On this page
  • SumCheck Protocol
  • R1CSインスタンスのSumCheckインスタンスへのエンコード
  • SPARK
  • References
  1. zkSNARKs

Spartan

PreviousWeek 5 FrontierNextNova

Last updated 7 months ago

SpartanはMultilinear-IOPベースのzkSNARKです。SumCheckProtocol、Polynomial Commitment、Computation Commitmentの3つの要素から成り立っています。

SpartanはProver Timeが高速で、少ない制約ではVerifier Timeも高速です。

SumCheck Protocol

ある多線形多項式Gのすべての点に対する評価の合計を証明します。

T=∑x∈{0,1}lG(x1,x2,...,xl)T = \sum _{x \in \{0,1\}^l} G(x_1,x_2,...,x_l)T=x∈{0,1}l∑​G(x1​,x2​,...,xl​)

この合計を効率的に証明するのがSumCheck Protocolです。

R1CSインスタンスのSumCheckインスタンスへのエンコード

R1CSインスタンスとは、次元mの行列A, B, Cに対して以下のようなzが存在するという関係を示すインスタンス {A, B, C, z}のことです。

Az∘Bz=CzAz \circ Bz = CzAz∘Bz=Cz

これをSumCheckインスタンスに変換しようとすると以下のようになります。(s=logm)

0=∑x∈{0,1}leq(x,τ)⋅F(x)0 = \sum _{x \in \{0,1\}^l} eq(x, \tau) \cdot F(x)0=x∈{0,1}l∑​eq(x,τ)⋅F(x)

where

F(x)=∑x∈{0,1}sA~(x,y)⋅z~(y)∗∑x∈{0,1}sB~(x,y)⋅z~(y)−∑x∈{0,1}sC~(x,y)⋅z~(y)F(x) = \sum _{x \in \{0,1\}^s} \tilde{A}(x,y) \cdot \tilde{z}(y) * \sum _{x \in \{0,1\}^s} \tilde{B}(x,y) \cdot \tilde{z}(y) - \sum _{x \in \{0,1\}^s} \tilde{C}(x,y) \cdot \tilde{z}(y)F(x)=x∈{0,1}s∑​A~(x,y)⋅z~(y)∗x∈{0,1}s∑​B~(x,y)⋅z~(y)−x∈{0,1}s∑​C~(x,y)⋅z~(y)

SPARK

ただ、A, B, Cは行列なので、これを変換しようとするとO(m^2)のコストがかかります。しかし、A, B, Cはほとんどの要素が0となるスパース行列です。なので、これを3つのDense Polynomialに分解することができます。このDense表現に対してコミットメントを適用することで、計算量を減らすことができます。

References

https://eprint.iacr.org/2019/550
https://github.com/microsoft/Spartan
https://youtu.be/FPQs7T7f_AU?si=x-YwrbS2fXFN1l-H