A zero-knowledge proof (ZKP) is a cryptographic method that allows one party — the prover — to convince another party — the verifier — that a statement is true, without revealing any information beyond the truth of the statement itself.
The concept was introduced by Goldwasser, Micali, and Rackoff in their landmark 1985 paper "The Knowledge Complexity of Interactive Proof Systems." It sounds paradoxical at first: how can you prove something without revealing why it is true? The answer lies in the mathematics of probability and computational hardness.
Every valid zero-knowledge proof system must satisfy three properties:
If the statement is true and both prover and verifier follow the protocol honestly, the verifier will be convinced. An honest prover can always prove a true statement.
If the statement is false, no cheating prover can convince an honest verifier (except with negligible probability). False statements cannot be proven.
If the statement is true, the verifier learns nothing beyond the fact that it is true. No information about the witness (the secret) is leaked.
In SNARKs, proofs are short — a few hundred bytes — regardless of the complexity of the computation being proven. Verification is fast even for enormous computations.
The original ZKP constructions were interactive — the prover and verifier exchange multiple rounds of messages (as in the cave example). This is impractical for IoT: a device cannot engage in a live protocol with a blockchain.
The breakthrough was the Fiat-Shamir heuristic, which transforms interactive proofs into non-interactive ones by replacing the verifier's random challenges with a cryptographic hash. The prover generates the entire proof alone, once. Any verifier can check it at any time without interacting with the prover.
This non-interactive property is essential for FidesInnova: an IoT device generates its proof, sends it to the blockchain, and anyone in the world can verify it years later — without the device being online.
A zk-SNARK (Zero-Knowledge Succinct Non-interactive ARgument of Knowledge) is a specific type of non-interactive ZKP with two additional properties:
zk-SNARKs require a trusted setup — a one-time ceremony that generates public proving and verification keys. The FidesInnova platform uses a pre-computed trusted setup for its circuit. The ceremony output is public and auditable.
FidesInnova uses the Groth16 zk-SNARK construction (introduced by Jens Groth in 2016) because it produces the smallest, fastest-to-verify proofs of any production-ready zk-SNARK system.
Groth16 proof generation involves three stages:
The prover computes all intermediate values in the computation — the inputs, outputs, and every value produced along the way. This "witness" is the secret that will never be revealed.
The computation is encoded as a Rank-1 Constraint System — a set of equations that the witness must satisfy. The prover checks that their witness satisfies all constraints.
Using the proving key and the witness, the prover constructs three elliptic curve points (A, B, C) that together form the Groth16 proof (~200 bytes). This involves polynomial evaluations on the BN-128 elliptic curve.
Verification checks a pairing equation over the three proof points using the verification key. On the FidesInnova blockchain, this takes approximately 19 milliseconds.
To generate a ZKP for a computation, that computation must first be expressed as an arithmetic circuit — a graph of addition and multiplication gates over a finite field.
FidesInnova uses the Circom circuit language to define the firmware verification circuit. The circuit encodes: "Given a firmware hash H and sensor reading R, verify that running firmware H on input data produces output R." The circuit is compiled once and the resulting R1CS is used for all subsequent proof generation on devices.
In the FidesInnova framework, the IoT device (zk-Device) runs the SnarkJS or the native C++/Rust ZKP library embedded in its firmware. At each measurement cycle:
Any verifier — now or years later — can retrieve the proof from the blockchain and check it against the public verification key. If the check passes, they know with mathematical certainty that the device ran the correct firmware and the reading is authentic.
The FidesInnova ZKP Explorer displays all submitted proofs. Each proof record shows:
Next Course
Consensus Algorithms & D2PoS →