Soundness, Completeness & Zero Knowledge

the three core properties of a zero-knowledge proof — from “what are we proving?” to honest provers, cheating provers, simulators, probability, and real ZK systems

Start with the actual problem

Suppose a prover claims that a statement is true.

“I know a secret witness w such that R(x,w) = true.”

The verifier does not simply want a message saying “trust me.” The verifier wants a protocol that gives a meaningful cryptographic guarantee.

Three properties describe the heart of that guarantee:

completeness

If the statement is true and the prover follows the protocol honestly, the verifier should accept.

soundness

If the statement is false, a cheating prover should have only a very small probability of convincing the verifier.

zero knowledge

The verifier should learn nothing useful about the private witness beyond what is already implied by the statement.

These properties answer three different questions:

Completeness → Will a true statement pass?
Soundness → Will a false statement fail?
Zero knowledge → What does the verifier learn?

Statement and witness

Before discussing the three properties, we need to define what a proof is actually about.

Let:

x = public statement
w = private witness

A relation R tells us whether a particular witness satisfies a particular statement.

R(x,w) = true

The language of provable statements is:

L = { x : ∃w such that R(x,w) = true }

So the prover's claim is usually not simply “I know a number.” It is:

x ∈ L

and the prover possesses a witness w demonstrating membership.

Example: knowing a preimage

Suppose:

y = H(w)

The public statement is y. The private witness is w.

The prover wants to prove:

∃w : H(w) = y

without revealing w.

What is a proof protocol?

A proof protocol describes how a prover and verifier interact.

Prover message Verifier challenge Prover

A simple interactive protocol can look like:

1. Prover → commitment
2. Verifier → random challenge
3. Prover → response
4. Verifier → accept / reject

Later, Fiat–Shamir can replace the verifier's random challenge with a hash-derived challenge in many non-interactive constructions.

1. Completeness

Completeness describes what happens when everyone behaves honestly and the statement is actually true.

x ∈ L
w is a valid witness
P is honest
⇒ V accepts

More formally, a proof system is complete if an honest prover with a valid witness causes an honest verifier to accept with probability 1, or with probability negligibly close to 1, depending on the precise definition.

Why can completeness involve probability?

Some protocols contain randomized behavior. For example, a prover or verifier may sample random values.

Therefore the exact statement can be written as:

Pr[V accepts ⟨P,V⟩(x,w)] ≥ 1 − ε

where ε is the completeness error.

Intuition: completeness protects honest users from false rejection. A correct proof should not randomly fail with a significant probability.

Completeness with a simple example

Suppose Alice knows a valid witness w and follows every proving step correctly.

valid statement + valid witness + honest prover accept

If the verifier rejects valid proofs often, the system is not useful. A proof system therefore aims to make honest acceptance overwhelmingly likely.

2. Soundness

Soundness is the property that protects the verifier from a dishonest prover.

Imagine that the statement is false:

x ∉ L

There is no valid witness satisfying the relation.

A malicious prover may still try to produce messages that make the verifier accept.

Soundness says that this should succeed only with a small probability.

Pr[V accepts ⟨P*,V⟩(x)] ≤ ε
for every efficient cheating prover P* and x ∉ L

Here P* represents an arbitrary malicious prover and ε is the soundness error.

Intuition: soundness is the “you cannot fake it” property.

Why is soundness usually probabilistic?

Many proof protocols use randomness.

The verifier may choose a challenge that the cheating prover cannot predict before committing to its first message.

Suppose a dishonest prover can answer only one particular challenge out of N possible challenges.

Pr[cheating succeeds] = 1/N

If N is large, the cheating probability becomes small.

Repeating a protocol can reduce the error further:

ε, ε², ε³, …

The exact reduction depends on the protocol and how repetitions are composed.

Soundness vs. knowledge soundness

This distinction is important in zero knowledge.

Ordinary soundness says, roughly:

false statement → cheating prover cannot convince verifier

Knowledge soundness is stronger in a different direction. It says that if a prover can convince the verifier, then there should exist an efficient extractor that can obtain a valid witness from that prover, under the construction's formal security model.

successful prover → extractor → witness

