Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Md5 + sól
Wilu88
post 17.07.2012, 20:27:32
Post #1





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
tehaha
post 17.07.2012, 20:49:06
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
CuteOne
post 17.07.2012, 20:51:33
Post #3





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Musisz prosić o ponowne wygenerowanie hasła
Go to the top of the page
+Quote Post
Wilu88
post 17.07.2012, 20:58:13
Post #4





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
redeemer
post 17.07.2012, 21:06:54
Post #5





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


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

Ten post edytował redeemer 17.07.2012, 21:07:07


--------------------
Go to the top of the page
+Quote Post
Wilu88
post 18.07.2012, 07:16:21
Post #6





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Mephistofeles
post 19.07.2012, 23:22:25
Post #7





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


Zgadza się, to chyba najlepsze rozwiązanie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.08.2025 - 20:37