Как лучше всего хэшировать пароль? Достаточно ли безопасен password_hash или в PHP 7 есть более безопасный метод?

Как лучше всего хэшировать пароль? Я знаю способ, который хорошо работает, но мне было интересно, есть ли еще лучший способ хеширования паролей в PHP 7+, чем password_hash(). Достаточно ли хорош password_hash?

<?php
password_hash('PASSWORD HERE', PASSWORD_DEFAULT);
?>

person Community    schedule 30.11.2017    source источник
comment
Да, это лучшее, что вы можете сделать с PHP, и оно будет адаптировано к будущим требованиям (алгоритм может быть заменен).   -  person martinstoeckli    schedule 30.11.2017
comment
Это не дубликат, я снова открыл вопрос. Начиная с PHP 7.2, Argon2 теперь реализован в этой версии PHP и предлагает более надежное хеширование. метод.   -  person Funk Forty Niner    schedule 30.11.2017
comment
Кто-то только что проголосовал за то, чтобы снова закрыть вопрос с дубликатом, который, как они говорят, есть. ОП специально спрашивает, есть ли лучший способ. Дубликат не распространяется на это (на Argon2). Пожалуйста, не помечайте это как таковое и снимите для него флаг, пожалуйста. Это конкретный вопрос и к PHP 7+. Редактировать (пинговать) @RC.   -  person Funk Forty Niner    schedule 30.11.2017
comment
Если ответ решил вашу проблему, рассмотрите возможность принятия ответа. Вот как meta.stackexchange.com/ вопросов/5234/, затем вернитесь сюда и сделайте то же самое с галочкой/галочкой, пока она не станет зеленой. Это информирует сообщество, решение было найдено. В противном случае другие могут подумать, что вопрос все еще открыт, и могут захотеть опубликовать (больше) ответов. Вы будете зарабатывать очки, а другим будет предложено помочь вам. Добро пожаловать в Стек!   -  person Jay Blanchard    schedule 30.11.2017
comment
@RC. Я просто говорю, что оригинальный дубликат, похоже, исходил от вас. Если я ошибаюсь, то прошу прощения. Я видел твое имя (участника) первым в списке, вот почему. Если вы посмотрите на мой комментарий выше, этот вопрос является конкретным, и дубликаты, включая ссылки, которые вы разместили в комментариях, не упоминают Argon2, поэтому я решил повторно открыть вопрос, чтобы охватить весь вопрос, а не только одна часть. Я чувствую, что это послужит хорошим каноническим вопросом и ответом для серверов, на которых установлен PHP 7.2.   -  person Funk Forty Niner    schedule 30.11.2017
comment
У меня снова один голос, а не шесть. Я удалю свои комментарии отсюда и остановите меня, спасибо.   -  person    schedule 30.11.2017
comment
@JayBlanchard - я знаю, как использовать StackOverFlow. Я только что проверил это сегодня после публикации день или 2 назад. Я отметил лучший ответ. Спасибо за подробности   -  person    schedule 01.12.2017


Ответы (1)


"Мне интересно, есть ли способ хэширования паролей в PHP 7+ еще лучше, чем password_hash. Достаточно ли хорош password_hash?"

Да, это достаточно безопасно, и да, есть лучший/безопасный способ. Начиная с PHP 7.2, Argon2 является частью недавно реализованного метода (хеширования), победившего в соревновании по хэшированию паролей, которое предлагает более надежный метод, если вы хотите обновить версию PHP до 7.2.

В вики говорится:

Argon2, алгоритм хэширования паролей, рекомендованный Конкурсом хеширования паролей, представляет собой современный алгоритм безопасного хеширования паролей. Argon2 устраняет несколько ключевых недостатков существующих алгоритмов, поскольку он разработан для максимальной скорости заполнения памяти и эффективного использования нескольких вычислительных блоков, при этом обеспечивая защиту от атак компромисса. В отличие от Bcrypt, который принимает только один фактор стоимости, Argon2 параметризуется тремя различными факторами:

  1. Стоимость памяти, определяющая использование памяти алгоритмом.
  2. Стоимость времени, определяющая время выполнения алгоритма и количество итераций.
  3. И коэффициент параллелизма, определяющий количество параллельных потоков.

Вы также можете просмотреть следующую ссылку, которая содержит дополнительную информацию о Libsodium https://paragonie.com/blog/2016/02/how-safely-store-password-in-2016

Руководство по http://php.net/manual/en/function.password-hash.php также содержит информацию о PASSWORD_ARGON2I.

В журнале изменений указано:

7.2.0 Добавлена ​​поддержка паролей Argon2 с использованием PASSWORD_ARGON2I.


Если обновление до PHP 7.2 невозможно, вы можете увеличить «стоимость».

Взято из этого ответа и из связанного сообщения Генерация хэша пароля в PHP 5.5 и настройка стоимости, и я цитирую:

Увеличение параметра стоимости на 1 удваивает время, необходимое для вычисления хеш-значения. Параметр стоимости представляет собой логарифм (по основанию 2) количества итераций, что означает:

$ итераций = 2 ^ $ стоимость;

Вы также можете ознакомиться с другими вопросами и ответами здесь, в Stack Overflow:

person Funk Forty Niner    schedule 30.11.2017
comment
Примечание: я чувствую, что этот пост послужит каноническим вопросом и ответом для тех, кто ищет более надежный метод хеширования для серверов с установленным PHP 7.2, а также для тех, кто (пока) не знает об этом недавно реализованном методе (хеширования). (в PHP 7.2). - person Funk Forty Niner; 30.11.2017
comment
Алгоритм по умолчанию будет меняться со временем, поэтому использование параметра PASSWORD_DEFAULT может быть немного более надежным в будущем (так много неподдерживаемого кода все еще выполняется...). Но приятно знать, что Argon2 наконец-то появился в PHP API. - person martinstoeckli; 30.11.2017
comment
Действительно, @martinstoeckli и TBH, я узнал об Argon2 только месяц назад или около того. Это довольно интересный (новый) метод, который был добавлен/реализован в PHP 7.2.0. - person Funk Forty Niner; 30.11.2017