Я недавно работаю с Android системой хранилища ключей.
Телефон Xiaomi 9 и Huawei P20 (обновленный до Android 9) использовались для теста, который может не поддерживать StrongBox в соответствии с предоставленными GrapheneOS / AttestationSamples. из этой ссылки .
Кроме того, приведенный ниже код, возвращенный false, указывает, что устройство не имеет функции StrongBox.
private boolean hasStrongBox(Context context){
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_STRONGBOX_KEYSTORE);
}
Однако во время теста, когда я Создаю ключ шифрования AES, используя приведенную ниже спецификацию c, оба телефона не генерируют исключение StrongBoxUnavailableException:
protected int createAndroidKeyStoreSymmetricKey() throws NoSuchProviderException, NoSuchAlgorithmException, InvalidAlgorithmParameterException {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(ALIAS_MASTER_KEY, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7);
.setIsStrongBoxBacked(true);
keyGenerator.init(builder.build());
secretKey = keyGenerator.generateKey();
if(secretKey != null ){
return 0;
} else {
return -1;
}
}
При создании ключа шифрования RSA оба они генерировали исключение StrongBoxUnavailableException:
private KeyPair genKeyPair(String alias, boolean isStrongBoxBacked) throws Exception {
KeyPairGenerator kpg =
KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");
KeyGenParameterSpec.Builder keyBuilder = new KeyGenParameterSpec.Builder(
alias,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
.setBlockModes(KeyProperties.BLOCK_MODE_ECB)
.setKeySize(CRYPTO_BITS)
.setIsStrongBoxBacked(true);
kpg.initialize(keyBuilder.build());
return kpg.generateKeyPair();
}
android.security.keystore.StrongBoxUnavailableException: Failed to generate key pair
Есть ли какая-либо конфигурация spe c, которая была сделана неправильно во время генерации ключа? Поскольку ожидаемый результат - StrongBoxUnavailableException, генерируется даже во время генерации AES.