C

Chainhunters

10 min
Blockchain
blockchain
zkproof
privacy
Zero-Knowledge Proofs: Hoe Werkt Het?
Iets aantonen zonder iets te verraden? Dat is wat Zero-Knowledge Proofs doen. In deze blog post leggen we uit hoe het werkt.

Wat is een Zero-Knowledge Proof?

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.

Hoe werkt een Zero-Knowledge Proof?

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?

  • Je neemt een groot vel karton met één klein kijkgaatje
  • Je legt dit karton over de plek waar het voorwerp ligt
  • Je laat door het gaatje alleen het voorwerp zien, zonder de omgeving te onthullen

Verstopt Voorwerp

Zo bewijs je dat je de locatie kent, zonder deze prijs te geven. Dit is precies hoe Zero-Knowledge Proofs werken.

Praktijkvoorbeeld: Een Hypotheekaanvraag

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.

De Traditionele Aanpak

Op dit moment kan Bank B niet controleren hoeveel geld je hebt zonder dat je al je gegevens deelt.

Huidige oplossingen:

  • Je deelt bankafschriften of PDF-exports met de hypotheekverstrekker, vaak via een tussenpersoon zoals een hypotheekadviseur

Nadelen:

  • Je moet de hypotheekadviseur vertrouwen met je privégegevens
  • Je moet Bank B vertrouwen dat ze zorgvuldig omgaan met je informatie
  • Je hebt geen controle over wat er met je gegevens gebeurt
  • Er bestaat een risico op vervalsing van bankafschriften

traditional.png

Een Veiligere Manier met Zero-Knowledge

Met een Zero-Knowledge Proof kun je bewijzen dat je voldoende saldo hebt, zonder het exacte bedrag te delen.

Veilige Verificatie met ZoKrates

We gaan dit implementeren met ZoKrates, een framework voor het maken van zk-SNARK proofs in de praktijk.

Het Stappenplan

  1. De bank stelt een minimumbedrag vast (€100.000) en ondertekent dit
  2. De klant genereert een wiskundig bewijs dat aantoont dat het saldo toereikend is
  3. De bank controleert het bewijs

Het minimumbedrag staat vast
Aanpassingen zijn niet mogelijk
Je privacy blijft beschermd
Snelle en efficiënte verificatie

Stap 1: Het ZoKrates script schrijven

We scripten het ZoKrates programma dat:

  • Het werkelijke saldo (als privé-input) van de gebruiker neemt.
  • Een bewijs berekent dat saldo ≥ drempelwaarde (100.000).
  • Zorgt dat het bewijs alleen geldig is voor de door de bank ondertekende drempelwaarde.

De Bank maakt een bestand aan genaamd balance_proof.zok:

def main(private field balance) -> bool {
    assert(balance >= 100000);
    return true;
}

Stap 2: De Bank Compileert het ZoKrates script

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.

Stap 3: De Bank Genereert een Vertrouwde Setup

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).

Stap 4: Gebruiker Genereert een zk-SNARK Bewijs

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!

Stap 5: De Bank Verifieert het Bewijs

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.

Visuele Weergave

Proces visualisatie

Extra: Blockchain Integratie

Als extra stap kunnen we dit proces automatiseren via een smart contract. Dit wordt behandeld in een volgende blog post.