Veiligheid van wachtwoorden
Een aanvaller die probeert in een met een wachtwoord beveiligde toepassing te komen (een met een wachtwoord beveiligd RAR-bestand, e-mail…) heeft verschillende mogelijkheden om zonder kennis van het wachtwoord tot een resultaat te komen. Sommige vereisen een zekere dosis intelligentie, vindingrijkheid en kennis, andere vereisen weer wat geluk en fysieke training. Laten we dus eerst samenvatten welke mogelijkheden een aanvaller heeft.
Hoe kraak je iemands wachtwoord
- Degene vinden die het wachtwoord kent (de eigenaar van het e-mailadres bijvoorbeeld) en het wachtwoord van hem krijgen — hem overhalen, omkopen, in elkaar slaan. Deze manier beschrijf ik verder niet in het artikel :-).
- Proberen het wachtwoord op een onopvallende manier van de eigenaar los te krijgen, bijvoorbeeld met een nepmail, wat in vaktaal phishing heet. De methode bestaat erin dat je de eigenaar van het account een e-mail stuurt waarin je hem vraagt je zijn gebruikersnaam en wachtwoord terug te sturen. Het hangt helemaal van jou af hoe betrouwbaar het bericht eruitziet, want alleen het verzoek zou waarschijnlijk niet genoeg zijn, er moet een verhaal bij. Vaak zien we dat de database kapot is gegaan en we daarom alle gebruikers vragen hun wachtwoord en naam opnieuw in te voeren, anders zouden we hun mailbox opheffen enzovoort. Als het bericht er echt serieus uitziet, is het succespercentage meestal niet klein.
- Woordenboekaanval — we downloaden van internet een paar pakketten met de meest gebruikte wachtwoorden en proberen ze allemaal uit. Als we geluk hebben en de eigenaar een vrij gangbaar wachtwoord heeft, krijgen we het inderdaad gemakkelijk te pakken. Daaruit volgt die fundamentele les — kies geen wachtwoorden die betekenis hebben. Kies bijvoorbeeld het wachtwoord amsterdam en ik garandeer je dat de eerste de beste beginnende hacker het binnen een paar seconden kraakt. Dit is waarschijnlijk de meest effectieve methode: als je een echt groot woordenboek met wachtwoorden hebt, kun je zonder veel moeite het wachtwoord van een groot deel van de gebruikers raden.
- Brute force, oftewel brute kracht, is de domste methode. Ze bestaat uit het uitproberen van alle mogelijke variaties van wachtwoorden die er maar op de wereld bestaan. Het programma zet volgens een bepaald algoritme stap voor stap letters achter elkaar en probeert of het het gezochte wachtwoord heeft geraden. Zodra het dat vindt, slaat het het wachtwoord op en stopt het. Deze methode bespreken we verder.
Brute kracht
Een programma dat deze methode gebruikt, maakt gewoon verschillende variaties van woorden en probeert of het toevallig het wachtwoord raakt. We berekenen hoe lang zo'n uitproberen kan duren.
Stel dat we een wachtwoord van vijf tekens hebben dat alleen uit kleine letters van het alfabet bestaat (zonder letters met accenten zoals é of ë). Het aantal letters van het alfabet is zesentwintig. Nu rekenen we eenvoudig uit hoeveel verschillende wachtwoorden we met vijf van zulke letters kunnen maken. We gebruiken variaties, omdat de volgorde ertoe doet (het wachtwoord water is niet hetzelfde als tarwe, hoewel het uit dezelfde letters bestaat), en bovendien moeten we variaties met herhaling gebruiken, omdat letters in wachtwoorden herhaald mogen worden. En dan gaan we rekenen. De formule voor het aantal variaties met herhaling is nk. Voor n vullen we het aantal letters in waaruit we kiezen — het aantal letters van het alfabet — en voor k het aantal letters waaruit het wachtwoord bestaat, in ons geval vijf. We krijgen 265, en dat is ongeveer twaalf miljoen verschillende variaties. Is dat veel of weinig?
Dat hangt ook af van welke machine we tot onze beschikking hebben. Een oudere computer verwerkt per seconde weinig vergelijkingen, supermoderne computers verwerken er tienduizend keer meer. Ik ga in deze voorbeelden uit van een computer die tien miljoen vergelijkingen en beoordelingen per seconde aankan. Het dringt waarschijnlijk tot iedereen door dat zo'n computer een wachtwoord van vijf tekens binnen twee seconden zou ontdekken, en dat is echt geen positief resultaat. Maar laten we de moed niet opgeven.
We maken het wachtwoord sterker
Een wachtwoord van vijf tekens is echt niet veilig, ook niet een beetje, sommige verstandigere systemen laten niet eens toe dat je zo'n kort wachtwoord kiest. Men zegt dat een wachtwoord niet korter mag zijn dan acht tekens. Laten we nu berekenen hoeveel variaties er zijn voor een wachtwoord van acht tekens. Net als in het vorige geval houden we alleen rekening met kleine letters van het alfabet. We vullen in de formule in en krijgen 268, en dat is ongeveer tweehonderd miljard variaties. Dat is al een mooier getal. De computer zou alle variaties in iets minder dan zes uur beoordelen. Dat is beter dan de vorige keer, maar laten we kijken hoe sterk het wachtwoord zou worden als je ook hoofdletters, cijfers en speciale tekens zoals underscores, streepjes enzovoort gebruikte.
Er zijn 26 kleine letters en ook 26 hoofdletters, en dat is samen 52 tekens. Daar moeten we nog 10 cijfers en een aantal speciale tekens bij optellen. Niet overal zijn alle speciale tekens toegestaan, dus voor de eenvoud reken ik met maar acht speciale tekens, zodat het aantal tekens mooi op 70 uitkomt. De lengte van het wachtwoord is weer acht. Na invullen komt dit getal uit: 708, en dat is om een beter idee te geven ongeveer 5,8 · 1014, in woorden bijna zeshonderd biljoen variaties. Dat is al een behoorlijk respectabel getal. Onze computer zou alle variaties controleren in zestienduizend uur! En dat is net geen twee jaar. De aanvaller zou heel veel geluk moeten hebben om het wachtwoord in een realistische tijd te ontdekken. Bovendien zou hij de lengte van je wachtwoord moeten kennen, anders zou hij ook nog de variaties met minder letters moeten nagaan.
Sommige mensen zijn zo bang voor hun gegevens dat ze numerieke wachtwoorden gebruiken. Deze wachtwoorden zijn heel goed bestand tegen een woordenboekaanval, want in een woordenboek met vaak gebruikte wachtwoorden staat vast niet uitgerekend 41 274 390 553. Helaas zijn zulke wachtwoorden weliswaar bestand tegen een woordenboekaanval, maar minder bestand tegen brute force. Er zijn namelijk maar tien cijfers, dat wil zeggen dat het aantal variaties altijd 10k is. Alleen de lengte bepaalt hoe sterk het wachtwoord is. Ons vorige wachtwoord van acht tekens met alle soorten tekens had ongeveer 5,8 · 1014 variaties. Om bij een numeriek wachtwoord minstens hetzelfde te bereiken, zou het vijftien cijfers moeten hebben, bijna twee keer zoveel tekens. Het is duidelijk dat het efficiënter is om een korter wachtwoord te kiezen, maar met meer soorten tekens.
Onderschat de aanvaller niet
De aanvaller kan slim zijn. Na het lezen van de vorige regels heb je bijvoorbeeld besloten je huidige wachtwoord “limonade” in elk geval te veranderen in “Limonade”, waardoor het aantal mogelijke variaties een aantal keer toeneemt, omdat de aanvaller nu ook hoofdletters in het algoritme moet opnemen. Maar de aanvaller kan aannemen dat de hoofdletter alleen op de eerste plaats staat, omdat dat makkelijker te onthouden is en het niet gebruikelijk is dat er midden in een woord een hoofdletter staat. Hij schrijft dus een algoritme dat alle variaties van woorden met kleine letters controleert en eventueel met één hoofdletter helemaal vooraan.
Je oorspronkelijke wachtwoord had een complexiteit (ik bedoel nu hoeveel variaties er in totaal konden zijn als we dezelfde vorm van het wachtwoord aanhouden — acht kleine letters) van 268. Als de aanvaller niet na zou denken, zou het nieuwe wachtwoord een complexiteit van 528 hebben, maar als hij het hierboven geschetste algoritme zou gebruiken, zou het wachtwoord een complexiteit van 52 · 267 hebben. Op de eerste plaats van het wachtwoord kunnen kleine en hoofdletters elkaar afwisselen, dat zijn er samen 52, en op de volgende zeven plaatsen kunnen alleen nog kleine letters elkaar afwisselen, en dat is al een standaard variatie met herhaling.
Verder kan de aanvaller bijvoorbeeld weten dat je wachtwoord uit vier letters en vier cijfers bestaat, niet door elkaar gehusseld, altijd de cijfers achter elkaar en de letters achter elkaar. De complexiteit van zo'n wachtwoord berekenen we zo: het eerste viertal letters heeft in totaal 264 variaties, het tweede viertal cijfers heeft 104 variaties. Deze twee resultaten vermenigvuldigen we vervolgens: 264 · 104. Als de aanvaller niet zou weten of eerst de cijfers of de letters komen, zouden we het vorige resultaat nog met twee moeten vermenigvuldigen.