✖

Sikkerhed for adgangskoder

En angriber, der forsøger at komme ind i en applikation beskyttet med adgangskode (en RAR-fil med adgangskode, en e-mail …), har flere muligheder for at nå sit mål uden at kende adgangskoden. Nogle af dem kræver en vis portion intelligens, opfindsomhed og viden, andre kræver lidt held og fysisk træning. Så lad os først opsummere, hvilke muligheder angriberen har.

Sådan knækker man en andens adgangskode

  • Finde en, der kender adgangskoden (ejeren af e-mailen, for eksempel), og få adgangskoden fra vedkommende – overtale ham, bestikke ham, banke den ud af ham. Den måde vil jeg ikke beskrive nærmere i artiklen :-).
  • Prøve at lokke adgangskoden ud af ejeren på en eller anden diskret måde, for eksempel med en falsk mail, det kaldes mere fagligt phishing. Metoden går ud på, at du sender ejeren af kontoen en e-mail, hvor du opfordrer vedkommende til at sende brugernavn og adgangskode tilbage til dig. Det er helt op til dig, hvor troværdig beskeden ser ud, selve opfordringen ville nemlig nok ikke række, man er nødt til at tilføje en eller anden historie. Man ser ofte, at databasen angiveligt er gået i stykker, og at vi derfor opfordrer alle brugere til at indtaste deres adgangskode og navn igen, ellers lukker vi deres postkasse og lignende. Hvis beskeden ser rigtig seriøs ud, er succesraten ofte ikke lille.
  • Ordbogsangreb – vi henter nogle pakker med de mest almindelige adgangskoder fra internettet og prøver dem alle. Hvis vi er heldige, og ejeren har en ret almindelig adgangskode, får vi den virkelig nemt. Heraf følger den afgørende lære – vælg ikke adgangskoder, som giver mening. Vælg for eksempel adgangskoden fodbold, og jeg garanterer dig, at den første den bedste amatørhacker knækker den på få sekunder. Det er nok den mest effektive metode: Hvis du har en rigtig stor ordbog med adgangskoder, kan du uden større anstrengelse gætte adgangskoden for en stor del af brugerne.
  • Brute force er den dummeste metode, rå kraft. Den går ud på at prøve alle mulige ordnede udvælgelser af tegn, som overhovedet findes i verden. Programmet sætter efter en bestemt algoritme bogstaverne sammen efter tur og prøver, om det har ramt den ønskede adgangskode. Når det finder den, gemmer det adgangskoden og stopper. Denne metode går vi nærmere ind på i det følgende.

Brute force

Et program, der bruger denne metode, danner bare forskellige ordnede udvælgelser af tegn og prøver, om det tilfældigvis har ramt adgangskoden. Vi regner ud, hvor længe sådan en afprøvning kan tage.

Lad os antage, at vi har en adgangskode på fem tegn, som kun består af små bogstaver fra det engelske alfabet (uden de danske bogstaver æ, ø og å). Det engelske alfabet har seksogtyve bogstaver. Nu kan vi helt enkelt regne ud, hvor mange forskellige adgangskoder vi kan danne af fem sådanne bogstaver. Vi bruger ordnede udvælgelser, fordi rækkefølgen har betydning (adgangskoden stork er ikke den samme som krost, selv om den består af de samme bogstaver), og desuden må vi bruge ordnede udvælgelser med tilbagelægning, fordi bogstaverne kan gentages i adgangskoderne. Og så går vi i gang med selve beregningen. Formlen for ordnede udvælgelser med tilbagelægning er nk. For n indsætter vi antallet af bogstaver, vi vælger imellem – antallet af bogstaver i det engelske alfabet – og for k indsætter vi antallet af bogstaver, adgangskoden består af, i vores tilfælde fem. Vi får 265, hvilket er cirka tolv millioner forskellige ordnede udvælgelser. Er det meget eller lidt?

Det afhænger også af, hvilken maskine vi har til rådighed. En ældre rustbunke klarer et lille antal sammenligninger i sekundet, supermoderne computere klarer ti tusind gange flere. Jeg regner i disse eksempler med, at computeren klarer ti millioner sammenligninger og vurderinger i sekundet. Det går nok op for de fleste nu, at en adgangskode på fem tegn ville blive afsløret af sådan en computer på under to sekunder, hvilket virkelig ikke er et positivt resultat. Men lad os ikke give op.

Vi gør adgangskoden stærkere

