LogoLogo
LogoLogo
  • Introduction
    • About Us
    • Notations & Definitions
      • MPC
      • ZK
    • Contribute to this Site!
  • Primitives
    • Multiplication
      • Karatsuba Multiplication
      • Toom-Cook Multiplication
    • NAF (Non-adjacent form)
    • Chinese Remainder Theorem (CRT)
    • Euclidean Algorithm
      • Extended Euclidean Algorithm
      • Binary Euclidean Algorithm
      • Extended Binary Euclidean Algorithm
    • Coding Theory
      • Linear Code
    • Number Theoretic Transform
    • Abstract Algebra
      • Group
        • -Morphisms
        • Batch Inverse
      • Elliptic Curve
        • Weierstrass Curve
          • Coordinate Forms
          • Fast Elliptic Curve Arithmetic and Improved WEIL Pairing Evaluation
        • Edwards Curve
          • Coordinate Forms
          • Twisted Edwards ↔ Short Weierstrass Transformation
        • Batch Inverse for Batch Point Additions
        • Scalar Multiplication
          • Double-and-add
          • GLV Decomposition
        • MSM
          • Pippenger's Algorithm
          • Signed Bucket Index
          • CycloneMSM
          • EdMSM
          • cuZK
        • 2-Chain and 2-Cycle of Elliptic Curves
    • Encryption Scheme
      • ElGamal Encryption
    • Modular Arithmetic
      • Modular Reduction
        • Barrett Reduction
        • Montgomery Reduction
      • Modular Inverse
        • Bernstein-Yang's Inverse
    • Multiset Check
    • Sumcheck
    • Commitment Scheme
      • Fflonk
      • SHPlonk
      • Zeromorph
  • MPC
    • Yao's Garbled Circuits
    • GMW
    • BMR
  • ZK
    • Arithmetization
      • R1CS
      • PLONK
      • AIR
    • Folding
      • LatticeFold
      • Nova
        • Nova over Cycles of Curves
    • Lookup
      • Lasso
      • LogUp-GKR
    • SNARK
      • Groth16
      • HyperPlonk
      • Spartan
        • SPARK
    • STARK
      • Additive NTT
      • Basefold
      • Binius
      • Brakedown
      • CircleSTARK
      • FRI
        • FRI Security Features and Optimizations
      • DEEP FRI
      • STIR
      • WHIR
    • Distributed ZK
      • Ryan's Trick for Distributed Groth16
  • Application
    • zkLogin
    • zkHoldem
    • zkTLS
      • DECO
      • Proxying is enough
  • zkVM
Powered by GitBook
On this page
Export as PDF
  1. Primitives

Sumcheck

PreviousMultiset CheckNextCommitment Scheme

Last updated 3 months ago

The sumcheck protocol is a cryptographic proof protocol designed to efficiently verify whether the sum of a polynomial f(X0,X1,…,Xn−1)f(X_0, X_1, …, X_{n-1})f(X0​,X1​,…,Xn−1​) over a specified domain equals a claimed value.

Given:

  • A multivariate polynomial f(X0,X1,…,Xn−1)f(X_0, X_1, …, X_{n-1})f(X0​,X1​,…,Xn−1​)

  • A finite domain DDD, often a Boolean hypercube {0,1}n\{0, 1\}^n{0,1}n

  • A claimed sum C=∑X∈Dnf(X)C = \sum_{X \in D^n}f(X)C=∑X∈Dn​f(X)

The goal is for the prover to convince the verifier that the claimed CCC is correct, without the verifier evaluating f(X)f(X)f(X) on all DnD^nDn elements (which would be computationally expensive).

Protocol Steps

  1. The prover claims the equation below and sends this CCC to the verifier.

C=∑X0,X1,…,Xn−1∈Df(X0,X1,…,Xn−1)C = \sum_{X_0, X_1, \dots, X_{n-1} \in D} f(X_0, X_1, \dots, X_{n-1})C=X0​,X1​,…,Xn−1​∈D∑​f(X0​,X1​,…,Xn−1​)
  1. The prover sends the univariate polynomial below, which reduces the problem from nnn variables to n−1n - 1n−1.

g0(X0)=∑X0,X1,…,Xn−1∈Df(X0,X1,…,Xn−1)g_0(X_0) = \sum_{X_0, X_1, \dots, X_{n-1} \in D}f(X_0, X_1, \dots, X_{n-1})g0​(X0​)=X0​,X1​,…,Xn−1​∈D∑​f(X0​,X1​,…,Xn−1​)
  1. The verifier checks the equation below and if this doesn't hold the verifier rejects.

∑X0∈Dg0(X0)=?C\sum_{X_0 \in D}g_0(X_0) \stackrel{?}= CX0​∈D∑​g0​(X0​)=?C
  1. The prover now claims:

  1. The verifier checks:

  1. This process continues iteratively, reducing the dimension at each step until reaching a single variable.

  2. The prover now claims:

  1. The verifier checks:

The verifier chooses a random r0r_0r0​ and sends it to the prover.

g1(X1)=∑X2,…,Xn−1∈Df(r0,X1,…,Xn−1)g_1(X_1) = \sum_{X_2, \dots, X_{n-1} \in D}f(r_0, X_1, \dots, X_{n-1})g1​(X1​)=X2​,…,Xn−1​∈D∑​f(r0​,X1​,…,Xn−1​)
∑X1∈Dg1(X1)=?g0(r0)\sum_{X_1 \in D}g_1(X_1) \stackrel{?} = g_0(r_0)X1​∈D∑​g1​(X1​)=?g0​(r0​)
gn−2(Xn−2)=∑Xn−1∈Df(r0,r1,…,Xn−2,Xn−1)g_{n-2}(X_{n-2}) = \sum_{X_{n-1} \in D}f(r_0, r_1, \dots, X_{n-2}, X_{n-1})gn−2​(Xn−2​)=Xn−1​∈D∑​f(r0​,r1​,…,Xn−2​,Xn−1​)
∑Xn−1∈Dgn−1(Xn−1)=?gn−2(rn−2)\sum_{X_{n-1} \in D}g_{n-1}(X_{n-1}) \stackrel{?}=g_{n-2}(r_{n-2})Xn−1​∈D∑​gn−1​(Xn−1​)=?gn−2​(rn−2​)

The verifier chooses a random rn−1r_{n-1}rn−1​ and sends it to the prover.

The verifier access to the oracle at random rn−1r_{n-1}rn−1​ and checks:

gn−1(rn−1)=?f(r0,r1,…,rn−2,rn−1)g_{n-1}(r_{n-1}) \stackrel{?}= f(r_0, r_1, \dots, r_{n-2}, r_{n-1} )gn−1​(rn−1​)=?f(r0​,r1​,…,rn−2​,rn−1​)

Written by from

A41
ryan Kim