Spartan
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
Last updated