Standaard cryptografische hashfunctie

Keccak-256 is de standaard cryptografische hashfunctie van het blockchainplatform Ethereum. Het wordt onder meer gebruikt voor het berekenen van accountadressen, het verifiëren van transacties en logs, en Merkle Patricia Tries. Deze hashfunctie is onderdeel van de SHA3-familie. Cryptografen zijn over het algemeen zeer positief over deze hashfunctie. Keccak-256 wordt beschouwd als veilig, innovatief en goed ontworpen, ook al is het niet exact dezelfde hashfunctie als het gestandaardiseerde SHA-3. De Keccak-256 hashfunctie maakt geen gebruik van een Merkle-Damgård-structuur, maar van een relatief nieuw ontwerpprincipe (de zogenaamde ‘sponge contructie’) dat beter bestand is tegen lengte–extensie-aanvallen. Keccak is jaren publiek geëvalueerd in de SHA-3-wedstrijd.

Ethereum logo

Andere paddingmethode dan SHA-3

Keccak en SHA-3 lijken sterk op elkaar, maar zijn niet precies hetzelfde. Keccak is de originele hashfunctie die in 2012 de SHA-3-wedstrijd van het National Institute of Standards and Technology (NIST) won. SHA-3 is de gestandaardiseerde versie van Keccak, maar dan met kleine aanpassingen aan de paddingregels. SHA-3 gebruikt dus een andere paddingmethode dan Keccak. Padding betekent dat er extra bits worden toegevoegd aan de input, zodat die goed past in het interne blokformaat van de hashfunctie. Ethereum gebruikt dus de originele Keccak-256 hashfunctie, zonder de NIST-aanpassing. De verschillen tussen Keccak en SHA-3 zijn klein en niet kwetsbaarheidsgevoelig.

Logo van NIST: National Institute of Standards and Technology

Data in vaste blokken

Hashfuncties zoals Keccak en SHA-3 verwerken data in vaste blokken (bijvoorbeeld 1088 bits per keer). Echter, is de input (zoals bijvoorbeeld een wachtwoord, transacties of een bericht) meestal geen mooi rond aantal bits. Daarom vult padding de input aan tot een geschikt formaat, zodat de hashfunctie het op de juiste manier kan verwerken. De paar extra bits aan het eind zorgen ervoor dat het algoritme weet wanneer de input stopt. Bovendien zorgen de extra bits ervoor dat verschillende functies (Keccak versus SHA-3) andere eindbits gebruiken, en dus andere hashes opleveren. Padding is als het ware een slimme opvulling aan het einde van de input, zodat de hashfunctie goed werkt. Het bepaalt dus mede de uitkomst van de hash.

 

Blockchain

 

Waarom koos Ethereum voor Keccak-256 in plaats van SHA-3?

Keccak-256 is nauw verweven met het ecosysteem van Ethereum. Veel wallets, node software en tooling gebruiken deze hashfunctie om compatibel te zijn met het netwerk. Echter, kom je Keccak-256 zelden buiten deze context tegen, omdat veel andere platformen meestal kiezen voor SHA-2 of SHA-3. Ethereum werd ontworpen rond 2013-2014 en de officiële SHA-3-standaard van NIST kwam pas in 2015 (dus nadat Ethereum al gelanceerd was). Toen SHA-3 officieel werd geïntroduceerd was Keccak dus al diep ingebakken in het protocol van Ethereum. Een overstap zou het hele blockchain-ecosysteem kunnen breken. Bovendien was er geen dringende reden om over te stappen, omdat Keccak cryptografisch zeer veilig is.

 

Keccak-256 is cryptografisch even sterk als SHA-3

Veel tools, programmeertalen en standaarden gebruiken SHA-3 (de NIST-variant) in plaats van Keccak. Hierdoor is de interoperabiliteit van Ethereum met andere blockchain-ecosystemen wellicht iets lastiger. Keccack-256 is niet altijd beschikbaar in standaard crypto-libraries, waardoor er minder standaard ondersteuning is. Gebruikers zullen dan aparte libraries moeten installeren. In formele settings (zoals smartcard-specs, certificaten en compliance) is SHA-3 officieel goedgekeurd, maar Keccak niet. Ethereum gebruikt dus een niet-gestandaardiseerde hashfunctie in een gestandaardiseerde wereld. Dit is niet direct onveilig, maar wel ‘vreemd’ vanuit het oogpunt van beveiligings-goverance. Toch is dat in principe geen probleem, want Keccak-256 is cryptografisch even sterk als SHA-3, en voor gebruikers en smart contracts maakt het in de praktijk niets uit. Het is dus eerder onhandig dan problematisch.

