Wiki library

Asset transparency / explainer

Zero-Knowledge Proofs in Crypto: What ZK Can Verify Without Revealing the Data

Learn how zero-knowledge proofs work, the difference between zk-SNARKs and zk-STARKs, how crypto exchanges use ZK in Proof of Reserves, and what ZK proofs cannot prove about exchange solvency.

Published 2026-09-03Updated 2026-09-0315 min read

Summary

A zero-knowledge proof (ZK proof) is a cryptographic method that allows one party to prove that a statement is true without revealing the private information used to prove it.

In crypto, ZK proofs are widely associated with privacy, blockchain scaling and verifiable computation. Crypto exchanges can also use them in Proof of Reserves to prove mathematical properties about customer-liability data without publishing every customer's balance.

For example, a ZK system may help prove that balances were calculated according to specified rules or that certain negative-balance constraints were satisfied.

But there is an important limitation:

A zero-knowledge proof only proves the statement encoded into the proof system.

It does not automatically prove that all liabilities were included, that reserve assets exist, or that an exchange is solvent.


Key Facts

QuestionShort Answer
What is a zero-knowledge proof?A way to prove a statement without revealing the underlying secret data
Who creates the proof?The prover
Who checks it?The verifier
What is a witness?Private information used to generate the proof
What is a zk-SNARK?A succinct non-interactive zero-knowledge argument of knowledge
What is a zk-STARK?A scalable transparent zero-knowledge argument of knowledge
Why use ZK in Proof of Reserves?To verify liability calculations while protecting customer privacy
Can ZK prove balances follow certain rules?Yes, if those rules are encoded in the proof
Can ZK prove every liability was included?Not automatically
Can ZK prove reserve assets exist?Not by itself
Can ZK prove an exchange is solvent?No
Is ZK the same as a Merkle tree?No

What Is a Zero-Knowledge Proof?

A zero-knowledge proof allows one party to prove something is true without revealing the private information behind the proof.

The two main participants are:

  • Prover — creates the proof
  • Verifier — checks the proof

Suppose the prover wants to demonstrate:

"I know the secret."

A normal approach might require revealing the secret.

A ZK proof instead aims to establish:

I can prove I know the secret
↓
without giving you the secret

That is the core idea.


A Simple Zero-Knowledge Example

Imagine Alice knows the password to a locked system.

Bob wants proof that Alice knows the password.

The obvious method is:

Alice
↓
Tells Bob the password
↓
Bob verifies it

But now Bob knows the secret too.

A zero-knowledge system aims for something closer to:

Alice knows password
↓
Generates proof
↓
Bob verifies proof
↓
Bob learns:
"Yes, Alice knows it"

Bob does NOT learn:
the password

Real cryptographic ZK systems are much more complex, but the principle is the same.


What Are the Three Main Properties of a Zero-Knowledge Proof?

A proper zero-knowledge system is generally expected to satisfy three fundamental properties.


Completeness

If the statement is true and the prover follows the protocol correctly:

The verifier should accept the proof.


Soundness

If the statement is false:

A dishonest prover should not be able to convince the verifier that it is true, except with negligible probability.


Zero-Knowledge

The verifier should learn:

whether the statement is valid

without learning the private information used to prove it.

These three properties define the fundamental security goals of ZK proofs.


What Is a Witness?

A witness is the secret or private data used by the prover to generate a proof.

For example, suppose the public statement is:

"I know a number that satisfies this equation."

The number itself may be the:

private witness

while the equation is public.

Conceptually:

Private Witness
+
Public Statement
↓
Proof Generation
↓
ZK Proof

The verifier can then check the proof without receiving the private witness.


Public Inputs vs Private Inputs

ZK circuits often distinguish between:

Public Inputs

Information the verifier is allowed to know.

For example:

Published Total Liability

Private Inputs

Information kept secret.

For example:

Individual Customer Balances

A ZK proof can potentially prove:

The private balances produce the published total according to the encoded rules

without publishing every customer balance.

This makes ZK especially relevant to exchange transparency.


Interactive vs Non-Interactive Zero-Knowledge Proofs

Early zero-knowledge protocols often involved multiple rounds of communication between prover and verifier.

For example:

Prover
↓
Verifier challenge
↓
Prover response
↓
Another challenge
↓
Another response

This is an:

interactive proof

Modern blockchain systems often prefer:

non-interactive proofs

where the prover generates one proof that can later be verified by others.

This is one reason zk-SNARKs and zk-STARKs are especially useful in crypto systems.


What Is a zk-SNARK?

zk-SNARK stands for:

Zero-Knowledge Succinct Non-Interactive Argument of Knowledge

