Меня зовут Светлана Палицына, я старший разработчик в мобильной команде «Лаборатории Касперского». Мы занимаемся разработкой EMM-решения для управления корпоративными телефонами и защиты хранящейся на них корпоративной информации. Защита мобильного устройства начинается с экрана блокировки, и в этой статье расскажу про разные способы оформления этого экрана на Android, предоставляемые классом DevicePolicyManager.

Экран блокировки — своего рода визитная карточка всего мобильного интерфейса. Каждый виджет и UI-элемент тут требует особого внимания, чтобы не перегружать пользователя информацией и обеспечивать защиту корпоративных данных (например, скрывать показ содержимого уведомлений от посторонних, которым аппарат случайно может попасться на глаза). Но главное — важно, чтобы разблокировать его можно было исключительно одобренным корпоративными политиками методом. Многие компании, к примеру, запрещают биометрические методы разблокировки как не самые безопасные. В идеале для бизнеса (и самого пользователя) такой экран должен быть лаконичным, понятным и безопасным. И лучший способ достичь этого идеала — подробная кастомизация!
Для начала разберемся, какие варианты разблокировки вообще доступны в Android. Если вы знакомы с этой темой и знаете нюансы работы trust agents — можете смело переходить к части про кастомизацию :)
Варианты разблокировки экрана
Вспомним, какие вообще варианты разблокировки экрана предлагает нам система Android, в порядке от самого небезопасного к самым надежным:
включение экрана (он, по сути, не блокируется, все функции доступны сразу после того, как экран зажегся);
свайп экрана (также не совсем метод разблокировки, но при включении хотя бы не видно интерфейса системы);
графический паттерн;
PIN-код;
пароль.
Также для разблокировки могут использоваться методы биометрической аутентификации:
распознавание лица;
распознавание отпечатка пальца;
распознавание радужки глаза.
О настройке методов блокировки, кстати, я уже рассказывала в этой статье — рекомендую к прочтению :)
Методы биометрической аутентификации
В целом биометрические методы принято считать более-менее надежными вариантами аутентификации. Но производители аппаратов часто сопровождают их включение оговорками. Например, при настройке аутентификации по лицу выскакивает огромный алерт: распознавание сильно зависит от освещения; использование макияжа или попытка разблокировки человеком с похожим лицом могут дать ложный результат. Отпечатки пальцев можно украсть, а голос сымитировать. На это накладывается большая проблема всей биометрической аутентификации — ее нельзя заменить в случае утечки.
Биометрическая аутентификация может вообще не сработать без видимых причин. Или того хуже, сработать на неправильных входных данных, открыв доступ другому человеку. Поэтому производители страхуются и используют биометрию скорее как вспомогательный способ разблокировки. Его зачастую можно задать только в дополнение к считающимся более надежными способам, основанным на запоминании секрета, — таким как PIN, пароль, графический паттерн. И если пользователь совершает много неудачных попыток аутентификации при помощи биометрии, система предложит ввести заданный пароль. Тем не менее как вспомогательный метод аутентификация по лицу или отпечатку пальца прочно укрепилась в качестве одной из самых популярных опций, поддерживаемых современными устройствами.
Trust Agents
Есть дополнительный способ, который можно использовать для разблокировки экрана, —так называемые доверенные агенты (trust agents). Эту технологию еще называют «умной блокировкой».
Trust agents — фича, позволяющая автоматически разблокировать устройство при выполнении некоторых условий. При этом вводить PIN, пароль или паттерн не требуется. Например, можно настроить автоматическую разблокировку телефона, если девайс:
держит активное подключение к конкретному заранее установленному Bluetooth-устройству;
находится в определенной локации;
подключен к заранее сохраненной сети Wi-Fi.
Для работы фича требует доступа к геолокации, спискам Wi-Fi-сетей и подключенных устройств. Подход позиционируется так: если в определенных условиях приватности владельца ничего не угрожает, то можно ослабить режим безопасности и сделать использование смартфона более комфортным. С доверенными агентами сокращается число ситуаций, когда требуется ввести PIN, пароль или паттерн. При этом пользователь сам может задать условия, при которых дополнительная аутентификация не требуется, но берет на себя ответственность за то, чтобы эти условия гарантировали приемлемый для него уровень безопасности. Установить условия обычно можно в разделе настроек устройства (конкретный путь зависит от производителя).
Например, пользователь может установить, что аутентификация не требуется, когда смартфон подключен к домашней Wi-Fi-сети или сопряжен с гарнитурой своего автомобиля. Оба варианта подразумевают, что человек находится в безопасной для себя локации, где доступ посторонних к аппарату будет исключен. Однако крайне важно взвешенно оценивать риски отключения блокировки смартфона, даже по доверительным условиям.
Кастомизация экрана разблокировки
Переходим к кастомизации и конкретным методам настройки экрана разблокировки. Когда мы тапаем на экран или нажимаем кнопку разблокировки, на экране появляется ряд элементов (конечно, если не установлен тип блокировки None и экран блокировки отсутствует). Чаще всего это статус-бар, часы, уведомления, которые можно развернуть, кнопки быстрого доступа к приложениям, например к телефону и камере, иногда — виджет для разблокировки через биометрию.

