Hvad er Password Hashing (og hvordan virker det)?
Hvis du er en hyppig denizen af internettet som mig selv, er der en god chance for, at du har modtaget en e-mail, der går sådan som sådan:
Kære Værdsatte Kunde,
For nylig blev vores websted ramt af en cyberattack på vores virksomhedsnetværk. Alle adgangskoder blev krypteret, men som en sikkerhedsforanstaltning kræver vi alle vores kunder at nulstille deres adgangskoder med det samme.
Tak skal du have.
Så der var en overtrædelse, nogle af dine oplysninger, herunder din krypterede adgangskode, blev lækket. Er din konto i fare?
Kort svar: JA, men hvorfor?
For at forstå dette skal du forstå begrebet "password hashing."
Hvad er en Hash?
En hash er bare en måde at repræsentere data på som en unik tegnestreg. Du kan hash noget: musik, film, dit navn eller denne artikel. Metaforisk talt er hashing en måde at tildele et "navn" til dine data. Det giver dig mulighed for at indtaste en hvilken som helst længde og dreje den til en streng af tegn, som altid har samme længde. Det er klart, at der er mange metoder (algoritmer) til at gøre dette.
Nogle af de mest populære hashingalgoritmer:
- MD5 - Givet nogen data vil returnere en unik 32 karakter hash.
- SHA1 - Givet nogen data vil returnere en unik 40 karakter hash.
- SHA256 - Givet nogen data vil returnere en unik 64 karakter hash; designet af National Security Agency.
Lad os se på et simpelt eksempel:
Mit navn er "Jamin Becker"
MD5 hash repræsentationen af mit navn er:
eeb7048c69b088739908f5f5144cd1f5
SHA1 hash repræsentationen af mit navn er:
ae480b717c08b6ab36a85075864e35b9c528d7c5
SHA256 hash repræsentationen af mit navn er:
a477cc14eae5fd94fe4cb20b36ec80ac6983bad44973ae7f4f230010f01289b0
Hvorfor er Hashing Secure?
Årsagen til hashing er sikker er enkel: hashing er en engangsoperation. De kan ikke vendes. Givet en streng "eeb7048c69b088739908f5f5144cd1f5", er der ingen måde at vende MD5 hash'en tilbage til "Jamin Becker". Dette skyldes den måde, hvorpå matematikere og programmører strukturerede MD5 hashing algoritmen, og det kommer tilbage til et grundlæggende computervidenskabsproblem kaldet "P vs NP." P og NP er kun to klasser af algoritmer.
De fleste hashingalgoritmer falder under NP, hvilket betyder, at de hurtigt kan beregnes. Imidlertid falder un-hashing-algoritmerne (dvs. "eeb7048c69b088739908f5f5144cd1f5" -> "Jamin Becker") under P-klassen og kan kun effektivt løses i polynomisk tid (dvs. at bruge en kvantecomputer, der er betydeligt mere avanceret end dem, der er tilgængelige i dag).
Så hvorfor er det godt for sikkerhed?
Sig, at du abonnerer på et websted og vælger adgangskode "12345". Straks vil denne hjemmeside hash dit kodeord, sandsynligvis med SHA1, og gemme det i en database. Nu hver gang du logger ind, vil hjemmesiden rehash din adgangskode og sammenligne den med den, der er gemt i databasen. Hvis de matcher, vil du blive godkendt korrekt. Hvis hjemmesiden nogensinde bliver brudt, og password-databasen er lækket, vises dit kodeord som "8cb2237d0679ca88db6464eac60da96345513964" og ikke "12345".
Hash Attack Strategies
Så har angriberen den hakkede version af mit kodeord, og der er ingen måde at vende den til 12345. Jeg har intet at bekymre mig om, ikke? FORKERT!
En metode, der almindeligvis bruges til at få almindelig tekstadgangskode fra en hash, kaldes et brutalt kraftangreb. I dette angreb vil angriberen løbe igennem en kæmpe ordliste og hash hvert ord med den relevante hashingalgoritme. De kan så sammenligne hasherne i ordlisten til dem, de har fået fra databasen. Hvis en hash fra ordlisten svarer til den i databasen, kan de simpelthen finde den tilsvarende almindelig tekstadgangskode i den originale ordliste, de har hentet. Erfarne angribere vil bruge ekstremt store ordlister kombineret med kraftig software til at løbe gennem millioner af adgangskode muligheder et sekund.
En anden metode til angreb forsøger at udnytte hashingalgoritmen selv ved at skabe en hashkollision. En hashkollision opstår, når to forskellige datasæt løser det samme hash, og mens det er sjældent, kan det være dødbringende. Dette ville gøre det muligt for angriberen at generere en række tegn, der ikke er dit kodeord, men stadig kan logge ind på din konto, da det genererer den samme hash.
Konklusion
Hashing-algoritmer bliver mere og mere avancerede. Matematikere og computerforskere designer konstant kryptografiske hashingalgoritmer med lavere sandsynligheder for kollisioner. Det er dog vigtigt at huske, at uanset hvor stærk hashingalgoritmen er, kan den altid være revnet ved hjælp af et brutalt kraftangreb. Den gode nyhed er, at du også nemt kan forsvare imod disse angreb ved blot at følge den bedste praksis for adgangskode.
- Størrelsen betyder noget - jo længere er det oprindelige kodeord, desto mindre sandsynligt vises det på en ordliste
- Vær ikke forudsigelig - undgå at bruge ord som "password" og "myname123"
- Brug en blanding af specialtegn, tal, store og små bogstaver
Hvad er dine tanker om hashing? Del dine synspunkter i kommentaren nedenfor.
Billedkredit: Forstørrelsesglas Online Fingeraftryk byBigStockPhot