Что мне интересно, как вы солите хеш и работаете с соленым хешем?Если пароль зашифрован случайно сгенерированной солью, как мы можем проверить его, когда пользователь пытается аутентифицироваться?Нужно ли нам хранить сгенерированный хеш в нашей базе данных?
Да.Сначала вы генерируете соль, затем генерируете хеш из пароля плюс соли и сохраняете и хеш, и соль вместе.
Есть ли какой-либо конкретный способ, которым желательно генерировать соль?
Я сомневаюсь, что есть консенсус по поводу того, что предпочтительнее.Я использую / dev / random.например,
$salt = '$2a$12$'
. strtr(substr(base64_encode(shell_exec(
'dd if=/dev/random bs=16 count=1 2>/dev/null'
)), 0, 22), '+', '.')
. '$';
$hash = crypt($input, $salt);
Какой метод шифрования предпочтительнее использовать?Из того, что я слышал, с sha256 все в порядке.
См. Ответ Computer Guru, т.е. используйте bcrypt, как в примере выше.См. Справочную страницу PHP на crypt()
.Если bcrypt отсутствует в вашей системе, один из способов получить его - патч Suhosin .
Было бы неплохо, чтобы хэш был "повторно засолен", когдапользователь аутентифицируется?
Соль только замедляет атаки по словарю.Если у вас есть приличная случайная соль для начала, я не думаю, что ее частое изменение поможет.Вам, вероятно, лучше инвестировать свои усилия в то, чтобы пользователи выбирали надежные пароли, меняли их достаточно часто и сохраняли разумным значение параметра стоимости Blowfish.
И, наконец, является ли это существенным повышением безопасности дляПерефразировать это пару раз?
Этот вопрос принадлежит миру криптографического дизайна.Я рекомендую оставить это экспертам.Другими словами: забудьте об этом - просто используйте лучшие обычные практики.