Задача: приложение должно хранить секретный ключ (строка), безопасно, без возможности извлечения через декомпиляцию приложения или рут.
Известно: в андроид есть три встроенных механизма для хранения секретных данных. KeyStore, KeyChain и Android KeyStore Provider:
- KeyStore наименее безопасен (так как с помощью рута можно заполучить доступ непосредственно к файлу с зашифрованными данными)
- KeyChain более удобен для использования секретных данных между приложениями (запрашивает у пользователя разрешение с помощью системного диалога)
- Android KeyStore Provider вроде как наиболее подходит под задачу.
Вопросы:
- Каким образом Android KeyStore Provider защищен от декомпиляции приложения?
- Можем ли мы избежать уничтожения информации при смене или отключения пароля к устройству? Android 6.0 и выше.
- Каким образом Android KeyStore Provider защищен на рутованных устройствах? Вроде бы на некоторых устройствах под хранение таких данных выделяется некое hardware-protected хранилище, куда доступ закрыт даже с root. Но что это за устройства? Как много их? И что происходит на остальных устройствах с рутом - эти данные просто лежат в какой-то директории?