Как проверить, поддерживает ли телефон Android TEE? - PullRequest
0 голосов
/ 15 апреля 2020

Я прочитал эти два сообщения: Один и Два , но у меня все еще есть вопрос.

Я использую KeyStore (Android 9) для генерации AES и используйте метод isInsideSecureHardware () , чтобы проверить, является ли ключ isInsideSecureHardware . Я получил ответ Ложь . Пример кода можно найти здесь и здесь .

publi c boolean isInsideSecureHardware ()

Возвращает true, если ключ находится внутри защищенного оборудования (например, Trusted Execution Environment (TEE) или Secure Element (SE)). Материал ключей таких ключей доступен в виде открытого текста только внутри защищенного оборудования и не раскрывается вне его.

Таким образом, я хочу дополнительно подтвердить, поддерживает ли мое телефонное устройство (Huawei P20) TEE.

Вопрос:

  1. Если телефон поддерживает TEE, ключ, сгенерированный KeyStore, будет автоматически сохранен в TEE? Нужна ли какая-либо конфигурация вручную в Java? Я слышал, что ключи будут автоматически сохраняться в TEE, если вы используете KeyStore.getInstance () , KeyGenerator .getInstance (алгоритм, имя хранилища ключей) . Но я не уверен, что это правда или нет?

  2. Если ответ Q1 «Нужна ручная настройка», это становится причиной возврата isInsideSecureHardware () Ложь , верно? Если ответ Q1 «автоматически», игнорируйте Q2.

  3. Любой способ напрямую проверить, поддерживает ли телефон TEE, в Java?

1 Ответ

1 голос
/ 15 апреля 2020

Из системы Android хранилища ключей документы:

Поддерживаемые устройства, работающие Android 9 (уровень API 28) или выше, могут иметь StrongBox Keymaster, реализацию HAL Keymaster, который находится в аппаратном модуле безопасности. Модуль содержит следующее:
[...]
* Защищенное хранилище.
[...]
При проверке ключей, хранящихся в StrongBox Keymaster, система подтверждает целостность ключа с помощью Trusted. Среда выполнения (TEE).
[...]
При создании или импорте ключей с использованием класса KeyStore вы указываете предпочтение хранения ключа в мастере ключей StrongBox, передавая true в метод setIsStrongBoxBacked ().

В моем понимании это означает, что когда вы генерируете ключ и вызываете keyGenParameterSpecBuilder.setIsStrongBoxBacked(true) для конфигурации ключа, вы можете убедиться, что он поддерживается TEE. Если нет доступного TEE, он выдаст StrongBoxUnavailableException.

. Чтобы проверить, есть ли в наличии TEE, вы можете просто попытаться сгенерировать ключ таким образом и посмотреть, работает ли он.

...