Visa ett inlägg
Oläst 2008-09-28, 11:45 #28
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
Att spara ett krypterat lösenord tillsammans med nyckeln är som at ha det i klartext - ja. Men nu pratar vi ju om envägskryptering (dvs en hash). Vi vet idag at md5 inte är så säkert eftersom det går att återskapa en hash utan att känna till lösenordet. Krypterar du istället lösenordet med SHA-512 så är du iaf vad vi vet idag säker.

En annan viktig anledning till att kryptera lösenordet är att bara användaren skall känna till lösenordet. Det bästa är ju alltid om lösenordet krypteras på klienten hos användaren så att den som "äger sidan" aldrig ser användarens lösenord. Det ärju bara at acceptera att de flesta använder samma lösenord på många olika sajter och om krypteringen sker redan på klienten så får individen ett litet extra skydd.

Bara för att du har ett salt som ligger i applikationskoden betyder det inte att du har en hemlig algoritm. Det finns inget likhetstecken mellan algoritm och applikationskod (lika lite som det som ligger i databasen alltid ärnyckeln). Det du beskriver är en tvådelad nyckel där de två delarna är lagrade på två olika ställen. Självklart är det säkrare att använda en metod där nyckeln är tudelad på detta sätt eftersom gemene man verkar ha så svårt att säkra upp sina databaser.

Så eftersom sha512 väl saknas i php och folk misslyckas med att säkra sina databaser om och om igen så är väl den bästa lösningen att använda sha1 och inte md5. sha1 är bätre än md5. Ha gärna ett javascript som hashar lösenordet en gång med SALT1 på klienten innan det skickas (ger användaren en extra trygghet att sajtägaren inte kan sniffa lösenordet). Hasha en gång till med SALT2 som finns i databasen (ett per användare). Hasha ytterligare en gång med ett salt som finns i applikationskoden. Det är väl det bästa man kan göra under omständigheterna.

Avslutningsvis en liten jämförelse mellan två olika algoritmer och nycklar:
Algoritm 1: Skapa en ny sträng med två tecken, följt av lösenordet, följt av två tecken. Kör SHA1 på det.
Algoritm 2: Skapa en ny sträng av användarnamnet och lösenordet. Kör SHA1 flera gånger på det.

Om vi gissar att attackeraren har tillgång till allt utom nyckeln, dvs till och med har en hash som är skapad utifrån ett känt lösenord så är styrkan följande:
Algoritm 1 har då en "nyckel" på fyra tecken. Om vi dessutom vet att det är stora bokstäver (A-Z) har vi totalt 456976 olika kombinationer som måste prövas.
Algoritm 2 har bara "antalet gånger SHA1 körs" som nyckel. och det är ju troligen ett ganska litet tal.

Avslutningsvis 2:
En sista sak att komma ihåg är att inget krypto är säkert. Det enda styrkan på ett krypto säger är hur lång tid det tar att knäcka det givet en viss mängd resurser. men grundtesen är alltid: Algoritmen känd - nyckeln okänd.
eg0master är inte uppkopplad   Svara med citatSvara med citat