brute force

Ett superenkelt knep för säkrare lösenord

Lösenord

Jag har skrivit om lösenord tidigare och gett en massa tips. Men det är sällan man orkar läsa igenom allt. Så därför kommer här ett superenkelt tips för att skapa säkrare lösenord.

Skriv ditt lösenord som en hel mening.

I normala fall skriver man något i stil med 5hkJb%2f4 där man förväntas blanda stora och små bokstäver med några specialtecken. Detta är ju omöjligt att komma ihåg.

En bättre strategi är då att ta en mening som faktiskt betyder någonting. För att enkelt komma ihåg den så kan du använda en metafor. Ju livligare metafor, desto bättre.

Hur lång tid tar det att knäcka lösenordet? En bra tjänst man kan använda är Password Haystacks för att se hur lång tid en så kallad brute force-attack skulle ta. En brute force-attack innebär att  en dator testar alla kombinationer tills den hittar lösenordet – det ena lösenordet efter det andra. Denna metoden kommer alltid att knäcka ditt lösenord, men det tar ohyggligt lång tid. Men hur lång tid då?

Här är några exempel på lösenord du kan få av mig, och uppskattningsvis hur lång tid de tar att knäcka med brute force med flera datorer som arbetar tillsammans i ett kluster:

Lösenord som hel mening Tid att knäcka enligt Password Haystacks
Astrid Lindgren rider på en polkagris 7.87 hundred billion trillion trillion trillion centuries
Statsministern borde gå och kamma sig 66.90 trillion trillion trillion trillion centuries
Varför sjunger Håkan Hellström så jävla illa? 2.14 thousand trillion trillion trillion trillion trillion centuries

För att summera: En lång mening tar rätt lång tid för en dator att gissa sig till. Och det är enklare att komma ihåg för oss människor.

5 vanligaste lösenorden från Bilddagboken (och hur du skyddar dig)

Den senaste tiden har jag informerat mina besökare om vikten av välja ett säkert lösenord. Jag passade också på att analysera de lösenord som hackare lyckats knäcka från Bilddagboken.

De fem vanligaste lösenorden:

  1. 123456
  2. bajskorv
  3. hejsan
  4. fotboll
  5. hallon

Då urvalet var knappt, endast 1 111 knäckta lösenord, valde jag endast ta de fem mest frekventa. Förutom de svenska orden är det ingen större skillnad mot MySpace: 10 vanligaste lösenorden.

Hur ska ett säkert lösenord se ut?

