2015-01-06 2 views
4

Я читал всевозможные форумы и учебные пособия об этом password_hash(), что кажется хорошим для защиты паролем.Как насчет password_hash() в PHP

Но теперь я хочу знать, если это лучше сделать собственную соль и хэш для функции как

$options = [ 
    'cost' => 11, 
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), 
]; 
password_hash($password, PASSWORD_BCRYPT, $options); 

Или просто пусть функция это сделать:

password_hash($password, PASSWORD_DEFAULT); 

Там, кажется, много дискуссий о том, хорошо или плохо ли использовать свою соль.

Может ли кто-нибудь объяснить, почему его плохо (или нет) использовать свою соль?

+4

Из [docs] (http://php.net/manual/en/function.password-hash.php), «Внимание! Настоятельно рекомендуется, чтобы вы не генерировали свою соль для этой функции. для вас автоматически создаст безопасную соль, если вы ее не укажете ». В документах есть много комментариев о том, насколько криптографически безопасна автогенерированная соль, и что создание собственного может привести к проблемам. * Это гораздо более безопасно *, чтобы позволить функции создавать соль. –

+0

Спасибо @JayBlanchard – Refilon

ответ

3

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

Из документации:

Внимание

Настоятельно рекомендуется, чтобы вы не генерировать свои собственные соли для этой функции. Он автоматически создаст безопасную соль, если вы не укажете .

Итак, для ответа на ваш вопрос, если вы не знаете больше о соли или других ... Просто не используйте свою соль, эта функция достаточно сильна!

+0

Большое спасибо. Я также читал об этом, но хотел быть на 100% уверенным, прежде чем использовать его на веб-сайте, который я делаю. Я буду отмечать ваш ответ как можно скорее, когда смогу. – Refilon

+0

Добро пожаловать;) –

1

Соли - это всего лишь защита от атаки радужного стола.
Это не сделает один хеш труднее сломать, а вместо этого больше целого.
Если вы используете различную соль для каждого хеша, злоумышленнику нужно будет создать радужный стол для каждого пароля.
Это непрактично в средствах работы и времени.
Создание соли с псевдослучайным rng будет выполнять работу по защите большего количества ваших паролей.
https://crypto.stackexchange.com/questions/1776/can-you-help-me-understand-what-a-cryptographic-salt-is

Поскольку функция уже создает защищенную соль, не рекомендуется, чтобы создать свой собственный с ГСЧ, что практически хуже.
Просто позвольте функции генерировать сильную соль, и она будет прекрасной и стоить меньше работы, так как вам не нужно создавать соли самостоятельно.
Correct way of creating salted hash password

Цитата предыдущей ссылка:

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

Соль будет включена в итоговое значение хеша, поэтому вам не нужно хранить его отдельно. Просто создайте 60-значное строковое поле в своей базе данных и сохраните хэш-значение. Функция password_verify() будет извлекать использованную соль из сохраненного значения хэш-функции. Для получения дополнительной информации вы можете ознакомиться с моим руководством по хранению паролей.

Смежные вопросы