Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Szyfrowanie hasła solą
Barcelona
post
Post #1





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


Witam, krążę właśnie nad zabezpieczeniem mojej strony za pomocą szyfrowania haseł solą. Dużo się o niej wspomina, jakie ma wady i zalety, ale nigdzie konkretnie nie znalazłem jakichś porad w jaki sposób mogę zastosować to szyfrowanie.
Znalazłem skrypt na openwall, pobrałem go razem z dokumentacją, ale jest ona tylko i wyłącznie w języku eng. Dogadać to się dogadam, ale czytać to już nie za bardzo (IMG:style_emoticons/default/wstydnis.gif)
Znajdzie się jakaś dobra dusza, która pomoże mi z tym problemem.

P.S. Aktualnie szyfruje hasła za pomocą md5. Czytałem że na dzień dzisiejszy nie jest to dobre zabezpieczenie (brutal force i te sprawy), jednak pomyślałem żeby przy logowaniu zastosować recaptcha od google. Myślę że w jakiś sposób zatrzymało by to próbę b-f.

Drugim moim pomysłem jest zrobienie warunków. Jeżeli hasło zaczyna się na np. literkę na to ma szyfrować za pomocą md5, a na przykład jak zaczyna się na b to już za pomocą SH1. Wiem że jest to łopatologiczne rozwiązanie, ale myślę że było by skuteczne (IMG:style_emoticons/default/smile.gif)

To na początek wrzuce przykładowy skrypt logowania
  1. $login = mysql_real_escape_string(trim($_POST['login']));
  2. $haslo = mysql_real_escape_string(trim($_POST['haslo']));
  3. $adres = $_SESSION["adres"];
  4.  
  5. if (isset($login) && $login=="") { $blad++;
  6. $komunikat .= "Login nie został podany!<br />";
  7. }
  8. if (isset($login)) {
  9. $wynik=mysql_query("SELECT * FROM logowanie WHERE login='$login'");
  10. if (mysql_num_rows($wynik)==0) { $blad++;
  11. $komunikat .= "Login <b>$login</b> nie widnieje w naszej bazie! <br />";
  12. }
  13. }
  14. if (isset($haslo) && $haslo=="") { $blad++;
  15. $komunikat .= "Hasło nie zostało podane!<br />";
  16. }
  17. if (isset($haslo)) {
  18. $haslo_spr = md5($haslo);
  19. $wynik=mysql_query("SELECT * FROM logowanie WHERE login='$login' AND haslo='$haslo_spr'");
  20. if (mysql_num_rows($wynik)==0) { $blad++;
  21. $komunikat .= "Hasło nie jest prawidłowe! <br />";
  22. }
  23. }
  24. if ($blad>0) {
  25. echo "<div class='error'>".$komunikat."</div><br/>";
  26. }


Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




@Sephirus... SALT jedynie w bazie to za mało. Najlepiej mieć zarówno salt indywidulany dla usera i jeden ogólny dla serwisu a stosować oba jednocześnie. Czemu? Gdy Ci podwędzą kod serwisu to znają SALT hasła z serwisu i algorytm, ale nie znają soli indywidualnych, więc hasła są teoretycznie dalej trudne do ustalenia. Jeśli podwędzą bazę, to nie znają ani algorytmu, ani hasha serwisu, więc też zgaduj-zgadula nadal. Muszą mieć oba te komponenty naraz, aby ustalić hasła, a i tak dla każdego usera musza one być indywidualnie z użyciem "rainbow tables" (o brute force zapomnij (IMG:style_emoticons/default/wink.gif) ) odczytane. Im bardziej przemyślany algorytm z uzyciem obu soli, tym utrudnienia większe, ponieważ trzeba iść "od tyłu" i porównywać z kolejnymi etapami. Odczyt hasha z poziomu tęczowych tablic da Ci bowiem pulę wyników, którą teraz musisz analizować. A że użyjesz przypuśćmy 2-etapowego hashowania, gdzie na każdym etapie uzyjesz innego algorytmu lub będzie on modyfikowany ustawieniami to utrudniasz w jakiś tam sposób łamanie. Jeśli jesteś super paranoikiem, to zawsze jeszcze możesz jakiś element, konieczny do uzyskania danych wejściowych dla algorytmu hashującego, przenieść na serwer trzeci, który zwraca pewne elementy po SOAPie dla uwierzytelnionego i rozpoznawanego między innymi po IP - serwera (IMG:style_emoticons/default/wink.gif) Wtedy masz jako utrudnienia aż 3 elementy konieczne do uzyskania/posiadania:
a) kod serwisu,
(IMG:style_emoticons/default/cool.gif) baza serwisu
c) autoryzacja dla serwera zewnętrznego.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 13:46