Skip to article frontmatterSkip to article content

Neo: Lattice-Based Folding Scheme for CCS

ZKPunk

In Neo, a vector of field elements zFmz\in\mathbb{F}^m is first decomposed into a matrix of small coefficients, then committed via a random matrix. These homomorphic commitments allow the prover to fold many constraint-checks into one, using a single sum-check invocation over a small prime-field extension. The following explains the commitment scheme and how it enables the folding (sum-check) protocol.

Lattice-Based Matrix Commitment Scheme

Neo’s commitment scheme builds on Ajtai’s Hash Functions and Commitment Schemes Ajtai, 1996. In Ajtai’s scheme, the Setup\mathrm{Setup} samples a random matrix MM over a cyclotomic ring RqR_q, and Commit(pp,z)\mathrm{Commit}(pp,z) outputs c=Mzc = M z for a low-norm ring-vector zz.

Neo adapts this to commit field vectors by embedding each scalar into a ring polynomial.

Concretely, fix a small prime field Fq\mathbb{F}_q and a base bb such that every field element fits in dd digits (bd>qb^d > q). We define a decomposition map Decompb:FqmFd×m\text{Decomp}_b:\mathbb{F}_q^m\to \mathbb{F}^{d\times m} as below.

The commitment is then:

This scheme is formally an SS-module homomorphic matrix commitment. In particular, if ρ1,ρ2\rho_1,\rho_2 are rotation matrices (elements of the commutative ring SS) and Z1,Z2Z_1,Z_2 are two message matrices, the commitments satisfy

ρ1,Commit(Z1)+ρ2,Commit(Z2)=Commit(,ρ1Z1+ρ2Z2,)\rho_1,\text{Commit}(Z_1) + \rho_2,\text{Commit}(Z_2) = \text{Commit}(,\rho_1 Z_1 + \rho_2 Z_2,)

. Intuitively, matrix multiplication in the ring distributes over addition. Equivalently, the commit map Commit(Z)=M,cf1(Z)\text{Commit}(Z)=M,\mathrm{cf}^{-1}(Z) is linear over this ring. We will use this to combine commitments in the folding protocol.

Homomorphism and Pay-Per-Bit Properties

The commitment is linearly homomorphic, meaning you can add or scale commitments and it corresponds to adding or scaling the underlying vectors. For example, if z1,z2Fqmz_1,z_2\in\mathbb{F}_q^m and ci=Commit(Zi)c_i=\mathrm{Commit}(Z_i) are their commitments, then for any scalars α,βFq\alpha,\beta\in\mathbb{F}_q we have

α,c1+β,c2=Commit(,αZ1+βZ2,),.\alpha,c_1 + \beta,c_2 = \mathrm{Commit}(,\alpha Z_1 + \beta Z_2,),.

In plain terms, Commit(z1)+Commit(z2)=Commit(z1+z2)\mathrm{Commit}(z_1)+\mathrm{Commit}(z_2)=\mathrm{Commit}(z_1+z_2), etc. As a concrete toy example in F72\mathbb{F}_7^2: let z1=[5,3]z_1=[5,3] and z2=[2,4]z_2=[2,4]. Then z1+z2=[7,7][0,0](mod7)z_1+z_2=[7,7]\equiv [0,0]\pmod 7. Homomorphism guarantees

Commit(z1)+Commit(z2)=Commit([0,0]).\mathrm{Commit}(z_1)+\mathrm{Commit}(z_2) = \mathrm{Commit}([0,0]).

The same combination holds after embedding into matrices and ring elements. This linearity is crucial for folding many constraints into one check.

Another key feature is pay-per-bit cost. The cost of computing c=Mzc=Mz' scales roughly with the number of nonzero bits in zz', i.e. the bit-size of zz. In effect, committing small integers is much cheaper than committing large ones. As the paper notes, “committing to a vector of bits is 32×32\times cheaper than committing to a vector of 32-bit values”. Intuitively, a ring multiplication aba\cdot b only “pays” for the nonzero coefficients of bb. For example, consider z=[1,1]F72z=[1,1]\in\mathbb{F}_7^2 versus z=[5,3]z=[5,3] (which have 1-bit vs 3-bit entries). The decomp matrix for [1,1][1,1] has very few ones, so computing MzMz' involves fewer rotations/additions than for [5,3][5,3]. This pay-per-bit property can greatly speed up committing sparse or small witnesses.

Folding in the CCS Relation

In the CCS relation, the public instance includes constraint matrices Mj{M_j} and a polynomial ff, and the prover’s witness is a vector z=[xw]z=[x|w] whose entries satisfy f(M1z,,Mtz)=0f(M_1 z,\dots,M_t z)=0. Using Neo’s commitment, the prover first commits to zz: it computes Z=Decompb(z)Z=\mathrm{Decomp}_b(z) and sends c=Commit(Z)c = \mathrm{Commit}(Z), revealing the committed version of the input part xx and hiding the private witness ww. The goal is to prove that the committed zz indeed satisfies all constraints MjzM_j z in one folded proof.

