В более новых версиях 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 связана с типом хранилища, упоминается здесь: другим полезным источником информации был Блог Неленкова
IKeystoreService
изServiceManager
и вызовите методis_hardware_backed()
. Но, как ответил Николай ниже,KeyChain#isBoundKeyAlgorithm(String)
следует по тому же маршруту, в конце концов позвонивIKeystoreService#is_hardware_backed()
. - person Vikram   schedule 27.11.2013