This is why the word Knowledge appears in SNARK and STARK terminology.

Important: the extractor is a security-definition tool. It does not mean that the verifier literally runs an extractor during normal proof verification.

3. Zero knowledge

Now consider a different question.

Suppose the statement is true and the prover has a valid witness. Does the verifier learn the witness while checking the proof?

A zero-knowledge proof is designed so that the verifier learns nothing beyond what the statement itself reveals, according to the formal definition and security model.

proof of knowledge ≠ disclosure of knowledge

The prover can demonstrate possession of a secret without simply sending the secret to the verifier.

The central idea: simulation

The standard way to formalize zero knowledge is through a simulator.

Imagine two worlds.

real world

The verifier interacts with the actual prover, who knows the witness.

simulated world

A simulator produces an interaction without having access to the witness.

If the verifier cannot distinguish these worlds except with negligible advantage, the protocol provides zero knowledge under the relevant definition.

Real interaction ≈ Simulated interaction

The symbol represents computational indistinguishability in the common computational zero-knowledge setting.

Why does the simulator matter?

Suppose the verifier's entire view of the real protocol can be generated without knowing the secret witness.

Then whatever information the verifier obtained from the protocol could not depend on actually possessing the witness in the first place.

real prover transcript simulator transcript

This is the fundamental intuition behind simulation-based zero knowledge.

Perfect, statistical, and computational zero knowledge

The phrase “indistinguishable” can be interpreted at different strengths.

perfect ZK

The real and simulated views have exactly the same distribution.

statistical ZK

The distributions are extremely close statistically, even for an unbounded distinguisher.

computational ZK

No efficient distinguisher can tell the real and simulated views apart except with negligible advantage.

These are distinct formal security notions.

A classic intuition: proving you know a secret

Imagine a locked cave with two entrances connected by a secret passage.

The prover knows the secret that opens the passage. The verifier wants confidence that the prover really knows it, but does not want the secret itself revealed.

A simplified protocol is:

1. Prover enters through a randomly chosen side.
2. Verifier randomly asks: “come out from the left or right.”
3. If the prover knows the secret passage, they can satisfy either challenge.
4. A prover who does not know it can guess the requested side only with probability 1/2.

Repeated rounds make the cheating probability small:

1/2 → 1/4 → 1/8 → 1/16 → …

This captures the intuition behind challenge-response protocols.

Important: the cave story is an intuition, not a complete cryptographic protocol. Real systems require precise commitments, randomness, transcript rules, and security proofs.

Why the verifier's challenge matters

The challenge must be unpredictable to a cheating prover at the right point in the protocol.

Conceptually:

commit first → challenge later → response

If the prover could see the challenge before committing, it might construct a fake commitment tailored to that challenge.

This is one reason commitment schemes are so important in interactive proofs.

From interaction to non-interaction: Fiat–Shamir

Interactive protocols require a verifier to generate random challenges.

For a non-interactive proof, the prover can derive the challenge from a cryptographic hash of the transcript.

challenge = H(statement || commitment || transcript)

This is the core intuition behind the Fiat–Shamir transform.

The verifier recomputes the same challenge from the proof transcript.

commitment hash challenge response

Security of this transformation requires careful modeling and domain separation; it is not simply “replace randomness with any hash.”

Zero knowledge is not encryption

Encryption hides a message from unauthorized parties.

Zero knowledge is different: it lets one party prove a statement without revealing the secret information used to make the statement true.

encryption

“Here is a secret message, but only the intended recipient can read it.”

zero knowledge

“I know a secret satisfying this condition, but I will not reveal the secret.”

The three properties work together

Completeness → honest truth survives verification.
Soundness → false claims do not survive verification.
Zero knowledge → verification does not expose the witness.

Consider what happens if one property is missing.

no completeness

Honest users can be rejected even when their statements are true.

no soundness

An attacker might prove false statements.

no zero knowledge

The verifier may learn the private witness while checking correctness.

How this appears in SNARKs and STARKs

Modern SNARKs and STARKs combine these properties with concrete algebraic and cryptographic mechanisms.

SNARK-style view

witness constraints polynomial relations commitments proof

