#android #passwords
#Android #пароли
Вопрос:
Я создаю приложение, которое требует от пользователя регистрации на удаленном сервере, но я хочу хэшировать его пароль перед отправкой для сохранения в моей базе данных.
Я попытался использовать библиотеку jBCrypt, но это привело к длительному зависанию во время хеширования. Есть ли другие альтернативы? Какой был бы лучшим (и безопасным) способом хеширования паролей без создания заметного зависания?
Комментарии:
1. @DanielA. Белый: Разве это не требует от меня наличия действительного SSL-сертификата? В настоящее время у меня нет ни одного из них.
2. @WilHall Не говоря уже о том, что SSL-сертификат стоит дорого.
Ответ №1:
Ваш подход кажется неправильным. Если у вас нет каких-либо особых требований, обычный способ сделать это следующий (не специфичный для Android, для любого веб-приложения):
- Когда пользователи регистрируются, возьмите их пароль, хэшируйте его (также рекомендуется использовать случайную соль) и сохраните его в БД. Это делается для того, чтобы вы не сохраняли фактический пароль в своей базе данных.
- Когда пользователю необходимо войти в систему, вы отправляете фактический пароль в свое веб-приложение (используйте SSL, чтобы избежать его отправки в открытом виде), а не хэш. На сервере вы применяете тот же алгоритм хеширования, что и на шаге 1, и сравниваете результат с тем, что есть в вашей базе данных. Если они совпадают, пользователь предоставил правильный пароль.
Короче говоря, вы должны выполнять хеширование на сервере, а не на устройстве Android.
Комментарии:
1. В настоящее время я делаю следующее: Регистрация: получаю ввод пароля, хэширую его, отправляю на сервер, сохраняю. Вход в систему: ввод пароля, его хэширование, отправка на сервер, сравнение Вы говорите, что я должен отправить текстовый пароль с помощью SSL, а затем хэшировать его на сервере? Разве для этого не требуется SSL-сертификат для моего домена?
2. Да, это так. Обратите внимание, что то, что вы делаете сейчас, небезопасно: если кто-то перехватывает трафик, он получает хэш, а не фактический пароль, но на самом деле он им не нужен. Пока у злоумышленника есть хэш, он может отправить его на ваш сервер и успешно войти в систему, не зная пароля. Используйте SSL.
Ответ №2:
Избегайте сохранения сторонних паролей любой ценой. Их сохранение считается формой фишинга. Попробуйте сохранить токен аутентификации вместо необработанного пароля, который вы можете получить с помощью такого метода, как OAuth.
Если вам нужно отправить пароль в базу данных на веб-сервере, просто используйте HTTPS. Это обеспечит безопасное шифрование по проводам. Затем вы можете зашифровать пароль по мере необходимости в базе данных. Этот метод также гарантирует, что ваш механизм шифрования не находится на самом устройстве, которое может быть легче скомпрометировано.