F.A.Q.
→ Авторизация пользователей в полном смысле этого слова. • 19 февраля 2008 г. 12:31
Можно брать двойной хеш (например, md5(sha1('password'))) или использовать так называемую "соль" (salt).Пример использования соли: md5('password' . 'secret_code');secret_code — это и есть соль, то есть мы тупо к паролю добавляем какой-то набор символов (желательн...
Можно брать двойной хеш (например, md5(sha1('password'))) или использовать так называемую "соль" (salt).
Пример использования соли: md5('password' . 'secret_code');
secret_code — это и есть соль, то есть мы тупо к паролю добавляем какой-то набор символов (желательно ещё и запомнить, какой набор символов мы добавляем ;))
Насколько я понимаю, это бессмысленно. Ведь какую проблему мы пытаемся решить? Хакер взломав базу получает md5 хэш и при помощи радужных таблиц находит строку из которой этот хэш получен. Найдя эту строку он отнимет от нее соль (которую также найдет во взломанной базе) и получит пароль.
Соль надо добавлять к уже сгенерированному хэшу. В этом случае мы получим просто набор символов, расшифровать который можно только зная длину соли и имея таблицы для всех вариантов соли. А также зная куда эту соль добавили.
Также, получается, что соль в базе хранить нельзя (иначе можно отнять ее от хеша и дальше работать по таблицам с ним). Лучше задать ее однажды в скрипте и добавлять ко всем хэшам.
Хотя это конечно больше теория. Добавляя достаточной длины соль (по вашему способу) можно усложнить строку из которой хэш генерится. И найти эту строку в таблицах будет проблематично. Если конечно не рассматривать ситуацию, когда хакер будет сам перебором (долго очень) пытаться найти нужный хэш.
Кроме того, можно добавлять к уже готовому хэшу пароля в качестве соли использовать какое-нить неочевидное поле (например хэш даты регистрации пользователя). Чтобы хакеру было сложнее определить что добавлено и куда.
А не проще будет сначала посольть логин, потом пароль, а потом все это кодировать с помощью md5:
$login
$password
$solt_1
$solt_2
$cripting_1 = md5(md5($login).md5($solt_1))
$cripting_2 = md5(md5($password).md5($solt_2))
$cripting = md5(md5($cripting_1).md5($cripting_2))
PHP для идиотов
→ Помогите с Mail() • 18 февраля 2008 г. 17:46
PHP для идиотов
→ Помогите с Mail() • 18 февраля 2008 г. 16:51