Generowanie hasła/soli - bezpieczeństwo

0
            
            $salt //losowo wygenerowana podczas dodawania użytkownika - indywidualna dla każdego, trzymana w bazie
            $pass //podawane przez użytkownika podczas logowania - służy do wygenerowania odpowiedniego hashu - 2 element składowy
            $mail //niejako 'login' użytkownika 3 element składowy
            $pass = $mail.'jakiś?tekst'.$salt.' - '.$pass.'całkiem#losowy&'.$mail; //generowanie hasła właściwego (mail, hasło, sól pobrana z bazy(indywidualna), sól wpisana na sztywnow kodzie
            $pass = hash('sha512', $pass);//utworzone haslo które jest trzymane w bazie i porównywane z wygenerownym podczas logowania

Wychodziłem z założenia że:

  1. ktoś się wrypie do kodu - nie ma soli z bazy, nie ma loginu, wie jak wygenerować hasło, ma sól ze skrypty
  2. ktoś się wrypie do bazy - ma unikalną sól z bazy, wygenerowane hasło oraz login. Nie wie jak wygenerowane jest hasło, nie ma soli ze skryptu
  3. w obu przypadkach nie zna hasła właściwego użytkownika

Tak w maksymalnym skrócie rozwiązałem kwestie bezpieczeństwa danych użytkownika....Moich kilka pytań:
Ma to sens?
Jest bezpieczne?
Jakie plusy i minusy widzicie?
Jak to zrobić lepiej?
Jak to rozwiązaliście u siebie?

0

zazwyczaj obecność człowieka w kodzie = dostęp do bazy danych (w konfigach masz zapisane dane).

ja stosuję tylko sól w kodzie, na sztywno. można robić zmienną sól zależną od nazwy użytkownika (np. pierwsza i trzecia litera z nazwy) [albo [fragmentu] daty rejestracji [ew. daty obniżonej o kilka dni]] + stała - zawsze mniejsza szansa na złamanie gdyby ktoś jakoś poznał hash swojego hasła (a najlepiej paru próbek) i chciał odnaleźć sól

0
dzek69 napisał(a):

zazwyczaj obecność człowieka w kodzie = dostęp do bazy danych (w konfigach masz zapisane dane).

ok - masz racje choć i to pewnie można jakoś ominąć ;p

dzek69 napisał(a):

ja stosuję tylko sól w kodzie, na sztywno. można robić zmienną sól zależną od nazwy użytkownika (np. pierwsza i trzecia litera z nazwy) [albo [fragmentu] daty rejestracji [ew. daty obniżonej o kilka dni]] + stała - zawsze mniejsza szansa na złamanie gdyby ktoś jakoś poznał hash swojego hasła (a najlepiej paru próbek) i chciał odnaleźć sól

sól zależna od nazwy użytkownika/daty rejestracji...
nie lepiej tak jak mam całkowicie losowa generowana podczas tworzenia konta?

Czy tam jak kto woli pseudo-losowa bo komputer nie wylosuje całkiem losowej ;p

0

Tylko całkowicie losową musisz przechowywać w bazie, więc jakikolwiek włam (zarówno kod [co jak wiemy = kod + baza, chyba, że ktoś ma kod tylko do odczytu (bez modyfikacji), ty nie masz nigdzie na serwerze phpMyAdmin (czyli jakiś vps co najmniej, bo sharedy zawsze mają), a MySQL odrzuca zdalne połączenia], jak i tylko baza) przechwytuje tą sól.

W takim przypadku zrobiłym, żeby trzeba było zgadywać jeszcze gdzie jest ta sól doklejona (np. między 3, a 4 znakiem hasła), oraz np. po wygenerowaniu soli - nie używać co 3 litery z tej soli - wtedy ktoś mając dostęp do bazy już na 100% nie będzie w stanie tego odkodować. Trochę jak security by obscurity, ale zawsze to większe bezpieczeństwo hashy w razie włamania do bazy.

Ah, no i hashe można generować w taki sposób, że ich wyliczenie trwa np. 1-2 sek. Wtedy odechciewa się prób łamania hashy nawet znając sól.

1

Najlepsza jest całkiem losowa sól osobno dla każdego użytkownika. Jeśli boisz się że ktoś się włamie do bazy i będzie mu się chciało generować osobną tablicę tęczową dla każdego użytkownika (podpowiedź: nie będzie chciało) to możesz przecież mieć drugi fragment soli wpisany w kodzie.
Security by obscurity nigdy nie jest dobrym pomysłem

1 użytkowników online, w tym zalogowanych: 0, gości: 1