Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Md5 + sól
Forum PHP.pl > Forum > PHP
Wilu88
Witam

Postanowiłem powiększyć bezpieczeństwo swojej bazy z hasłami userów. Wybór padł na użycie soli i haseł zapisanych w MD5.

Pierwszy problem to fakt że aktualnie w bazie mam już 300 użytkowników wraz z hasłami w MD5. Czy jedyny sposobem jest prośba użytkowników o wygenerowanie nowego hasła?

Druga sprawa to nie potrafię za bardzo zrozumieć jak rozkodować to co wpisze użytkownik jako hasło logowania.

Jak dobrze rozumiem przy tworzeniu konta uzytkownika hasło wybrane przez niego poddaje działaniu

  1. $password=md5($pass.$salt)


Za zmienną $salt podstawiam jakiś ciąg wygenerowanych znaków. (Czy muszą mieć one z góry zadeklarowana długość?)
Do bazy lecą dwie zmienne $password w formie hasha i $salt (w formie zwykłego tekstu?)

I teraz nie wiem za bardzo jak rozgryźć to od strony logowania. Do tej pory po prostu to co wpisał user porównywałem z md5($password) jesli było ok to logowanie sie powiodło, ale teraz zmienna $password będzie połączeniem jego prawdziwego hasła i soli. jak mogę rozbić to co użytkownik wpisze w polu hasła na salt i hash?
tehaha
  1. Czy jedyny sposobem jest prośba użytkowników o wygenerowanie nowego hasła?
Tak to jedyny sposób, ponieważ md5 nie jest algorytmem kodującym tylko mieszającym, więc nie da się wrócić do pierwotnej postaci, jedyna opcja to użycie tablic tęczowych, ale w tym przypadku to nie opłacalne, po prostu napisz do użytkowników, że w związku z usprawnieniem bezpieczeństwa wymagane jest wygenerowanie nowego hasła i tyle.

  1. (Czy muszą mieć one z góry zadeklarowana długość?)
Nie, sól jest dowolna, chodzi głównie o to, żeby nie dało się rozpoznać haseł przy pomocy tablic tęczowych

  1. Do bazy lecą dwie zmienne $password w formie hasha i $salt (w formie zwykłego tekstu?)
To zależy czy będziesz używał tej samej soli, czy będziesz ją generować dla każdego użytkownika, jeżeli to drugie to tak, zapisujesz ją w bazie, jeżeli to pierwsze to wystarczy, że zapiszesz ją w pliku php

  1. I teraz nie wiem za bardzo jak rozgryźć to od strony logowania. Do tej pory po prostu to co wpisał user porównywałem z md5($password) jesli było ok to logowanie sie powiodło, ale teraz zmienna $password będzie połączeniem jego prawdziwego hasła i soli. jak mogę rozbić to co użytkownik wpisze w polu hasła na salt i hash?


Ale co Ty chcesz rozbijać, jak wcześniej wstawiałeś do zapytania md5($pass) to teraz wstawiasz md5($pass.$salt); i tyle.
CuteOne
Musisz prosić o ponowne wygenerowanie hasła
Wilu88
Cytat(tehaha @ 17.07.2012, 21:49:06 ) *
Ale co Ty chcesz rozbijać, jak wcześniej wstawiałeś do zapytania md5($pass) to teraz wstawiasz md5($pass.$salt); i tyle.



Chyba zbyt późna pora i człowiek przestał już myśleć biggrin.gif biggrin.gif
redeemer
Cytat(CuteOne @ 17.07.2012, 21:51:33 ) *
Musisz prosić o ponowne wygenerowanie hasła
Niekoniecznie. Pośrednio da się wprowadzić saltowanie w sposób niewidoczny dla użytkowników. Co prawda dopóki użytkownik się nie zaloguje do serwisu dopóty w bazie dalej będziemy dalej stare hasło bez salta, jednak taki stan przejściowy może trwać parę tygodni. W tym czasie podczas logowania do serwisu użytkownikom zostanie wygenerowany nowy hash już z saltem. Po stanie przejściowym, na całej reszcie, która się nie zalogowała w tym czasie, wymuszamy wprowadzenie nowego hasła.

Co prawda, dla 300 użytkowników nie wiem czy jest sens, ale gdybyśmy mieli ich paredziesiąt/pareset tysięcy taki manewr jest warty zachodu wink.gif
Wilu88
Ale jeżeli pole salt w bazie danych będzie puste to przy operacji md5($pass.$salt) nie zajdzie żadna zmiana i będziemy to równe operacji md5($pass) ?

Bo jeśli tak to po prostu przy logowaniu będe sprawdzał czy pole salt jest puste, jeśli tak to po zalogowaniu na starym haśle automatycznie zostanie dopisany salt do bazy danych i wygenerowany nowy hash.
Mephistofeles
Zgadza się, to chyba najlepsze rozwiązanie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.