07. oktober 2006 - 01:45Der er
11 kommentarer og 2 løsninger
md5 kryptering og glemt password
Det her er sikkert et dumt spm.
Ærlig talt har jeg ikke lige gidet sætte mig ind i det.. Derfor benytter jeg den hurtige og nemme måde... At spørge her :)
Jeg går lynhurtigt ud fra at alle "større" sites benytter sig af en eller anden form for kryptering.
En md5 kryptering eksempelvis er jo oneway og kan ikke decryptes, så jeg undrer mig over hvordan man så kan retrieve glemte passwords. Det kan man måske slet ikke med md5?
Ligeledes undrer jeg mig over hvad forskellige "penge"-sites bruger... Dem kan man jo ofte ringe til og få dem til at udlevere ens password telefonisk. Betyder det at de ikke benytter kryptering overhovedet?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Jeg ved ikke hvad banker bruger, men jeg vil tro at det er noget mere avanceret end md5, selvom md5 er en god kryptering.
Hvis vi tager udgangspunkt i ASP kode og du har kaldt din MD5 funktion for md5(), kan du prøve at se mit eksempel + forklaringer, på hvordan jeg gør:
'Oprettelse af password:
'Først hentes det ønskede password fra brugeroprettelsen password = Request.Form("password") 'passwordet krypteres 1. gang password_encrypted = md5(password) 'en tilfældig variabel genereres, forklaring nedenfor swordfish = 'her genereres et random tal, der sættes ind i databasen ud for brugeren 'passwordet bliver gemt ekstra sikkert password_secure = md5(swordfish & password_encrypted)
'Nu er passwordet gemt med dobbelt kryptering samt en variabel som er unik for, hver bruger, jeg er ikke sikker på at dette giver en væsentlig større sikkerhed, men jeg gør det alligevel for at være 110% sikker ;)
'login med md5 kryptering
'Først hentes det password brugeren skrev password = Request.Form("password") 'Det krypteres så 1 gang med md5 password_encrypted = md5(password) 'Derefter hentes swordfish-variablen fra databasen ud fra brugernavnet som blev skrevet ved login rs = blabla 'igen er jeg doven, men jeg går ud fra du ved hvordan man gør 'Passwordet dobbeltsikres password_secure = md5(rs("swordfish") & password_encrypted) 'Det sammenlignes med det der er gemt i databasen if (password_secure = rs("password")) then Response.Write("Login: OK") else Response.Write("Login: FEJL") end if
Som du kan se krypteres det hele igen, når man logger ind for så at tjekke om det matcher det der blev gemt i databasen. Begge rutiner skal selvfølgelig være ens.
Grunden til at jeg kalder det swordfish er inspiration fra scriptet PHPMyAdmin (mener jeg), de er nok blevet inspireret fra http://en.wikipedia.org/wiki/Swordfish_%28password%29 - bare så du ikke er i tvivl om mit valg ;)
hvis du mener MD5 algoritmen så er der nogen som er bedre end MD5
hvis du mener one way tilgangen, så er der ikke noget galt med ideen, den er god nok
man skal bare gøre sig klart at det er en meget lille forbedring af sikkerheden, da den primært beskytter mod svigagtige database administratorers muligheder for at hacke sig ind på brugernes konti på andre sites hvis de bruger samme password der - og har man ikke tillid til sin database administrator, så bør man nok finde en anden
Der er jo også den mulighed at du har et større community med masser af brugere, og så bliver hele sitet hacked. Altså en ekstern person opnår adgang til din database.
Så vil jeg være meget glad for at kunne fortælle mine brugere at deres passwords (som de sikkert bruger andre steder) ikke er gået vi til tredje mands eje.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.