В настоящее время я использую Android Keystore в своем приложении, чтобы скрыть общие настройки, чтобы сохранить личные данные пользователя.
В настоящее время происходит так, что при попытке использовать Keystore с определенным устройством (Oneplus 3T, под управлением Android 7.1.1) происходит сбой Cipher с использованием сгенерированного ключа с ошибкой KeyNotYetValidException. В других устройствах не вылетает.
Я попытался установить начало срока действия ключа на прошлый год, но возникла та же проблема.
Вот код создания ключа:
val start = GregorianCalendar()
start.add(Calendar.YEAR, -1)
val end = GregorianCalendar()
end.add(Calendar.YEAR, 25)
lateinit var spec: AlgorithmParameterSpec
spec = KeyGenParameterSpec.Builder(ALIAS, KeyProperties.PURPOSE_ENCRYPT.or(KeyProperties.PURPOSE_DECRYPT))
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
.setUserAuthenticationRequired(false)
.setCertificateSubject(X500Principal("CN=$ALIAS"))
.setCertificateSerialNumber(BigInteger.valueOf(1337))
.setKeyValidityStart(start.time)
.setKeyValidityEnd(end.time)
.build()
И это трассировка стека, которую я получаю:
Caused by: android.security.keystore.KeyNotYetValidException: Key not yet valid
at android.security.KeyStore.getInvalidKeyException(KeyStore.java:684)
at android.security.KeyStore.getInvalidKeyException(KeyStore.java:748)
at android.security.keystore.KeyStoreCryptoOperationUtils.getInvalidKeyExceptionForInit(KeyStoreCryptoOperationUtils.java:54)
at android.security.keystore.KeyStoreCryptoOperationUtils.getExceptionForCipherInit(KeyStoreCryptoOperationUtils.java:89)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:265)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:109)
at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2977)
at javax.crypto.Cipher.tryCombinations(Cipher.java:2884)
at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider(Cipher.java:2789)
at javax.crypto.Cipher.chooseProvider(Cipher.java:956)
at javax.crypto.Cipher.init(Cipher.java:1199)
at javax.crypto.Cipher.init(Cipher.java:1143)
at com.app.myapp.SecureStorage.booo006F006F006Foooo
Любая рекомендация здесь?
да @ramyabr Я проверил, но изменение startDate, похоже, не решает проблему
Какая дата / время на этом конкретном устройстве?
Эта ссылка может вам помочь github.com/iamMehedi/Secured-Preference-Store/issues/15