Waarom hashes van wachtwoorden breken
Je leest het geregeld: "databank van website X gestolen, miljoenen wachtwoorden gelekt". Maar een goede site bewaart je wachtwoord niet — alleen de hash ervan. En uit een hash kan je het wachtwoord niet terugrekenen, dat weet je sinds het vorige hoofdstuk. Dus… is er dan een probleem? Ja. En in dit hoofdstuk speel jij de hacker om te zien waarom.
Woorden die je zo nodig hebt
- Databank
- De grote tabel waarin een website al haar gebruikers bewaart: naam, e-mailadres, en (als het goed is) de hash van het wachtwoord.
- Opzoektabel (of "regenboogtabel")
- Een lijst die iemand vooraf gemaakt heeft: links miljarden veelgebruikte wachtwoorden, rechts hun hash. Wie een hash tegenkomt, zoekt hem rechts op en leest links het wachtwoord af. Geen rekenen, alleen opzoeken.
- Salt
- Letterlijk "zout": een willekeurig stukje tekst dat de website aan je wachtwoord plakt vóór ze het hasht. Voor elke gebruiker een andere. Het is niet geheim — het staat gewoon naast de hash — maar het maakt elke opzoektabel waardeloos.
- PBKDF2
- Een hashfunctie die met opzet traag is: ze herhaalt het rekenwerk honderdduizenden keren. Voor jou een halve seconde bij het inloggen. Voor een hacker die miljarden wachtwoorden wil proberen, een muur.
Hoe een "onkraakbare" hash toch gekraakt wordt
De hacker rekent niet terug. Hij rekent vooruit. Hij neemt een lijst
van de miljard meest gebruikte wachtwoorden — 123456,
azerty, welkom, de namen van alle voetbalclubs —
en berekent van elk de hash. Dat duurt even, maar hij hoeft het maar één keer
te doen. Daarna vergelijkt hij de gestolen hashes met zijn lijst. Elke hash
die overeenkomt, is een gekraakt wachtwoord. Geen wiskunde, alleen geduld en
een grote harde schijf.
Speel de hacker
Alles gebeurt in je browser. Er wordt niets naar de server gestuurd. Typ hier toch nooit een wachtwoord dat je écht gebruikt — dat is een goede gewoonte.
- Klik Hash en zoek op. De demo hasht je wachtwoord en zoekt de hash op in een tabelletje van een paar dozijn veelgebruikte wachtwoorden. Gevonden? Dan ben je "gekraakt".
- Probeer
azerty,voetbal,dokter. Probeer dan iets wat jij zelf verzint. - Klik Zelfde wachtwoord, met salt. Zelfde wachtwoord, twee keer gehasht — en toch twee compleet verschillende hashes. Zoek ze op: niets.
- Klik Met PBKDF2 (traag) en kijk naar de tijd. Reken mee wat dat betekent voor iemand die tien miljoen keer moet proberen.
Salt: iedereen zijn eigen probleem
Zonder salt hebben alle gebruikers met wachtwoord welkom exact
dezelfde hash. De hacker kraakt er één, en hij heeft ze allemaal. Met salt
krijgt elke gebruiker een andere hash voor hetzelfde wachtwoord. De hacker
moet nu voor élke gebruiker apart zijn hele lijst opnieuw hashen. Een lek van
tien miljoen accounts wordt tien miljoen losse klussen.
Traagheid: het enige wapen dat echt telt
SHA-256 is razendsnel — een goede grafische kaart haalt miljarden hashes per seconde. Dat is handig voor bestanden en rampzalig voor wachtwoorden. Daarom gebruiken goede sites een functie die met opzet traag is. Klik in de demo op PBKDF2 en let op de tijd. Een paar honderd milliseconden voel jij nauwelijks bij het inloggen. Maar voor de hacker vermenigvuldigt elke poging met dat getal — en hij heeft er miljarden.
Wat dit voor jou betekent
- Lengte wint van rariteit.
blauwe-fiets-regent-dinsdagis veel sterker danP@ss1!, want het staat in geen enkele lijst. - Nooit hetzelfde wachtwoord op twee sites. Lekt de zwakste site, dan proberen hackers dat wachtwoord meteen op je e-mail en je games.
- Een wachtwoordmanager onthoudt het voor je. Dan mag elk wachtwoord dertig willekeurige tekens zijn — jij hoeft er maar één te kennen.
Voor als je later zelf een website bouwt: schrijf dit nooit
zelf. Elke programmeertaal heeft een ingebouwde functie die salt en traagheid
goed regelt (in PHP heet die password_hash()). Zelf iets knutselen
met een hash en een salt is de klassieke beginnersfout — en de reden achter
de helft van de lekken in het nieuws.
Dit is wiskunde: hoe groot is groot?
Een wachtwoord van 8 kleine letters heeft 268 ≈ 200 miljard mogelijkheden. Klinkt veel — een grafische kaart is er in een minuut door. Vier willekeurige woorden uit een woordenboek van 5000 woorden: 50004 = 625 biljoen, en dat is nog zonder hoofdletters of cijfers. Dat is het verschil tussen machtsverheffen met een groot grondtal en een groot exponent. Wie dat gevoel voor grote getallen heeft, ontwerpt betere sloten dan wie dat niet heeft.