когда Application.onCreate, я генерирую AES хранилище ключей, но затем проверка keystore.contains ложь - PullRequest
0 голосов
/ 11 октября 2019

У меня есть приложение, использующее хранилище ключей Android для конфиденциальных данных. Когда Application.onCreate () я генерирую ключ AES из хранилища ключей. А затем Application.onCreate, прежде всего, проверим существующее сгенерированное хранилище ключей. но 2% пользователей моего приложения потеряли ключ KeyStore. 98% пользователь в порядке.

private const val androidKeyStore = "AndroidKeyStore"
private const val mode_aes = "AES/GCM/NoPadding"
private val keystore by lazy { KeyStore.getInstance(androidKeyStore) }
fun checkTEE(){
            val count = PreferenceManager.increase(COUNT)
            val startTime = System.currentTimeMillis()
            val keyAlias = "techfin.key.test.id"
            val info = TeeCheckInfo(count)
            if(containsAlias(keyAlias).not()){
                msg += " NOT_EXIST $info"
                Logging.d(TAG,msg)
                LogManager.sendWarnLog(msg)
            }
            generateAESKey(keyAlias)
}

   fun generateAESKey(keyAlias:String){
        keystore.load(null)
        if (keystore.containsAlias(keyAlias)) {
            return
        }
        KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, androidKeyStore).let {
            it.init(
                KeyGenParameterSpec.Builder(keyAlias, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
                    .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
                    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
                    .setRandomizedEncryptionRequired(false)
                    .build()
            )
            it.generateKey()
        }

    }

Класс LogManager отправляет журнал на сервер.

ниже - журнал сервера по временной шкале. Каждый журнал означает, что вызывается application.onCreate. количество увеличивается и сохраняется в sharedPreference. я думаю, что если count = 1, это впервые. поэтому NOT_EXIST НОРМАЛЬНО.

10/ 11 2019 10:14:12.022 TEE_CHECK NOT_EXIST 
count=8

10/ 11 2019 10:12:44.316 TEE_CHECK NOT_EXIST 
count=7

10/ 11 2019 09:17:24.572 TEE_CHECK NOT_EXIST 
count=6

ожидается - если ключ генерируется в KeyStore, он постоянно существует в KeyStore.

актуальный - ключне найдено в KeyStore.

...