Я создаю небольшое приложение Android (API> 23) и должен обходиться без экрана входа в систему. Тем не менее, данные пользователя должны быть зашифрованы, для этого я генерирую или загружаю ключ AES из AndroidKeyStore:
fun generateSymmetricKey(keyAlias: String): Key {
val keyStore = KeyStore.getInstance("AndroidKeyStore")
keyStore.load(null)
if (!keyStore.containsAlias(keyAlias)) {
val keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
val keyGenParameterSpec =
KeyGenParameterSpec.Builder(
keyAlias,
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.build()
keyGenerator.init(keyGenParameterSpec)
return keyGenerator.generateKey()
}
return keyStore.getKey(keyAlias,null)
}
С помощью метода getKey я загружаю сохраненный ключ из хранилища ключей без заданного пароля. Возник вопрос, если это делает хранилище ключей небезопасным. Или же Android сам устанавливает пароль для этого хранилища ключей при создании APK.