SpartanはMultilinear-IOPベースのzkSNARKです。SumCheckProtocol、Polynomial Commitment、Computation Commitmentの3つの要素から成り立っています。
SpartanはProver Timeが高速で、少ない制約ではVerifier Timeも高速です。
SumCheck Protocol
ある多線形多項式Gのすべての点に対する評価の合計を証明します。
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=Cz これをSumCheckインスタンスに変換しようとすると以下のようになります。(s=logm)
0=x∈{0,1}l∑eq(x,τ)⋅F(x) where
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