Because the commit is homomorphic, we can combine multiple checks into one. Specifically, Neo follows HyperNova’s approach of encoding all constraints into a single polynomial and using a sum-check protocol. The key ideas are:

  1. Partial Evaluations: For each constraint matrix MjM_j, the prover computes the multilinear extension evaluation. Concretely, pick a random challenge rFqlognr\in\mathbb{F}_q^{\log n}. Using the decomposed ZZ, compute the partial evaluation vectors yj=Z,MjT,rFqdy_j = Z,M_j^T,r \in \mathbb{F}_q^d. By the decomposition lemma, the weighted sum of these (according to powers of bb) reconstructs the evaluation MjzM_j z at rr. The prover sends (r,yj)(r,{y_j}) as evaluation claims along with cc.
  2. Polynomial Encoding & Sum-Check: The prover constructs a multivariate polynomial Q(X)Q(X) that encodes the constraint ff and the evaluations yjy_j. Roughly, QQ is designed so that
    X0,1dQ(X)=f(M1z,,Mtz),\sum_{X\in{0,1}^d} Q(X) = f\bigl(M_1 z,\dots,M_t z\bigr),
    by summing over the hypercube of binary vectors. The verifier and prover engage in the classic sum-check protocol to check this equality. The sum-check iteratively checks sums over slices of QQ, and its final output is a claim that
    v=Q(r),v = Q(r'),
    at a fresh random point rFqdr'\in\mathbb{F}_q^d. Intuitively, this single claim replaces the many original checks. (Neo’s innovation is that this sum-check is done over a small prime-field extension, unlike prior lattice schemes over cyclotomic rings.)
  3. Random Linear Combination: After sum-check, the prover has a single evaluation claim v=Q(r)v=Q(r') and also the original yjy_j claims (now at point rr'). These are all linear statements about the committed ZZ. The prover and verifier then take a random linear combination of all evaluation claims (and of the commitments cc themselves). By Lemma 2 of the paper, this preserves validity: if each individual claim was consistent with some ZiZ_i, then a random combination is consistent with Z=ρiZiZ = \sum \rho_i Z_i. Crucially, the commitment scheme being an SS-module homomorphism means the combined commitment c=ρicic' = \sum \rho_i c_i equals Commit(Z)\mathrm{Commit}(Z) for the combined witness matrix ZZ. In other words, many checks on different ZiZ_i are folded into one check on ZZ.
  4. Final Check (Decomposition): The result is a single instance of the Matrix Evaluation relation: the prover has one commitment c=Commit(z)c'=\mathrm{Commit}(z') and one evaluation v=Q(r)v=Q(r') to verify. At this point, the verifier checks that zz' is consistent with cc' (via the commitment opening) and that Q(r)=vQ(r')=v. A final decomposition step ensures that zz' has small coefficients (necessary for security) by splitting zz' into base-bb form, which the prover can do using the split_b map. After this, one obtains a single folded CCS instance which the verifier checks directly.

Putting it all together, Neo’s folding protocol uses one sum-check over the hypercube and linear combinations of commitments to collapse many constraint-checks into one. The matrix commitment’s linearity makes the combination step simple and secure. In practice, this yields succinct proofs: the prover only pays homomorphic commitment and sum-check costs, and committing bits is especially cheap thanks to the pay-per-bit design. This achieves a lattice-based, post-quantum secure folding scheme for CCS that supports small prime fields (e.g. Goldilocks) and a single sum-check invocation.

Each step leverages the matrix commitment’s structure: the homomorphism makes step 4 valid, and pay-per-bit keeps commitment costs low in step 1. The sum-check step 3 uses standard multilinear sum-check arguments to fold many checks into one. Altogether, Neo provides a practical folding-friendly protocol: small-field-friendly, post-quantum secure, and efficient when witnesses have low bit-size.

References
  1. Nguyen, W., & Setty, S. (2025). Neo: Lattice-based folding scheme for CCS over small fields and pay-per-bit commitments. Cryptology ePrint Archive, Paper 2025/294. https://eprint.iacr.org/2025/294
  2. Ajtai, M. (1996). Generating hard instances of lattice problems. STOC ’96: Proceedings of the Twenty-Eighth Annual ACM Symposium on Theory of Computing, 99–108. 10.1145/237814.237838
  3. Kothapalli, A., & Setty, S. (2024). HyperNova: Recursive Arguments for Customizable Constraint Systems. Advances in Cryptology – CRYPTO 2024: 44th Annual International Cryptology Conference, Santa Barbara, CA, USA, August 18–22, 2024, Proceedings, Part X, 345–379. 10.1007/978-3-031-68403-6_11