Как безопасно хранить учетные данные (пароль) в приложении Android?
Я хочу сохранить пароль, используемый для подписания в финансовом приложении, которое я разрабатываю в безопасном месте. После некоторого сетевого серфинга я нашел следующие варианты, но каждый из них имеет определенный недостаток.
1) KeyChain.
Доступно только в OS версии 4.
2) Общие предпочтения.
Он хранит данные в обычном тексте, хотя, если я шифрую данные, тогда ключ шифрования может быть скомпрометирован путем декомпиляции кода приложения.
3) Получите доступ к хранилищу хранилища ключей и сохраните учетные данные в нем.
(http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html)
Требуется другой пароль для запоминания.
Пожалуйста, предложите мне лучший способ защитить учетные данные в приложениях Android, таких как IPhone KeyChain.
Ответы
Ответ 1
В настоящее время это не эквивалент iPhone KeyChain в Android. Если вы хотите сохранить что-то секретное, не храните его на устройстве. Или, по крайней мере, не храните ключ/пароль, который он зашифрован на устройстве. Просто как тот.
Дополнительно:
1) Даже в ICS вы не можете напрямую использовать KeyChain для хранения секретов приложений (см. запись в блоге в 3))
2) Это только проблема для корневых телефонов, или если у кого-то есть физический доступ к устройству.
3) Намного лучше запомнить один пароль, защищающий все ваши учетные данные, чем попытки запомнить несколько паролей. Кроме того, в ICS нет отдельного пароля, хранилище учетных данных защищено паролем разблокировки устройства.
Ответ 2
Хеширование - это решение
не хранить учетные данные как обычный текст в общих предпочтениях или любом носителе.
Просто соля и хэш-пароль, тогда вы можете продолжить его сохранение в sharedPreferences или вложенном db.
Вот как это работает:
Интернет
-
Обычный (неуправляемый) пароль отправляется на сервер для аутентификации и amp;
авторизация при успешном входе в систему.
-
Соль может быть сгенерирована и возвращена с сервера на клиент
или может быть сгенерирован на клиенте
-
Затем сохраните его как соль и хеш-пароль и сохраните его.
Offline
-
Ну, хэш вводит пароль, используя соль, которую мы сохранили
-
Мы сравним с хешем, который мы сохранили при успешном входе в систему
-
Если оба они равны, тогда хорошо разрешите пользователю в противном случае мы не разрешаем пользователю.
Преимущества:
-
Итак, вам не нужно беспокоиться о совместимости версий.
-
Даже если устройство укоренено так сильно, что грубая сила хеша.
-
Даже если кто-то декомпилирует/трещит приложение, которое так сложно переделать