Убедитесь, что блокировка экрана Android постоянно включена - PullRequest
0 голосов
/ 24 сентября 2019

Для приложения Android, управляющего криптографическими ключами, я хочу убедиться, что на устройстве была установлена ​​блокировка экрана непрерывно с момента первого запуска приложения.

В частности, приложение позволит использовать ключи только в том случае, если на устройстве настроен безопасный внешний вид (что можно проверить с помощью KeyguardManager.isDeviceSecure () ).Но если пользователь отключает блокировку экрана, кто-то другой может ее снять, снова включить блокировку экрана и продолжать использовать приложение, выдавая себя за первоначального пользователя.Я хочу предотвратить это, но все же не требую аутентификации пользователя для каждого использования ключей (, что исключает с использованием принудительного применения аутентификации пользователя Android KeyStore )

В настоящее время я вижудва способа удалить данные, если блокировка экрана отключена, оба из которых имеют свои недостатки:

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

Есть ли лучший способ действовать при деактивации блокировки экрана устройства?

...