Сравнение одноразовых солей и паролей сервера
Я читал, что одним из наиболее безопасных способов аутентификации пользователя является использование одноразовых солей при хешировании пароля. То, что я не понимаю, это:
Если клиент генерирует новую соль каждый сеанс, разве результирующий хэш соли + пароль не будет отличаться каждый сеанс? Если да, то как сервер сможет сравнить отправленный пароль с сохраненным паролем? Есть ли способ для серверов сравнивать разные хеши и при этом различать, что использовался один и тот же пароль?
(Отказ от ответственности: я не пытаюсь заново изобрести колесо / написать протокол входа в систему (я знаю, я знаю: используйте SSL/TLS). Мне просто любопытно, как функционирует протокол входа в систему на высоком уровне)
2 ответа
Вы должны генерировать соль только один раз и можете каждый раз при смене пароля.
Клиенту не нужно хранить соль где-либо или даже знать об этом. Соль будет храниться на сервере - вместе с хешем.
Рекомендуется хранить хэш и соль в двух разных базах данных.
Вы создаете новую соль только тогда, когда пользователь изначально устанавливает пароль. Затем вы сохраняете соль вместе с хэшем пароля.