Возможный дубликат:
Является ли «двойной хэширование» паролем менее безопасным, чем просто его хэширование?
Итак, я читал статью о защите веб-сайтов PHP, и они рекомендовали хэшировать пароль несколько раз, на самом деле это прямая цитата из статьи:
md4(md4(md5(sha1(md4(md5(sha1(sha1($_POST['password']))))))));
Теперь, лично, я обычно использую засоленный хэш SHA-256 в моих паролях, потому что я думал, что MD4 и MD5 больше не защищены, и что хеширование пароля несколько раз просто наложило бы слишком много нагрузки на сервер без каких-либо практических преимуществ. Это верно?
Прямая цитата из статьи не будет работать, так как в PHP нет функции md4()
. И тогда это не имело бы смысла.
Обычно применение нескольких функций хэширования не повредит. Но когда вы переходите от sha1
к md5
вы теряете диапазон ввода (md5 дает вам 128-битный выход, но sha1 составляет 160 бит). Это переустановка сокращенной выдержки, что означает, что возможный выходной набор никогда не будет больше, чем у md5()
.
Немного. Если целью является получение первоначального пароля, это становится невыполнимой задачей. Однако, как правило, это не так, и если вы действительно используете md4 для внешнего хэша, хорошо .. http://en.wikipedia.org/wiki/MD4#Security
Существует много других способов повышения безопасности, наиболее распространенным из которых является использование какой-либо случайной соли, которая не сохраняется вместе с паролем.
Лучшее, что вы можете сделать для защиты пароля, это: 1) использовать hash_hmac с sha256 или выше 2) использовать случайный nonce для пользователя и хранить его в db 3) использовать случайный счетчик итераций для каждого пользователя и хранить его в db ,
Вы также должны прочитать: Защитить хэш и соль для паролей PHP
Если вы не храните свои пароли десятки тысяч раз, вы не знаете, что делаете.
Это вычислительно дорого; это точка. Для законной цели аутентификации пользователя, у которого есть правильный пароль, нагрузка незначительна. Но для взломщика, который пытается протестировать огромный список паролей в автономной атаке, стоимость непомерно высока.
Использование тысяч итераций хэш-функции – это хорошо зарекомендовавшая себя и широко используемая техника для «укрепления ключа». Он включен в стандарты для деривации ключей и используется в таких алгоритмах, как bcrypt для защиты паролем.
Используйте bcrypt или PBKDF2, для чего вам потребуется использовать соль и итерации. Не пытайтесь составить свой собственный метод, используя несколько сломанных хэшей.