Должен ли я генерировать дополнительную соль, даже если password_hash () уже предоставляет соль?

При использовании встроенной в PHP функции password_hash () я должен (или должен) генерировать свою собственную соль, хотя (насколько я понимаю) она уже может создать соль, как показано здесь в этом примере (предоставлено http://www.php.net):

 <?php
/**
* Note that the salt here is randomly generated.
* Never use a static salt or one that is not randomly generated.
*
* For the VAST majority of use-cases, let password_hash generate the salt randomly for you
*/
$options = [
'cost' => 11,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>

В настоящее время я хэширую, используя sha512 и генерируя соль из 38 500 символов. (Я не был уверен, что число символов действительно имело значение, поэтому я попытался в любом случае… похоже, это сработало, например, позволив мне успешно регистрироваться и входить в систему, но я не знаю всех недостатков безопасности в этом)
Что-то вроде этого:

  <?php
$Salt =  str_repeat(hash("sha512", uniqid(time())), 40);
?>

Довольно странно, но когда дело доходит до криптографии, мне есть чему поучиться.
(вот ссылка на одну из солей https://shrib.com/F7lB9Ycf)
Теперь, если бы мне нужно было добавить дополнительную соль (если бы вы сказали «да, соль снова»), то как бы я добавил соль, используя password_verify ()?

Заранее спасибо всем, кто мог помочь!

2

Решение

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

// Leave out a salt in the options
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT, array("cost" => 11));

Нет абсолютно никакого преимущества в создании соли с 38500 символами. В зависимости от того, как добавляется соль, это может даже снизить безопасность, если вы используете алгоритм с максимальной длиной для паролей (как BCrypt). Обычно соль составляет около 20 байтов.

Соль должна защищать вас от атак радужного стола. Радужная таблица должна была бы быть построена именно для этой соли, потому что грубое взлом случайного пароля 20+ в наши дни невозможен. Если вы добавите уникальную соль для каждого пароля, злоумышленник должен будет создать радужную таблицу для каждого пароля. Если вы заинтересованы в дополнительной информации, вы можете посмотреть на мой руководство о безопасном хранении паролей.

1

Другие решения

password_hash() генерирует свою собственную соль. Не нужно снова солить. Смотрите это из Справочник по PHP: Если опущено, то password_hash () будет генерировать случайную соль для каждого хэшированного пароля. Это предполагаемый режим работы.

0

По вопросам рекламы [email protected]