Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Хранение секретных ключей в Android

#android #безопасность #криптография


Задача: приложение должно хранить секретный ключ (строка), безопасно, без возможности
извлечения через декомпиляцию приложения или рут.

Известно: в андроид есть три встроенных механизма для хранения секретных данных.
KeyStore, KeyChain и Android KeyStore Provider:


KeyStore наименее безопасен (так как с помощью рута можно заполучить доступ непосредственно
к файлу с зашифрованными данными)
KeyChain более удобен для использования секретных данных между приложениями (запрашивает
у пользователя разрешение с помощью системного диалога)
Android KeyStore Provider вроде как наиболее подходит под задачу.


Вопросы:


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

    


Ответы

Ответ 1



Это все один и тот же механизм. KeyStoreProvider - это провайдер (реализация) механизма KeyStore, а KeyChain некое верхнеуровневое API доступа к KeyStore - нечто вроде менеджера. То есть для создания KeyStore вы должны выбрать одного из провайдеров. Список провайдеров можно получить через Security.getProviders() и далее выбрать KeyStore.getInstance(provider) Теперь ближе к сути вопроса. Вопрос защищенности KeyStore зависит от его реализации, защищенность можно проверить - как говорит документация: Key material may be bound to the secure hardware (e.g., Trusted Execution Environment (TEE), Secure Element (SE)) of the Android device. When this feature is enabled for a key, its key material is never exposed outside of secure hardware. If the Android OS is compromised or an attacker can read the device's internal storage, the attacker may be able to use any app's Android Keystore keys on the Android device, but not extract them from the device. This feature is enabled only if the device's secure hardware supports the particular combination of key algorithm, block modes, padding schemes, and digests with which the key is authorized to be used. To check whether the feature is enabled for a key, obtain a KeyInfo for the key and inspect the return value of KeyInfo.isInsideSecurityHardware(). грубо говоря, это означает, что если ключи находятся в аппаратно защищенном месте то все типа "ок", если иначе - то через рут можно все раскурочить. Для Samsung'ов таковым является механизм Knox, при получении рута (только рута без перепрошивки) он остается защищенным, хотя перепрошивка сбрасывает защиту Knox'а

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

Отправить комментарий