Each word matters.

Zero-Knowledge

The proof can establish a statement without revealing the private witness.

Succinct

The proof is relatively small and can often be verified efficiently.

Non-Interactive

The prover and verifier do not need repeated rounds of communication.

Argument of Knowledge

The system provides strong cryptographic evidence that the prover possesses the required witness.


zk-SNARKs are attractive because they can provide:

  • Small proofs
  • Efficient verification
  • Strong privacy
  • Verifiable computation

This makes them useful in areas such as:

  • Private transactions
  • Blockchain scaling
  • Identity systems
  • Proof of Reserves
  • Verifiable computation

What Is a Trusted Setup?

Some zk-SNARK systems require a:

trusted setup

to generate public parameters used by the proving system.

Conceptually:

Trusted Setup
↓
Public Parameters
↓
Proof Generation + Verification

The concern is that if secret setup information is retained or compromised, it can create security risks in certain proof systems.

To reduce this risk, systems may use:

multi-party computation ceremonies

where multiple independent participants contribute randomness.

The security assumption can be structured so that the setup remains secure if at least one participant behaves honestly and destroys their secret contribution.


Do All zk-SNARKs Require the Same Trusted Setup?

No.

"zk-SNARK" refers to a broad family of proof systems.

Different constructions can use different setup models.

Some require circuit-specific trusted setups.

Others use:

  • Universal setups
  • Updatable setups
  • Different cryptographic assumptions

So it is too simplistic to say:

Every SNARK has exactly the same trusted-setup risk.

The implementation matters.


What Is a zk-STARK?

zk-STARK stands for:

Zero-Knowledge Scalable Transparent Argument of Knowledge

The key words are:

Scalable

and:

Transparent

STARK systems are designed to support efficient proofs for large computations while avoiding the traditional trusted-setup requirement associated with some SNARK systems.


Why Is zk-STARK Called "Transparent"?

Because zk-STARK systems can use publicly verifiable randomness rather than relying on secret randomness generated in a trusted setup ceremony.

This reduces one important trust assumption.

Conceptually:

zk-SNARK
→ may involve trusted setup

zk-STARK
→ transparent setup

The exact comparison depends on the specific proof system being used.


zk-SNARK vs zk-STARK

A simplified comparison:

zk-SNARKzk-STARK
Zero-knowledgeYesYes
Non-interactiveCommonYes
Small proof sizeGenerally strongUsually larger
Verification efficiencyStrongStrong
Trusted setupSome systems require itTypically no trusted setup
TransparencyDepends on constructionStrong
Large-data scalabilityGoodOften especially attractive
Main cryptographyOften elliptic-curve basedHeavily hash-based

Neither is universally "better."

The right choice depends on:

  • Proof size
  • Computation size
  • Verification environment
  • Setup assumptions
  • Performance requirements

Why Does Crypto Use Zero-Knowledge Proofs?

ZK technology is useful when a system needs both:

Privacy
+
Verification

Normally these goals can conflict.

To verify something, you often need the underlying data.

But ZK allows systems to prove certain facts while revealing less data.

This has led to applications in:

  • Blockchain privacy
  • Scaling
  • Identity
  • Authentication
  • Compliance
  • Proof of Reserves

How Do Zero-Knowledge Proofs Help Blockchain Scaling?

A blockchain can be expensive if every node must repeat every computation.

ZK systems can move computation outside the base chain and then publish a proof that the computation was performed correctly.

Conceptually:

Many Transactions
↓
Off-Chain Computation
↓
Validity Proof
↓
Blockchain verifies proof

This is a core idea behind many:

ZK-rollups


How Are ZK Proofs Used in Proof of Reserves?

Proof of Reserves creates an interesting privacy problem.

An exchange wants to show that:

Customer liabilities were calculated correctly.

But it should not reveal:

Alice
4 BTC

Bob
200 ETH

Carol
$3 million USDT

to everyone.

A ZK proof can allow the exchange to prove mathematical statements about those balances while keeping individual balances private.


What Could a ZK PoR System Prove?

Depending on how the proof circuit is designed, it might prove statements such as:

All included customer balances were processed according to a specified rule.

Or:

No balance used in this calculation violates a defined constraint.

Or:

The published total liabilities were derived correctly from the private input data.

Conceptually:

Private Customer Balances
↓
ZK Circuit
↓
Proof

Verifier learns:
"Rules were satisfied"

Verifier does NOT learn:
individual balances

Why Is ZK Useful for Negative Balances?

This is especially relevant in exchange Proof of Reserves.

Suppose customer balances are:

