AndroidKeyStore getEntry постоянно завершается ошибкой после определенного момента

Я использую AndroidKeyStore для генерации пары ключей RSA, которые используются для шифрования / дешифрования внутренних данных.

Код, который делает это следующим образом - он пытается получить существующую пару ключей RSA (через псевдоним). Если ничего не существует, он пытается создать новый. код как -

private void initializePublicPrivateKeys(){
    try
    {
        KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
        keyStore.load(null);
        KeyStore.PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(APP_RSA_,KEY_PAIR_SECRET_ALIAS, null);
        _app_privateRSAKey = entry.getPrivateKey();
        _app_publicRSAKey = entry.getCertificate().getPublicKey();
    }
    catch(Exception e){

    }
}

private void initializeRSAKeyPairs() {

    initializePublicPrivateKeys();
    boolean isKeyNotGenerated = _app_privateRSAKey == null || _app_publicRSAKey == null;

    if(isKeyNotGenerated)
    {
        //Check here, if we already stored some data with previous RSA key pair - if a entry is present in SharedPreference then that would mean we had previously generated a RSA key pair and the entry is in-turn encrypted by this key pair.

        generateAppRSAPublicPrivateKeys();
        initializePublicPrivateKeys();// initialize it again , since we have new keys generated.
    }
}

@TargetApi(18)
private void generateAppRSAPublicPrivateKeys(){
    Calendar cal = Calendar.getInstance();
    Date now = cal.getTime();
    // the certificate created would be valid for 25 years. This is just a random value.
    cal.add(Calendar.YEAR, 25);
    Date end = cal.getTime();

    try{
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
        Context appContext = getApplicationContext();


        KeyPairGeneratorSpec.Builder keyPairGeneratorBuilder =
                new KeyPairGeneratorSpec.Builder(appContext)
                        .setAlias("myrsaalias")
                        .setStartDate(now)
                        .setEndDate(end)
                        .setSerialNumber(BigInteger.valueOf(1))
                        .setSubject(new X500Principal(String.format("CN=%s, OU=%s", "myrsaalias",
                                appContext.getApplicationInfo().packageName)));

        if(Build.VERSION.SDK_INT >= 19){
            keyPairGeneratorBuilder.setKeySize(2048); 
        }

        generator.initialize(keyPairGeneratorBuilder.build());
        generator.generateKeyPair();
    }
    catch(Exception e){
        e.printStackTrace();
        throw new IllegalArgumentException("Failed to generate RSA Public Private Key pair");
    }
}

Этот код работает нормально. Как только пара ключей сгенерирована, я использую их для шифрования / дешифрования данных (сохраняю эти данные в общем предпочтении), НО после определенного момента времени (после некоторого перезапуска приложения) функция initializePublicPrivateKeys не может получить пары ключей. (После этой точки последовательно отказывает), и поэтому любые данные, которые хранятся в общем предпочтении в зашифрованном виде, теряются, поскольку у меня нет соответствующего открытого ключа для его расшифровки. (если я сгенерирую новый, тогда, я думаю, это было бы иначе и вернуло бы неправильные результаты, когда я расшифровал данные)

Мне было интересно, в каких случаях эта функция initializePublicPrivateKeys может завершиться ошибкой?

PS: пока я не могу зафиксировать детали исключения, потому что проблема возникает на каком-то клиентском устройстве, к которому у меня нет доступа, и мне нужно самому определить источник проблемы. Кроме того, пароль устройства или PIN-код не менялись в течение этого периода (я подтвердил это с моим клиентом)

заранее спасибо,

Ответы на вопрос(1)

Ваш ответ на вопрос