Начиная с 27 марта 2025 г. мы рекомендуем использовать android-latest-release вместо aosp-main для создания и участия в AOSP. Дополнительные сведения см. в разделе Изменения в AOSP .
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
На устройствах со сканером отпечатков пальцев пользователи могут зарегистрировать один или несколько отпечатков пальцев и использовать их для разблокировки устройства и выполнения других задач. Android использует язык определения интерфейса оборудования для отпечатков пальцев (HIDL) для подключения к библиотеке производителя и оборудованию для считывания отпечатков пальцев (например, сканеру отпечатков пальцев).
Для реализации Fingerprint HIDL необходимо реализовать IBiometricsFingerprint.hal в библиотеке, специфичной для поставщика.
Сопоставление отпечатков пальцев
Сканер отпечатков пальцев устройства обычно находится в режиме ожидания. Однако в ответ на запрос authenticate или enroll сканер отпечатков пальцев реагирует на касание (экран также может активироваться при касании сканера отпечатков пальцев пользователем). Общая схема сопоставления отпечатков пальцев включает следующие этапы:
Пользователь прикладывает палец к сканеру отпечатков пальцев.
Библиотека поставщика определяет, есть ли совпадение отпечатков пальцев в текущем наборе зарегистрированных шаблонов отпечатков пальцев.
Результаты сопоставления передаются в FingerprintService .
Этот процесс предполагает, что отпечаток пальца уже зарегистрирован на устройстве, то есть, библиотека поставщика зарегистрировала шаблон для отпечатка пальца. Подробнее см. в разделе «Аутентификация» .
Архитектура
Fingerprint HAL взаимодействует со следующими компонентами.
BiometricManager взаимодействует напрямую с приложением в процессе приложения. Каждое приложение имеет экземпляр IBiometricsFingerprint.hal
FingerprintService работает в системном процессе, который обеспечивает связь с HAL-сервером отпечатков пальцев.
Fingerprint HAL — это реализация интерфейса IBiometricsFingerprint HIDL на C/C++. Она содержит библиотеку, специфичную для конкретного производителя, которая взаимодействует с аппаратным обеспечением конкретного устройства.
Компоненты Keystore API и KeyMint (ранее Keymaster) обеспечивают аппаратную криптографию для безопасного хранения ключей в защищенной среде, такой как доверенная среда выполнения (TEE).
Рисунок 1. Высокоуровневый поток данных для аутентификации по отпечаткам пальцев
Реализация HAL, специфичная для поставщика, должна использовать протокол связи, требуемый TEE. Необработанные изображения и обработанные характеристики отпечатков пальцев не должны передаваться в ненадёжную память. Все подобные биометрические данные должны храниться на защищённом оборудовании, таком как TEE. Получение прав root не должно приводить к компрометации биометрических данных.
FingerprintService и fingerprintd выполняют вызовы через Fingerprint HAL к библиотеке поставщика для регистрации отпечатков пальцев и выполнения других операций.
Рисунок 2. Взаимодействие демона отпечатков пальцев с библиотекой отпечатков пальцев, специфичной для поставщика
Руководство по внедрению
Следующие рекомендации HAL по отпечаткам пальцев призваны гарантировать, что данные об отпечатках пальцев не будут утекать и будут удалены , когда пользователь отключается от устройства:
Необработанные данные отпечатков пальцев или их производные (например, шаблоны) ни при каких обстоятельствах не должны быть доступны извне драйвера датчика или TEE. Если оборудование поддерживает TEE, доступ к нему должен быть ограничен TEE и защищён политикой SELinux. Канал последовательного периферийного интерфейса (SPI) должен быть доступен только TEE, а для всех файлов устройства должна быть предусмотрена явная политика SELinux.
Получение, регистрация и распознавание отпечатков пальцев должны происходить внутри TEE.
Только зашифрованная форма данных отпечатков пальцев может храниться в файловой системе, даже если сама файловая система зашифрована.
Шаблоны отпечатков пальцев должны быть подписаны закрытым ключом, привязанным к устройству. Для AES (Advanced Encryption Standard) шаблон должен быть подписан как минимум абсолютным путём в файловой системе, группой и идентификатором пальца, чтобы файлы шаблонов были неработоспособны на другом устройстве или для кого-либо, кроме пользователя, зарегистрировавшего их на том же устройстве. Например, копирование данных отпечатков пальцев другого пользователя на то же устройство или с другого устройства не должно работать.
Реализации должны либо использовать путь в файловой системе, предоставленный функцией setActiveGroup() , либо предоставлять способ удаления всех данных шаблона пользователя при удалении пользователя. Настоятельно рекомендуется хранить файлы шаблонов отпечатков пальцев в зашифрованном виде по указанному пути. Если это невозможно из-за требований к хранилищу TEE, разработчик должен добавить хуки, обеспечивающие удаление данных при удалении пользователя.
Переключает конечный автомат HAL на запуск сбора и сохранения шаблона отпечатка пальца. После завершения регистрации или по истечении тайм-аута конечный автомат HAL возвращается в состояние ожидания.
preEnroll()
Генерирует уникальный токен, указывающий на начало регистрации отпечатка пальца. Предоставляет токен функции enroll , чтобы убедиться в наличии предварительной аутентификации, например, по паролю. Для предотвращения подделки токен запаковывается после подтверждения учётных данных устройства. Необходимо проверить токен во время регистрации, чтобы убедиться в его действительности.
getAuthenticatorId()
Возвращает токен, связанный с текущим набором отпечатков пальцев.
cancel()
Отменяет ожидающие операции регистрации или аутентификации. Конечный автомат HAL возвращается в состояние ожидания.
enumerate()
Синхронный вызов для перечисления всех известных шаблонов отпечатков пальцев.
remove()
Удаляет шаблон отпечатка пальца.
setActiveGroup()
Ограничивает операцию HAL набором отпечатков пальцев, принадлежащих указанной группе, идентифицируемой идентификатором группы (GID).
authenticate()
Аутентифицирует операцию, связанную с отпечатком пальца (идентифицируется идентификатором операции).
setNotify()
Регистрирует пользовательскую функцию, получающую уведомления от HAL. Если конечный автомат HAL находится в состоянии занятости, функция блокируется до тех пор, пока HAL не выйдет из этого состояния.
postEnroll()
Завершает операцию регистрации и отменяет сгенерированный вызов preEnroll() . Этот вызов должен быть выполнен в конце сеанса многопальцевой регистрации, чтобы указать, что добавление дополнительных пальцев невозможно.
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-07-29 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-07-29 UTC."],[],[],null,["# Fingerprint HIDL\n\nOn devices with a fingerprint sensor, users can enroll one or more\nfingerprints and use those fingerprints to unlock the device and perform other\ntasks. Android uses the Fingerprint Hardware Interface Definition Language\n(HIDL) to connect to a vendor-specific library and fingerprint hardware (for\nexample, a fingerprint sensor).\n\nTo implement the Fingerprint HIDL, you must implement [`IBiometricsFingerprint.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/biometrics/fingerprint/2.1/IBiometricsFingerprint.hal)\nin a vendor-specific library.\n\nFingerprint matching\n--------------------\n\nThe fingerprint sensor of a device is generally idle. However, in response to\na call to `authenticate` or `enroll`, the\nfingerprint sensor listens for a touch (the screen might also wake when a user\ntouches the fingerprint sensor). The high-level flow of fingerprint matching\nincludes the following steps:\n\n1. User places a finger on the fingerprint sensor.\n2. The vendor-specific library determines if there is a fingerprint match in the current set of enrolled fingerprint templates.\n3. Matching results are passed to `FingerprintService`.\n\nThis flow assumes that a fingerprint has already been enrolled on the device, that is,\nthe vendor-specific library has enrolled a template for the fingerprint. For more\ndetails, see [Authentication](/docs/security/features/authentication).\n| **Note:** The more fingerprint templates stored on a device, the more time required for fingerprint matching.\n\nArchitecture\n------------\n\nThe Fingerprint HAL interacts with the following components.\n\n- `BiometricManager` interacts directly with an app in an app process. Each app has an instance of `IBiometricsFingerprint.hal`\n- `FingerprintService` operates in the system process, which handles communication with fingerprint HAL.\n- **Fingerprint HAL** is a C/C++ implementation of the IBiometricsFingerprint HIDL interface. This contains the vendor-specific library that communicates with the device-specific hardware.\n- **Keystore API and KeyMint (previously Keymaster)** components provide hardware-backed cryptography for secure key storage in a secure environment, such as the Trusted Execution Environment (TEE).\n\n**Figure 1.** High-level data flow for fingerprint authentication\n\nA vendor-specific HAL implementation must use the communication protocol\nrequired by a TEE. Raw images and processed fingerprint features must not\nbe passed in untrusted memory. All such biometric data needs to be stored\nin the secure hardware such as the TEE. Rooting **must not**\nbe able to compromise biometric data.\n\n`FingerprintService` and `fingerprintd` make calls through the Fingerprint HAL to\nthe vendor-specific library to enroll fingerprints and perform other\noperations.\n**Figure 2.** Interaction of the fingerprint daemon with the fingerprint vendor-specific library\n\nImplementation guidelines\n-------------------------\n\nThe following Fingerprint HAL guidelines are designed to ensure that\nfingerprint data is **not leaked** and is **removed**\nwhen a user is removed from a device:\n\n- Raw fingerprint data or derivatives (for example, templates) must never be accessible from outside the sensor driver or TEE. If the hardware supports a TEE, hardware access must be limited to the TEE and protected by an SELinux policy. The Serial Peripheral Interface (SPI) channel must be accessible only to the TEE and there must be an explicit SELinux policy on all device files.\n- Fingerprint acquisition, enrollment, and recognition must occur inside the TEE.\n- Only the encrypted form of the fingerprint data can be stored on the file system, even if the file system itself is encrypted.\n- Fingerprint templates must be signed with a private, device-specific key. For Advanced Encryption Standard (AES), at a minimum a template must be signed with the absolute file-system path, group, and finger ID such that template files are inoperable on another device or for anyone other than the user that enrolled them on the same device. For example, copying fingerprint data from a different user on the same device or from another device must not work.\n- Implementations must either use the file-system path provided by the `setActiveGroup()` function or provide a way to erase all user template data when the user is removed. It's strongly recommended that fingerprint template files be stored as encrypted and stored in the path provided. If this is infeasible due to TEE storage requirements, the implementer must add hooks to ensure removal of the data when the user is removed.\n\nFingerprint methods\n-------------------\n\nThe Fingerprint HIDL interface contains the following major methods in\n[`IBiometricsFingerprint.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/biometrics/fingerprint/2.1/IBiometricsFingerprint.hal).\n\n| Method | Description |\n|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `enroll()` | Switches the HAL state machine to start the collection and storage of a fingerprint template. When enrollment is complete, or after a timeout, the HAL state machine returns to the idle state. |\n| `preEnroll()` | Generates a unique token to indicate the start of a fingerprint enrollment. Provides a token to the `enroll` function to ensure there was prior authentication, for example, using a password. To prevent tampering, the token is wrapped after the device credential is confirmed. The token must be checked during enrollment to verify that it's still valid. |\n| `getAuthenticatorId()` | Returns a token associated with the current fingerprint set. |\n| `cancel()` | Cancels pending enroll or authenticate operations. The HAL state machine is returned to the idle state. |\n| `enumerate()` | Synchronous call for enumerating all known fingerprint templates. |\n| `remove()` | Deletes a fingerprint template. |\n| `setActiveGroup()` | Restricts a HAL operation to a set of fingerprints that belong to a specified group, identified by a group identifier (GID). |\n| `authenticate()` | Authenticates a fingerprint-related operation (identified by an operation ID). |\n| `setNotify()` | Registers a user function that receives notifications from the HAL. If the HAL state machine is in a busy state, the function is blocked until the HAL leaves the busy state. |\n| `postEnroll()` | Finishes the enroll operation and invalidates the `preEnroll()` generated challenge. This must be called at the end of a multifinger enrollment session to indicate that no more fingers may be added. |\n\nFor more details on these, refer to the comments in [`IBiometricsFingerprint.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/biometrics/fingerprint/2.1/IBiometricsFingerprint.hal)."]]