Soundness comes from the inability of an efficient adversary to satisfy the required algebraic checks for a false statement, under the construction's assumptions.

Zero knowledge is achieved through blinding, randomization, simulation arguments, or other construction-specific mechanisms.

STARK-style view

witness / trace AIR polynomial constraints Merkle + FRI proof

Soundness is connected to low-degree testing, query randomness, hash commitments, and the algebraic structure of the protocol.

Zero knowledge requires additional hiding/randomization mechanisms when the underlying proof would otherwise reveal information about the witness or execution trace.

What does zero knowledge mean in a zkVM?

A zkVM executes a program and generates an execution trace.

program → execution trace → constraints → proof

Suppose the trace contains a private value:

secret = 123456...

The goal may be to prove that the VM executed correctly without exposing that private value.

Completeness says the honest trace produces an accepted proof.

Soundness says an invalid trace should not produce an accepted proof except with negligible probability.

Zero knowledge says the proof should not unnecessarily reveal the private execution information.

Understanding “negligible probability”

Cryptographic security often uses the word negligible.

Informally, a function negl(λ) is negligible if it becomes smaller than the inverse of every polynomial in the security parameter λ, for sufficiently large λ.

∀ polynomial p(λ), ∃ λ₀ : negl(λ) < 1/p(λ) for λ > λ₀

This gives cryptographers a rigorous way to express “so small that an efficient adversary cannot exploit it at meaningful scale.”

The security parameter

The symbol λ commonly represents the security parameter.

Increasing λ generally means increasing the resources required to break the cryptographic guarantee.

larger λ → harder attack → smaller acceptable failure probability

Concrete systems translate this abstract parameter into things such as field sizes, hash output lengths, repetition counts, query counts, and group sizes.

What is a cheating prover?

Soundness is not about one specific attacker.

We imagine an arbitrary efficient algorithm:

P*

The star indicates that this prover may deviate from the prescribed protocol in any computationally feasible way.

The security statement is therefore roughly:

for every efficient P*, false statements are accepted only with negligible probability

This is much stronger than testing the protocol against a few obvious cheating strategies.

What about a malicious verifier?

Zero knowledge must consider what a verifier might do with the information it receives.

A malicious verifier V* may:

  • choose challenges differently from an honest verifier;
  • keep transcripts;
  • try to correlate protocol messages;
  • run additional computation on the received data;
  • attempt to extract information about the witness.

Therefore, a strong zero-knowledge definition is usually phrased against an arbitrary efficient verifier, not just an honest one.

Honest prover, honest verifier, malicious prover, malicious verifier

Actor Meaning Property involved
Honest prover Follows protocol and has a valid witness Completeness
Cheating prover May deviate arbitrarily while remaining computationally bounded Soundness
Honest verifier Follows the prescribed verification algorithm Completeness / standard verification
Malicious verifier May attempt to extract information from interaction Zero knowledge

Proof vs. argument

The terminology matters.

A classical proof can be sound even against an unbounded prover, depending on the formal setting.

An argument relies on computational limitations: a computationally bounded adversary should not be able to break soundness.

proof → information-theoretic style soundness
argument → computational soundness

Modern SNARKs and STARKs are generally described as arguments because their soundness relies on computational assumptions.

Interactive vs. non-interactive zero knowledge

In an interactive protocol:

P ↔ V

The verifier actively contributes randomness.

In a non-interactive proof:

P → π → V

The prover sends a proof π that the verifier checks.

Many practical ZK systems use Fiat–Shamir or another mechanism to obtain non-interactive proofs from interactive-style protocols.

Rust: a tiny mental model

Completeness, soundness, and verification as code concepts
rust
// Public statement
struct Statement {
    public_value: u64,
}

// Private witness
struct Witness {
    secret: u64,
}

// Relation being proved:
// H(secret) == public_value
fn relation(x: &Statement, w: &Witness) -> bool {
    hash(w.secret) == x.public_value
}

// Completeness:
// an honest prover with a valid witness should produce
// a proof accepted by verify().

// Soundness:
// an efficient prover without a valid witness should
// have only negligible probability of producing a proof
// accepted by verify().

