Android->Настройки->Безопасность->StorageType получить значение внутри приложения

В более новых версиях Android (думаю, начиная с 4.2) есть опция, называемая «аппаратная поддержка» и «только программное обеспечение». Как предполагает Google:

Android также теперь поддерживает аппаратное хранилище для ваших учетных данных KeyChain, обеспечивая большую безопасность, делая ключи недоступными для извлечения. То есть, когда ключи находятся в хранилище ключей с аппаратной поддержкой (Secure Element, TPM или TrustZone), их можно использовать для криптографических операций, но материал закрытого ключа нельзя экспортировать. Даже ядро ​​ОС не может получить доступ к этому ключевому материалу. Хотя не все устройства на базе Android поддерживают аппаратное хранилище, вы можете проверить во время выполнения, доступно ли аппаратное хранилище.

выделено мной

Чего я не могу понять, так это того, что GalaxyNexus, а также Nexus 7 имеют NFC-чип с Secure Element, но его тип хранения — «только программное обеспечение». Nexus 4 имеет элемент NFC Secure и «аппаратную поддержку», в то время как Nexus 7 (2013 г.) и Nexus 5 не имеют NFC-Secure-Element, но по-прежнему имеют «аппаратную поддержку». Я могу проверить это вручную в приложении «Настройки», но есть ли способ проверить это в моем приложении?

Как упоминалось в CommonsWare, я должен предоставить ссылки: первая информация о том, что Secure Element связана с типом хранилища, упоминается здесь: другим полезным источником информации был Блог Неленкова


person Rafael T    schedule 07.11.2013    source источник
comment
@CommonsWare Вы правы, это не совсем связано. Ему просто нужен аппаратный корень доверия (который может быть безопасным элементом NFC), который явно есть у Galaxy Nexus, но поддерживает только учетные данные программного обеспечения. Взгляните на мою правку   -  person Rafael T    schedule 07.11.2013
comment
Итак, вы хотите знать, поддерживается ли тип хранилища аппаратно или нет?   -  person Vikram    schedule 27.11.2013
comment
именно это я хочу узнать внутри своего приложения.   -  person Rafael T    schedule 27.11.2013
comment
Я собирался предложить вам использовать отражение, поскольку служба KeyStore не является частью SDK ››› Получите IKeystoreService из ServiceManager и вызовите метод is_hardware_backed(). Но, как ответил Николай ниже, KeyChain#isBoundKeyAlgorithm(String) следует по тому же маршруту, в конце концов позвонив IKeystoreService#is_hardware_backed().   -  person Vikram    schedule 27.11.2013


Ответы (1)


Вы вообще читали блог? :) В настоящее время «аппаратная поддержка» означает поддержку TrustZone (TEE) для всех выпущенных устройств. Использование встроенного элемента безопасности для этого довольно сложно по политическим причинам, и ни одно из современных устройств Android не имеет TMP. Это оставляет реализации TEE на основе TrustZone. Кстати, у Galaxy Nexus он тоже есть, но в релизных сборках драйвер отключен. Он существует с версии 4.1.

Чтобы проверить из приложения, используйте KeyChain.isBoundKeyAlgorithm(String algorithm).

person Nikolay Elenkov    schedule 27.11.2013
comment
Ничего себе, сам господин Еленков отвечает ;). Я читал ваш блог (вместе со всеми сообщениями о SecureElements и о том, как их использовать). Это, наверное, меня немного смутило. Спасибо за правильный ответ. - person Rafael T; 27.11.2013