Logo van de Solidity programmeertaal, coderen van smart contracts

Programmeertalen

Ethereum maakt gebruik van verschillende programmeertalen waaronder Solidity, Vyper, Go, Rust, C++, JavaScript en Python,  afhankelijk van het onderdeel van het systeem. Solidity is de meest gebruikte taal voor smart contracts en wordt gecompileerd naar bytecode die op de Ethereum Virtual Machine (EVM) draait. Solidity gebruikt Keccak-256 als ingebouwde hashfunctie en wordt gebruikt in bijna elk Solidity-smart contract voor hashing van data. Ook Vyper ondersteunt Keccak-256.

 

Wat is het verschil tussen Keccak-256 en SHA3-256?

Keccak-256 en SHA3-256 (niet te verwarren met het door Bitcoin gebruikte SHA-256) lijken sterk op elkaar. Dit leidt soms tot verwarring bij ontwikkelaars, vooral vanwege de overlap in naamgeving en de manier waarop deze algoritmes worden gebruikt in verschillende contexten. Zowel Keccak-256 als SHA3-256 behoren tot de SHA-3 familie van hashfuncties, die is ontwikkeld door NIST als een alternatief voor eerdere hashfuncties zoals SHA-1 en SHA-2. Keccak was het winnende algoritme in een publieke competitie voor de ontwikkeling van de SHA-3 standaard. SHA3-256 is de 256-bit versie van deze standaard.

 

Technisch identiek

En hoewel Keccak-256 en SHA3-256 technisch gezien identiek zijn, is er een belangrijk verschil tussen deze twee hashfuncties dat te maken heeft met de manier waarop ze zijn gedefinieerd en geïmplementeerd. Het grootste technische verschil tussen Keccak-256 en SHA3-256 zit in het eerdergenoemde paddingmechanisme dat wordt gebruikt. Bij Keccak-256 wordt de padding anders toegepast dan bij SHA3-256, wat een effect heeft op de uiteindelijke uitvoer van de hashfunctie.

 

Padding-regels

Keccak-256 en SHA3-256 zijn dus bijna hetzelfde, maar het verschil zit hem dus in de padding. Padding is extra data die aan het einde van een bericht wordt toegevoegd. Hashfuncties zoals Keccak of SHA3 werken in vaste blokken (bijvoorbeeld 1088 bits) maar de invoer is vaak korter of geen mooi veelvoud daarvan. Om dat op te lossen wordt er padding toegevoegd zodat het bericht precies in blokken past. Het verschil tussen keccak en SHA3 zit hem dus in de manier hoe ze dat opvullen (de padding-regels). Keccak-256 gebruikt de originele padding, zoals ontworpen door de Keccak-makers. SHA-3 gebruikt een iets aangepaste padding, zoals gespecificeerd in de officiële SHA-3-standaard van NIST. In de praktijk betekent dit dat hoewel ze dezelfde structuur en lengte hebben, ze niet dezelfde hashuitvoer geven voor dezelfde invoer. Het feit dat SHA3-256 soms verwisseld wordt met Keccak-256 leidt soms tot bugs.

 

Een aantal quantumcomputers

 

Is Keccak-256 veilig tegen quantum-aanvallen?

Er wordt gewerkt aan de ontwikkeling van een quantumcomputer. Dergelijke computers kunnen veel sneller rekenen, waardoor bestaande hashfuncties mogelijk onveilig worden. Zowel Keccak als SHA-3 worden beschouwd als ‘post-quantum bestendig’. Quantumcomputers maken het mogelijk om sneller te zoeken naar een oplossing, maar ze kunnen hashes echter niet volledig breken, alleen de zoekruimte halveren. Een gewone computer moet misschien 256 pogingen doen om een Keccak-256 hash te kraken. Een quantumcomputer zou dat wellicht in ongeveer 228 pogingen kunnen doen, met behulp van het zogenaamde ‘Grover’s algoritme’. Quantumcomputers halveren weliswaar de veiligheid, maar dat is nog steeds heel veilig als je een sterke hash gebruikt zoals Keccak-256.

 

Grover’s algoritme

Grover’s algoritme is een quantum-algoritme dat een snellere manier biedt om iets te vinden in een grote lijst van mogelijkheden, zonder dat het precies weet waar het staat. Je zou dit kunnen vergelijken met een hele grote gesloten kast met daarin 1 miljoen laden. In één van die laden zit een sleutel. Een gewone computer moet gemiddeld 500.000 laden checken om de lade met de sleutel te vinden. Een quantumcomputer met Grover’s algoritme vindt de juiste lade al na ongeveer 1000 checks.

 