// Zero knowledge:
// the proof should not expose `w.secret`.

fn verify(x: &Statement, proof: &Proof) -> bool {
    // Real systems perform cryptographic verification here.
    todo!()
}

This is deliberately not a cryptographic implementation. It shows where the three security properties sit conceptually in a software system.

Common mistakes

“Completeness means the prover is honest.”

No. Completeness describes the behavior of an honest prover with a valid witness. It is a property of the protocol.

“Soundness means cheating is impossible.”

Usually the formal claim is probabilistic: cheating succeeds only with negligible probability under the security model.

“Zero knowledge means the verifier learns nothing.”

More precisely, the verifier learns nothing beyond what is allowed by the formal zero-knowledge definition and the public statement.

“Zero knowledge and secrecy are identical.”

Zero knowledge is a protocol property based on simulation/indistinguishability, not simply encryption of a message.

“Soundness and zero knowledge are the same.”

Soundness protects against false proofs. Zero knowledge protects the witness from being learned through the proof.

“The verifier extracts the witness.”

Knowledge soundness uses an extractor in the security argument; ordinary verification does not normally run that extractor.

Where the three properties appear in a proving pipeline

program trace / witness constraints polynomials commitments proof
Completeness → valid witness / trace produces an accepted proof.
Soundness → invalid witness / trace cannot produce an accepted proof except with tiny probability.
Zero knowledge → proof does not expose the private witness beyond the allowed leakage.

Completeness vs. soundness vs. zero knowledge

Property Question Protected party Failure looks like
Completeness Does a true claim with an honest prover get accepted? Honest prover Valid proofs are rejected
Soundness Can a false claim be accepted? Verifier Invalid proof is accepted
Zero knowledge Does the proof reveal the witness? Prover / witness owner Verifier learns forbidden information

Interview-level questions

Q1
What is completeness?

If the statement is true and the prover has a valid witness and follows the protocol, the verifier accepts with overwhelming probability or according to the protocol's completeness guarantee.

Q2
What is soundness?

If the statement is false, an efficient cheating prover can convince the verifier only with negligible probability, under the protocol's security assumptions.

Q3
What is zero knowledge?

The verifier's view of the real proof can be simulated without the witness, so the verifier cannot efficiently extract additional useful witness information from the protocol.

Q4
What is the difference between soundness and knowledge soundness?

Soundness prevents false statements from being accepted. Knowledge soundness additionally captures the idea that a successful prover must effectively “know” a valid witness, formalized through an extractor.

Q5
Why is a simulator used for zero knowledge?

Because if a simulated verifier view can be generated without the witness and is indistinguishable from the real view, the protocol is not giving the verifier useful witness-dependent information.

Q6
What does negligible probability mean?

It means the probability decreases faster than the inverse of every polynomial in the security parameter, for sufficiently large security parameters.

Q7
Can a protocol be sound but not zero knowledge?

Yes. A protocol can prevent false proofs while still revealing the witness.

Q8
Can a protocol be zero knowledge but not sound?

Yes in principle. Hiding the witness does not automatically guarantee that false statements cannot be proven.

The whole idea in one map

first-principles map
1. A prover wants to establish that a public statement x belongs to a language L.
2. Membership means there exists a witness w satisfying R(x,w) = true.
3. Completeness says honest valid proofs are accepted.
4. Soundness says false statements are accepted only with tiny probability.
5. Knowledge soundness says a successful prover can be associated with an extractable witness.
6. Zero knowledge says the verifier's view can be simulated without the witness.
7. Interactive protocols often use commitment → challenge → response.
8. Fiat–Shamir can derive challenges from a transcript for non-interactive proofs.
9. Completeness protects honest provers.
10. Soundness protects verifiers from false claims.
11. Zero knowledge protects the witness from being revealed.
12. Modern SNARKs and STARKs implement these ideas using concrete algebraic and cryptographic machinery.

If you remember only one mental model, remember this:

true claim accept = completeness
false claim reject = soundness
private witness not revealed = zero knowledge

These three properties are not interchangeable. Together, they describe the core correctness, security, and privacy goals that make a zero-knowledge proof system useful.