Например, при использовании Sony xperia z5 Compact с более старой версией версия ОС isInsideSecureHardware() может в течение некоторого времени возвращать true, а затем внезапно начать возвращать false для того же закрытого ключа.
В последней версии ОС (32.2.A.0.224), похоже, возвращается только false.
Huawei Nexus 6P всегда возвращает true.
Есть ли способ убедиться, что ключ хранится на защищенном оборудовании?
Вот мой текущий код:
Код: Выделить всё
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");
keyPairGenerator.initialize(new KeyGenParameterSpec.Builder(KEY_NAME, KeyProperties.PURPOSE_DECRYPT | KeyProperties.PURPOSE_ENCRYPT)
.setUserAuthenticationRequired(true)
.setBlockModes(KeyProperties.BLOCK_MODE_ECB)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
.build());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// Check that private key is inside secure hardware
KeyFactory factory = KeyFactory.getInstance(key.getAlgorithm(), "AndroidKeyStore");
KeyInfo keyInfo = factory.getKeySpec(key, KeyInfo.class);
boolean secure = keyInfo.isInsideSecureHardware(); // this usually returns false
Редактировать:
На форуме поддержки Sony есть тема о той же проблеме. :
https://talk.sonymobile.com/t5/Android- ... -p/1154124
Это упоминалось в журналы выводится следующее предупреждение:
Хранилище ключей W: первичному устройству-мастеру ключей не удалось сгенерировать ключ, пришлось вернуться к программному обеспечению.
Подробнее здесь: https://stackoverflow.com/questions/381 ... e-hardware