Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Какой метод хэширования лучше md5 или SHA-1 для безопасного пароля?

#криптография #md5 #sha1


Какой хэширования лучше md5 или SHA-1 для безопасного пароля?
Например такой md5 хэширования $password = md5($password); и я хочу изменить на SHA-1
хэширования , можно просто изменить так $password = sha1($password);?
    


Ответы

Ответ 1



md5 и sha-1 - это не способы шифрования. Это способы вычисления хэша (хэш-функции). Они используются не для того, чтобы "зашифровать" пароль. Они используются для того, чтобы не хранить пароль вообще. В случае, если вы используете длинную соль (сейчас вы ее не используете вообще), "криптостойкость" хэшей практически одинаковая - злоумышленнику, укравшему базу, в любом случае придется перебирать пароли достаточно долго. Поэтому основное требование к хэш-функции - минимальная вероятность коллизий - нахождения другой входной строки, на котором хэш-функция выдаст тот же результат. Потому что всегда есть вероятность что хэш пароля password совпадет с хэшем пароля VFst4S3g5e%#%#gsgfdgb. И при попытке подобрать пароль по словарю или брутфорсом злоумышленника пустит на сайт под простым паролем. Эта ситуация маловероятна, но тем не менее - вероятность коллизий в sha-1 намного меньше, чем в древнем md5. Поэтому использование sha-1 или других новых алгоритмов - более предпочтительный вариант. UPD: я специально не рассматривал случай, когда база слита, и перебор идет по ней. На современном железе полный перебор - это вопрос времени. В реальности это затрагивает только тех пользователей, которые не используют двухфазную аутентификацию и при этом используют одинаковый короткий пароль для всех сайтов. В реальности, если у вас слили базу, то есть всего два варианта: У вас слили и все остальные данные тоже, и слитые пароли - меньшее, что вас будет волновать. Вам не будет совершенно никакой разницы, md5 или sha-256 у вас использовался. Потому что свою основную цель - защиту от несанционированного доступа - пароль не выполнил. У вас слили только данные пользователей, забрутфорсили все пароли и выложили в открытый доступ. Тогда вы извиняетесь, просите всех пользователей сменить пароль по ссылке из email и продолжаете работать как будто ничего не было.

Ответ 2



Правильно делать вот так: http://php.net/manual/ru/function.password-hash.php $options = array( 'cost' => 12, ); $hash = password_hash($password, PASSWORD_BCRYPT, $options); password_hash() создает случайную соль в случае, если она не была указана явно, и чаще всего это наилучший и безопасный выбор.

Ответ 3



Оба метода на данный момент считаются взломанными и не рекомендуются к использованию. Если у вас уже есть пароли, захешированные в md5, то так, как у вас делать нельзя. Все имеющиеся хэши станут невалидными и перестанут работать. Если паролей ещё нет, то так делать нельзя тоже. Используйте другую функцию, добавьте соли. А лучше не изобретайте велосипед и найдите готовое решение

Ответ 4



Я пользуюсь crypt mb_substr(crypt($password, '$10$rounds=1000$ea75sit60cS1b6dC$'), 32); на выходе будет что-то вроде sX6QsClWw6dx8dKD/TJ8..WcdA2Dca8aZqsKXcgb7pW6ZY042ACQemtzQG5DkOj8wL7wmRNqH4oLRhLH0SYPp/

Ответ 5



Лучше использовать HMAC-SHA256

Комментариев нет:

Отправить комментарий