Как безопасно хранить учетные данные (пароль) в приложении 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

  • Ну, хэш вводит пароль, используя соль, которую мы сохранили

  • Мы сравним с хешем, который мы сохранили при успешном входе в систему

  • Если оба они равны, тогда хорошо разрешите пользователю в противном случае мы не разрешаем пользователю.

Преимущества:

  • Итак, вам не нужно беспокоиться о совместимости версий.

  • Даже если устройство укоренено так сильно, что грубая сила хеша.

  • Даже если кто-то декомпилирует/трещит приложение, которое так сложно переделать