Мое приложение использует API отпечатков пальцев Android 6.0 для защиты ключа AES в Android KeyStore. Сохраненная клавиша может использоваться только тогда, когда пользователь аутентифицируется датчиком отпечатков пальцев, потому что KeyGenParameterSpec
инициализируется setUserAuthenticationRequired(true)
.
Когда пользователь прикасается к датчику, я получаю инициализированный шифр от обратного вызова onAuthenticationSucceeded(Cipher)
, и я использую его для дешифрования.
Это отлично работает, за исключением телефонов Samsung с Android 6. Когда я пытаюсь использовать возвращенный Cipher, телефоны Samsung иногда бросают android.security.KeyStoreException: Key user not authenticated
. Поэтому, несмотря на то, что Cipher возвращается onAuthenticationSucceeded(Cipher)
, Android KeyStore полагает, что пользователь не был аутентифицирован датчиком отпечатков пальцев.
Кажется, что авария происходит скорее, когда приложение не использовалось в течение более длительного времени. Когда приложение прошито, все работает нормально.
Как эта ошибка происходит случайно и только на телефонах Samsung... Кажется, это связано с некоторыми внутренними проблемами времени внутри реализации Samsung Android KeyStore Android и API FingerPrint.
Изменить. Эта проблема также наблюдалась в телефонах OnePlus и Acer.