Hashfuncties
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
| Regel | Wat 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.
- Klik Maak de vingerafdruk. Je ziet vier hashes van dezelfde zin, met vier verschillende recepten. Let op hoe lang elk is.
- Verander één letter in de zin en klik opnieuw. Vergelijk. Herken je nog iets?
- Klik Toon het lawine-effect: de demo verandert zelf één teken en telt hoeveel bits er omklappen.
- 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.