Såhär: pD\o\"_M1-&$='x{j$ oy (21 tecken).

  • Långt. Ju längre ditt lösenord är, desto bättre. Det bör vara minst åtta tecken.
  • Specialtecken. Använd många olika tecken för ditt lösenord; bokstäver, siffror och specialtecken. Ett väldigt bra lösenord är i stil med {KA%\V1#w\^.s%.u>+~LB. Blanda alltid gemener med versaler.
  • Undvik ord. Använd inte ord som finns i ordlistor, de testas allra först. Hitta på något helt obegripligt. Med ordlista menas inte Svenska Akademins, utan hackerordlista. De fungerar som människor gör, så förkortningar i stil med ”H3ll0” för ”Hello” ger inget skydd.
  • Byt ofta. De som hackade Bilddagboken hittade en backupfil från maj 2007. De som ändrat lösenord sedan dess är betydligt bättre skyddade.
  • Ett per webbplats. Använd olika lösenord för varje webbplats du använder. När Aftonbladet hackades var det bara ett av systemen som drabbades. Men de lösenord som hittades användes för att komma in på andra tjänster.
  • Smart program. Det bästa är att använda ett program som håller reda på lösenorden åt dig. Jag rekommenderar Keepass. Det kan automatiskt klistra in användarnamn och lösenord i inloggningsformulär när du besöker en webbsida. Du behöver bara komma ihåg ett lösenord till programmet. Det är gratis, open source och fungerar på alla plattformar.
  • Skriv ned lösenorden. Risken för inbrott är mindre än dataintrång i dagsläget, så skriv ned lösenorden på papper om du inte vill använda Keepass. Spara däremot aldrig dina lösenord som en textfil på datorn.

Liksom Keepass kan Strong Password Generator ge dig ett automatisk lösenord som är starkt. Du får också smarta tips på hur du kommer ihåg det.

Så knäcks ett lösenord

Det är viktigt att förstå hur ett lösenord knäcks. Då kan du bättre skydda dig mot det. I regel finns det tre sätt:

  1. Gissa. Ju mer man känner till om en person, desto lättare är det att hitta rätt lösenord. Heter katten Fia? Då testar vi olika kombinationer av Fia. Undvik därför ditt andranamn, namnet på din sambo eller liknande som lösenord.
  2. Ordlista. En ordlista är som namnet säger en lista över ord. Men inte vanliga ord, utan ord som tagits fram från tidigare knäckta lösenord. Därför finns lösenord som 123456, abc123 och qwerty i ordlistan eftersom de är de absolut vanligaste lösenorden i världen.
  3. Brute force. Detta innebär att man testar alla tänkbara kombinationer av ett lösenord med ett datorprogram. Denna metod kommer alltid att lyckas knäcka ditt lösenord. Det är bara en fråga om tid. Ett riktigt långt lösenord med många specialtecken kan ta flera hundra miljoner år att knäcka. Ett lösenord på tre bokstäver tar ett par millisekunder.

Vanliga myter

ettjättejättejättelångtlösenord är lika säkert som 4|K#d)$�6".

Det beror på, i synnerhet eftersom bokstäverna a till z med största sannolikhet testas först. Hackare vet om att människor tänker så och ofta använder befintliga ord och kända mönster. Varför lägga energi på att knäcka lösenord med specialtecken när de flesta ändå bara använder ett fåtal bokstäver?

De enda specialtecknen i exemplet ovan är å, ä och ö. I den sistnämnda |, #, ), $ och �. Ett lösenord på 5 tecken med bokstäverna a till ö (gemener) ger ungefär 17,2 miljoner unika kombinationer. Min dator knäcker ungefär 10 miljoner lösenord/sekund. Det talar för sig själv.

Använder du i stället 5 tecken med både versaler och gemener plus specialtecken ökar du skyddet dramatiskt. Vid 8 tecken har du någorlunda acceptabel säkerhet. Jag rekommenderar dig att använda minst 14 tecken.

Ett knep (som också är enkelt att komma ihåg) är att ta olika ord från exempelvis en sångtext och kombinera det med specialtecken. Då kan det bli något i stil med !never like >gonna< virgin? från låten Never gonna give you up av Rick Astley och Like a Virgin av Madonna kombinerat med lite obegripliga tecken.

Byt bokstäver mot siffror, l till 1 och o till 0, så är du säker

Nej. Detta ”språk” kommer ursprungligen från hackare. Därför läggs kända ordkombinationer in i ordlistor, och crackprogrammen ställs in att arbeta efter detta mönster.

Man kan tycka att tr3vligt är lika svårt att knäcka som tgvtrl3i, men det förstnämnda vittnar om ett känt mönster.

Vad kan du som webbutvecklare göra?

När vi vet hur lösenord bör se ut, och hur de knäcks, är det dags för dig som webbutvecklare att ta steget.

Envägskryptera alltid. Du skall alltid envägskryptera användarens egna lösenord. Det finns inga undantag. Spara aldrig lösenord i klartext och skicka aldrig ut lösenord via e-post. Om en användare glömmer sitt lösenord måste du implementera en ”Glömt lösenordet?”-funktion som enkelt skapar ett nytt genom att besöka en bekräftelselänk i ett e-postmeddelande.

Envägskryptering innebär att man gör en form av kontrollsumma av lösenordet, så kallad hash. ”Hello World!” blir exempelvis 2ef7bde608ce5404e97d5f042f95f89f1c232871 som hash i krypteringsalgoritmen SHA-1. Det går inte att få tillbaka lösenordet. Man kan bara jämföra med en annan hash för att se om de är lika.

Salta lösenordet. Salt innebär att man lägger till diverse skräp till lösenordet. Om vi tar Hello World! igen och lägger till &3] får vi därmed Hello World!&3]. Varje användare får en egen salt. Detta gör att varje hash av lösenordet inte blir likadant som någon annan, trots att de har samma lösenord, och det blir därmed betydligt svårare att knäcka. När man vill knäcka ett lösenord, är det första man tittar efter nämligen antalet förekomster av en hash. Desto fler förekomster, ju troligare är det att ett vanligt lösenord har använts. Salt gör alla hashar unika.

Du kan ta användarens ID-nummer som salt. Det innebär att den som lyckats ta en kopia av databasen ändå får ruskigt svårt att knäcka lösenordet, även för den som använt 123456 som lösenord. Hackaren måste få tag i programkoden och själv leta upp var salten läggs till (före eller efter lösenordet?) och samtidigt veta vad som används till salt. Kryptera sedan det hela med en säker algoritm.

SHA-3, AES eller DES. Det är tre krypteringsalgoritmer som visat sig vara bland de mest svårknäckta i dagsläget. MD5 är väldigt vanligt men har bevisats ge så kallade kollisioner, det vill säga två olika textsträngar som ger samma hash.

Kryptera anslutningen. Det spelar ingen roll hur säkert ditt lösenord är om du ändå arbetar över en okrypterad anslutning (alltså inte SSL/HTTPS). Via ett inloggningsformulär skickas all data i klartext. Den som läser av HTTP-trafiken kan då hitta ditt lösenord. Om en krypterad anslutning inte är ett alternativ kan du alltid kryptera lösenordet på klientsidan, med javascript, innan det skickas till servern. Det kräver såklart att klienten har javascript aktiverat.

Bilddagboken dåligt säkrad

Bilddagboken använde den inbyggda hashfunktion som finns i relationsdatabasen MySQL. Den har varit oförändrad i många år och anses inte vara värd att förlita sig på.

Dessutom användes ingen salt, så det gick på ett enkelt sätt att ta fram den vanligaste hashen. Därefter kan man utgå från, genom statistik, att lösenordet är 123456.

Då är det bara en fråga kvar till dig. Tar du dina besökares säkerhet på allvar?

Tips

Testa olika lösenord och se hur svåra de är att knäcka med brute force: Password Haystacks: How Well Hidden is Your Needle? (tipstack till @botulf2000).