Как хранить пароли безопасно и по отношению к пользователю - PullRequest
0 голосов
/ 04 августа 2020

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

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

Это уже обсуждается в нескольких вопросах:

Как я могу безопасно хранить пароли своих пользователей?

Как аутентифицировать пользователя с помощью соленого и хешированного пароля и имени пользователя?

Безопасное хранение пароля локально

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

И если я продолжу этот подход ... на клиент-сервере приложение, в котором сервер должен хранить хешированный пароль, и для обеспечения безопасности простой пароль никогда не должен отправляться на сервер .. это безопасно для

  1. ha sh пароля на стороне клиента, со случайной солью
  2. передать хешированный pw + соль на сервер
  3. слияние (имя пользователя + ha sh) на стороне сервера и повторно ha sh с той же (?) солью -> ha sh -2
  4. хранить ha sh -2 + соль

и для аутентификации

  1. получить соль для пользователя с сервера
  2. ha sh введенный пароль на стороне клиента, с полученной солью -> ha sh -1 '
  3. отправить ha sh -1' на бэкэнд
  4. объединить имя пользователя + ha sh -1, re-ha sh -> ha sh -2 '
  5. сравнить ha sh -2' с ha sh -2 из ДБ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...