Биометрия предлагает более удобный, но потенциально менее безопасный способ подтверждения вашей личности с помощью устройства. В многоуровневой модели аутентификации первичная аутентификация (т.е. методы, основанные на знании, такие как PIN-код, графический ключ и пароль) обеспечивает наивысший уровень безопасности. Биометрия находится на втором уровне аутентификации, предлагая баланс между удобством и безопасностью. В CDD Android определены три класса биометрической стойкости: класс 3 (ранее Strong), класс 2 (ранее Weak) и класс 1 (ранее Convenience). Каждый класс имеет набор предварительных условий, привилегий и ограничений — подробнее см. CDD выше. Все три класса могут интегрироваться с экраном блокировки, но только сильные и слабые аутентификаторы могут интегрироваться с API android.hardware.biometrics. В этой таблице описаны все аутентификаторы и поддерживаемые ими функции.
| Аутентификатор | Экран блокировки | Интеграция BiometricPrompt | Хранилище ключей (ключ с ограничением по времени) | Хранилище ключей (ключ на основе операции) |
|---|---|---|---|---|
| БИОМЕТРИЧЕСКИЙ_СИЛЬНЫЙ (Класс 3) | Да | Да | Да | Да |
| БИОМЕТРИЧЕСКИЙ_СЛАБЫЙ (Класс 2) | Да | Да | Нет | Нет |
| БИОМЕТРИЧЕСКОЕ_УДОБСТВО (Класс 1) | Да | Нет | Нет | Нет |
| УЧЕТНЫЕ ДАННЫЕ_УСТРОЙСТВА | Да | Да | Да | Да |
Платформа Android поддерживает биометрическую аутентификацию по лицу и отпечаткам пальцев. Android можно настроить для поддержки других биометрических модальностей (например, радужной оболочки глаза). Однако биометрическая интеграция будет зависеть от биометрической безопасности, а не от модальности. Подробнее о характеристиках биометрической безопасности см. в разделе «Измерение безопасности биометрической разблокировки» .
Источник
Андроид 12
- Представляет API BiometricManager.Strings , предоставляющий локализованные строки для приложений, использующих BiometricPrompt для аутентификации. Эти строки учитывают особенности устройств и предоставляют более конкретную информацию о том, какой тип(ы) аутентификации можно использовать.
- Включает поддержку сканера отпечатков пальцев под дисплеем (UDFPS).
Андроид 11
- Представлен интерфейс BiometricManager.Authenticators , который предоставляет константы, которые разработчики могут использовать для указания типов аутентификации, принимаемых их приложениями.
- Добавляетдействие намерения
ACTION_BIOMETRIC_ENROLL, которое разработчики могут использовать, чтобы побудить пользователя зарегистрировать метод аутентификации, соответствующий требованиям их приложений. - Добавляет метод
AuthenticationResult #getAuthenticationType (), который разработчики могут использовать для проверки того, аутентифицировался ли пользователь с помощью биометрических данных или данных устройства. - Обеспечивает дополнительную поддержку ключей аутентификации на каждый сеанс использования в классе BiometricPrompt.
Андроид 10
- Представлен класс
BiometricManager, который разработчики могут использовать для запроса доступности биометрической аутентификации. - Включает интеграцию аутентификации по отпечаткам пальцев и лицу для
BiometricPrompt
Андроид 9
- Включает интеграцию отпечатков пальцев только для
BiometricPrompt. - Класс FingerprintManager объявлен устаревшим. Если ваши пакетные и системные приложения используют этот класс, обновите их, чтобы вместо него использовались
BiometricPromptиBiometricManager. - Обновлены тесты верификатора
FingerprintManagerCTS для проверкиBiometricPromptс использованиемBiometricPromptBoundKeysTest.
Выполнение
Чтобы обеспечить пользователям и разработчикам бесперебойную работу с биометрическими данными, интегрируйте свой биометрический стек с API-интерфейсами BiometricPrompt , BiometricManager и ACTION_BIOMETRIC_ENROLL . Устройства с биометрическими датчиками должны соответствовать этим требованиям к надежности . Кроме того, все реализации должны пройти проверку модуля CTS CtsBiometricsTestCases.
Чтобы интегрировать ваш биометрический стек с API ACTION_BIOMETRIC_ENROLL:
- Измените действие BiometricEnrollActivity , чтобы отобразить процесс регистрации. Обратите внимание, что ваши биометрические данные могут быть предоставлены только в том случае, если они соответствуют требуемой надежности. Если ваше устройство поддерживает более одного типа данных, это действие должно отображать список, из которого пользователь может выбрать нужный.

Руководящие принципы внедрения HAL
Следуйте этим рекомендациям HAL по биометрическим данным, чтобы гарантировать отсутствие утечки биометрических данных и их удаление при удалении пользователя с устройства:
- Убедитесь, что необработанные биометрические данные или их производные (например, шаблоны) никогда не будут доступны извне безопасной изолированной среды (например, TEE или Secure Element). Все хранимые данные должны быть зашифрованы ключом , специфичным для устройства , известным только доверенной среде выполнения (TEE). Если оборудование поддерживает эту функцию, ограничьте доступ к безопасной изолированной среде с помощью политики SELinux. Сделайте канал связи (например, SPI, I2C) доступным только для безопасной изолированной среды с помощью явной политики SELinux для всех файлов устройства.
- Сбор, регистрация и распознавание биометрических данных должны осуществляться в безопасной изолированной среде для предотвращения утечек данных и других атак. Это требование применимо только к биометрическим данным Класса 3 (ранее Strong) и Класса 2 (ранее Weak) .
- Для защиты от атак с повторным воспроизведением подписывайте биометрические шаблоны закрытым ключом, привязанным к конкретному устройству. Для AES (Advanced Encryption Standard) подписывайте шаблон как минимум абсолютным путём в файловой системе, группой и биометрическим идентификатором, чтобы файлы шаблонов были неработоспособны на другом устройстве или для кого-либо, кроме пользователя, зарегистрировавшего их на том же устройстве. Например, предотвратите копирование биометрических данных другого пользователя на то же устройство или с другого устройства.
- Если вам необходимо хранить данные вне TEE, используйте путь в файловой системе, предоставляемый
setActiveUser() HIDL method, или предоставьте другой способ удаления всех данных шаблона пользователя при его удалении. Это необходимо для предотвращения утечки пользовательских данных. Устройства, не использующие этот путь, должны очищаться после удаления пользователя. CDD требует, чтобы биометрические данные и производные файлы хранились в зашифрованном виде, особенно если они не находятся в TEE. Если это невозможно из-за требований к хранению в безопасной изолированной среде, добавьте хуки для обеспечения удаления данных при удалении пользователя или очистке устройства. См. LockSettingsService.removeBiometricsForUser().
Настройка
Если ваше устройство поддерживает несколько биометрических данных, пользователь должен иметь возможность указать значение по умолчанию в настройках. Реализация BiometricPrompt должна предпочесть биометрическую информацию класса 3 (ранее Strong) в качестве значения по умолчанию, если только пользователь явно не переопределит её. В этом случае необходимо вывести предупреждающее сообщение с пояснением рисков, связанных с биометрической информацией (например, «Ваша фотография может разблокировать ваше устройство »).
Строки аутентификации, специфичные для устройства
Начиная с Android 12, строки контекстной аутентификации доступны разработчикам через API BiometricManager.Strings . Вы можете настроить значения ресурсов, возвращаемые этим API, для реализации строк, специфичных для устройства. В этом случае убедитесь, что все новые строки переведены для всех поддерживаемых устройством локалей. Кроме того, убедитесь, что сохранены следующие свойства:
Метод | Цель строки | Тип(ы) аутентификации, которые следует включить | Если возможны биометрические данные и блокировка экрана |
|---|---|---|---|
получитьButtonLabel() | Метка для кнопки, которая активирует BiometricPrompt | Только зарегистрированные типы (если возможно), которые удовлетворяют требованиям аутентификатора | Использовать строку , содержащую только биометрические данные (например, «Использовать отпечаток пальца»). |
getPromptMessage() | Сообщение, отображаемое на BiometricPrompt во время аутентификации | Только зарегистрированные типы (если возможно), которые удовлетворяют требованиям аутентификатора | Используйте комбинированную строку биометрических данных и блокировки экрана (например, «Используйте отпечаток пальца или PIN-код для продолжения»). |
получитьSettingName() | Имя параметра, включающего BiometricPrompt для аутентификации | Все типы, поддерживаемые устройством (даже если оно не зарегистрировано), которые удовлетворяют требованиям аутентификатора | Использовать комбинированную строку биометрических данных и блокировки экрана (например, «Использовать отпечаток пальца или блокировку экрана»). |
Например, рассмотрим устройство с датчиком лица класса 2 с зарегистрированным лицом , зарегистрированным PIN-кодом и датчиком отпечатков пальцев класса 3 без зарегистрированных отпечатков пальцев . В следующей таблице приведены примеры строк для каждой комбинации разрешенных аутентификаторов и вызванного метода BiometricManager.Strings :
Разрешенные аутентификаторы | получитьButtonLabel() | getPromptMessage() | получитьSettingName() |
|---|---|---|---|
Биометрический класс 3 ( BIOMETRIC_STRONG ) | «Использовать отпечаток пальца» (Требованиям аутентификатора удовлетворяет только отпечаток пальца) | «Используйте отпечаток пальца, чтобы продолжить» (Требованиям аутентификатора удовлетворяет только отпечаток пальца) | «Использовать отпечаток пальца» (Требованиям аутентификатора удовлетворяет только отпечаток пальца) |
Биометрический класс 2 ( BIOMETRIC_WEAK ) | «Использовать лицо» (Лицо и отпечатки пальцев соответствуют требованиям; регистрируется только лицо) | «Используйте свое лицо, чтобы продолжить» (Лицо и отпечатки пальцев соответствуют требованиям; регистрируется только лицо) | «Использовать лицо или отпечаток пальца» (Лицо и отпечатки пальцев удовлетворяют требованиям; устройство поддерживает оба варианта) |
Блокировка экрана ( DEVICE_CREDENTIAL ) | «Использовать PIN-код» (Любая блокировка экрана соответствует требованиям; PIN-код зарегистрирован) | «Введите свой PIN-код, чтобы продолжить» (Любая блокировка экрана соответствует требованиям; PIN-код зарегистрирован) | «Использовать блокировку экрана» (Любая блокировка экрана удовлетворяет требованиям) |
Биометрическая блокировка экрана или ИЛИ класса 3 | «Использовать PIN-код» (Отпечаток пальца и любая блокировка экрана удовлетворяют требованиям; зарегистрирован только PIN-код) | «Введите свой PIN-код, чтобы продолжить» (Отпечаток пальца и любая блокировка экрана удовлетворяют требованиям; зарегистрирован только PIN-код) | «Использовать отпечаток пальца или блокировку экрана» (Отпечаток пальца и любая блокировка экрана удовлетворяют требованиям) |
Биометрическая блокировка экрана ИЛИ класса 2 | «Использовать лицо» (Лицо, отпечаток пальца и любая блокировка экрана удовлетворяют требованиям; лицо зарегистрировано и заменяет PIN-код) | «Используйте свое лицо или PIN-код для продолжения» (Лицо, отпечаток пальца и любая блокировка экрана удовлетворяют требованиям; лицо и PIN-код зарегистрированы) | «Используйте биометрию или блокировку экрана» (Лицо, отпечаток пальца и любая блокировка экрана удовлетворяют требованиям) |
Проверка
Ваша биометрическая реализация должна пройти следующие тесты:
- CTS BiometricManager
- CTS BiometricPrompt (исправность, углубленное тестирование зависит от верификатора)
- Раздел биометрического теста CtsVerifier: необходимо пройти индивидуально для каждой модальности, поддерживаемой устройством.
Кроме того, если ваше устройство поддерживает биометрические данные с AOSP HIDL ( fingerprint@2.1 , fingerprint@2.2 , face1.0 ), оно должно пройти соответствующий тест VTS ( fingerprint , face ).