From Erik\\\\\\\\\\\\\\\'s IT-Security notes
Jump to: navigation, search

Att välja bättre lösenord med passfraser

Av Erik Zalitis.

I dessa dagar har frågan om säkra och osäkra lösenord åter kommit på tapeten på grund de senaste veckornas händelser och läckage av lösenord på Internet. Tyvärr tycker jag att diskussionen mest handlat om hur man väljer säkra lösenord och det talas lite om återanvändningen av lösenord. Jag återkommer till säkrare lösenord strax, men först vill jag gå igenom problemen med återanvändning.

2009 lyckades hackare ta sig in i Aftonbladets servrar och få ut lösenord och konton för de anställdas epostkonton. På grund av att en del av de anställda använde samma lösenord både för sin arbetsepost och för sina Facebook-konton och att lösenordslistorna lades ut på Internet, fick en några sina Facebook-sidor ändrade. I några fall lade man till obscena meddelanden och skickade obscena kommentarer i offrets namn.

Här är två tips, hur du kan öka din säkerhet.


Tips 1 - Skikta lösenorden

Det är troligen inte rimligt att ha ett unikt lösenord för varje tjänst du loggar in på. Jag rekommenderar att du bygger upp din säkerhet enligt en skiktad modell:

Skikt 1 – Hög säkerhet

Typ: Lösenord till jobbet, system med känslig information och system som omfattande kontroll över andra system.

Regler: Alla konton måste ha unika lösenord.

Skikt 2 – medel säkerhet

Typ: Konton till privat publicering (Facebook, Twitter, Blogg…)

Regler: En pool av 5 lösenord som du återanvänder.

Skikt 3 – Låg säkerhet

Typ: Konton till web forum, mindre viktiga publika siter.

Regler: En pool av 2-3 enklare lösenord som du återanvänder.

Detta är bara ett förslag, för att visa hur man kan tänka.


Tips 2 - Skapa enkla och säkra lösenord.

Ta fram en mening som inte är direkt möjlig att koppla till dig, din familj eller ting du har i din närhet. Solen skiner och jag är glad låter bra och går lätt att trycka ihop till SolenskinerOchJagEGlad. Notera att jag konverterade bort mellanslagen och de svenska tecknen. Om ditt system stöder Svenska tecken kan du öka säkerheten genom att använda dem. Det är tyvärr många system som inte funkar med tecken som åäöÅÄÖ.

Nästa steg är att göra om SolenskinerOchJagEGlad blir S0l3nsk1nerOchJ6gEGlad. Regeln är att du gör om första vokalen till en siffra som liknar den. Men bara den första! Du kan ha vilket system du vill, bara du minns hur det funkar.

Och till sist lägger vi till minst ett specialtecken:

! S0l3nsk1nerOchJagEGlad!

Detta måste du minnas:

- Meningen
- Hur du lägger till siffrorna
- Specialtecknet

Detta kan kännas knepigt, men jag kör ett liknande system sedan ett antal år tillbaka och det är lätt att komma igång med. Visserligen blir det vissa regelbundenheter, eftersom du har en regel för bokstavmanglingen, men det är inte ett problem i de flesta fallen.


Matematiken bakom

Vettigt byggda system lagrar lösenordsuppgifter som så kallade hashar. Dessa kan ses som ”fingeravtryck” av en lösenord. Man kan inte få tillbaka lösenordet från en hash, däremot kan man utnyttja testa lösenord tills man får fram samma hash och då vet man lösenordet. En komplicerat lösenord är oftare än många anar värdelöst. Lösenordet Sommar11 är lättare att knäcka än Ad21cTG4, men detta beror på hur man försöker gissa lösenordet.

Två saker avgör svårigheten i att gissa ett lösenord: entropin och längden på lösenordet. Entropin i detta fall är antalet möjliga tecken per position i lösenordet. Tänk dig att vi vet ett av lösenorden i listan på lösenords-hashar som vi vill knäcka och att det är Ad21cTG4. Där kan man gissa att systemet som genererat det har gett varje position en slumpmässigt vald siffra, stor eller liten bokstav. Det är rimligt att anta att det handlar om bokstäver från A-Z, a-z (26 små bokstäver + 26 stora bokstäver) och nummer mellan 0-9. Det innebär att entropin är 26+26+10=62 möjliga tecken per position.

Vi gör ännu en djärv gissning: lösenorden är automatiskt genererade och alla har samma längd. Dessutom verkar inte användaren tvingas att byta det direkt, eftersom det lösenord vi redan har verkar vara genererat av en dator och inte en människa. Det kan vara fel, men hackare måste lära sig göra rimliga gissningar.

Längden för lösenordet är som sagt 8 tecken, så kan man ju tro att antalet möjliga lösenord är 62 * 8 = 496. Om nu så vore fallet skulle lösenord inte gå att använda överhuvudtaget. 496 möjliga kombinationer är trivialt att knäcka. I verkligheten är det lite knepigare att beräkna antalet möjliga kombinationer: n!/k! * (n-k)!, där n är antal möjliga tecken och k är lösenordets längd. 1)

”!” inom matematiken kallas fakultet och innebär förenklat att man multiplicerar alla heltal från 1 till och med talet självt. För att ta ett exempel: 6! blir då 1*2*3*4*5*6.

Mer om begreppet "Fakultet":
http://sv.wikipedia.org/wiki/Fakultet_%28matematik%29

Vi har 62 möjliga kombinationer (entropin) gånger 8 tecken, så:

62!/(8!*(62-8)!) = 3381098545 (3,381098545 x 10^9) möjliga kombinationer.