Customer A
+10 BTC

Customer B
-8 BTC

If negative balances are simply netted:

10 + (-8)
=
2 BTC

customer liabilities could potentially appear lower than expected depending on the methodology.

A ZK circuit can be designed to enforce rules such as:

Balances must satisfy specified non-negative or accounting constraints before being included in a liability calculation.

The important phrase is:

can be designed

because ZK does not enforce a rule unless that rule is actually encoded.


The Most Important Rule: ZK Only Proves the Statement It Was Asked to Prove

This is the biggest misconception around zero-knowledge technology.

Suppose a ZK circuit proves:

All included balances are non-negative.

A valid proof establishes that statement.

It does not automatically prove:

All customer accounts were included.

Those are different statements.

Similarly, a proof that:

The liability total was calculated correctly from the supplied records

does not prove:

The supplied records contained every real liability.

Therefore:

Correct Calculation
≠
Complete Input Data

ZK Proof Does Not Automatically Prove Liability Completeness

Suppose the exchange actually has:

10 million customer accounts

but only provides:

9.5 million accounts

as private inputs to a proof system.

A mathematically valid ZK proof can potentially prove statements about those 9.5 million records.

The proof itself may have no way to know:

Another 500,000 accounts should have been included.

This is why broader verification remains necessary.


ZK Proof vs Merkle Tree

They solve different problems.

Merkle Tree

Primarily helps prove:

This record is included in this committed data set.

Zero-Knowledge Proof

Can prove:

This private data satisfies a specified mathematical statement.

In PoR, the two can work together:

Customer Records
↓
Merkle Tree
↓
User Inclusion

+

Private Liability Data
↓
ZK Circuit
↓
Constraint Verification

Why Combine Merkle Trees and ZK Proofs?

A Merkle proof can help a customer verify:

My balance was included.

A ZK proof can help establish:

The included balances satisfied certain calculation rules.

Together, they can improve the quality of customer-liability verification.

But even together, they do not solve every Proof of Reserves problem.


Does ZK Prove the Exchange Has Reserve Assets?

No, not by itself.

A liability ZK proof can establish statements about:

Customer Liabilities

But reserve assets exist on the other side:

Exchange Wallets
↓
Reserve Assets

Those assets require separate verification.

For blockchain assets this can involve:

  • Public wallet addresses
  • On-chain balances
  • Proof of wallet control

So:

Valid ZK Liability Proof
≠
Proof of Reserve Assets

Does ZK Prove the Exchange Controls Its Wallets?

No.

A ZK proof about liabilities does not automatically demonstrate:

The exchange controls the private keys to reserve wallets.

That needs independent asset-control evidence.


Does ZK Prove Reserve Assets Are Unencumbered?

No.

Even if an exchange proves:

Assets exist

and:

Liability calculations are valid

you may still not know whether reserve assets are:

  • Pledged as collateral
  • Borrowed
  • Subject to liens
  • Used to secure other obligations

ZK does not automatically solve:

asset encumbrance


Does ZK Prove Customer Assets Are Segregated?

No.

Customer asset segregation is a legal and operational question.

It asks:

Are customer assets legally separated from the exchange's own assets?

A ZK proof about balance calculations cannot automatically establish this.


Does ZK Prove an Exchange Is Solvent?

No.

This is one of the most important conclusions.

A strong system might establish:

Customer liabilities calculated correctly
+
Reserve wallets verified

But you may still not know about:

  • Bank debt
  • Corporate loans
  • Tax liabilities
  • Legal claims
  • Vendor obligations
  • Asset encumbrances
  • Other creditors

Therefore:

ZK Proof
≠
Complete Balance Sheet

and:

ZK PoR
≠
Proof of Solvency

A Simple ZK Proof of Reserves Example

Imagine an exchange has three customer balances:

Alice
2 BTC

Bob
5 BTC

Carol
3 BTC

The total is:

10 BTC

The exchange does not want to publish each customer's balance.

Instead, it might prove:

Private Inputs:
2
5
3

Rules:
All balances satisfy required constraints

Claim:
Total = 10 BTC

The verifier receives:

Public Total
10 BTC

+

ZK Proof

and can verify:

The private inputs satisfy the encoded rules and produce the claimed total.

The verifier does not need to know which customer had 2 BTC, 5 BTC or 3 BTC.


What If the Exchange Leaves Out Carol?

Suppose the real liabilities are:

Alice
2 BTC

Bob
5 BTC

Carol
3 BTC

but the exchange only provides:

Alice
2 BTC

Bob
5 BTC

to the proof system.

The proof may correctly demonstrate:

2 + 5 = 7

