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
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Trzymanie haseł w bazie w formie zaszyfrowanej ma służyć temu by w razie wycieku rekordów nie znane było hasło oraz po to by nie wykorzystywać takiego hasła w innych serwisach (przy założeniu, że użytkownik ma takie samo hasło na przykład na poczcie, w banku i w naszym portalu znając jego hasło można nieźle namieszać).

Używanie "soli" jest jak najbardziej wskazane jak i korzystanie z dłuższego sha1. Ale czy jest sens w przechowywaniu w bazie w rekordzie user'a danych dotyczących "soli" albo jej samej? To w sumie nic nie daje poza tym, że podpowiada włamywaczowi jak łamać hasło.

Ja zawsze trzymam SALT gdzieś głęboko w kodzie - wszędzie jest jednakowy i nie za krótki (przynajmniej z 256 znaków).

Zastanówmy się nad taką sytuacją w 3 podejściach:

1. Bez soli

Ktoś zdobywa hasło usera z bazy. User ma hasło numeryczne na przykład 123456 - przelecenie przez wszystkie kombinacje numeryczne md5 lub sha1 nie trwa tak strasznie długo - pyk - mamy hasło

2. Z solą w bazie

Ktoś zdobywa hasło usera i salt usera - ta sama opcja hasło nuemryczne - do każdego dodajemy salt przed lub za i testujemy - trochę dłużej to potrwa ale i tak pewnie znajdziemy to hasło.

3. Z solą poza bazą

Ktoś zdobywa hasło usera i.... no właśnie i co? (IMG:style_emoticons/default/smile.gif) Może próbować, kombinować a i tak nic mu po tym - jeśli salt jest odpowiednio długi to małe szanse są na to by kiedykolwiek zdobyć hasło - fartem chyba (IMG:style_emoticons/default/tongue.gif)

Podsumowując IMHO nie ma sensu bawić się w przypiswanie saltów indywidualnych dla userów, rotacji sha1/md5... wystarczy sha1, mocny i dobrze ukryty salt i po srpawie (IMG:style_emoticons/default/wink.gif)

I popieram @Thek'a - własny algorytm (przemyślany) to też dobre rozwiązanie (IMG:style_emoticons/default/wink.gif)

Ten post edytował Sephirus 27.12.2011, 12:36:11
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: 14.10.2025 - 03:54