Lange output

Bij hashfuncties zoals Keccak-256 wil een aanvaller bijvoorbeeld een input vinden die een bepaalde hash oplevert, of twee inputs vinden die dezelfde hash geven (botsing). Bij Keccak-256 heb je 2256 mogelijke hashes. Een gewone brute-force aanval kost gemiddeld 2256 pogingen. Met Grover’s algoritme daalt dat naar ongeveer 228 pogingen. Dit algoritme maakt brute-force aanvallen op hashfuncties dus sneller, maar niet gemakkelijk. Daarom gebruiken we hashfuncties met een lange output (zoals 256 bits), zodat ze ook veilig blijven als quantumcomputers daadwerkelijk op de markt komen.

 

Grover versnelt het zoeken

Grover’s algoritme is geen magische kraakmethode. Je moet nog steeds raden tot je de juiste oplossing vindt, maar het gaat sneller dan normaal. Grover’s algoritme werkt alleen voor situaties waarin je iets moet zoeken, bijvoorbeeld als je wilt weten welke input een bepaalde hash oplevert. Het algoritme werkt niet bij het kraken van encryptie zoals Advanced Encryption Standard (AES) op een slimme manier, en ook niet bij het vinden van twee inputs met dezelfde hash (botsing). Grover versnelt dus het zoeken, maar breekt de hashing of encryptie niet ineens open. Het blijft dus moeilijk, alleen iets minder moeilijk dan voorheen.

 

Preimage-aanvallen

Het grover’s algoritme kan zogenaamde ‘preimage-aanvallen‘ op hashfuncties versnellen. Bij een preimage-aanval kent iemand de hash en probeert hij de originele input te vinden die de hash heeft gemaakt. In de klassieke cryptografie is het vinden van een preimage (het vinden van een invoer die een bepaalde hashwaarde produceert) een probleem dat in de orde van 2ⁿ tijd (waarbij de lengte van de hash is in bits) wordt opgelost. Dit komt overeen met een brute-force aanval. Grover’s algoritme biedt een kwantumversnelling voor deze zoektocht. In plaats van 2ⁿ mogelijke invoeren te doorzoeken, kan Grover’s algoritme de tijd verminderen tot 2ⁿ/2 . Een aanzienlijke verbetering dus.

 

Geen volledige kwantumoplossing

Dit betekent dat een preimage-aanval met Grover’s algoritme sneller zou zijn dan met klassieke methoden, maar het is nog steeds exponentieel in de lengte van de hash (hoewel met een lagere exponent). Grover’s algoritme biedt echter geen volledige kwantumoplossing voor het vinden van preimages, omdat het alleen de snelheid van de zoekopdracht verbetert, maar de fundamentele moeilijkheid van het probleem blijft bestaan.

 

Een quantumcomputer

 

Maar biedt Keccak-256 voldoende bescherming tegen Grover’s algoritme?

Keccak-256 biedt wel enigszins bescherming tegen Grover, maar geen volledige weerstand. Dat komt omdat Grover in principe toepasbaar blijft op elke hashfunctie, dus ook op Keccak-256. Zoals eerder gezegd biedt Keccak-256 256 bits aan klassieke preimage-veiligheid. Dit betekent dat je gemiddeld 2256 pogingen moet doen om een preimage te vinden via brute-force. Grover’s algoritme halveert de exponent, dus je kunt theoretisch met 2128 pogingen een preimage vinden. De effectieve quantumveiligheid van Keccak-256 tegen preimage-aanvallen is dus 128 bits. Dit is nog steeds een sterk veiligheidsniveau (128 bits wordt over het algemeen als veilig beschouwd), maar niet even sterk als de oorspronkelijke 256 bits.

 

Niet immuun voor Groover’s algoritme

Keccak is dus niet immuun voor Groover’s algoritme, maar wel bestand tot op een praktisch veilig niveau (128 bits). Als je écht hogere veiligheid wilt tegen quantumaanvallen (bijvoorbeeld 256-bit), zou je Keccak met een grotere output kunnen gebruiken, zoals Keccak-512. Dan heb je:

  • Klassiek: 512-bit preimage-resistance
  • Met Grover: 2256 pogingen = 256-bit quantumveiligheid

 

Keccak-256 is wél immuun voor Shor’s algoritme

