Chainhunters
Een Zero-Knowledge Proof (ZK-Proof) is een wiskundige methode waarmee je kunt bewijzen dat iets waar is, zonder extra informatie prijs te geven. Het stelt je in staat om alleen het hoognodige te delen.
Laten we dit uitleggen met een eenvoudig voorbeeld: Het Verstopte Voorwerp Principe
Stel je voor: je speelt een spel waarbij je moet bewijzen dat je weet waar een bepaald voorwerp verstopt is, zonder de exacte locatie te onthullen. Hoe doe je dat?
Zo bewijs je dat je de locatie kent, zonder deze prijs te geven. Dit is precies hoe Zero-Knowledge Proofs werken.
Je wilt een huis kopen van €500.000 en moet aantonen dat je minimaal €100.000 eigen geld hebt bij jouw bank (Bank A) voordat de hypotheekverstrekker (Bank B) je een lening geeft.
Op dit moment kan Bank B niet controleren hoeveel geld je hebt zonder dat je al je gegevens deelt.
Huidige oplossingen:
Nadelen:
Met een Zero-Knowledge Proof kun je bewijzen dat je voldoende saldo hebt, zonder het exacte bedrag te delen.
We gaan dit implementeren met ZoKrates, een framework voor het maken van zk-SNARK proofs in de praktijk.
✅ Het minimumbedrag staat vast
✅ Aanpassingen zijn niet mogelijk
✅ Je privacy blijft beschermd
✅ Snelle en efficiënte verificatie
We scripten het ZoKrates programma dat:
De Bank maakt een bestand aan genaamd balance_proof.zok
:
def main(private field balance) -> bool { assert(balance >= 100000); return true; }
Voer de volgende commands's uit in je terminal:
# Compile the ZoKrates program zokrates compile -i balance_proof.zok
Dit genereert:
abi.json
out
out.r1cs
Deze stap compileert het Zero-Knowledge bewijs.
Het zet de saldocontrole om in wiskundige voorwaarden.
Nu moet de Bank zk-SNARK sleutels aanmaken.
Voer het volgende command uit:
# Generate a trusted setup zokrates setup
Dit genereert:
proving.key
(gebruikt door de gebruiker om proofs te maken).verification.key
(gebruikt door de bank om proofs te controleren).Nu voert de gebruiker het programma uit met hun privé saldo
Voorbeeld waarbij het saldo van de gebruiker €101.432 is:
zokrates compute-witness -a 101432
Dit genereert:
witness
out.wtns
Nu genereert de gebruiker het Zero-Knowledge Bewijs:
zokrates generate-proof
Dit genereert:
proof.json
Een zk-SNARK bewijs is nu gegenereerd!
De bank ontvangt het bewijs en verifieert het.
Verificatie Commando:
zokrates verify ... Performing verification... PASSED
✅ Als de verificatie slaagt, is het saldo van de gebruiker boven de drempelwaarde zonder het exacte bedrag te onthullen.
❌ Als de verificatie mislukt, liegt de gebruiker en heeft niet voldoende saldo.
Als extra stap kunnen we dit proces automatiseren via een smart contract. Dit wordt behandeld in een volgende blog post.