Hashfuncties

Voorwerpen van allerlei formaat vallen in een trechter en komen er onderaan uit als identieke, even grote tegeltjes.

Hoe weet een website dat je wachtwoord juist is, zonder je wachtwoord te kennen? Hoe merkt je telefoon dat een gedownload bestand onderweg beschadigd is? Beide keren met hetzelfde trucje: een vingerafdruk van de gegevens. Klein, altijd even groot, en uniek voor wat erin ging.

Woorden die je zo nodig hebt

Hash (of hashfunctie)
Een rekenmachine die je iets geeft — een woord, een foto, een heel boek — en die er altijd een even lange reeks tekens van maakt. Dezelfde invoer geeft altijd dezelfde uitvoer. Iets anders invoeren, ook maar één letter, geeft een compleet andere uitvoer.
Bit
Het kleinste stukje informatie: een 0 of een 1. Acht bits maken een byte. Als iets "256 bits" is, zijn dat 256 nullen en enen op een rij.
SHA-256
De naam van de hashfunctie die vandaag het meest gebruikt wordt. De 256 is het aantal bits in de uitvoer: altijd precies 256, of je nu één letter of een hele film invoert. In hexadecimaal zijn dat 64 tekens.
Algoritme
Een vast recept van rekenstappen. SHA-256, SHA-1 en MD5 zijn drie verschillende recepten met hetzelfde doel.

Drie regels waar een hash zich aan houdt

RegelWat het betekent
Eenrichtingsverkeer Uit de hash kan je de invoer niet terugrekenen. Niet "moeilijk", niet "met een snelle computer wel" — er bestaat geen weg terug. Zoals je uit een gehakte biefstuk de koe niet meer terugkrijgt.
Geen botsingen Twee verschillende invoeren mogen niet dezelfde hash krijgen. In theorie kan het (er zijn oneindig veel teksten en maar 2256 hashes), maar ze vinden lukt niemand.
Lawine-effect Eén letter anders, en ongeveer de helft van alle bits in de uitvoer klapt om. Er blijft niets over dat op de vorige hash lijkt.

Probeer het zelf

Alles gebeurt in je browser. Er wordt niets naar de server gestuurd.

  1. Klik Maak de vingerafdruk. Je ziet vier hashes van dezelfde zin, met vier verschillende recepten. Let op hoe lang elk is.
  2. Verander één letter in de zin en klik opnieuw. Vergelijk. Herken je nog iets?
  3. Klik Toon het lawine-effect: de demo verandert zelf één teken en telt hoeveel bits er omklappen.
  4. Plak een hele lange tekst — een songtekst, een opstel. De hash blijft even lang.

Waarom die lengte ertoe doet

256 bits betekent 2256 mogelijke uitkomsten. Dat is een getal met 78 cijfers. Ter vergelijking: het aantal atomen in het heelal is een getal met ongeveer 80 cijfers. Elke mogelijke tekst krijgt een plaatsje in een ruimte zo groot als het heelal — de kans dat twee verschillende teksten toevallig op dezelfde plek landen, is praktisch nul.

De les die je niet kan zíen

Kijk in de demo naar de regel met SHA-1. Die ziet er precies even willekeurig uit als SHA-256, alleen korter. Toch is SHA-1 gebroken: in 2017 toonden onderzoekers van Google en het CWI in Amsterdam twee verschillende PDF-bestanden met exact dezelfde SHA-1-hash. De regel "geen botsingen" was doorbroken. MD5 was al veel eerder weg.

Aan de uitvoer merk je daar niets van. Of een hashfunctie deugt, hangt niet af van hoe willekeurig ze eruitziet, maar van of wiskundigen er een zwakke plek in gevonden hebben. Daarom gebruik je vandaag SHA-256 en niet iets wat er "ook goed uitziet".

Kan je een hash "decrypteren"? Nee. Er is niets versleuteld, er is niets om te ontsleutelen. Toch bestaan er websites die beweren dat ze het kunnen — en soms lukt het ze echt. Hoe dat kan, en waarom dat voor jouw wachtwoorden belangrijk is, is het volgende hoofdstuk.

Dit is wiskunde: de verjaardagsparadox

In een klas van 23 leerlingen is de kans dat twee dezelfde verjaardag hebben groter dan 50 %. Dat voelt fout — er zijn toch 365 dagen? — maar het klopt, want je vergelijkt niet 23 leerlingen met één datum, maar alle 253 paren leerlingen met elkaar. Datzelfde rekensommetje bepaalt hoe lang een hash moet zijn: bij 2256 mogelijkheden verwacht je de eerste botsing pas na ongeveer 2128 pogingen. Dat is kansrekening, en het is de reden dat 256 en niet 128 de standaard is.