Управление паролями WebApp - Хеширование, Соление, и т.д.

Я ищу самое безопасное (но выполнимый) способ управления паролями в веб-приложении.

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

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

Таким образом, я пришел к идее использовать квитирование как это:

  • Клиент просит у сервера соль.
  • Случайная соль дана клиенту и сохранена на сервере для этого единственного клиента.
  • Клиент делает Хеш (соль + пароль) и возвращает этот хеш серверу
  • Сервер делает Хеш (соль + пароль) и проверяет если то же затем от клиента

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

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

Что Вы предпочли бы? Хранение пароля в DB и делает что-нибудь там (защищенный сервер), или вытаскивает его из DB и делает это снаружи (безопасная передача)?

Заранее спасибо, отмечает

6
задан Marks 20 May 2010 в 14:02
поделиться

1 ответ

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

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

3
ответ дан 17 December 2019 в 18:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: