"Christian M. Nielsen" <look.for.it@my.webpage> wrote in
news:4399c4b1$0$67256$157c6196@dreader2.cybercity.dk:
> Hej.
>
> Jeg har overvejet noget kryptering af brugerens password i forbindelse
> med auto login, men er lidt i tvivl om hvordan jeg skal gribe det an.
>
> MD5 vil være oplagt, da det er eenvejs kryptering samt kan laves uden
> komponenter installeret på serveren. Jeg kender ikke så meget til
> hverken MD5 eller andre former, så jeg vil gerne høre om andres
> erfaringer med dette emne.
Jeg vil blot lige gøre opmærksom på, at MD5 ikke er en
krypteringsfunktion, men en hash-funktion. Jeg ville ikke selv anvende
MD5 som hash-funktion, da det efterhånden er trivielt at bryde den (finde
kollisioner). I stedet kan anvendes fx SHA1, der er noget mere "sikker".
Vær også opmærksom på, at du aldrig må gemme en simpel hash-værdi af et
password i din database. Du skal altid lave hash-værdien som en hemmelig
nøgle + password, også kaldet en "initialiseringsvektor".
Dvs:
Hemmelig nøgle: 6e9b8a2d
Password: mypassword
Værdi gemt i database = SHA1(6e9b8a2dmypassword).
Grunden til dette er, at det ofte vil være trivielt ud fra en database
med SHA1-udgaver af passwords at finde de oprindelige passwords (ordbogs-
angreb).
Når du skal gemme en værdi på klienten til auto-login, så skal du være
sikker på, at en "ond" klient ikke selv kan lave sådan en værdi. En
løsning på dette kunne være:
Lav en tekststreng som
initialiseringsvektor + email (eller brugerid) + hash(password)
('+' er her string-sammensætning, dvs Abe + Tjans = AbeTjans)
Denne værdi laver du en hashværdi af og gemmer på klienten og i databasen
for den enkelte bruger. Når en bruger kommer ind på din side, så henter
du teksten fra din database, laver samme udregning og sammenligner. Hvis
der er succes, så logger du ind for brugeren.
Eks:
hash(mypassword) = 0af519e4
initialiseringsvektor = 6e9b8a2d
6e9b8a2d0c + crap@foo.bar + 0af519e4 = 6e9b8a2d0ccrap@foo.bar0af519e4
(*)
hash(6e9b8a2d0ccrap@foo.bar0af519e4) = e8b01ad3
Denne værdi gemmes i cookie samt i db for bruger
Når bruger kommer tilbage slås op i db og der hentes
hemmelig vektor (denne skal ikke gemmes i db)
email
hash(password)
Nu udregnes (*) igen og sammenlignes med værdi i cookie.
Pointen er, at da klienten ikke kender din hemmelige vektor, så kan hun
heller ikke lave værdien, der gemmes i cookie - selv ikke hvis hun havde
opsnappet en eller andens password.
--
Jesper Stocholm
http://stocholm.dk
Findes din kiosk på nettet? Se
http://ekiosk.dk