В некоторых случаях, например, когда мы работаем с системой управления корпоративными мобильными устройствами, необходимо изменить доступные пользователю опции. ОС Android предоставляет несколько возможностей сделать это. Сразу оговорюсь: как и в большинстве случаев, когда речь идет об опциях, затрагивающих персонализацию девайса, API имеет ряд ограничений.
Как и в случае с установкой параметров экранного пароля из прошлой статьи, управлять экраном разблокировки будем через методы класса DevicePolicyManager. Все методы, которые мы рассмотрим, требуют в качестве параметра объект класса ComponentName. Это идентификатор компонента (Activity, Service, BroadcastReceiver или ContentProvider), содержащий информацию о пэкадже приложения и имени класса внутри этого пэкаджа.
Важно помнить: если приложение не имеет прав администратора устройства или (для отдельных методов) прав Device Owner либо Profile Owner или если не запрошены соответствующие разрешения, то при вызове методов этого класса будет выброшено исключение SecurityException.
Метод DevicePolicyManager.setKeyguardDisabled() доступен с версии Android 6.0 (Marshmallow) API level 23. Он требует на вход boolean-параметр, указывающий, следует ли показывать или убрать экран, который появляется при нажатии на кнопку разблокировки или при тапе по заблокированному экрану. Для пользователя это выглядит так, будто он поставил тип блокировки экрана None, отсутствующий.
Однако если система уже блокируется паролем, PIN или паттерном, эффекта от этого метода не будет никакого. И если с его помощью убрать экран разблокировки, а потом задать пароль, PIN или паттерн, то экран разблокировки автоматически вернется. Таким образом, данный API эффективен, только если установить разблокировку по свайпу, а потом вызвать этот метод. Тогда разблокировка будет проходить без свайпа.
Если хочется кастомизировать экран разблокировки для пользователя, Google дает возможность убрать (и при необходимости вернуть) разные виджеты. Для этого есть метод DevicePolicyManager.setKeyguardDisabledFeatures() — он в качестве параметра получает флаги (переменные, которые принимают одно из двух значений вкл/выкл), которые можно комбинировать через логическое ИЛИ. Флаги добавлялись в разных версиях ОС Android, поэтому, если вам нужно ввести тот или иной флаг, лучше посмотреть минимальную версию совместимой системы в документации и не забыть сделать проверку. Сам метод вышел в версии Android 4.2 (JELLY_BEAN_MR1) API level 17.
Рассмотрим флаги подробнее:
KEYGUARD_DISABLE_FEATURES_NONE
Дефолтное значение, все виджеты включены. Используется, чтобы разом восстановить все виджеты после накладывания ограничений из других флагов.
В этом случае дефолтный экран блокировки остается без изменений.
Отключает разом сразу все опции/виджеты. Это совокупность всех следующих флагов.
KEYGUARD_DISABLE_SECURE_CAMERA
Убирает виджет камеры с экрана блокировки.
Если виджет разрешен (на скриншоте выше этот виджет можно найти в нижнем правом углу экрана), то он присутствует на экране. Если запрещен, то скрыт.

KEYGUARD_DISABLE_SECURE_NOTIFICATIONS
Убирает значки уведомлений с экрана блокировки. Обычно они расположены под датой.

Отключает возможность использования trust agents для разблокировки. Этот флаг отключает сразу все доверенные способы разблокировки: с помощью доверенных устройств, локаций или Wi-Fi-сетей. Если нужно разрешить отдельные виды доверенных агентов, то можно посмотреть в сторону использования метода DevicePolicyManager.setTrustAgentConfiguration().
На скриншотах ниже видно, что при выключенном флаге есть возможность настроить trust agents и разблокировать экран просто по свайпу, когда телефон подключен к заданному BT-устройству. На окне блокировки в самом низу при этом есть надпись, что устройство разблокировано через SmartLock (или аналогичную технологию), а сверху показан открытый замочек. При этом на устройстве установлен PIN.
При установлении запрета через флаг такая опция пропадает. На экране настроек раздел Smart Lock становится неактивным.

KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS
Модифицирует уведомления и в большинстве случаев отображает на экране блокировки только их шапки. Уведомления от системных приложений продолжают показываться полностью.
На первом скриншоте после установки ограничения часть информации скрыта для не системных уведомлений. На втором скриншоте, без ограничений, уведомления появляются полностью.

Запрещает аутентификацию по отпечатку пальцев. Если на экране блокировки предусмотрен виджет, к которому нужно прикладывать палец для скана, он пропадет.
На скриншотах экрана виджет с отпечатком не отображается, поэтому пришлось прибегнуть к не очень красивому способу и сделать фото экрана.
Соответственно, если установить флаг, виджет отпечатка пропадет.

Запрещает разблокировку при помощи аутентификации по лицу.
Запрещает разблокировку при помощи аутентификации по сетчатке глаз.
Запрещает разблокировку при помощи любых видов биометрической аутентификации. Как и для предыдущих трех флагов (и флага trust agents), при отключении этих параметров соответствующий способ разблокировки становится недоступен в настройках.
На скриншотах эффект каждого флага показан отдельно. Но напомню еще раз: большинство из них можно комбинировать через ИЛИ и применять сразу несколько.
Правильно используя этот API, можно кастомизировать экран блокировки и создать оптимальный баланс между безопасностью данных на устройстве и удобством его использования.
А был ли у вас опыт подобной кастомизации с разными методами разблокировки экрана? Если да, то ждем ваши истории в комментариях :)
lettesrnumbers
а почему медведь зелёный
SvetlanaPalitsyna Автор
Потому что это наш "корпоративный" медведь, Мидори Кума :)