Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kodowanie haseł.
Forum PHP.pl > Forum > PHP
Kużdo
Witam,

Temat z podwójnym haszowaniem haseł jest zamknięty, więc jestem zmuszony założyć nowy temat, ale pytanie mam proste. Co myślicie o algorytmie szyfrowania który wybrałem, czy jest on dostatecznie bezpieczny? Nie chcę robić kolejnego długiego tematu, tylko kilka zwykłych odpowiedzi co o nim sądzicie w przypadku, gdy ktoś dorwałby się do bazy danych.

Powtórzę: Co myślicie o algorytmie szyfrowania który wybrałem, czy jest on dostatecznie bezpieczny w przypadku, gdy ktoś dorwałby się do bazy danych, a nie ma dostępu do skryptów php? (Nie pytam o jakiekolwiek b-f).

Skrypt:
  1. md5(pack("H*", sha1(utf8_encode($haslo))));

Testy wydajności (skrypt generuje 100 haszy):
  1. <?php
  2. $start = microtime();
  3. for ($a=0;$a<100;$a++)
  4. {
  5. echo $a.': '.md5(pack("H*", sha1(utf8_encode(uniqid(mt_rand(0,1000000000),true))))).'</br>';
  6. }
  7. $koniec = microtime();
  8. echo 'Strona gotowa w '.($koniec - $start).' sek.';
  9. ?>

Strona gotowa w 0.00070599999999998 sek.

Przy podstawieniu pod $haslo jakiegoś dowolnego hasła np. test8969:
Strona gotowa w 0.00042700000000007 sek.

Pozdrawiam.
Rid
Ma Pan tutaj wszystko ,świetnie opisane:)
Kużdo
Mam prośbę. Może tak nie nabijajmy sobie postów bezsensownymi postami? ;> Twój link (który de facto znam), zwiększy mi tylko szybkość generowania haszy, co nie jest mi jakoś zbytnio potrzebne, przy takiej szybkości, za to w żaden sposób nie odpowiada na moje pytanie.
tehaha
bez sensu...w przypadku haszowania, więcej nie znaczy lepiej, ludziom się wydaje, że jak zrobią sobie skomplikowaną funkcję to jest bezpieczniej, a w praktyce przeważnie jest odwrotnie bo taka funkcja może zwiększać prawdopodobieństwo kolizji. Używaj haszowania z długą solą, nic bardziej bezpiecznego w tym temacie nie wymyślisz.
Kużdo
Z tego co wiem, to prawdopodobieństwo kolizji zwiększa jedynie podwójne użycie tej samej funkcji haszującej, a nie dwóch różnych. Ciągiem do zaszyfrowania zawsze można się pobawić, do skryptu mogę podać jako $haslo ciąg np. $haslo.$reg_date.$haslo, co też pozwala na zmniejszenie danych w bazie (nie muszę trzymać dodatkowej soli).
tehaha
Cytat
Z tego co wiem, to prawdopodobieństwo kolizji zwiększa jedynie podwójne użycie tej samej funkcji haszującej, a nie dwóch różnych
.......bez komentarza

funkcje haszujące to nie są ot tak sobie napisane z palca funkcje, tylko algorytmy specjalnie zaprojektowane tak, aby były maksymalnie odporne na kolizje. To, że napisałeś funkcję, która wizualnie wydaje się zawiła to z punktu widzenia kryptografii niczego tak na prawdę nie poprawia, a może pogorszyć. Bo dla osoby szukającej kolizji nie ma różnicy czy tu puściłeś przez 4 funkcje czy przez 100 różnych funkcji i w pętli milion razy, bo i tak wszystko sprowadza się do prawdopodobieństwa kolizji, które w tym przypadku może być większe, a w najlepszym wypadku będzie takie samo.

Sól możesz mieć stałą i trzymać zapisaną w pliku .php. Ja wiem, że chcesz dobrze ale uwierz, nic bardziej bezpiecznego niż haszowanie z długą solą nie wymyślisz i tylko tworzysz zbędne funkcje. Tyle w tym temacie.
Kużdo
Cytat(tehaha @ 30.07.2011, 11:59:13 ) *
funkcje haszujące to nie są ot tak sobie napisane z palca funkcje, tylko algorytmy specjalnie zaprojektowane tak, aby były maksymalnie odporne na kolizje.

W jaki sposób podanie ciągu "mojeBardzo6Trudne^Haslo" albo "9d2e1493b24376bf83061ec8fe59fef5070be44c" albo "2Ůäő4•AQ! î°oŻ•|J" do md5 może wpłynąć na prawdopodobieństwo kolizji, skoro żaden z inputów nie jest hashem md5? Rozumiem jakbym robił 2x md5 albo 2x sha1... Ale w takim przypadku nie rozumiem dlaczego prawdopodobieństwo kolizji może wzrosnąć...
Rid
Cytat
Ja wiem, że chcesz dobrze ale uwierz, nic bardziej bezpiecznego niż haszowanie z długą solą nie wymyślisz i tylko tworzysz zbędne funkcje.

Też,tak uważam ,dlatego podałem linka,gdzie są wymienione bardziej wyrafinowane metody hashowania niż md5,czy sha1.
Po co mieszać algorytmy hashowania-jak można użyć jednego bardziej wyrafinowanego jak SHA2,SHA3 lub inne o dłuższej soli.
bastard13
Dlaczego zwiększasz możliwość kolizji?
W skrócie robisz coś takiego:
y = md5(sha1(x))
Teraz masz coś takiego:
y = md5(z) i y = md5(v)
oraz:
z = sha1(a) i z = sha1(b ) oraz v = sha1(c ) i v = sha1(d)
Więc jeżeli używasz podwójnego haszowania, to gdy ktoś użyje hasła 'a', to istnieją jeszcze trzy inne, które zwrócą ten sam wynik.
Gdybyś użył pojedynczego hashowania, to wynik ten byłby mniejszy.

Jak widzisz wielokrotne używanie na wartości funkcji hashujących równocześnie zwiększa prawdopodobieństwo kolizji, a co za tym idzie, zmniejsza bezpieczeństwo.

Dodanie soli, to naprawdę dużo lepsze rozwiązanie.
Kużdo
Ok, dobra, rozumiem już. Myślałem, że zwiększenie prawdopodobieństwa kolizji jest możliwe tylko przy używaniu większej ilość tego samego skrótu, a nie dwóch różnych.
adbacz
Pytanko, o jaką "sól" chodzi? Przeczytałem cały temat ale nie ma żadej wzmianki o tym.
Rid
To wszystko wyjaśni:
http://pl.wikipedia.org/wiki/S%C3%B3l_%28kryptografia%29
nospor
Cytat
Temat z podwójnym haszowaniem haseł jest zamknięty, więc jestem zmuszony założyć nowy temat, ale pytanie mam proste
A wiesz czemu jest zamknięty? Bo zaczęły się w nim pojawiać właśnie takie posty jak Twój i z tego powodu trzeba było zamknąć. Co niniejszym czynie i z Twoim, choć widzę "problem" masz już rozwiązany wink.gif

@adbacz:
w przypiętym temacie:
http://forum.php.pl/index.php?showtopic=44...t=0&start=0
masz o soli wpsominane
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.