Artikkel
Dårlige passordråd fra Datatilsynet
Dårlige passordråd fra Datatilsynet
På sine sider om «Sikkerhet og internkontroll» gir Tilsynet følgende svar på spørsmålet «Hvordan skal passord behandles? Skal de krypteres?»:
«Datatilsynet anbefaler at passordet krypteres i den grad forholdsmessig sikkerhet krever dette. […] Passord skal lagres kryptert […]» (min utheving)
Det samme dårlige rådet gjentas på siden ned svar på ofte stilte spørsmål om «Informasjonssikkerhet».
At login-akkreditiver, inklusive passord, skal sendes kryptert over nettet sier seg selv, men å kryptere passordlageret er dessverre ikke noen god eller sikker løsning.
Å forsøke å beskytte passordlageret med kryptering er rett og slett veldig dumt.
Ganske jevnlig hører vi om datainnbrudd der innbryterne klarer å få tak i filer eller databasetabeller med brukernavn og krypterte passord. Som oftest resulterer i dette i at kontoene til brukerne på de stedene som er angrepet blir kompromittert. Nylig har dette skjedd med eBay og Adobe. Nettstedet ';--have i been pwned? gir en god oversikt over hvilke nettsteder som har vært utsatt for datainnbrudd.
Årsaken til at kryptering ikke bør brukes til å beskytte passord er at kryptering er en reversibel operasjon. Alt som skal til for å gjenskape klartekst fra chiffertekst er krypteringsnøkkelen – og krypteringsnøkkelen kompromitteres ofte samtidig som passordlageret kompromitteres. I tillegg kan det være mulig å bergene krypteringsnøkkelen dersom passordlagret inneholder minst ett dårlig passord som lar seg knekke med rå regnekraft. Siden samtlige passord er kryptert med samme krypteringsnøkkel er det å knekke ett passord jevngodt med å knekke samtlige.
Det er ingen grunn til å pakke dette inn: Å forsøke å beskytte passordlageret med kryptering er rett og slett veldig dumt. Datatilsynet burde søke råd hos noen som forstår informasjonssikkerhet før de forsøker å veilede publikum.
Hvordan bør passord beskyttes
Den korrekte metoden er å benytte en avtrykksalgoritme for å bevare konfidenisalitet.
En avtrykksalgoritme (engelsk: hash algorithm) er en algoritme som tar inn en tekst av vilkårlig lengde og transformerer dette til et resultat av fast lengde. Samme tekst vil alltid resultere i samme avtrykk, men dersom algoritmen er riktig konstruert, er den eneste måten å finne ut hvilken tekst som er opprinnelsen til et bestemt avtrykk å bruke rå regnekraft til beregne avtrykket alle mulige tekster og håpe på at man finner en som passer. Det gjør at det kan gå rimelig raskt å finne ut om et bestemt passord er gyldig – man bare begregner avtrykket fra det passorder brukeren taster inn, og sjekker at det stemmer med avtrykket i passordlageret – men at det er ekstremt ressurskrevende å gå den andre veien.
Det finnes imidlertid veldige mange avtrykksalgoritmer, og ikke alle er sikre. For at algoritmen skal være egnet for å sikre passord-konfidensialitet må den:
- Være gjennomanalysert.
Amatører lager ofte avtrykksalgoritmer som de tror er sikre. Når slike amatøralgoritmer analyseres av matematikere oppdages det som regel matematiske svakheter som gjør det mulig å få tilgang til informasjonen som forsøkes skjult ved å angripe den matematiske svakheten. Man skal derfor aldri benytte hjemmelagede avtrykksalgoritmer, men velge en som er publisert og gjennomanalysert, slik at den kun kan angripes med rå regnekraft. - Være beregningstung.
Dagens CPUer og GPUer kan behandle milliarder av instruksjoner i minuttet. For å kunne motstå angrep basert på rå regnekraft må avtrykksalgoritmen være såpass beregningstung at et slikt angrep ikke kan lykkes innen tyveriet er oppdaget og passordene endret eller sperret. - Benytte saltede avtrykk
Som beskrevet innledningsvis fungerer en avtrykksalgoritme i utgangspunktet slik at samme tekst alltid vil resultere i samme avtrykk. Denne egenskapen ved algoritmen kan utnyttes av en angriper ved å benytte en såkalt regnbue-tabell for den aktuelle avtrykksalgoritmen. En regnbue-tabell er en tabell som inneholder «sannsynlige» passord sammen med passordets avtrykk. For eksempel kan en regnbue-tabell bestå av alle mulige permutasjoner av ASCII-tegn opp til 6 bokstaver, alle permutasjoner av sammensetninger av 1-4 ord av de 3000 vanligste ordene i det språkområdet som angripes, og passord som er kompromittert i andre systemer. En regnbue-tabell kan beregnes på forhånd og en angriper som er i besittelse av en regnbuetabell vil øyeblikkelig kjenne klarteksten for alle avtrykk som finnes i regnbuetabellen som også finnes blant de stjålne avtrykkene. For å forhindre dette kan avtrykksalgoritmen salte passordet (legge til en tilfeldig tekst som går under navnet «salt» til passordet før avtrykket beregnes). Dersom et nytt salt beregnes for hvert avtrykk, vil to instanser av det samme passordet produsere ulike avtrykk. Dette gjør det i praksis umulig å beregne en regnbue-tabell, og hvert avtrykk vil være unikt, selv om to ulike brukere benytter samme passord, eller samme bruker benytter samme passord i to ulike systemer. Les mer om bruk av salt på nettet.
Dårlige passord
Dersom passordene er kryptert risikerer du at en eneste sløv bruker som bruker et dårlig passord kan kompromittere samtlige passord. Når en angriper har funnet krypteringsnøkkelen til det dårlige passordet kan han dekryptere alle passord i passordlageret.
Den feilen unngår du ved å benytte en avtrykksalgoritme. Men bruk av en avtrykksalgoritme er ikke tilstrekkelig til å hindre en angriper i å knekke et dårlige passord, det bare begrenser skadeomfanget når han lykkes.
Hvor raskt en angriper klarer å knekke et bestemt passord avhenger av passordets entropi – og entropien avhenger i første rekke av lengden på passordet. Det er en utbredt oppfatning at passord som er vanskelige å huske er forholdsvis sikre. Er passordet for kort er det fortsatt usikkert selv om det er vanskelig å huske det. Det satiriske nettstedet xkcd.com illustrerer dette i stripen gjengitt over. Moralen er: Dersom du er sikkerhetsansvarlig for et informasjonssystem bør du ikke plage brukerne dine med å insistere på at de lager seg passord som er vanskelig for mennesker å huske. I stedet bør du ha en kontroll av brukergenerererte passord som forlanger at brukeren lager en passfrase (flere ord etter hverandre) og at denne passfrasen minimum består av minst 4 ord av en viss lengde.
Beste praksis
For god sikkerhet må man, som sagt, benytte en løsning for beregning av avtrykk som er beregningstung. I kombinasjon med salting øker dette sikkerheten dramatisk. En angriper kan ikke benytte en ferdig regnbue-tabell, men må forsøke å gjette en og en passfrase om gangen. Dersom man har sikret at passfrasene har tilstrekkelig entropi (se forrige avsnitt), og hver beregning tar tilstrekkelig lang tid, kan man i praksis forsinke en angriper slik at det vil ta flere år å knekke ett eneste passord.
Dersom man har resurssene til å benytte bcrypt (1999) eller scrypt (2009) anbefales det at man benytter en av disse for å produsere passordavtrykk. Disse er imidlertidig såpass beregningstunge at de alene kan kreve at man øker budsjettet til maskinvare dersom informasjonstjenesten skal klare autentisere flere brukere samtidig uten å bli uakseptabel langsom. Et alternativ kan derfor være å benytte en industristandard avstrykksalgoritme (f.eks. SHA512 fra SHA-3 familien) og pakke denne inn i et passende stort antall iterasjoner for å gjøre prosessen tilstrekkelig beregningstung. Den amerikanske standardiseringsorganisasjonen NIST anbefaler for eksempel PBKDF2 (Password-Based Key Derivation Function 2), og det er denne løsningen som de fleste regner som beste praksis i dag. I fremtiden bør man også overveie å benytte Argon2 (2015), men i skrivende stund (oktober 2016) er algoritmen for ny til at den bør benyttes i produksjon.
Kildekoden til standard-implementasjoner til alle de algoritmene som er nevnt over er offentlige. Bortsett fra Argon2 har samtlige blitt gjennomanalysert av matematikere og sikkerhetseksperter i årevis uten at det er funnet andre måter å angripe den på enn med rå regnekraft.
Les mer: OWASP Password Storage Cheat Sheet
Kategorier
Aktuelt
Mest lest siste syv dager
Feil!
Forespørsel om mest lest returnerte en feilmelding.
Add new comment