Polynomial Commitment Schemes
Polynomial commitment schemes (PCS) are a core cryptographic primitive in proof systems, including zkVMs. At a high level, they allow a prover to commit to a polynomial and later open that commitment (i.e. evaluate the underlying polynomial) at a point chosen by the verifier, while ensuring the binding property (the prover cannot change the polynomial after committing to it).
This mechanism is powerful because it allows succinct verification of polynomial relationships without the prover needing to reveal the entire polynomial. The verifier only learns the evaluation at chosen points.
Usage
A PCS comprises three algorithms (plus sometimes a preprocessing step): , , and . In the context of a larger proof system like Jolt, polynomial commitment schemes are typically used in some variation of the following flow:
- Depending on the PCS, there may be a preprocessing step, where some public data is generated. This data may be needed for , , or . This preprocessing could involve a trusted setup (if not, it is called a transparent setup/PCS).
- Prover commits to polynomial , and the commitment is sent to the verifier.
- In some subsequent part of the proof system, the prover and verifier arrive at some claimed evaluation (typically for a random point ). For example, this claimed evaluation might be an output claim of a sumcheck.
- The prover provides an opening proof for the evaluation, and sends the proof to the verifier.
- The verifier then verifies the opening proof. If the verification succeeds, then the verifier can rest assured that as claimed.
Role in Jolt
In Jolt, the prover commits to several witness polynomials derived from the execution trace being proven. These polynomial commitments tie together the various algebraic claims generated during proving. Jolt supports two backends:
| Dory | Akita | |
|---|---|---|
| Cryptographic construction | Elliptic curve pairings over BN254 | Lattice commitments |
| Proof field | BN254 scalar field | 128-bit prime field |
| Trace commitments | Separate commitments to witness polynomials | One packed OneHotTrace commitment containing address and increment columns |
| Final opening | Random linear combination using additive homomorphism | Native grouped opening across trace, advice, and committed-program objects |
| Zero knowledge in Jolt | Available with zk via BlindFold | Not currently supported |
| Selection | Default | akita Cargo feature |
Both backends use transparent setup and exploit Jolt's small, sparse witness values. They share the sumcheck and lookup architecture, but their commitment layouts and final opening proofs differ. The prover and verifier must be built for the same protocol; akita and zk are mutually exclusive. See backend selection for commands and SDK availability.
Further Reading
For a more formal and detailed introduction to polynomial commitment schemes, we recommend Section 7.3 of Justin Thaler’s Proofs, Arguments, and Zero Knowledge. That section explains how polynomial commitments integrate with interactive proof protocols such as GKR, and why they are essential for constructing succinct arguments.