Passordsikkerhet
En angriper som prøver å komme inn i en applikasjon beskyttet med passord (en passordbeskyttet RAR-fil, e-post…), har flere muligheter for å nå målet uten å kjenne passordet. Noen av dem krever en viss porsjon intelligens, kløkt og kunnskap, andre krever litt flaks og fysisk trening. La oss derfor først oppsummere hvilke muligheter angriperen har.
Hvordan knekke passordet til noen
- Finne den som kjenner passordet (for eksempel eieren av e-posten) og få passordet av vedkommende — overtale, bestikke, banke opp. Denne måten kommer jeg ikke til å beskrive nærmere i artikkelen :-).
- Prøve å lure passordet ut av eieren på en lite påfallende måte, for eksempel med en falsk e-post, som fagfolk kaller phishing. Metoden går ut på at du sender eieren av kontoen en e-post der du ber vedkommende sende tilbake brukernavn og passord. Det er opp til deg hvor troverdig meldingen skal se ut, for selve forespørselen alene ville neppe holdt, det er nødvendig å legge til en slags historie. Ofte ser vi meldinger om at databasen har gått i stykker, og at alle brukere derfor må skrive inn passordet og navnet sitt på nytt, ellers blir postkassen deres stengt og lignende. Hvis meldingen ser skikkelig seriøs ut, er andelen som går på det, ofte ikke liten.
- Ordboksangrep — vi laster ned noen pakker med de vanligste passordene fra internett og prøver alle sammen. Hvis vi er heldige og eieren har et av de vanligere passordene, får vi det virkelig lett tak i. Av det følger den grunnleggende læresetningen — ikke velg passord som gir mening. Velg for eksempel passordet solsikke, og jeg garanterer at den første den beste amatørhacker knekker det på noen få sekunder. Dette er nok den mest effektive metoden, hvis du har en virkelig stor ordbok med passord, klarer du å gjette passordet til en stor del av brukerne uten stor anstrengelse.
- Brute force er den dummeste metoden, rå kraft. Den går ut på å prøve alle mulige varianter av passord som finnes i verden. Programmet setter sammen bokstaver etter tur etter en bestemt algoritme og prøver om det traff det passordet vi leter etter. Når det finner det, lagrer det passordet og avslutter. Denne metoden går vi nærmere inn på videre.
Rå kraft
Et program som bruker denne metoden, lager bare ulike ordnede utvalg av ord og prøver om det tilfeldigvis traff passordet. La oss regne ut hvor lenge en slik prøving kan ta.
La oss anta at vi har et passord på fem tegn som bare består av små bokstaver i det engelske alfabetet (uten æ, ø og å). Antall bokstaver i det engelske alfabetet er tjueseks. Nå kan vi enkelt regne ut hvor mange ulike passord vi kan lage av fem slike bokstaver. Vi bruker ordnet utvalg, siden rekkefølgen har noe å si (passordet stein er ikke det samme som tinse, selv om det består av de samme bokstavene), og videre må vi bruke ordnet utvalg med tilbakelegging, fordi bokstavene kan gjentas i passord. Og så går vi løs på selve utregningen. Formelen for ordnet utvalg med tilbakelegging ser slik ut: nk. For n setter vi inn antall bokstaver vi skal velge fra — antall bokstaver i det engelske alfabetet, og for k setter vi inn antall bokstaver passordet består av, i vårt tilfelle fem. Vi får 265, som er omtrent tolv millioner ulike varianter. Er det mye eller lite?
Det kommer også an på hvilken maskin vi har til rådighet. En eldre skrothaug klarer noen få sammenligninger i sekundet, supermoderne datamaskiner klarer ti tusen ganger flere. Jeg skal i disse eksemplene regne med at datamaskinen klarer ti millioner sammenligninger og vurderinger i sekundet. Det har vel gått opp for alle at et femtegns passord ville blitt avslørt av en slik datamaskin på under to sekunder, og det er virkelig ikke noe positivt resultat. Men la oss ikke gi opp.
Vi gjør passordet sterkere
Et femtegns passord er virkelig ikke trygt i det hele tatt, noen fornuftigere systemer tillater ikke engang å velge et så kort passord. Det sies at et passord ikke bør være kortere enn åtte tegn. La oss nå regne ut hvor mange varianter det finnes for et åttetegns passord. Akkurat som i det forrige tilfellet tenker vi bare på små bokstaver i det engelske alfabetet. Vi setter inn i formelen og får 268, som er omtrent to hundre milliarder varianter. Det er allerede et finere tall. Datamaskinen ville vurdert alle variantene på under seks timer. Det er bedre enn sist, men la oss se hvor mye styrken til passordet ville økt hvis du også brukte store bokstaver, sifre og spesialtegn som understrek, bindestrek og lignende.
Det er 26 små bokstaver, og store bokstaver er det også 26, og det gir til sammen 52 tegn. Dertil må vi legge 10 sifre og noen spesialtegn. Ikke alle steder er alle spesialtegn tillatt, så for enkelhets skyld regner jeg bare med åtte spesialtegn, slik at antall tegn blir rundet av til pene 70. Lengden på passordet blir igjen åtte. Etter innsetting får vi dette tallet: 708, som for å gi et bedre bilde er omtrent 5,8 · 1014, med ord nesten seks hundre billioner varianter. Det er allerede et ganske respektabelt tall. Datamaskinen vår ville kontrollert alle variantene på seksten tusen timer! Det er knapt to år. Angriperen måtte ha veldig stor flaks for å finne passordet innen rimelig tid. Dessuten måtte han kjenne lengden på passordet ditt, og hvis han ikke kjente lengden, måtte han i tillegg gå gjennom variantene med færre bokstaver.
Noen er så redde for dataene sine at de bruker passord med bare sifre. Disse passordene tåler ordboksangrep veldig godt, for det er lite sannsynlig at akkurat 41 274 390 553 står i en ordbok over ofte brukte passord. Dessverre er slike passord, selv om de tåler ordboksangrep, mindre robuste mot brute force. Det finnes nemlig bare ti sifre, og det betyr at antall varianter alltid er 10k. Styrken til passordet holdes oppe bare av lengden. Det forrige åttetegns passordet med alle slags tegn hadde omtrent 5,8 · 1014 varianter. For å oppnå minst det samme med et passord av sifre måtte det ha femten sifre, nesten dobbelt så mange tegn. Det er tydelig at det er mer effektivt å velge et kortere passord, men med flere slags tegn.
Ikke undervurder angriperen
Angriperen kan være smart. Etter å ha lest de forrige linjene har du, la oss si, bestemt deg for å skrive om det nåværende passordet ditt «limonade» i det minste til «Limonade», og dermed øker antall mulige varianter mange ganger, for angriperen må nå ta med store bokstaver i algoritmen. Men angriperen kan anta at den store bokstaven bare står på første plass, for det er lettere å huske, og det er ikke vanlig at det står en stor bokstav midt i et ord. Så han skriver en algoritme som går gjennom alle varianter av ord med små bokstaver og eventuelt med én stor bokstav helt først.
Det opprinnelige passordet ditt hadde en kompleksitet (nå mener jeg hvor mange varianter det totalt kunne vært hvis vi holder oss til den samme formen på passordet — åtte små bokstaver) på 268. Hvis angriperen ikke tenkte seg om, ville det nye passordet hatt en kompleksitet på 528, men hvis han brukte algoritmen skissert ovenfor, ville passordet hatt en kompleksitet på 52 · 267. På første plass i passordet kan små og store bokstaver veksle, det er til sammen 52 av dem, og på de neste sju plassene kan det bare stå små bokstaver, og det er allerede et standard ordnet utvalg med tilbakelegging.
Videre kan angriperen for eksempel vite at passordet ditt består av fire bokstaver og fire sifre, ikke blandet, alltid sifrene etter hverandre og bokstavene etter hverandre. Kompleksiteten til et slikt passord ville vi regnet ut slik: Den første firergruppen av bokstaver har til sammen 264 varianter, den andre firergruppen av sifre har 104 varianter. Disse to resultatene multipliserer vi deretter: 264 · 104. Hvis angriperen ikke visste om det først kom sifre eller bokstaver, måtte vi multiplisere det forrige resultatet med to i tillegg.