Hoe sterk een wachtwoord moet zijn
Voor een account waar je aan hecht, gebruik je een willekeurig gegenereerd wachtwoord van minstens 16 tekens, of een wachtwoordzin van minstens 5 willekeurig gekozen woorden, en gebruik je dat op precies één site. Dat is 65 tot 95 bits entropie, ruim buiten het bereik van brute kracht, en het deel "één site" telt zwaarder dan de sterkte. Hieronder staat de redenering achter die getallen.
Entropie in bits
Entropie meet uit hoeveel even waarschijnlijke mogelijkheden het wachtwoord getrokken is, uitgedrukt als macht van twee. 40 bits entropie betekent één uit 2^40 mogelijkheden, ongeveer een biljoen, en elke extra bit verdubbelt het werk om het te raden. De formule is bits = lengte x log2(omvang van de tekenverzameling), dus kleine letters zijn elk 4,7 bits waard, letters en cijfers 5,95, alle afdrukbare ASCII 6,57, en een woord uit een lijst van 7.776 woorden 12,9:
| Wachtwoord | Entropie |
|---|---|
| 8 kleine letters | 38 bits |
| 12 letters en cijfers | 71 bits |
| 12 tekens, volledige ASCII | 79 bits |
| 16 letters en cijfers | 95 bits |
| 5 willekeurige woorden | 65 bits |
| 6 willekeurige woorden | 78 bits |
Deze rekensom klopt alleen als het wachtwoord uit een echt willekeurig proces kwam. Tr0ub4dor&3 is 11 tekens uit een verzameling van 95, wat de formule op 72 bits waardeert, maar het is een woordenboekwoord met voorspelbare vervangingen en een kraaktool komt er veel eerder bij. Entropie beschrijft de generator, niet de string.
Wat de bits je opleveren
De raadsnelheid hangt af van hoe de site het wachtwoord opgeslagen heeft. Tegen een live inlogformulier met snelheidsbegrenzing krijgt een aanvaller een paar pogingen per uur. Tegen een gestolen database hangt het van de hash af: een snelle zoals MD5 of SHA-1 kan met enorme snelheden geprobeerd worden op gewone grafische hardware, terwijl een speciaal gebouwde wachtwoordhash als bcrypt of Argon2 vele ordes van grootte trager is.
Hieronder staat het slechtste geval, een snelle hash zonder salt bij een aangenomen tien miljard pogingen per seconde. Het laat zien hoe scherp de curve buigt, en is geen meting:
| Entropie | Tijd om de hele ruimte af te lopen |
|---|---|
| 40 bits | Ongeveer twee minuten |
| 50 bits | Ongeveer een dag |
| 60 bits | Een paar jaar |
| 70 bits | Een paar duizend jaar |
| 80 bits | Miljoenen jaren |
Gemiddeld slaagt een aanvaller in de helft van die tijd. De praktische lezing: onder 50 bits stelt tegen een offline aanval weinig voor, 60 tot 70 bits is voor de meeste dingen prima, en vanaf 80 bits zit je comfortabel.
Lengte wint het van een brij aan symbolen
Neem een wachtwoord van 12 tekens met letters en cijfers (71 bits). Leestekens toevoegen, waarmee de verzameling van 62 naar 95 tekens gaat, brengt je op 79 bits. In plaats daarvan twee letters of cijfers extra brengt je op 83. Elk extra teken vermenigvuldigt de zoekruimte met het hele alfabet, terwijl het alfabet verbreden maar ongeveer 0,6 bits toevoegt per teken dat je al had. Lengte wint, en blijft winnen.
Samenstellingsregels ("moet een hoofdletter, een cijfer en een symbool bevatten") duwen mensen in een smalle verzameling patronen: hoofdletter vooraan, cijfer en uitroepteken achteraan. Kraaktools proberen die transformaties als eerste. Dat is een van de redenen waarom de richtlijnen van NIST voor digitale identiteit afstapten van samenstellingsregels en verplichte periodieke wijzigingen, ten gunste van lengte en controles tegen lijsten van wachtwoorden die uit datalekken bekend zijn.
Hergebruik is het echte risico
Vrijwel niemand raakt een account kwijt door brute kracht. Wat er gebeurt is credential stuffing: een zwakke site wordt gekraakt, de combinaties van e-mailadres en wachtwoord worden gepubliceerd, en geautomatiseerde tools proberen elke combinatie bij honderden andere diensten. Als je op je e-mail hetzelfde wachtwoord gebruikte als op het gekraakte forum, doet de sterkte ervan niet ter zake. Het is overhandigd, niet geraden.
Phishing werkt op dezelfde manier: een wachtwoord van 30 tekens dat op een overtuigende nep-inlogpagina getypt wordt, is precies evenveel waard als password1. Dus, op volgorde van wat telt:
- Een ander wachtwoord op elke site.
- Tweefactorauthenticatie op alles wat belangrijk is, bovenal je e-mail, want dat is de herstelroute voor al het andere.
- Genoeg lengte om offline kraken kansloos te maken.
Wachtwoordzinnen
Een wachtwoordzin bestaat uit meerdere woorden die willekeurig uit een lijst zijn getrokken, bijvoorbeeld harvest-cobalt-mural-drift-plinth. Bij 12,9 bits per woord is vijf woorden 65 bits en zes woorden 78.
Twee voorwaarden laten dit werken. De woorden moeten willekeurig gekozen zijn, met dobbelstenen of door software, niet door jou uitgezocht. En de sterkte komt uit het aantal woorden, niet uit het scheidingsteken of uit één letter met een hoofdletter: een songtekst of een citaat heeft vrijwel geen entropie, omdat het uit een kleine vijver van dingen komt die mensen zeggen.
Wachtwoordzinnen verdienen zichzelf terug bij de paar wachtwoorden die je uit je hoofd typt: het inloggen op je apparaat, het hoofdwachtwoord van je manager, je schijfversleuteling.
Waar een manager past
Een wachtwoordmanager verandert "verzin en onthoud 200 unieke wachtwoorden" in "onthoud één lange wachtwoordzin". Hij genereert strings met hoge entropie en vult ze in op het juiste domein, wat phishing afzwakt omdat hij niet automatisch invult op een adres dat er alleen maar op lijkt.
Hij concentreert risico, wat een terecht bezwaar is en toch de betere afweging: één kluis achter een lange wachtwoordzin en een tweede factor verslaat één wachtwoord dat over tientallen sites van onbekende kwaliteit verdeeld is.
Een opmerking over hashen
Hashen is de andere kant van het inloggen. Een goed gebouwde dienst slaat een gesalte hash op uit een bewust traag algoritme, nooit het wachtwoord zelf, zodat een lek niet meteen platte tekst oplevert. Algemene hashes zoals SHA-256 zijn gebouwd om snel te zijn, wat ze uitstekend maakt voor bestandschecksums en een slechte keuze voor het opslaan van wachtwoorden. Je eigen wachtwoord hashen om het "sterker te maken" bereikt niets: het resultaat is precies even moeilijk te raden als de invoer.