Tyvärr är detta också helt fel, då det antar att varje tecken bara få användas en gång och att ordningen av positioner är ointressant. Ad21cTG4 skulle då vara exakt samma lösenord som dA21cT4G, vilket är väldigt osannolikt.

Lösningen är att använda en formel för att räkna permutationer istället. Detta funkar som en formel för kombinationer, men räknar som att tecknens placering i lösenordet är relevanta. Vår valda formel tillåter att alla tecken i entropirymden får användas mer än en gång i samma lösenord.

Goda nyheter, den är betydligt enklare än den förra formeln:

n upphöjt till k

62 upphöjt till 8 = 218340105584896 (2,18340105584896 x 10^14) möjliga kombinationer.

Varför detta krånglande kan man tycka? Min poäng var att poängtera att inte glömma detta med att ett lösenord måste ha en viss ordning för att vara unik, när man räknar på lösenordsstyrka och att jag vill poängtera att ordet ”kombinationer” är felaktigt att använda om lösenord. Det heter ”antalet möjliga permutationer” och inte ”antalet möjliga kombinationer”.

Nu kommer den sista delen av sifferjonglerandet, där jag ska visa att ett 14 tecken långt lösenord inte ger dubbelt så många kombinationer som ett sju tecken långt.

Entropi: a-ZA-Z0-9

Antal tecken (k) Möjliga lösenord (permutationer) (n upphöjt till k)

1 62

2 3844

3 238 328 (238 tusen)

4 14 776 336 (15 miljoner)

5 916 132 832 (nästan en miljard)

6 56 800 235 584 (57 miljarder)

7 3 521 614 606 208 (3,5 tusen miljarder)

8 218 340 105 584 896 (218 tusen miljarder)

9 13 537 086 546 263 552 (13 tusen tusen miljarder)

(…)

14 12 401 769 434 657 526 912 139 264

I detta fall har ett 14 tecken långt lösenord 3 521 614 606 208 (3,5 tusen miljarder) fler kombinationer än ett 7 tecken långt. Man kan ju tycka att ett 7 tecken långt lösenord med denna entropi är omöjligt att knäcka. 3,5 tusen miljarder möjliga lösenord kan tyckas vara extremt, men det finns en faktor kvar och det är hur många lösenord man kan testa i sekunden. Wikipedian ger oss något att jobba med: “Individual desktop computers can test anywhere between one million to fifteen million passwords per second against a password hash for weaker algorithms, such as DES or LanManager”. 2) Låt oss anta att detta stämmer i vårt fall och din helt splitternya PC hanterar 15 miljoner lösenord-gissningar i sekunden. Då får du fram:

3521614606208 / 15000000 = 234774 sekunder (avrundat) = 2,7 dagar.

Tydligen är detta ett bevis på att sju tecken inte är på långa vägar tillräckligt. Hur funkar det med 14 tecken då?`

12401769434657526912139264 / 15000000 = 826784628977168461 sekunder (avrundat) = 26 199 223 926 år = drygt 26 miljarder år. Denna tidsrymd har ett problem och det är att solen beräknas slockna om 6 miljarder år.

Det finns idag extremt kraftfulla beräkningskluster (ungefär en stor samling ihopkopplade datorer som delar upp beräkningarna mellan sig) som kan gissa långt fler än 15 miljoner lösenord per sekund. Men problemet kvarstår, det handlar om så pass långa tidsrymder att det troligen inte är möjligt att knäcka inom rimlig tid.

1)      http://essayweb.net/mathematics/permcomb.shtml
2)      http://en.wikipedia.org/wiki/Password_cracking


Hur attackerar man ett lösenord i verkligheten?

S0l3nsk1nerOchJ6gEGlad! har fler än 14 tecken, vilket betyder att ni som kör Windows-burkar inte lagrar lösenordet med hjälp av den knäckta LanManager-algoritmen som lagrar lösenordet som två 7-teckens lösenord och inte skiljer mellan stora och små bokstäver. Ni förstår säkert nu hur illa detta är med tanke på vad vi just gått igenom.

Brute force

Alla formlerna ovan har visat hur svårt det är att gissa riktigt långa lösenord med hög entropi. Brute force testar alla möjliga permutationer upp till ett visst antal tecken med en förinställd entropi. På riktigt långa lösenord är brute force inte särskilt användbart. Ordliste-attack

Ordliste-attacker testar ord och kombinationer av ord från ordlistor. Den lägger normalt även till siffror, så kombinationen Sommar11 är lätt att knäcka med en ordliste-attack.

Dock har dessa attacker problem med lösenord som innehåller 3-4 ord eller fler. Särskilt som att du nu har ändrat delar av orden till siffror.

Rainbowtables

En bra teknik för att snabba upp knäckandet är att förberäkna och skapa en databas med möjliga hashar för en lösenordslängd och entropi. Då behöver du bara slå upp din hash och kan då få svar mycket snabbare. Problemet är att dessa databaser snabbt blir stora och tar tid att bygga. De finns förberäknade databaser att köpa eller ladda ner gratis. När lösenorden närmar sig 20 tecken eller mer, är de flesta inte användbara längre.

Hybridattacker

Här finns nog den bästa möjligheten. Genom att blanda ordlistor med brute force kanske det är möjligt. Men jag ställer mig tvekande till att S0l3nsk1nerOchJ6gEGlad! är möjligt att knäcka inom rimlig tid. Tänk också på att det är en stor skillnad mellan "offline-attacker" där du har en "oändlig tid" på dig att testa och online-attacker som är svåra att hinna med innan kontot spärras eller någon skyddsfunktion träder in. Läs vidare

   http://sv.wikipedia.org/wiki/Permutation
   http://sv.wikipedia.org/wiki/Kombination_%28matematik%29
   http://www.schneier.com/blog/archives/2009/08/password_advice.html