Skip to content

Zero-knowledge proofs (ZKPs) have been on my “I should really learn this properly” list for a while.
Most explanations start with heavy notation, so this is my attempt to write down a simpler version for myself.

At a high level, ZKPs try to answer:

“Can you convince me that something is true without revealing your secret?”

1. Zero-Knowledge in One Paragraph

In a normal proof, you show your work. In a zero-knowledge proof, you only show the conclusion (“this statement is true”) and still manage to convince the other side that you’re not lying.

Some informal vocabulary that helped me:

The formal properties (completeness, soundness, zero-knowledge) are there to make sure:

2. Where Groth16 Comes In

There are many ways to build ZKPs. Groth16 is one specific construction that people like because:

3. Groth16 in Three Steps (Hand-Wavy)

Here’s the version I keep in my head and then let the library handle the group theory:

  1. Setup
    • One-time step for a given computation.
    • Outputs a proving key and a verification key.
  2. Proving
    • Input: proving key + public inputs + secret inputs.
    • Output: a short proof.
  3. Verification
    • Input: verification key + public inputs + proof.
    • Output: accept or reject.

Under the hood, this uses elliptic curves, pairings, and constraint systems, but you don’t need the full algebra to reason about where it fits in an architecture.

4. Why I Find It Interesting

From a security engineering angle, Groth16 and similar systems are just another way to draw boundaries:

The practical work looks less like inventing new cryptography and more like:

I’m still learning, but even this simplified mental model already makes a lot of ZK-related papers and blog posts much less scary to read.