Почему значение, возвращаемое isInsideSecureHardware, изменяется на разных уровнях API на Android? - PullRequest
1 голос
/ 03 августа 2020

Ниже приведен код, который я использую на своем эмуляторе Android:

KeyPairGenerator keyGen = null;
keyGen = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore"); // store the key in the Android KeyStore for security purposes
keyGen.initialize(new KeyGenParameterSpec.Builder(
        "key1",
        KeyProperties.PURPOSE_SIGN)
        .build()); // defaults to RSA 2048
KeyPair keyPair = keyGen.generateKeyPair();

KeyFactory factory = KeyFactory.getInstance(keyPair.getPrivate().getAlgorithm(), "AndroidKeyStore");
KeyInfo keyInfo = factory.getKeySpec(keyPair.getPrivate(), KeyInfo.class);
boolean secure = keyInfo.isInsideSecureHardware();
System.out.println("Is the private key backed in hardware: " + secure);

Это результаты, которые я получаю по разным версиям:
Уровень API 27: true
Уровень API 28: false
Уровень API 29: false

Почему возвращаемое значение isInsideSecureHardware изменяется на разных уровнях API? Я бы подумал, что это будет полностью зависеть от оборудования, а не от уровня API, который работает на телефоне.

...