При разработке приложения, которое должно хранить учетные данные для доступа к приложению, в настоящее время должно быть стандартом, чтобы в базе данных (или файле) не хранились пароли в виде обычного текста, а хэши паролей, которые были солеными (и в идеале также были защищены с помощью перец на стороне приложения).
Рекомендуется использовать существующие библиотеки, которые заботятся о безопасности паролей, вместо того, чтобы самостоятельно разрабатывать хеширование паролей.
Это уже обсуждается в нескольких вопросах:
Как я могу безопасно хранить пароли своих пользователей?
Как аутентифицировать пользователя с помощью соленого и хешированного пароля и имени пользователя?
Безопасное хранение пароля локально
Но я не нашел никаких упоминаний о другом важном факторе: как связать хешированный пароль с учетной записью? Как следует защитить систему от, например, копирования пароля ha sh + salt от другого известного пользователя пользователю, пароль которого неизвестен? Соль должна быть безопасной-случайной, поэтому она не должна производиться от имени пользователя. Есть ли другая распространенная практика для привязки ha sh (или соли) к имени пользователя? Безопасна ли конструкция для создания, например, хешированной «строки пароля» в виде конкатенированной комбинации имени пользователя и пароля, которая затем хешируется с помощью соли + перца?
И если я продолжу этот подход ... на клиент-сервере приложение, в котором сервер должен хранить хешированный пароль, и для обеспечения безопасности простой пароль никогда не должен отправляться на сервер .. это безопасно для
- ha sh пароля на стороне клиента, со случайной солью
- передать хешированный pw + соль на сервер
- слияние (имя пользователя + ha sh) на стороне сервера и повторно ha sh с той же (?) солью -> ha sh -2
- хранить ha sh -2 + соль
и для аутентификации
- получить соль для пользователя с сервера
- ha sh введенный пароль на стороне клиента, с полученной солью -> ha sh -1 '
- отправить ha sh -1' на бэкэнд
- объединить имя пользователя + ha sh -1, re-ha sh -> ha sh -2 '
- сравнить ha sh -2' с ha sh -2 из ДБ