Каковы некоторые хорошие методы хеширования паролей в приложении для Android?

#android #passwords

#Android #пароли

Вопрос:

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

Я попытался использовать библиотеку jBCrypt, но это привело к длительному зависанию во время хеширования. Есть ли другие альтернативы? Какой был бы лучшим (и безопасным) способом хеширования паролей без создания заметного зависания?

Комментарии:

1. @DanielA. Белый: Разве это не требует от меня наличия действительного SSL-сертификата? В настоящее время у меня нет ни одного из них.

2. @WilHall Не говоря уже о том, что SSL-сертификат стоит дорого.

Ответ №1:

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

  1. Когда пользователи регистрируются, возьмите их пароль, хэшируйте его (также рекомендуется использовать случайную соль) и сохраните его в БД. Это делается для того, чтобы вы не сохраняли фактический пароль в своей базе данных.
  2. Когда пользователю необходимо войти в систему, вы отправляете фактический пароль в свое веб-приложение (используйте SSL, чтобы избежать его отправки в открытом виде), а не хэш. На сервере вы применяете тот же алгоритм хеширования, что и на шаге 1, и сравниваете результат с тем, что есть в вашей базе данных. Если они совпадают, пользователь предоставил правильный пароль.

Короче говоря, вы должны выполнять хеширование на сервере, а не на устройстве Android.

Комментарии:

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

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

Ответ №2:

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

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