На устройствах со сканером отпечатков пальцев пользователи могут зарегистрировать один или несколько отпечатков пальцев и использовать эти отпечатки пальцев для разблокировки устройства и выполнения других задач. Android использует язык определения аппаратного интерфейса отпечатков пальцев (HIDL) для подключения к библиотеке конкретного поставщика и оборудованию для снятия отпечатков пальцев (например, датчику отпечатков пальцев).
Чтобы реализовать HIDL отпечатка пальца, необходимо реализовать IBiometricsFingerprint.hal
в библиотеке конкретного поставщика.
Сопоставление отпечатков пальцев
Сканер отпечатков пальцев устройства обычно простаивает. Однако в ответ на вызов для authenticate
или enroll
датчик отпечатков пальцев ожидает прикосновения (экран также может проснуться, когда пользователь касается датчика отпечатков пальцев). Высокоуровневый процесс сопоставления отпечатков пальцев включает следующие этапы:
- Пользователь прикладывает палец к датчику отпечатков пальцев.
- Библиотека конкретного поставщика определяет, есть ли совпадение отпечатков пальцев в текущем наборе зарегистрированных шаблонов отпечатков пальцев.
- Результаты сопоставления передаются в
FingerprintService
.
В этом потоке предполагается, что отпечаток пальца уже зарегистрирован на устройстве, то есть библиотека конкретного поставщика зарегистрировала шаблон для отпечатка пальца. Дополнительные сведения см. в разделе Аутентификация .
Архитектура
HAL отпечатков пальцев взаимодействует со следующими компонентами.
-
BiometricManager
напрямую взаимодействует с приложением в процессе приложения. Каждое приложение имеет экземплярIBiometricsFingerprint.hal
-
FingerprintService
работает в системном процессе, который обрабатывает связь с HAL отпечатков пальцев. - Fingerprint HAL — это реализация HIDL-интерфейса IBiometricsFingerprint на языке C/C++. Он содержит библиотеку конкретного поставщика, которая взаимодействует с аппаратным обеспечением конкретного устройства.
- Компоненты Keystore API и Keymaster обеспечивают аппаратную криптографию для безопасного хранения ключей в безопасной среде, такой как доверенная среда выполнения (TEE).
Реализация HAL, зависящая от поставщика, должна использовать протокол связи, требуемый TEE. Необработанные изображения и обработанные элементы отпечатков пальцев не должны передаваться в ненадежную память. Все такие биометрические данные необходимо хранить на защищенном оборудовании, таком как TEE. Рутинг не должен подвергать риску биометрические данные.
FingerprintService
и fingerprintd
осуществляют вызовы через HAL Fingerprint к библиотеке конкретного поставщика для регистрации отпечатков пальцев и выполнения других операций.
Рекомендации по внедрению
Следующие рекомендации HAL по отпечаткам пальцев разработаны для обеспечения того, чтобы данные отпечатков пальцев не утекли и не были удалены при удалении пользователя с устройства:
- Необработанные данные отпечатков пальцев или их производные (например, шаблоны) никогда не должны быть доступны снаружи драйвера датчика или TEE. Если оборудование поддерживает TEE, доступ к оборудованию должен быть ограничен этим TEE и защищен политикой SELinux. Канал последовательного периферийного интерфейса (SPI) должен быть доступен только для TEE, и для всех файлов устройства должна быть явная политика SELinux.
- Получение, регистрация и распознавание отпечатков пальцев должны происходить внутри TEE.
- В файловой системе можно хранить только зашифрованную форму данных отпечатков пальцев, даже если сама файловая система зашифрована.
- Шаблоны отпечатков пальцев должны быть подписаны закрытым ключом, специфичным для конкретного устройства. Для расширенного стандарта шифрования (AES) как минимум шаблон должен быть подписан с указанием абсолютного пути к файловой системе, группы и идентификатора пальца, чтобы файлы шаблонов были неработоспособны на другом устройстве или для кого-либо, кроме пользователя, который зарегистрировал их на то же устройство. Например, копирование данных отпечатков пальцев другого пользователя на том же устройстве или с другого устройства не должно работать.
- Реализации должны либо использовать путь файловой системы, предоставленный функцией
setActiveGroup()
, либо предоставлять способ стирания всех данных шаблона пользователя при удалении пользователя. Настоятельно рекомендуется хранить файлы шаблонов отпечатков пальцев в зашифрованном виде по указанному пути. Если это невозможно из-за требований к хранилищу TEE, разработчик должен добавить перехватчики, чтобы гарантировать удаление данных при удалении пользователя.
Методы отпечатков пальцев
Интерфейс Fingerprint HIDL содержит следующие основные методы в IBiometricsFingerprint.hal
.
Метод | Описание |
---|---|
enroll() | Переключает конечный автомат HAL для начала сбора и хранения шаблона отпечатка пальца. Когда регистрация завершена или по истечении времени ожидания конечный автомат HAL возвращается в состояние ожидания. |
preEnroll() | Создает уникальный токен, обозначающий начало регистрации отпечатков пальцев. Предоставляет токен для функции enroll , чтобы гарантировать предварительную аутентификацию, например, с использованием пароля. Чтобы предотвратить несанкционированный доступ, токен упаковывается после подтверждения учетных данных устройства. Токен необходимо проверить во время регистрации, чтобы убедиться, что он по-прежнему действителен. |
getAuthenticatorId() | Возвращает токен, связанный с текущим набором отпечатков пальцев. |
cancel() | Отменяет ожидающие операции регистрации или аутентификации. Конечный автомат HAL возвращается в состояние ожидания. |
enumerate() | Синхронный вызов перебора всех известных шаблонов отпечатков пальцев. |
remove() | Удаляет шаблон отпечатка пальца. |
setActiveGroup() | Ограничивает операцию HAL набором отпечатков пальцев, принадлежащих к указанной группе, идентифицируемой идентификатором группы (GID). |
authenticate() | Аутентифицирует операцию, связанную с отпечатком пальца (идентифицируется по идентификатору операции). |
setNotify() | Регистрирует пользовательскую функцию, которая получает уведомления от HAL. Если конечный автомат HAL находится в состоянии занятости, функция блокируется до тех пор, пока HAL не выйдет из состояния занятости. |
postEnroll() | Завершает операцию регистрации и аннулирует вызов, созданный preEnroll() . Эту команду необходимо вызвать в конце сеанса регистрации нескольких пальцев, чтобы указать, что больше пальцев добавлять нельзя. |
Более подробную информацию об этом можно найти в комментариях в IBiometricsFingerprint.hal
.