Zwykłym sposobem na przechowywanie hasła jest użycie funkcji hash na haśle, ale wcześniej do salt. Ważne jest, aby "solić" hasło, aby bronić się przed atakami rainbow table.
Więc twój stół powinien wyglądać podobnie do tego
._______._________________.______________.
|user_id|hash |salt |
|-------|-----------------|--------------|
|12 |[email protected]|13%!#tQ!#3t...|
| |... |... |
Podczas sprawdzania, czy dana hasło odpowiada użytkownikowi, należy złączyć sól do podanego hasła, i obliczyć funkcji skrótu łańcucha wynikowego. Jeśli wynik funkcji mieszania jest zgodny z kolumną hash
- jest to poprawne hasło.
Ważne jest, aby zrozumieć, że idea "salt-hash" ma konkretny powód - uniemożliwienie każdemu, kto ma dostęp do bazy danych, znajomości hasła (uznanie za problematyczny problem z odwróceniem funkcji skrótu). Na przykład DBA banku nie będzie mógł zalogować się na twoje konto bankowe, nawet jeśli ma dostęp do wszystkich kolumn.
Należy również rozważyć użycie go, jeśli uważasz, że użytkownicy będą używać poufnego hasła (na przykład hasła do konta Gmail) jako hasła do Twojej witryny.
IMHO nie zawsze jest potrzebna do zabezpieczenia. Więc powinieneś pomyśleć, czy tego chcesz, czy nie.
Zobacz dobre podsumowanie tego mechanizmu pod numerem this article.
Aktualizacja: Warto wspomnieć, że na dodatkowe zabezpieczenie przed ukierunkowanego ataku na odwrócenie indywidualne hasło użytkownika skrótu, należy use bcrypt, które mogą być dowolnie trudne do wyliczenia. (Ale jeśli naprawdę nie boisz się tajemniczego mężczyzny w czerni celującego w twoją konkretną bazę danych, myślę, że sha1 jest wystarczająco dobry.Nie wprowadziłbym innej zależności dla mojego projektu dla tego dodatkowego zabezpieczenia.Także, nie ma powodu, aby nie używać sha1 100 razy, co dałoby podobny efekt).
Jeśli jest to domena AD, czy nie możesz pozwolić AD na uwierzytelnianie? – Rytmis
Dziękuję wszystkim za sugestie. Richard – Richard