Как мне включить соль в мой хэш пароля? - PullRequest
4 голосов
/ 11 января 2010

Насколько сильнее будет

return sha1($salt.sha1($passwd));

сравните с просто:

return sha1($salt.$passwd);

$salt - строка для пользователя длиной 12, состоящая из сильного случайного ASCII.

Ответы [ 3 ]

4 голосов
/ 11 января 2010

Это ровно вдвое сильнее, потому что атакующему нужно выполнить вдвое больше вычислений SHA1 для атаки грубой силой.

Конечно, это не совсем впечатляет. С другой стороны, выполнение SHA1 5000 раз в цикле практично для авторизации, но делает атаки продолжительностью в 5000 раз дольше - этот метод известен как усиление ключа . Однако на самом деле это всего лишь замена бедного человека алгоритмами хэширования с адаптивной стоимостью, которые упоминает Жако.

3 голосов
/ 11 января 2010

На первый взгляд, и без сильных знаний в криптографии, я бы сказал, что она совсем не сильна.

Кстати, обычно рекомендуется использовать

sha1($login.$salt.$passwd);

, чтобы 2 пользователя с одинаковым паролем не имели одинаковый хэш.

1 голос
/ 11 января 2010

Насколько я знаю, нет разницы в силе.

Поскольку обычная практика - добавлять соль к хешу пароля, соль, как правило, известна злоумышленнику. Но это не противоречит цели соли.

Вообще говоря, не рекомендуется добавлять имя пользователя $ login / $ в хеш (решение Vinzz ), так как это вызовет проблемы, если пользователь изменит свое имя пользователя. Лучшее решение - использовать случайную соль .

Используемый алгоритм хеширования не имеет значения . SHA1 считается криптографически взломанным и не должен использоваться для хеширования паролей.

Вообще говоря, BCRYPT (алгоритм хэширования с адаптивной стоимостью на основе Blowfish) считается наилучшим для практики (флаг CRYPT_BLOWFISH для PHP crypt (); )
Другие твердые варианты - SHA256 и выше.

Edit:
Я написал более длинный ответ о солении здесь: stackoverflow.com / questions / 1645161 / salt-generation-and-open-source-software /

...