Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wysłać wartość aktualną z pola w bazie do funkcji php w zapytaniu MySQL z poziomu PHP?
Forum PHP.pl > Forum > Bazy danych
armon
Jak wysłać wartość aktualną z pola w bazie do funkcji php w zapytaniu MySQL z poziomu PHP?

Chodzi mi o coś takiego:
  1. $query = "
  2. UPDATE klienci1 SET haslo = hash(sha512,haslo)
  3. ";
  4.  
  5. mysql_query($query);


Oczywiście to jest źle. Da się tak w ogóle zrobić?

Chcę aktualizować wszystkie hasła z md5 do sha512.

Mógłbym pobrać wszystkie wartości, a następnie wykonać aktualizację, ale ciekawi mnie czy mogę to zrobić w jednym query przy pomocy UPDATE?
nospor
Po pierwsze i najważniejsze:
nie da się przejśc z md5 na sha512. Czemu? Ano temu że nie mając md5 nie masz jak dostać się do hasła. Jedyne co możesz zrobić to zahashować md5 które już masz, a nie haslo, które się kryje pod md5
armon
Cytat(nospor @ 30.09.2011, 11:08:00 ) *
Po pierwsze i najważniejsze:
nie da się przejśc z md5 na sha512. Czemu? Ano temu że nie mając md5 nie masz jak dostać się do hasła. Jedyne co możesz zrobić to zahashować md5 które już masz, a nie haslo, które się kryje pod md5


Przecież to robię...

pod haslo znajduje sie wartość md5, więc hashuje przy pomocy sha512 - md5... później będę po prostu hashował najpierw przy pomocy md5, a później sha512 no i oczywiście SALT.

przy takim zastosowaniu mogę nabawić się najwyżej kolizji, ale przy sha512, czy tam whirlpool jest to raczej mało możliwe bo podobno kolizje nie zostały jeszcze odnalezione.

moje pytanie brzmi, czy da się wykonać ten UPDATE czy też nie?
nospor
  1. UPDATE klienci1 SET haslo = sha2(haslo,512)

Ale jeśli myślisz, że tym zabiegiem zwiększasz bezpieczeństwo to jesteś w blędzie
http://forum.php.pl/index.php?showtopic=44...t=0&start=0

Choć w przypadku, gdy masz dane już w md5, to może i w pewien sposób zwiększasz, bo na md5 już jest tyle masa tęczowych tablic, ze w zasadzie każde hasło w md5 jest jawne smile.gif
armon
Cytat(nospor @ 30.09.2011, 11:17:24 ) *
ku, gdy masz dane już w md5, to może i w pewien sposób zwiększasz, bo na md5 już jest tyle masa tęczowych tablic, ze w zasadzie każde hasło w md5 jest jawne smile.gif


Nooooo dokładnie oto mi chodziło wink.gif

No bo przecież jak mam w md5 hasło i skorzystam później z sha512 to powinienem zwiększyć bezpieczeństwo mojej bazy danych smile.gif

md5 jest podatne na kolizje, więc korzystając z tej linii zabezpieczę się przed kolizjami oraz nie będę musiał wymagać od userów aktualizacji hasła smile.gif
nospor
Cytat
md5 jest podatne na kolizje, więc korzystając z tej linii zabezpieczę się przed kolizjami oraz nie będę musiał wymagać od userów aktualizacji hasła
Proszę, przeczytaj cały temat, do którego dałem ci linka, i nie gadaj głupot.

Jedyny sens tej zamiany to jest ten, który napisałem
Cytat
Choć w przypadku, gdy masz dane już w md5, to może i w pewien sposób zwiększasz, bo na md5 już jest tyle masa tęczowych tablic, ze w zasadzie każde hasło w md5 jest jawne

A robiąc kolejne hashy z hashy to tylko zwiększasz kolizje
armon
Cytat(nospor @ 30.09.2011, 11:27:10 ) *
Proszę, przeczytaj cały temat, do którego dałem ci linka, i nie gadaj głupot.

Jedyny sens tej zamiany to jest ten, który napisałem

A robiąc kolejne hashy z hashy to tylko zwiększasz kolizje



"Hashing SHA-256 over and over does not increase the chance of collisions AFAIK (as is the case with MD5), this is from what I’ve read and tests I’ve done myself. The added security comes from the time it takes to generate the hash, the same way Bcrypt does (you could of course just use Bcrypt but it’s not always available on shared hosts). Eating up server resources is a feature in this case."
"

To jedna rzecz, jednak ja nie mam zamiaru hashować md5 ponownie z 10 razy, tylko wykonać raz ponowne hashowanie na md5 przy pomocy sha512, aby w bazie były przechowywane hasła na 128 bitach nie na 32 oraz ostateczny algorytm szyfrujący nie był podatny na kolizje.