Naast Groover’s algoritme is er ook het zogenaamde Shor’s quantumalgoritme, dat asymmetrische crypto zoals RSA en ECC kan breken. Dit algoritme kan heel efficiënt gehele getallen factoriseren (zoals RSA) en discrete logaritmen oplossen (zoals ECC of DSA). Shor’s algoritme maakt asymmetrische cryptografie (zoals RSA en ECC) kwetsbaar, en kan in ‘polynomiale tijd’ private sleutels afleiden uit publieke sleutels, iets wat met klassieke methoden praktisch onmogelijk is. Polynomiale tijd betekent dat de hoeveelheid werk (tijd of stappen) die een algoritme nodig heeft, groeit als een ‘polynoom‘ (som van machten) van de grootte van de invoer. Shor breekt asymmetrische algoritmes, maar heeft geen effect op hashfuncties zoals keccak, SHA-2 of SHA-3. Keccak-256 is dus immuun voor Shor’s algoritme.

Hashfunctie

Post-quantum alternatieven

Hashfuncties en symmetrische crypto zijn relatief veilig mits voldoende output/sleutelgrootte. Asymmetrische algoritmes (zoals RSA of ECC) daarentegen zijn veel kwetsbaarder voor quantum-algoritmes dan symmetrische algoritmes. Om post-quantumveiligheid te realiseren moeten asymmetrische algoritmes worden vervangen door post-quantum alternatieven (zoals ‘lattice-gebaseerde crypto en hash-based signatures). Lattice-gebaseerde cryptografie gebruikt wiskundige roosters (lattices) – dit zijn rasters van punten in een ruimte met veel dimensies. Denk bijvoorbeeld aan een 3D-rooster van stippen, maar dan met honderden dimensies. In die roosters zit een moeilijk probleem verborgen:

Hoe vind je de kortste weg tussen twee punten in zo’n rooster?

De kortste weg vinden in hoge dimensies is echt heel moeilijk, zelfs voor quantumcomputers. Lattice-gebaseerde cryptografie wordt dan ook gezien als een goed post-quantum alternatief omdat het niet gebroken kan worden door Shor’s algoritme (geen factorisatie of logaritmen). Ook is er nog geen quantum-algoritme dat ‘lattices’ efficiënt kan oplossen. Bovendien zijn veel lattice-algoritmen snel, schaalbaar en goed te implementeren. Tevens worden ze al gestandaardiseerd door NIST.

 

Binaire code

 

Merkle trees

Naast lattice-gebaseerde crypto zijn ook hash-based signatures een post-quantum alternatief. Hash-based signatures zijn een vorm van digitale handtekeningen die alleen gebruikmaken van hashfuncties (zoals SHA-2 of SHA-3) om veilig te zijn, en niet van wiskundige problemen zoals bij RSA of ECC. Daardoor zijn ze veilig tegen quantumcomputers, zolang de onderliggende hashfunctie sterk genoeg is (zelfs tegenover Grover’s algoritme). De bekendste varianten van hash-based signatures maken gebruik van slimme structuren zoals Merkle trees, waardoor ze efficiënter zijn.

 

Bouwsteen voor de digitale wereld

Keccak-256 is meer dan alleen een krachtige hashfunctie, maar is een bouwsteen voor de digitale wereld van morgen. In een tijd waarin data-integriteit, privacy en veiligheid steeds belangrijker worden, biedt dit cryptografische hash-algoritme flexibiliteit, robuustheid en vertrouwen. Keccak-256 zorgt voor de rekenkracht die Ethereum draaiende houdt, transacties beschermt en data zijn integriteit geeft. Terwijl nieuwe toepassingen worden ontwikkeld en digitale structuren verder evolueren, zal Keccak-256 voorlopig een sleutelrol blijven spelen in de wereld van blockchaintechnologie.

 

Terug naar boven ↑

 

Op de hoogte blijven van de ontwikkelingen op het gebied van blockchaintechnologie? Meld je dan nu aan voor de blogpost!

 

Meld je aan voor de blogpost!
Ik ga ermee akkoord dat mijn naam en e-mailadres worden gedeeld met Mailchimp.
Met de blogpost van Uitleg Blockchain blijf je automatisch op de hoogte van de nieuwste ontwikkelingen omtrent de blockchain technologie.
We hebben een hekel aan spam. Uw e-mailadres zal niet worden verkocht of gedeeld met anderen (afgezien van het marketing automation platform dat wij gebruiken voor onze e-maillijst).