Эй, во-первых, позвольте мне сказать, я не спрашиваю о таких вещах, как md5 (md5 (..., уже есть темы по этому поводу.
Мой вопрос такой:
Мы разрешаем нашим клиентам хранить свои пароли локально. Естественно, мы не хотим, чтобы они сохранялись в тексте плана, поэтому мы создаем их локально, перед сохранением и / или отправкой. Теперь это нормально, но если это все, что мы сделалитогда на сервере будет сохранен hmac, и поскольку клиенту нужно только отправить hmac, а не пароль в виде простого текста, злоумышленник может использовать сохраненные хэши с сервера для доступа к чьей-либо учетной записи (в катастрофическом сценарии, когда кто-то получиттакой доступ к базе данных, конечно).
Итак, наша идея заключалась в том, чтобы один раз зашифровать пароль на клиенте через hmac, отправить его на сервер, а затем еще раз зашифровать его через hmac и сопоставитьэто против сохраненного, два раза hmac'ed пароля. Это гарантирует, что:
- Клиент может хранить пароль локально, не сохраняя его как обычный текстt
- Клиент может отправить пароль, не беспокоясь (слишком сильно) о других участниках сети
- Сервер может хранить пароль, не беспокоясь о том, что кто-то украл его с сервера и использовалэто для входа в систему.
Естественно, все остальные вещи (надежные пароли, двойная соль и т. д.) также применимы, но на самом деле не имеют отношения к вопросу.
актуальный вопрос: это звучит как надежный дизайн безопасности?Мы упустили из виду какие-либо недостатки в работе таким образом?Может быть есть шаблон безопасности для чего-то подобного?
Приложение: причина, по которой мы не хотим локально хранить пароль в виде простого текста на клиенте, заключается в том, что, как ни печально, многие люди все еще используютодин и тот же пароль для нескольких сервисов, поэтому получение «настоящего» пароля было бы большим нарушением безопасности для пользователя, чем хищение его хеша.