setIsStrongBoxBacked () для не генерирует исключение StrongBoxUnavailableException, как ожидалось - PullRequest
2 голосов
/ 05 февраля 2020

Я недавно работаю с 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.

...