It cannot automatically know Carol should have been included.

This illustrates the fundamental distinction:

Proof Correctness
≠
Input Completeness

What Is a ZK Circuit?

A ZK circuit defines the computation or rules that the prover must satisfy.

Think of it as:

The mathematical statement being proven.

For example, a PoR circuit might encode:

Rule 1:
Balance satisfies constraint

Rule 2:
Balances are summed correctly

Rule 3:
Published total equals computed total

The proof shows that these rules were satisfied.


Why Does Circuit Design Matter?

Because the proof is only as meaningful as the rules being proved.

If an important condition is not included in the circuit:

The proof does not magically check it.

For example, if the circuit checks:

Total liabilities
=
sum of supplied balances

but does not check:

All customer accounts are included

then the proof provides no assurance about completeness.


Can a ZK Circuit Have Bugs?

Yes.

Cryptography can be mathematically sophisticated, but the software and circuits implementing it can still contain:

  • Logic errors
  • Implementation bugs
  • Incorrect assumptions
  • Missing constraints
  • Vulnerabilities

This is why users should care about:

  • Open-source code
  • Independent audits
  • Technical documentation
  • Verification tools

not just the label:

ZK Verified


What Is a Verification Key?

Non-interactive ZK systems generally use public information that allows a verifier to check proofs.

Depending on the system, this can involve a:

verification key

or other public parameters.

Conceptually:

Proof
+
Public Inputs
+
Verification Key
↓
Verifier
↓
Valid / Invalid

The exact structure depends on the proving system.


Can Users Verify ZK Proofs Themselves?

Potentially, yes.

A transparent PoR implementation may provide:

  • Proof files
  • Public inputs
  • Verification software
  • Open-source tools
  • Documentation

Users or independent researchers can then reproduce the verification process.

This is much stronger than a website simply displaying:

ZK Proof ✓

without accessible verification material.


Real-World Example: zk-STARK Proof of Reserves

Zero-knowledge PoR is already used in production.

As of August 2026, OKX's public Proof of Reserves archive continues to publish:

zk-STARK v2

proof files for both:

  • Reserves
  • Liability reports

alongside wallet-address verification.

This illustrates how ZK can be used as part of a broader PoR process rather than as a replacement for reserve-asset verification.

The distinction matters:

ZK Liability Verification
+
Reserve Asset Verification

is stronger than treating ZK alone as proof of financial safety.


ZK-SNARK vs ZK-STARK for PoR

From an exchange-transparency perspective, users do not necessarily need to prefer one automatically.

Instead, ask:

  • What exactly is being proved?
  • Is the methodology public?
  • Can the proof be independently verified?
  • What are the setup assumptions?
  • How are customer balances represented?
  • How is liability completeness addressed?
  • How are reserve assets verified?

The implementation matters more than the acronym.


Does "zk-STARK Verified" Mean Better Than "Merkle Verified"?

Not automatically.

These terms refer to different cryptographic functions.

A Merkle system may offer:

User-level inclusion verification.

A ZK system may offer:

Mathematical constraint verification.

A good system may combine both.

So:

zk-STARK
>
Merkle Tree

is not a meaningful general rule.

The better question is:

What evidence does each component provide?


Zero-Knowledge Proof vs Encryption

They are very different.

Encryption

Protects information by making it unreadable without a key.

Zero-Knowledge Proof

Allows a party to prove a claim about information without revealing the information itself.

For example:

Encryption:
"I will hide my balance."

ZK:
"I will prove my balance satisfies this rule
without showing you the balance."

Zero-Knowledge Proof vs Hashing

Hashing

Creates a one-way digest of data.

ZK Proof

Proves a mathematical statement about private data.

Hashing is a fundamental cryptographic primitive.

ZK proofs are more expressive: they can prove computations and constraints.


Zero-Knowledge Proof vs Digital Signature

A digital signature primarily proves something like:

The holder of a private key authorized this message.

A ZK proof can prove broader mathematical statements such as:

I possess data satisfying these conditions.

without necessarily revealing the data.


Is Zero-Knowledge Completely "Zero Information"?

The phrase can be misleading.

Zero-knowledge means the verifier learns nothing beyond what is implied by the truth of the statement being proved.

But the statement itself can reveal information.

For example, proving:

My balance is greater than $1 million

reveals something:

Your balance exceeds $1 million.

It simply does not reveal the exact balance.

So privacy depends partly on:

What statement you choose to prove.


Does ZK Make a System Trustless?

Not automatically.

ZK can reduce the need to trust certain claims.