En adgangskode på fem tegn er virkelig ikke sikker, ikke engang en smule, nogle fornuftigere systemer tillader ikke engang, at man vælger en så kort adgangskode. Man siger, at en adgangskode ikke bør være kortere end otte tegn. Lad os nu regne ud, hvor mange ordnede udvælgelser der findes for en adgangskode på otte tegn. Ligesom i det foregående tilfælde betragter vi kun små bogstaver fra det engelske alfabet. Vi indsætter i formlen og får 268, hvilket er cirka to hundrede milliarder ordnede udvælgelser. Det er allerede et pænere tal. Computeren ville vurdere alle udvælgelserne på knap seks timer. Det er bedre end før, men lad os se på, hvordan adgangskodens styrke ville vokse, hvis du også brugte store bogstaver, cifre og specialtegn som understreger, bindestreger og lignende.

Der er 26 små bogstaver, store bogstaver er der også 26, hvilket giver tilsammen 52 tegn. Hertil skal vi lægge 10 cifre og nogle specialtegn. Ikke alle steder er alle specialtegn tilladt, så for enkelhedens skyld regner jeg kun med otte specialtegn, så antallet af tegn bliver rundet op til pæne 70. Adgangskodens længde er igen otte. Efter indsættelse får vi dette tal: 708, hvilket for at få en bedre forestilling er cirka 5,8 · 1014, med ord næsten seks hundrede billioner ordnede udvælgelser. Det er allerede et ret imponerende tal. Vores computer ville kontrollere alle udvælgelserne på seksten tusind timer! Det er knap to år. Angriberen skulle have rigtig meget held for at finde adgangskoden på en realistisk tid. Desuden skulle han kende længden af din adgangskode, ellers ville han også skulle prøve udvælgelser med færre tegn.

Nogle mennesker er så bange for deres data, at de bruger adgangskoder af tal. Disse adgangskoder modstår ordbogsangreb meget godt, for der står næppe i nogen ordbog med almindelige adgangskoder netop 41.274.390.553. Desværre er sådanne adgangskoder nok modstandsdygtige over for ordbogsangreb, men de er mindre modstandsdygtige over for brute force. Der findes nemlig kun ti cifre, og det betyder, at antallet af ordnede udvælgelser altid er 10k. Styrken af adgangskoden opretholdes kun af dens længde. Vores foregående adgangskode på otte tegn med alle slags tegn havde cirka 5,8 · 1014 ordnede udvælgelser. For at nå bare det samme med en adgangskode af tal skulle den have femten cifre, næsten dobbelt så mange tegn. Det ses tydeligt, at det er mere effektivt at vælge en kortere adgangskode, men med flere slags tegn.

Undervurdér ikke angriberen

Angriberen kan være snu. Efter at have læst de foregående linjer har du for eksempel besluttet, at din nuværende adgangskode »limonade« mindst skal omskrives til »Limonade«, hvilket flerdobler antallet af mulige ordnede udvælgelser, fordi angriberen nu også skal tage store bogstaver med i algoritmen. Men angriberen kan gå ud fra, at det store bogstav kun står på første plads, fordi det er nemmere at huske, og fordi det ikke er sædvane at have et stort bogstav midt i et ord. Så han skriver en algoritme, som afprøver alle ordnede udvælgelser af ord med små bogstaver og eventuelt med ét stort bogstav lige i begyndelsen.

Din oprindelige adgangskode havde kompleksiteten (nu mener jeg, hvor mange ordnede udvælgelser der i alt kunne være, hvis vi overholdt den samme form for adgangskoden – otte små bogstaver) 268. Hvis angriberen ikke tænkte sig om, ville den nye adgangskode have kompleksiteten 528, men hvis han brugte algoritmen skitseret ovenfor, ville adgangskoden have kompleksiteten 52 · 267. På adgangskodens første plads kan der stå både små og store bogstaver, dem er der tilsammen 52, og på de næste syv pladser kun små bogstaver, hvilket allerede er en almindelig ordnet udvælgelse med tilbagelægning.

Desuden kan angriberen for eksempel vide, at din adgangskode består af fire bogstaver og fire cifre, uden at de er blandet sammen, altid cifrene efter hinanden og bogstaverne efter hinanden. Kompleksiteten af sådan en adgangskode ville vi beregne sådan: Den første gruppe på fire bogstaver har i alt 264 ordnede udvælgelser, den anden gruppe på fire cifre har 104 ordnede udvælgelser. Disse to resultater ganger vi derefter med hinanden: 264 · 104. Hvis angriberen ikke vidste, om det er cifrene eller bogstaverne, der kommer først, skulle vi gange det foregående resultat med to.