Przez co zabezpieczam się przed rainbow tables (niektórymi, bo jeszcze nie dodałem salta, ale też dodam), kolizjami.

Wystarczy zmienić później przykładowo:
  1. $pw = md5($pw_send_from_input);
  2. SELECT * FROM users WHERE pw = '{$pw}'

na
  1. $pw = hash('sha512',md5($pw_send_from_input));
  2. SELECT * FROM users WHERE pw = '{$pw}'


Oczywiście nie zapominając o salcie i innych sprawach i po problemie?

nospor
Nie przeczytałeś....
Poszukaj w tamtym temacie postów ZYXa - on to bardzo ładne wyjaśnił, podał nawet przykłady. Może to cię przekona.
Skoro pierwsze hashowanie masz md5, a ono jest podatne na kolizje, to i cała reszta jest podatna na kolizje w twoim algorytmie.

Skoro dla md5 by mieć ciąg1 można podać ciągx i ciągy, to i automatycznie sha512(md5()) też przyjmie na pewno taką samą wartość zarówno dla ciągx i ciągy
armon
Cytat(nospor @ 30.09.2011, 11:56:34 ) *
Nie przeczytałeś....
Poszukaj w tamtym temacie postów ZYXa - on to bardzo ładne wyjaśnił, podał nawet przykłady. Może to cię przekona.
Skoro pierwsze hashowanie masz md5, a ono jest podatne na kolizje, to i cała reszta jest podatna na kolizje w twoim algorytmie.

Skoro dla md5 by mieć ciąg1 można podać ciągx i ciągy, to i automatycznie sha512(md5()) też przyjmie na pewno taką samą wartość zarówno dla ciągx i ciągy


Przeczytałem te posty.

Zgadzam się z Tobą, ale popatrzmy się na to w taki sposób...

Gdyby haker dostał się do bazy danych, nie mając dostępu do mojego kodu może co najwyżej myśleć, że jest to 128 bitowy klucz i raczej nie ma pojęcia o tym, że wcześniej korzystano z md5.

A dodając, że sól byłaby zakodowana tak:
sha512(salt+md5(old_pw))

to pomimo tego, że haker nawet wiedziałby, że wcześniej korzystano z md5 nie mógłby tego złamać ze wzg. na sól?

Ok gdyby otrzymał dostęp do mojego kodu, wtedy bezpieczeństwo maleje, wtedy sha512(old_pw) > sha512(salt+md5(old_pw))

Mimo tego raczej hakerzy dostają się głównie do baz danych nie do kodu?

Jeśli by być upartym to można by to zrobić powoli jeszcze tak, aby przynajmniej sprawić, aby korzystający userzy z bazy danych mogli zostać uaktualnieni:

Dodać nową kolumnę is_pw_changed, a następnie:

  1. $login = mysql_real_escape_string("jakislogin");
  2.  
  3. $query = "
  4. SELECT id, haslo, is_pw_changed FROM klienci3 WHERE login = '$login'
  5. ";
  6.  
  7. $pw = "jakieshaslo4";
  8. $result = mysql_query($query) or die(mysql_error());
  9.  
  10.  
  11. $salt = "!@$!%@!TGASDHB^dasdg%!^&asd!&&!@#";
  12. $sha512pw = hash("sha512",$salt.$pw);
  13.  
  14. if (mysql_num_rows($result) > 0)
  15. {
  16. $result = mysql_fetch_assoc($result);
  17.  
  18. if ($result['haslo'] == $sha512pw)
  19. {
  20. //log in
  21. }
  22. else if (!$result['is_pw_changed '])
  23. {
  24. $md5pw = md5($pw);
  25. if ($md5pw == $result['haslo'])
  26. {
  27. $query = "
  28. UPDATE klienci3 SET haslo = '$sha512pw', is_pw_changed = 1 WHERE id = ".$result['id']."
  29. ";
  30.  
  31. $result = mysql_query($query) or die(mysql_error());
  32. //log in
  33. }
  34. }
  35. else
  36. {
  37. //error etc.
  38. }
  39. }


nospor
Zdaje się, że mówiliśmy o kolizjach. Wytłumaczyłem ci więc, bo byłeś w błędzie, że zastosowanie sha512 na md5 wcale nie zmniejsza kolizji a wręcz odwrotnie.

Nie wiem jak się ma Twój wywód do tego. Skoro przeczytałeś tamten temat dokładnie, to przeczytaj go jeszcze ze zrozumieniem smile.gif
Kolejne posty na temat podwójnego hashowania i super hiper tajnych algorytmów spowodują że ten temat zostanie zamknięty, ponieważ duplikujesz już treść podaną w temacie do którego cię odesłałem i nie ma sensu po raz kolejny na ten temat dyskutować.
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.