PASSWORD_DEFAULT против PASSWORD_BCRYPT

В чем разница между PASSWORD_DEFAULT и PASSWORD_BCRYPT? Они оба используют алгоритм шифрования Blowfish? Что такое стоимость в алгоритме? Как настроить password_hash в PHP для получения длины 255 хэшей вместо 60?


person rexhin    schedule 13.03.2014    source источник
comment
Почему вам нужен хэш из 255 символов, а не сгенерированный хэш из 60 символов?   -  person Mark Baker    schedule 14.03.2014
comment
Замедление атак BruteForce?   -  person rexhin    schedule 14.03.2014
comment
Более длинный хеш не замедлит атаки грубой силы, стоимость сделает это за вас.... длиннее !== безопаснее или медленнее   -  person Mark Baker    schedule 14.03.2014
comment
Не требуется ли больше времени для расшифровки хэш-строки 255, а не 60? Думаю, это займет много времени. Можете ли вы объяснить мне, почему лучше повысить стоимость, чем увеличивать длину хэша?   -  person rexhin    schedule 14.03.2014
comment
Нет, длина не является основным фактором, связанным со скоростью взлома хэша.... энтропия битов в этой длине имеет большее значение, чем сама длина, а преднамеренное замедление выполнения хеширования снижает эффективность использования процессорной фермы. для перебора от миллионов возможностей в секунду до сотен возможностей. password_hash() преднамеренно медленный, и увеличение влияния cost еще больше снижает эту скорость.   -  person Mark Baker    schedule 14.03.2014
comment
Еще раз спасибо за эти большие и четкие ответы. :)   -  person rexhin    schedule 14.03.2014


Ответы (3)


В настоящее время PASSWORD_BCRYPT является единственным поддерживаемым алгоритмом (с использованием CRYPT_BLWFISH), поэтому в настоящее время нет разницы между PASSWORD_DEFAULT и PASSWORD_BCRYPT. Целью PASSWORD_DEFAULT является возможность включения дополнительных алгоритмов в будущем, после чего PASSWORD_DEFAULT всегда будет использоваться для применения самого сильного из поддерживаемых алгоритмов хеширования.

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

person Mark Baker    schedule 13.03.2014
comment
Я наткнулся на one of your answers Mark, когда гуглил эту тему. Собственно, мой вопрос заключался в том, как хакеры получают пароли mysql php? так как я всегда задавал себе тот же вопрос, что и мой запрос. Если машина вычисляет пароль, разве он не должен сопоставляться с именем пользователя, связанным с ним, и как они вообще получат доступ из БД?... на что я действительно не нашел ответа на эти вопросы . - person Funk Forty Niner; 14.03.2014
comment
Есть много способов, которыми хакер может получить доступ к списку пользователей и паролей, не в последнюю очередь это уязвимость SQL-инъекции, которая позволяет ему изменить запрос или физический доступ к серверу базы данных. Вот почему хэш пароля должен быть защищен - person Mark Baker; 14.03.2014
comment
У меня был тот же вопрос, но я просто повторил CRYPT_BLWFISH, PASSWORD_BCRYPT и PASSWORD_DEFAULT и обнаружил, что все они имеют то же значение, что и 1, поэтому в настоящее время они должны быть одинаковыми. - person user1032531; 25.12.2014
comment
Если значение по умолчанию изменится в будущем, будет ли оно обратно совместимо с чтением существующих паролей, хранящихся в БД? - person BSUK; 24.04.2017
comment
@BSUK Да, он будет обратно совместим, потому что часть сгенерированных данных включает используемый алгоритм, поэтому password_verify() всегда будет знать, как проверить хеш. - person Mark Baker; 24.04.2017

Согласно документации, PASSWORD_DEFAULT предназначен для использования в будущем.

Из документов:

PASSWORD_DEFAULT — использовать алгоритм bcrypt (по умолчанию в PHP 5.5.0). Обратите внимание, что эта константа предназначена для изменения со временем, когда в PHP добавляются новые и более сильные алгоритмы. По этой причине длина результата использования этого идентификатора может меняться со временем. Поэтому рекомендуется хранить результат в столбце базы данных, длина которого может превышать 60 символов (хорошим выбором будет 255 символов).

person Victory    schedule 13.03.2014

На данный момент нет разницы между PASSWORD_DEFAULT и PASSWORD_BCRYPT (http://www.php.net/manual/en/password.constants.php). Стоимость будет зависеть от количества раундов, в которых будет применяться хэш. Это также объясняется по ссылке выше. Если вы хотите повысить безопасность своего хэша, вам лучше увеличить количество раундов, а не длину.

person iceduck    schedule 13.03.2014