In Neo, a vector of field elements z∈Fm 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.
Neo’s commitment scheme builds on Ajtai’s Hash Functions and Commitment SchemesAjtai, 1996. In Ajtai’s scheme, the Setup samples a random matrix M over a cyclotomic ring Rq, and Commit(pp,z) outputs c=Mz for a low-norm ring-vector z.
Neo adapts this to commit field vectors by embedding each scalar into a ring polynomial.
Concretely, fix a small prime field Fq and a base b such that every field element fits in d digits (bd>q). We define a decomposition map Decompb:Fqm→Fd×m as below.
The commitment is then:
Setup: Sample a random matrix M∈Rqκ×(m) and output public parameters pp=M.
Commit: To commit to Z∈Fd×m, convert each column of Z into a ring element zi′ as above, form the ring-vector z′=(z1′,…,zm′), and output
Since each zi′ has “low norm” (its coefficients are small), this binding commitment is secure under LWE/MISIS assumptions.
This scheme is formally an S-module homomorphic matrix commitment. In particular, if ρ1,ρ2 are rotation matrices (elements of the commutative ring S) and Z1,Z2 are two message matrices, the commitments satisfy
. Intuitively, matrix multiplication in the ring distributes over addition. Equivalently, the commit map Commit(Z)=M,cf−1(Z) is linear over this ring. We will use this to combine commitments in the folding protocol.
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,z2∈Fqm and ci=Commit(Zi) are their commitments, then for any scalars α,β∈Fq we have
In plain terms, Commit(z1)+Commit(z2)=Commit(z1+z2), etc. As a concrete toy example in F72: let z1=[5,3] and z2=[2,4]. Then z1+z2=[7,7]≡[0,0](mod7). Homomorphism guarantees
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=Mz′ scales roughly with the number of nonzero bits in z′, i.e. the bit-size of z. In effect, committing small integers is much cheaper than committing large ones. As the paper notes, “committing to a vector of bits is 32× cheaper than committing to a vector of 32-bit values”. Intuitively, a ring multiplication a⋅b only “pays” for the nonzero coefficients of b. For example, consider z=[1,1]∈F72 versus z=[5,3] (which have 1-bit vs 3-bit entries). The decomp matrix for [1,1] has very few ones, so computing Mz′ involves fewer rotations/additions than for [5,3]. This pay-per-bit property can greatly speed up committing sparse or small witnesses.
In the CCS relation, the public instance includes constraint matrices Mj and a polynomial f, and the prover’s witness is a vector z=[x∣w] whose entries satisfy f(M1z,…,Mtz)=0. Using Neo’s commitment, the prover first commits to z: it computes Z=Decompb(z) and sends c=Commit(Z), revealing the committed version of the input part x and hiding the private witness w. The goal is to prove that the committed z indeed satisfies all constraints Mjz 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:
Partial Evaluations: For each constraint matrix Mj, the prover computes the multilinear extension evaluation. Concretely, pick a random challenge r∈Fqlogn. Using the decomposed Z, compute the partial evaluation vectors yj=Z,MjT,r∈Fqd. By the decomposition lemma, the weighted sum of these (according to powers of b) reconstructs the evaluation Mjz at r. The prover sends (r,yj) as evaluation claims along with c.
Polynomial Encoding & Sum-Check: The prover constructs a multivariate polynomial Q(X) that encodes the constraint f and the evaluations yj. Roughly, Q is designed so that
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 Q, and its final output is a claim that
at a fresh random point r′∈Fqd. 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.)
Random Linear Combination: After sum-check, the prover has a single evaluation claim v=Q(r′) and also the original yj claims (now at point r′). These are all linear statements about the committed Z. The prover and verifier then take a random linear combination of all evaluation claims (and of the commitments c themselves). By Lemma 2 of the paper, this preserves validity: if each individual claim was consistent with some Zi, then a random combination is consistent with Z=∑ρiZi. Crucially, the commitment scheme being an S-module homomorphism means the combined commitment c′=∑ρici equals Commit(Z) for the combined witness matrix Z. In other words, many checks on different Zi are folded into one check on Z.
Final Check (Decomposition): The result is a single instance of the Matrix Evaluation relation: the prover has one commitment c′=Commit(z′) and one evaluation v=Q(r′) to verify. At this point, the verifier checks that z′ is consistent with c′ (via the commitment opening) and that Q(r′)=v. A final decomposition step ensures that z′ has small coefficients (necessary for security) by splitting z′ into base-b 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.
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
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
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