Back to BlogsZero-Knowledge Proof Architecture: How ZK Works, How to Build With It, and Why It Could Become a Core Layer of Computing
Zero-knowledge proofs, or ZKPs, have moved from being a relatively specialized area of theoretical cryptography into a practical technology for proving computation, scaling blockchains, protecting sensitive information, and verifying software execution.
The important shift is conceptual.
A traditional system often asks a verifier to trust an organization, inspect the underlying data, or re-run the computation themselves.
A zero-knowledge system can instead ask a prover to demonstrate:
“This computation was performed correctly, and I can prove it without revealing the private information used to perform it.”
That property has consequences far beyond blockchain privacy.
A bank can prove that a transaction satisfies a compliance rule without exposing the customer's complete financial history. A user can prove eligibility without revealing their identity attributes. A rollup can execute thousands of transactions off-chain and provide a compact proof that the resulting state transition is correct. A virtual machine can execute a program and produce a cryptographic proof that the execution followed the program's rules.
Ethereum's current research direction illustrates the scale of the idea: instead of requiring every validator to re-execute every transaction, a specialized prover could execute computation and generate a proof that other nodes verify much more cheaply. Ethereum describes this transition as moving from “everyone re-executes” toward “one proves, everyone verifies.”
This article breaks down the architecture underneath that idea.
1. What Is a Zero-Knowledge Proof?
At the most basic level, a zero-knowledge proof lets one party - the prover - convince another party - the verifier - that a statement is true without revealing the prover's private witness beyond what is implied by the public statement.
A proof system normally works with:
- a public statement x
- a private witness w
- a relation R(x, w) describing what constitutes a valid witness
- a proof π
Conceptually:
R(x, w) = 1
means:
The prover computes:
π = Prove(x, w)
and the verifier checks:
Verify(x, π) = true
without receiving w.
A sound zero-knowledge system is built around three core properties:
Completeness
If the statement is true and both parties follow the protocol, the verifier should accept.
Soundness
If the statement is false, a malicious prover should not be able to generate an accepted proof except with negligible probability.
Zero-knowledge
The verifier should learn no additional useful information about the private witness from the proof beyond the validity of the statement.
These properties are the foundation of modern ZK systems.
There is an important practical distinction, however:
Zero-knowledge is not the same thing as a validity proof.
A ZK proof system can prove that a computation was performed correctly while the relevant transaction data remains publicly available.
This is exactly how many ZK rollups work. The proof verifies the correctness of a state transition, while enough transaction or state data is still published so that the system's state can be independently reconstructed.
So there are really two dimensions:
What is being achieved?
┌─────────────────────────────┐
│ Correctness / Validity │
│ │
│ “This computation is valid.” │
└─────────────────────────────┘
+
┌─────────────────────────────┐
│ Privacy / Zero-Knowledge │
│ │
│ “Private inputs stay hidden.”│
└─────────────────────────────┘
A production architecture must explicitly decide which of these it needs.
2. The Core Mental Model
The easiest way to understand ZK architecture is to stop thinking about proofs as magical cryptographic objects and think about them as verified computation.
Suppose a user wants to prove:
The user has:
Private:
password = "..."
The verifier has:
Public:
hash(password) = H
The prover wants to prove:
Know password such that:
Hash(password) = H
without revealing the password.
The ZK system converts that statement into a mathematical object that can be checked without exposing the witness.
The general architecture becomes:
PRIVATE WORLD
┌───────────────────────────┐
│ Private inputs / witness │
│ │
│ passwords │
│ keys │
│ financial data │
│ credentials │
│ proprietary computation │
└─────────────┬─────────────┘
│
▼
┌───────────────┐
│ Circuit / VM │
│ │
│ Constraints │
│ + execution │
└───────┬───────┘
│
▼
┌───────────────┐
│ Prover │
│ │
│ Generates π │
└───────┬───────┘
│
proof + public
inputs
│
▼
┌───────────────┐
│ Verifier │
│ │
│ Verify(x, π) │
└───────┬───────┘
│
ACCEPT / REJECT
The difficult engineering work happens between the private input and the proof.
That is where circuits, finite fields, polynomial commitments, constraint systems, witness generation, proving algorithms, recursion, hardware acceleration, and verification all enter the picture.
3. The Architecture of a ZK System
A production-grade ZK application can be understood as several layers.
Layer
Responsibility
Application
Defines what should be proved
Relation / Circuit
Converts business logic into mathematical constraints
Arithmetization
Represents computation using algebraic structures
Witness
Supplies private values satisfying the constraints
Prover
Generates the cryptographic proof
Proof system
Provides soundness, zero-knowledge and succinctness
Commitment layer
Commits to polynomial or algebraic data
Verifier
Checks the proof
Integration layer
Connects verification to applications, APIs or blockchains
Infrastructure
Handles proving jobs, queues, storage, hardware and scaling
This layering is important because not every ZK system looks the same.
A small identity application may have:
Browser
↓
Circuit
↓
WASM prover
↓
Proof
↓
Smart contract verifier
A large rollup can look more like:
Users
↓
Sequencer
↓
Execution engine
↓
State transition
↓
Trace / witness generation
↓
Prover cluster
↓
Recursive aggregation
↓
Final proof
↓
L1 verifier contract
↓
Canonical state update
And a ZK virtual machine can look like:
Program
↓
zkVM
↓
Execution trace
↓
Machine constraints
↓
STARK/SNARK proving system
↓
Proof
↓
Verifier
The underlying principle remains the same:
4. Relations, Witnesses and Public Inputs
Everything starts with the statement.
Suppose the application wants to prove:
There are many ways to represent that statement.
A conventional system might reveal:
Date of birth: 1999-04-12
and the verifier computes:
Current date - DOB >= 18 years
That is simple, but unnecessary disclosure may occur.
A ZK design can instead make the private witness:
birth_date
identity_secret
credential_signature
and the public input:
current_date
issuer_public_key
credential_commitment
The circuit expresses:
1. The credential is authentic.
2. The birth date belongs to the credential.
3. The birth date satisfies the age rule.
4. The proof corresponds to the expected public commitment.
The verifier learns:
Valid = true
but does not necessarily learn the exact birth date.
This distinction leads to a powerful design principle:
Prove predicates, not raw data.
Instead of asking:
“What is your date of birth?”
ask:
“Can you prove that your age is at least 18?”
Instead of:
“What is your bank balance?”
ask:
“Can you prove that your balance is at least $50,000?”
Instead of:
“Show me your complete financial history.”
ask:
“Can you prove that your income satisfies this condition?”
Instead of:
“Give me the complete dataset.”
ask:
“Can you prove that your computation over the dataset satisfies these constraints?”
This is one of the most important ways to think about ZK system design.
5. Circuits: Turning Programs Into Mathematics
Ordinary software is written in terms of operations such as:
if
for
while
hash
compare
sort
read
write
call
ZK proving systems generally cannot simply take arbitrary source code and magically prove it efficiently.
The computation must be represented in a form that the proof system understands.
This process is commonly called arithmetization.
The computation is transformed into algebraic constraints, typically over a finite field. Halo 2, for example, describes circuits in terms of polynomial constraints over a field.
A very simple computation:
z = x * y
can be represented as:
x · y - z = 0
That looks trivial, but it is the fundamental transformation.
The computer program becomes a mathematical relation.
6. Why Finite Fields Matter
Most modern proof systems perform their arithmetic over finite fields.
A finite field is a set of values in which addition, subtraction, multiplication and division (except division by zero) behave according to well-defined algebraic rules.
For example, conceptually:
a + b mod p
a × b mod p
where p is a prime.
ZK systems use finite fields because their algebraic structure makes polynomial identities tractable.
Instead of thinking:
CPU:
ADD
MUL
LOAD
STORE
JUMP
a circuit-oriented ZK system often thinks more like:
Polynomial relationships
+
constraints
+
commitments
+
evaluations
That difference is responsible for much of the complexity - and much of the power - of ZK proving.
7. Constraint Systems
Several representations have historically been important.
R1CS
Rank-1 Constraint Systems represent computation through equations of the general form:
(A · w) × (B · w) = C · w
R1CS became particularly common in early SNARK tooling and remains important conceptually.
PLONKish systems
Modern proving systems often use a more flexible constraint model based on polynomial commitments, custom gates, permutations and lookup arguments.
Halo 2, for example, uses advice columns, fixed columns, instance columns, equality constraints and lookup arguments within a PLONK-style architecture.
AIR
STARK systems commonly use an Algebraic Intermediate Representation, or AIR.
Rather than describing the computation as a set of circuit gates, AIR describes relationships among successive rows of an execution trace.
For example:
state[t + 1] = f(state[t])
can become a polynomial constraint describing how a machine or computation evolves over time.
The original STARK construction describes this conversion from computational integrity statements into algebraic representations and ultimately low-degree polynomial checks, using techniques including FRI.
8. Witness Generation
Once the circuit is defined, the prover must create a witness.
The witness is the complete assignment of values to variables needed to satisfy the constraints.
Consider:
x = 7
y = 8
z = 56
The witness might be:
w = [7, 8, 56]
For a real application, however, the witness can be enormous.
An identity circuit may include:
private identity fields
credential signatures
Merkle paths
hash states
nullifiers
commitments
timestamps
A rollup might generate witnesses involving:
thousands of transactions
account states
Merkle paths
signatures
nonces
balances
intermediate roots
A zkVM can generate an execution trace containing information about every relevant machine step.
This is why witness generation itself is an important part of ZK infrastructure.
For large circuits, the witness can become one of the major computational and memory bottlenecks. Circom, for example, can generate native C++ witness calculators because large circuits can be significantly faster using native execution than browser-oriented WASM calculators.
9. The Prover
The prover is the computationally expensive component.
Its job is essentially:
Private witness
+
Circuit
+
Public inputs
↓
Generate cryptographic proof π
The verifier then receives:
Public inputs
+
π
and performs a much smaller computation.
This asymmetry is intentional.
A useful abstraction is:
Prover cost = High
Verifier cost = Low
Proof size = Small
The exact cost profile depends heavily on the proof system.
This asymmetry is what makes ZK useful for systems where computation can be concentrated in specialized infrastructure while verification must happen cheaply in many places.
10. What the Prover Is Actually Doing
The internal mathematics differs between proving systems, but a modern proof pipeline may involve:
1. Execute computation
2. Generate witness / trace
3. Encode witness algebraically
4. Build polynomials
5. Commit to polynomials
6. Construct constraint relationships
7. Sample cryptographic challenges
8. Generate evaluation proofs
9. Add zero-knowledge blinding
10. Produce final proof
Halo 2's proving-system documentation describes a concrete pipeline involving commitments to circuit polynomials, construction of a vanishing argument, polynomial evaluations, multipoint opening arguments, and an inner-product argument.
The important intuition is:
It is constructing a mathematical object that commits to the computation while allowing the verifier to test whether the commitments are internally consistent and satisfy the required constraints.
11. Polynomial Commitments
Polynomial commitments are one of the central building blocks of modern ZK systems.
The problem is:
Conceptually:
Polynomial P(X)
↓
Commit(P)
↓
C
Later:
“I claim P(r) = y”
The prover can provide an opening proof showing that the commitment really corresponds to a polynomial with that evaluation.
This creates a mechanism for verifying large algebraic computations without transmitting the entire mathematical object.
Different proving systems use different commitment technologies.
Common families include:
- KZG commitments
- Inner-product-based commitments
- Merkle commitments
- FRI-based polynomial proximity techniques
These choices have major consequences for setup assumptions, proof size, performance, recursion and hardware requirements.
12. SNARKs vs STARKs
Two names dominate the discussion:
SNARKs
and
STARKs.
They solve related problems but make different engineering trade-offs.
Characteristic
SNARK-style systems
STARK-style systems
Proof size
Usually very small
Usually larger
Verification
Very efficient
Efficient
Transparency
Depends on construction
Transparent by design in common STARK constructions
Trusted setup
Some systems require it
Typically no trusted setup
Algebra
Often elliptic-curve based
Typically hash/FRI based
Large computations
Efficient in many designs
Particularly attractive for large traces
Quantum considerations
Depends on cryptographic assumptions
Hash-based approaches offer stronger post-quantum prospects
Groth16 is a classic pairing-based SNARK with very small proofs, but it uses circuit-specific setup assumptions. PLONK-style systems generalized several aspects of circuit proving and can support more reusable setup models depending on the construction.
STARKs use a different architecture. The original STARK work introduced FRI, a low-degree testing mechanism that supports transparent proving and verification of large algebraic computations without relying on a conventional trusted setup.
Ethereum's documentation similarly describes SNARKs as attractive for compact proofs and inexpensive verification, while STARKs offer transparency and stronger long-term prospects against quantum attacks, at the cost of larger proofs.
There is no universal winner.
The correct choice depends on the application.
13. PLONKish Architectures
One of the major trends in ZK proving has been the evolution toward flexible constraint systems often described as PLONKish.
Instead of representing everything as simple multiplication constraints, these systems can provide:
Custom gates
Lookup tables
Permutation arguments
Polynomial commitments
Multiple columns
Reusable circuit structures
This matters because real computation contains structures that are awkward to express as simple arithmetic.
For example, a cryptographic hash may be dramatically cheaper to implement using a custom gate or specialized lookup structure than by reducing every individual operation into basic constraints.
Halo 2 provides a useful example of this architecture. Its system includes custom gates, lookup arguments and permutation constraints, and allows larger circuit constructions to be composed from reusable “chips.”
This is part of a broader trend:
14. Lookups
Lookups are particularly important for practical ZK systems.
Imagine a computation needs to check whether a value belongs to a predefined set:
0
1
2
3
...
255
Instead of decomposing the value through many arithmetic constraints, the circuit can perform a lookup.
The conceptual operation is:
value ∈ Table
Lookup arguments allow proof systems to express such relationships efficiently.
They are useful for:
Range checks
Byte decomposition
Bit operations
Cryptographic primitives
Instruction tables
Hash functions
Opcode verification
Halo 2, for example, uses lookup arguments to enforce that circuit values belong to specified sets, and supports more general table-based relationships.
This is one reason modern ZK circuits can be considerably more expressive than the earliest circuit architectures.
15. Merkle Trees and State Commitments
Hash-based commitments are another fundamental component.
Suppose a system maintains one million accounts.
Publishing the entire database every time something changes would be impractical.
Instead, a Merkle tree creates a compact commitment:
Root
│
┌───────┴───────┐
│ │
Hash Hash
/ \ / \
... ... ... ...
The root acts as a commitment to the complete state.
A user can prove:
“This account is part of the committed state.”
using a Merkle path.
The proof can contain only the required path:
leaf
+
sibling hash 1
+
sibling hash 2
+
...
+
root
rather than the full database.
ZK systems frequently combine Merkle trees with proofs to demonstrate state membership or correct state updates.
Ethereum's ZK-rollup architecture uses Merkle roots to represent L2 state and validity proofs to establish that a proposed new state root resulted from valid execution.
16. A Complete ZK Rollup Architecture
The rollup model is one of the clearest demonstrations of ZK architecture at scale.
A simplified architecture looks like this:
USERS
│
▼
┌─────────────┐
│ Sequencer │
└──────┬──────┘
│
▼
┌─────────────┐
│ Execution │
│ Engine / VM │
└──────┬──────┘
│
state transition
│
▼
┌─────────────┐
│ Witness / │
│ Trace │
└──────┬──────┘
│
▼
┌────────────────┐
│ Prover Cluster │
└───────┬────────┘
│
recursive proofs
│
▼
┌──────────┐
│ Final ZK │
│ Proof │
└────┬─────┘
│
▼
┌──────────────────────┐
│ Ethereum L1 Contract │
│ │
│ Verify proof │
│ Update state root │
└──────────────────────┘
The important property is that Ethereum does not need to re-execute the entire batch.
The operator executes the batch and produces the proof.
The L1 contract verifies the proof.
If verification succeeds, the proposed state transition can be accepted.
Ethereum's documentation describes this architecture as execution and state storage happening off-chain, while smart contracts on Ethereum verify validity proofs and manage the rollup's canonical state.
17. Data Availability Is a Separate Problem
One of the most misunderstood parts of ZK rollups is data availability.
A validity proof answers:
“Was this state transition computed correctly?”
It does not automatically answer:
“Do I have the data needed to reconstruct the state?”
Those are different questions.
A rollup therefore has at least two major cryptographic/infrastructure concerns:
Computation correctness
+
Data availability
Ethereum rollups can publish relevant data through calldata or blobs. EIP-4844 introduced blob-carrying transactions specifically to provide a more scalable data-availability mechanism for rollups.
This distinction is crucial when designing ZK infrastructure.
18. The Rise of zkVMs
Circuits are powerful, but manually expressing an entire complex application as constraints can be expensive.
This leads to another major approach:
Zero-knowledge virtual machines.
Instead of writing a circuit for every application, the system provides a virtual machine whose execution itself can be proven.
Conceptually:
Normal software
Program
↓
CPU
↓
Result
becomes:
ZK software
Program
↓
zkVM
↓
Execution trace
↓
ZK proof
↓
Result + proof
This allows developers to write ordinary programs in supported languages and then prove their execution.
The trade-off is that the proving system now has to represent the behavior of the machine itself:
Registers
Memory
Instructions
Control flow
Arithmetic
System calls
Cryptographic operations
Ethereum is actively researching ZK execution environments using RISC-V-based zkVMs for block proving. Its 2026 documentation lists implementations including OpenVM, RISC Zero, Airbender, Jolt and Zisk as part of this research ecosystem.
This direction is strategically important.
Instead of:
Everything becomes a custom circuit
the model becomes:
Write software
+
run it in a provable environment
+
generate a proof of execution
That is much closer to how conventional software development works.
19. Direct Circuits vs zkVMs
These approaches serve different purposes.
Custom circuit
Application
↓
Circuit
↓
Proof
Advantages:
- Maximum control
- Can be extremely efficient
- Excellent for narrowly defined computations
- Strong opportunity for circuit-specific optimization
Disadvantages:
- More cryptographic engineering
- Harder development
- Specialized debugging
- Application changes can require circuit changes
zkVM
Application
↓
Program
↓
zkVM
↓
Proof
Advantages:
- Higher-level programming model
- Easier reuse of software
- More general-purpose computation
- More natural application development
Disadvantages:
- Proving overhead
- Larger execution traces
- VM-specific optimization challenges
A useful rule is:
20. ZK Development Frameworks
The ecosystem contains several approaches.
gnark
gnark is a Go-based framework for designing and verifying zero-knowledge circuits and provides abstractions for constraint systems and proving schemes.
A conceptual gnark circuit might look like:
type Circuit struct {
X frontend.Variable
Y frontend.Variable
Out frontend.Variable `gnark:",public"`
}
func (c *Circuit) Define(api frontend.API) error {
api.AssertIsEqual(
api.Mul(c.X, c.Y),
c.Out,
)
return nil
}
The important idea is not the syntax.
The important idea is that:
X × Y = Out
becomes a constraint that the proving system can enforce.
Circom
Circom is a circuit-oriented language and compiler commonly used to express arithmetic circuits. Its tooling includes witness generation and integration with proof-generation systems.
Noir
Noir is a domain-specific language designed for privacy-preserving programs using zero-knowledge proofs, with a focus on making ZK programming more accessible without requiring developers to implement the underlying cryptographic mathematics themselves.
Halo 2
Halo 2 provides a lower-level proving framework around a PLONK-style architecture with custom gates, lookup arguments, polynomial commitments and circuit composition.
These frameworks represent different points on the abstraction spectrum:
High abstraction
│
│ Noir
│ Circom
│ gnark
│
│ Halo 2
│
│ Custom proving systems
│
Low abstraction
There is no single “ZK language.”
There is a stack of abstractions.
21. How to Implement a ZK Application
A practical implementation should start with the application requirement rather than the proving system.
Suppose the requirement is:
The architecture could be:
USER
│
credential / private data
│
▼
┌───────────────┐
│ Local Prover │
└───────┬───────┘
│
ZK proof π
│
▼
┌───────────────┐
│ Backend / │
│ Smart Contract│
└───────┬───────┘
│
Verify(π)
│
┌─────┴─────┐
│ │
Valid Invalid
│ │
▼ ▼
Continue Reject
The implementation process can be divided into phases.
Phase 1: Define the statement
Do not start by writing a circuit.
Start with:
What exactly must be proven?
For example:
The user possesses an authentic credential
AND
the credential has not expired
AND
the credential satisfies policy X
Turn this into explicit predicates.
Phase 2: Identify public and private inputs
Example:
Private:
credential
birth_date
user_secret
signature
Public:
issuer_public_key
current_date
policy_id
credential_commitment
The distinction should be deliberate.
Every piece of data placed into public inputs is potentially observable.
Phase 3: Design the relation
For example:
VerifySignature(issuer_key, credential, signature) = true
Hash(credential) = commitment
current_date < expiry_date
age(birth_date, current_date) >= 18
This collection of equations and predicates defines what the proof means.
Phase 4: Choose the proving architecture
At this stage decide whether you need:
Custom arithmetic circuit
PLONKish circuit
STARK/AIR system
zkVM
Then consider:
Proof size
Proving time
Verification cost
Recursion
Trusted setup
Target hardware
Programming model
Chain compatibility
Phase 5: Build the circuit or program
The application logic must now be translated into the target proving environment.
The major challenge is that operations cheap in normal software are not necessarily cheap inside a ZK proof.
For example:
Hashing
Bit operations
Memory access
Comparisons
Large integers
Elliptic-curve operations
can have very different costs depending on the proof system.
Phase 6: Generate the witness
The prover executes the computation and generates the values satisfying the circuit.
Conceptually:
inputs
↓
witness generation
↓
w
The witness must be consistent with the circuit.
Phase 7: Prove
The proving process generates:
π = Prove(pk, public_inputs, witness)
The proof might be:
hundreds of bytes
kilobytes
or larger
depending on the proving system and construction.
The goal is that it is dramatically smaller and cheaper to verify than reproducing the original computation.
Phase 8: Verify
The verifier receives:
public_inputs
proof
and runs:
Verify(vk, public_inputs, proof)
The result is:
true
or
false
Phase 9: Integrate verification
Verification can happen:
In a web server
In another application
Inside a smart contract
Inside another ZK circuit
Inside a rollup verifier
Inside a blockchain client
The last option is particularly powerful.
A ZK proof can become an input to another proof.
That creates recursion.
22. Recursive Proofs
Suppose you have:
Proof A
Proof B
Proof C
Proof D
Instead of verifying all four independently, another circuit can prove:
“I verified A, B, C and D and all were valid.”
Then the system produces:
Recursive proof R
Now the verifier checks only R.
This creates a hierarchy:
Transaction proofs
│
├── Proof A
├── Proof B
├── Proof C
└── Proof D
│
▼
Aggregated proof
│
▼
Final verifier
This is a critical scaling mechanism.
Ethereum's rollup documentation explicitly describes recursive proofs as “proofs of proofs” and notes their ability to dramatically increase throughput by aggregating prior proofs.
Recursive proving also opens the door to:
Incremental computation
Proof aggregation
Batch verification
Layered systems
Cross-system verification
Continuous execution proofs
23. Proof Aggregation
Recursion and aggregation are becoming increasingly important because proof generation itself can be parallelized.
Imagine a block with:
1,000,000 execution steps
Instead of proving the entire computation in one monolithic process:
Chunk 1 → Proof 1
Chunk 2 → Proof 2
Chunk 3 → Proof 3
...
Chunk N → Proof N
Then:
Proofs 1..N
↓
Aggregation
↓
One final proof
This creates a tree:
Final Proof
/ \
P1 P2
/ \ / \
P3 P4 P5 P6
...
Now proving hardware can work in parallel.
This architecture is particularly relevant for high-throughput blockchains and zkVMs.
24. Proving Infrastructure
At production scale, ZK stops looking like a single cryptographic library and starts looking like distributed infrastructure.
A proving service can be architected as:
Application
│
▼
Proof Request
│
▼
API Gateway
│
▼
Job Scheduler
│
┌───────────┼───────────┐
▼ ▼ ▼
Worker 1 Worker 2 Worker 3
│ │ │
CPU/GPU CPU/GPU CPU/GPU
│ │ │
└───────────┼───────────┘
▼
Proof Aggregator
│
▼
Proof Store
│
▼
Verifier
A production prover infrastructure should consider:
Job queues
Proof caching
Parallel proving
Hardware scheduling
GPU acceleration
Memory management
Failure recovery
Proof reproducibility
Versioning
Circuit identity
Key management
Monitoring
One of the reasons ZK engineering increasingly resembles systems engineering is that cryptographic correctness is only one part of the problem.
The system must also produce proofs:
reliably
deterministically
economically
and at the required latency
25. Hardware and Acceleration
Proof generation is computationally expensive.
Large proving systems can benefit from:
Multi-core CPUs
Large-memory machines
GPUs
Specialized accelerators
High-bandwidth memory
Distributed clusters
Some proving workloads are dominated by:
FFT / polynomial operations
Multi-scalar multiplication
Hashing
Field arithmetic
Memory bandwidth
Merkle-tree construction
The precise bottleneck depends on the proof system.
This creates an interesting infrastructure market around specialized proving hardware.
The architecture may increasingly look like:
Application Layer
↓
Proof Market
↓
Prover Network
↓
CPU / GPU / Accelerator
↓
Cryptographic Proof
In that model, proving becomes a service analogous to cloud compute.
26. Security: Where ZK Systems Actually Fail
The mathematics may be sound while the implementation is insecure.
This is one of the most important realities in ZK engineering.
Bug #1: Incorrect circuit logic
Suppose the intended rule is:
balance >= amount
but the circuit accidentally enforces:
balance + amount != 0
The proof can be perfectly valid.
It is simply proving the wrong statement.
A ZK system does not know what the business requirement was.
It only proves the circuit you wrote.
Bug #2: Missing constraints
A programmer computes some value outside the constrained portion of the circuit.
The resulting proof may establish less than the developer believes.
The principle is:
Bug #3: Public/private input mistakes
A value intended to remain private can accidentally become public.
Conversely, a security-critical value might not be sufficiently bound to the proof.
Input classification must therefore be part of threat modeling.
Bug #4: Weak randomness
Zero-knowledge systems frequently depend on cryptographically secure randomness and Fiat-Shamir transcripts.
Bad randomness can compromise privacy or soundness assumptions.
Bug #5: Proving-key compromise
Some systems use setup procedures.
The security model therefore depends on how proving and verification parameters are generated and managed.
Ethereum documentation notes this explicitly for trusted-setup SNARK systems: if secret setup material is improperly retained or compromised, an attacker may be able to generate fraudulent proofs.
Bug #6: Cryptographic implementation flaws
Even a mathematically correct protocol can fail because of:
Invalid curve handling
Subgroup mistakes
Bad serialization
Faulty transcript construction
Incorrect field arithmetic
Side channels
Memory-safety vulnerabilities
A production ZK system requires both protocol-level and software-level security review.
27. Trusted Setup vs Transparent Systems
One of the historical architectural questions in SNARK systems is:
A trusted setup can generate public parameters required for proving and verification.
The problem is that the setup may involve secret randomness.
Conceptually:
Secret toxic waste
↓
Setup ceremony
↓
Public proving parameters
Public verification parameters
The security assumption typically becomes:
At least one ceremony participant
correctly destroys their secret randomness.
Modern proving systems have developed alternatives and different setup models.
STARK constructions are particularly important because they are designed to be transparent and avoid this style of trusted setup. The original STARK design uses publicly verifiable randomness and FRI-based techniques instead.
This is not simply a philosophical difference.
It affects:
Operational complexity
Governance
Auditability
Security assumptions
Deployment
Upgrades
Long-term trust model
28. Why ZK Can Scale Computation
The basic scaling idea is simple:
Traditional:
Verifier
↓
Re-execute computation
↓
Result
ZK:
Prover
↓
Execute computation
↓
Generate proof
Verifier
↓
Verify proof
↓
Result
If verification is substantially cheaper than re-execution, a system can separate:
Computation
from
Verification
Ethereum's current ZK research explicitly explores this architecture for block verification, arguing that proof verification can be dramatically cheaper than fully re-executing the block.
This is much bigger than blockchain scaling.
It is a general computational primitive.
29. ZK Beyond Blockchain
Blockchain is currently the most visible application, but it is not the only one.
Identity
Prove:
I am a valid member of group G
without revealing:
which member I am
Anonymous or selective-disclosure membership is a reusable pattern in privacy-preserving applications. Ethereum's 2026 privacy guidance describes this commitment-plus-proof pattern for applications such as anonymous membership and voting.
Credentials
A credential issuer can sign a user's attributes.
The user later proves:
Credential is authentic
AND
attribute X satisfies condition Y
without necessarily exposing all credential data.
Finance
A financial institution might prove:
Assets >= liabilities
without revealing its entire balance sheet.
Or:
Transaction satisfies compliance predicate
without exposing unrelated transactions.
Healthcare
A system could prove:
patient satisfies eligibility condition
without exposing the complete medical record.
The challenge here is ensuring that the underlying data source, credential issuer, and cryptographic proof all fit together in a trustworthy architecture.
Machine Learning
A model operator could theoretically provide:
Prediction
+
Proof that inference followed the committed model
without exposing the proprietary model or sensitive input, depending on the proving architecture.
This area is substantially harder than simple arithmetic circuits because modern AI models involve enormous amounts of computation.
The engineering problem becomes:
How cheaply can arbitrary numerical computation be proven?
That is still an active area of research and infrastructure development.
30. ZK as a Verification Layer for the Internet
The broader architectural possibility is more interesting than “private blockchain transactions.”
Imagine an Internet where services routinely return:
Result
+
Cryptographic proof of correctness
instead of:
Result
+
“Trust our server.”
Consider:
Cloud API
↓
Computation
↓
Result + ZK proof
↓
Client verifies
A database service might prove:
The query result corresponds to committed database state.
A financial system might prove:
The risk calculation followed the approved model.
A software service might prove:
This computation was executed from the expected program.
A cloud provider might prove:
The supplied result was generated from the committed input and software version.
A decentralized network might prove:
This state transition is valid.
The common abstraction is:
That is arguably the most important long-term idea behind zero-knowledge technology.
31. What Makes ZK Different From Ordinary Cryptography?
Traditional cryptography is often used to provide:
Confidentiality
Authentication
Integrity
Non-repudiation
ZK introduces another capability:
Verifiability of computation
That is a fundamentally different primitive.
Encryption says:
A digital signature says:
A hash says:
A zero-knowledge proof can say:
That additional dimension is why ZK has applications far beyond privacy.
32. The Biggest Engineering Problem: Proving Is Expensive
The main weakness of ZK today is also obvious:
Proving is expensive.
Verification can be tiny relative to the original computation.
Proof generation is the opposite.
For example:
Normal computation:
1 ms
ZK proof:
100 ms
1 s
10 s
or significantly more
The exact numbers depend completely on the circuit, hardware and proving system, so a meaningful engineering benchmark must be performed on the real workload.
This creates the central optimization target:
Reduce proof-generation cost
without weakening security
That is why the field is so active around:
Better arithmetization
Better polynomial commitments
Lookup arguments
Recursive proving
Proof aggregation
Parallel proving
GPU acceleration
Dedicated hardware
zkVM optimization
Circuit compilers
33. A Practical Performance Model
When evaluating a ZK application, do not measure only proof size.
A useful model is:
Total system cost =
Witness generation
+ proving
+ aggregation
+ verification
+ data availability
+ infrastructure
+ storage
+ latency
You should benchmark:
Proving latency
How long does it take to produce a proof?
Peak memory
Can the prover run on commodity hardware?
Parallel scalability
Does doubling hardware significantly increase throughput?
Verification latency
Can the verifier meet application requirements?
Proof size
How expensive is proof transmission and storage?
Recursive overhead
Does aggregation save more than it costs?
Data cost
How much information must still be published?
A system that produces a 500-byte proof but requires a 512 GB machine to generate it may still be impractical for many use cases.
34. Designing a Production ZK Stack
A serious system should separate application logic from proof infrastructure.
A useful architecture is:
APPLICATION
│
┌───────┴───────┐
│ Business Logic │
└───────┬───────┘
│
Proof Spec
│
▼
┌─────────────┐
│ Circuit / │
│ zkProgram │
└──────┬──────┘
│
▼
┌─────────────┐
│ Witness │
│ Generator │
└──────┬──────┘
│
▼
┌───────────┐
│ Prover │
└─────┬─────┘
│
▼
┌────────────────┐
│ Proof Artifact │
└───────┬────────┘
│
┌─────────┴─────────┐
│ │
▼ ▼
Backend Blockchain
Verifier Verifier
│ │
└─────────┬─────────┘
▼
Application
The critical design decision is to make the proof specification explicit.
For every proof, document:
Statement
Public inputs
Private inputs
Constraints
Security assumptions
Trusted setup assumptions
Hash function
Field
Curve
Proof system
Circuit version
Compiler version
Verification key
This is essential for long-term maintainability.
35. Versioning Matters
A ZK circuit should be treated more like a deployed protocol than an ordinary function.
Suppose version 1 proves:
Rule A
AND
Rule B
AND
Rule C
and version 2 adds:
Rule D
The verification key, circuit identifier and proof semantics may change.
A production system should therefore maintain:
Circuit ID
Circuit version
Compiler version
Proving-system version
Verification key
Hash / commitment
Deployment address
Otherwise, several years later, it becomes difficult to determine exactly what a historical proof actually means.
36. The Most Important ZK Design Principle
There is a temptation to begin with the question:
That is backwards.
Begin with:
Then define:
Statement
↓
Public inputs
↓
Private inputs
↓
Constraints
↓
Security model
↓
Performance requirements
↓
Proof system
This prevents technology from dictating the product.
37. Where ZK Is Going
The future of ZK is unlikely to be one single protocol.
It is more likely to be a layered ecosystem.
Layer 1: Better proving systems
More efficient:
SNARKs
STARKs
Polynomial commitments
Folding schemes
Recursive proofs
Layer 2: Better programming languages
Developers increasingly want:
Software-like programming
instead of manually thinking about cryptographic constraints.
Languages such as Noir are explicitly designed around this objective.
Layer 3: zkVMs
More applications will potentially be expressed as:
ordinary code
+
provable execution
rather than bespoke circuits.
Layer 4: Proving markets
Proof generation may become a distributed resource:
Request proof
↓
Prover marketplace
↓
Competitive computation
↓
Proof delivery
Layer 5: Hardware acceleration
Provers may increasingly rely on:
GPUs
FPGAs
ASICs
specialized memory architectures
Layer 6: Recursive systems
Large computations may increasingly be built from thousands or millions of small proofs that are compressed into a single verifiable artifact.
Layer 7: Verifiable computing
The deepest shift may be that applications stop treating computation as something that must simply be trusted.
Instead:
Compute
+
prove
+
verify
becomes a normal software pattern.
38. Could ZK Become a Fundamental Computing Layer?
Possibly - and the strongest argument is not “blockchain needs privacy.”
The stronger argument is:
This distinction is becoming increasingly important.
A cloud server can perform enormous amounts of computation.
A mobile device may not want to repeat it.
A blockchain validator may not want to repeat it.
A client may not trust the server.
A company may not want to expose the data.
A ZK proof creates a mechanism that can bridge these constraints:
Heavy computation
↓
Prover
↓
Cryptographic evidence
↓
Cheap verification
That is useful for decentralized networks.
It is useful for privacy.
It is potentially useful for cloud computing.
It is potentially useful for credentials.
It is potentially useful for AI.
It is potentially useful anywhere computation needs to be trusted without requiring everyone to reproduce it.
That is a considerably broader proposition than “ZK is a blockchain technology.”
39. What ZK Will Not Solve Automatically
It is also important not to overstate the technology.
ZK proofs do not automatically establish:
The input data is true.
They establish something closer to:
Given the specified inputs and rules,
the computation satisfied the constraints.
If the input is fraudulent, a perfectly valid proof can be generated over fraudulent input.
For example:
Fake identity
+
Correct ZK proof
=
Correct proof of a false-world input
Therefore trustworthy ZK applications still need:
Trusted data sources
Credential issuers
Attestations
Oracles
Secure key management
Correct circuit design
Correct protocol design
ZK provides a powerful verification primitive.
It is not a universal truth oracle.
40. A Reference Architecture for a Real ZK Application
A mature deployment might ultimately look like this:
USERS
│
▼
Application API
│
▼
Proof Specification
│
▼
┌───────────────────┐
│ Circuit / zkVM │
│ Runtime │
└─────────┬─────────┘
│
Witness generation
│
▼
┌──────────────────┐
│ Prover Scheduler │
└────────┬─────────┘
│
┌─────────┼─────────┐
▼ ▼ ▼
Prover Prover Prover
│ │ │
└─────────┼─────────┘
▼
Proof Aggregation
│
▼
Recursive Proof
│
┌──────────┼──────────┐
▼ ▼
Off-chain verifier On-chain verifier
│ │
└──────────┬──────────┘
▼
Application Result
The infrastructure around this system may include:
Object storage
Database
Proof cache
Job queue
Metrics
Tracing
Hardware orchestration
Key management
Circuit registry
Verifier registry
Audit pipeline
At that point, ZK is no longer just a cryptographic library.
It has become an infrastructure layer.
41. The Technology Stack in One Diagram
The entire ZK ecosystem can be condensed into this hierarchy:
┌─────────────────────────────────────────────┐
│ APPLICATION │
│ Identity / Finance / Blockchain / AI / etc │
└──────────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ ZK PROGRAM / zkVM │
│ Circuit / Program / Execution Environment │
└──────────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ ARITHMETIZATION │
│ R1CS / PLONKish / AIR / Trace Constraints │
└──────────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ ALGEBRAIC LAYER │
│ Finite Fields / Polynomials / FFTs │
└──────────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ COMMITMENT / PROOF LAYER │
│ KZG / IPA / FRI / Merkle Commitments │
└──────────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ PROVER ENGINE │
│ CPU / GPU / Distributed / Specialized HW │
└──────────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ PROOF π │
└──────────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ VERIFIER │
│ Server / Contract / Blockchain / zkCircuit │
└─────────────────────────────────────────────┘
Once this stack becomes familiar, the terminology becomes much easier to navigate.
42. The Real Future of Zero-Knowledge
The most interesting future for ZK is not necessarily a world where everything becomes private.
It may instead be a world where more computation becomes provable.
The distinction is important.
Today, many systems rely on one of three models:
Trust the institution.
Trust the server.
Run the computation yourself.
ZK introduces a fourth:
Verify cryptographic evidence of the computation.
That model can coexist with centralized systems, decentralized systems, public data, private data, cloud infrastructure and blockchains.
The end state could look less like:
and more like:
A database result can have a proof.
A financial calculation can have a proof.
A blockchain state transition can have a proof.
A credential can have a proof.
A software execution can have a proof.
A machine-learning inference can eventually have a proof.
The common infrastructure is the same conceptual pattern:
Input
↓
Computation
↓
Proof
↓
Verification
The cryptographic machinery underneath may continue to evolve - from R1CS to PLONKish systems, from custom circuits to zkVMs, from monolithic proofs to recursive proof trees, and from software provers to specialized hardware.
But the fundamental idea is remarkably stable:
That is why zero-knowledge technology may become important far beyond the applications that first made it famous.
Conclusion
Zero-knowledge proofs are best understood not as a single cryptographic algorithm, but as an architecture for verifiable computation.
The stack spans:
Application logic
↓
Relations and constraints
↓
Witness generation
↓
Finite-field arithmetic
↓
Polynomial representations
↓
Commitments
↓
Proof generation
↓
Recursion / aggregation
↓
Verification
The engineering challenge is turning ordinary computation into a form where this stack is efficient enough for production.
The most significant developments are therefore not isolated algorithms. They are improvements across the entire stack:
Better circuits
Better compilers
Better proving systems
Better zkVMs
Better recursion
Better hardware
Better developer tooling
Better verification infrastructure
And the ultimate value of ZK may not come from hiding information alone.
It may come from making computation itself verifiable.
In a system where one party performs a calculation and another party needs to know that the calculation was correct, zero-knowledge proofs offer a fundamentally different trust model:
Don't trust the computation.
Verify it.
That shift-from trusting execution to verifying execution - is the deeper idea behind the ZK architecture.
Latest Articles

Decentralized Identity (DID): Architecture, Cryptography, Authentication, Implementation, and the Next Layer of Digital Identity.

From Learning to Innovation: Leren Labs at IBC2026
Technology changes the possibilities of media, but possibilities aren't the same as progress. The more interesting question is what happens when emerg...
-300x195.png&w=3840&q=75)
The Intelligence Stack at Leren Labs: How We Make Learning Actually Work
There’s a lot of talk about AI, tools, and the future of work. Every week, it feels like a new platform, a new model, or a new promise appears. But wh...
Want to read more insights?
Subscribe to our newsletter and get the latest articles, updates, and industry insights delivered straight to your inbox.