Для приложения Android, управляющего криптографическими ключами, я хочу убедиться, что на устройстве была установлена блокировка экрана непрерывно с момента первого запуска приложения.
В частности, приложение позволит использовать ключи только в том случае, если на устройстве настроен безопасный внешний вид (что можно проверить с помощью KeyguardManager.isDeviceSecure () ).Но если пользователь отключает блокировку экрана, кто-то другой может ее снять, снова включить блокировку экрана и продолжать использовать приложение, выдавая себя за первоначального пользователя.Я хочу предотвратить это, но все же не требую аутентификации пользователя для каждого использования ключей (, что исключает с использованием принудительного применения аутентификации пользователя Android KeyStore )
В настоящее время я вижудва способа удалить данные, если блокировка экрана отключена, оба из которых имеют свои недостатки:
- Установить DeviceAdminReceiver и прослушивать изменения блокировки экрана с помощью onPasswordChanged , аннулирование клавиш, если блокировка экрана отключена.Это проблематично, так как для этого требуется
USES_POLICY_LIMIT_PASSWORD
, который больше не будет поддерживаться на уровне API 29. - Создайте «канареечный» ключ KeyStore с принудительной аутентификацией пользователя и проверьте, выбрасывает ли он KeyPermanentlyInvalidatedException при использовании.Это решение кажется очень хакерским, зависит от деталей реализации (например, KeyPermanentlyInvalidatedException, генерируемых до UserNotAuthenticatedException) и не основано на событиях, как в решении 1, что означает, что ключи не будут удалены сразу после снятия блокировки экрана.
Есть ли лучший способ действовать при деактивации блокировки экрана устройства?