Мое приложение использует 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.