But a real exchange PoR system can still depend on:

  • Correct source data
  • Correct circuit design
  • Correct software
  • Authentic public parameters
  • Accurate wallet attribution
  • Complete liabilities
  • Legal ownership of assets

So:

ZK
≠
No Trust Assumptions Anywhere

What Should Users Check When an Exchange Says "ZK Proof of Reserves"?

Use this checklist.


1. What Statement Is Being Proven?

This is the most important question.

Does the proof establish:

  • Balance constraints?
  • Liability totals?
  • User inclusion?
  • Something else?

2. Which Assets Are Covered?

Does the ZK proof cover:

  • BTC?
  • ETH?
  • Stablecoins?
  • All listed assets?

3. Which Products Are Covered?

Check whether it includes:

  • Spot
  • Margin
  • Futures
  • Earn
  • Lending
  • Staking

4. Can Users Verify Their Own Balance?

Is there:

  • Merkle verification?
  • Account proof?
  • User-level verification?

5. Are Proof Files Available?

Can independent users or researchers verify the ZK proof?


6. Is the Verification Software Public?

Open verification tooling increases transparency.


7. How Are Liabilities Shown to Be Complete?

A valid ZK proof over incomplete input remains incomplete evidence.


8. How Are Reserve Assets Verified?

Look for:

  • Wallet addresses
  • On-chain reserves
  • Wallet-control proof

9. Are Reserves Unencumbered?

ZK liability proofs do not automatically answer this.


10. How Recent Is the Proof?

Check:

  • Snapshot date
  • Report date
  • Update frequency

Frequently Asked Questions

What is a zero-knowledge proof?

A zero-knowledge proof is a cryptographic method that allows a prover to demonstrate that a statement is true without revealing the secret information used to establish it.


What does ZK mean in crypto?

ZK stands for zero-knowledge and commonly refers to zero-knowledge proof systems used for privacy, scaling and verifiable computation.


What is a prover?

The prover is the party that generates the zero-knowledge proof.


What is a verifier?

The verifier checks whether the proof is valid.


What is a witness?

A witness is private information used to generate a proof.


What is a zk-SNARK?

A zk-SNARK is a Zero-Knowledge Succinct Non-Interactive Argument of Knowledge.


What is a zk-STARK?

A zk-STARK is a Zero-Knowledge Scalable Transparent Argument of Knowledge.


What is the difference between zk-SNARK and zk-STARK?

They use different proof-system designs. STARKs generally emphasize transparent setup and scalability, while SNARKs are often valued for very small proof sizes and efficient verification.


Do zk-SNARKs require a trusted setup?

Some do. The exact setup assumptions depend on the specific SNARK construction.


Do zk-STARKs require a trusted setup?

STARK systems are designed to use transparent setup rather than a traditional trusted setup.


Why use ZK in Proof of Reserves?

ZK can prove mathematical properties about private customer-liability data without publishing individual balances.


Can ZK prevent negative-balance manipulation?

A ZK circuit can enforce specified balance constraints if those rules are explicitly encoded.


Can ZK prove every customer was included?

Not automatically.


Can ZK prove customer liabilities are complete?

Not by itself.


Can ZK prove reserve assets exist?

Not by itself. Reserve assets require separate verification.


Can ZK prove an exchange controls its wallets?

Not automatically.


Can ZK prove reserve assets are unencumbered?

No.


Can ZK prove an exchange is solvent?

No.


Is a ZK proof the same as a Merkle proof?

No. A Merkle proof primarily proves inclusion in a committed data set; a ZK proof can establish broader mathematical statements about private data.


Can Merkle trees and ZK proofs be used together?

Yes, and they often complement each other in Proof of Reserves systems.


Does "ZK verified" mean an exchange is safe?

No.


Key Takeaway

Zero-knowledge proofs solve a powerful problem:

How can we verify something about private data without revealing the data itself?

In exchange Proof of Reserves, that can look like:

Private Customer Balances
↓
ZK Circuit
↓
Proof

Verifier learns:
"The encoded rules were satisfied"

Verifier does NOT learn:
Every customer's balance

But the critical limitation is:

ZK proves
the encoded statement

not:

ZK proves
everything about the exchange

A valid ZK proof does not automatically prove:

All liabilities were included
→ Not automatic

Reserve assets exist
→ Requires separate verification

Reserve assets are unencumbered
→ Not proven

Customer assets are segregated
→ Not proven

The exchange has no other debts
→ Not proven

The exchange is solvent
→ Not proven

So when an exchange says:

"Our Proof of Reserves uses zero-knowledge proofs."

the most important question is not:

"Does it use ZK?"

It is:

"Exactly what statement does the ZK proof verify?"