Отпечаток пальца HIDL

На устройствах со сканером отпечатков пальцев пользователи могут зарегистрировать один или несколько отпечатков пальцев и использовать эти отпечатки пальцев для разблокировки устройства и выполнения других задач. Android использует язык определения аппаратного интерфейса отпечатков пальцев (HIDL) для подключения к библиотеке конкретного поставщика и оборудованию для снятия отпечатков пальцев (например, датчику отпечатков пальцев).

Чтобы реализовать HIDL отпечатка пальца, необходимо реализовать IBiometricsFingerprint.hal в библиотеке конкретного поставщика.

Сопоставление отпечатков пальцев

Сканер отпечатков пальцев устройства обычно простаивает. Однако в ответ на вызов для authenticate или enroll датчик отпечатков пальцев ожидает прикосновения (экран также может проснуться, когда пользователь касается датчика отпечатков пальцев). Высокоуровневый процесс сопоставления отпечатков пальцев включает следующие этапы:

  1. Пользователь прикладывает палец к датчику отпечатков пальцев.
  2. Библиотека конкретного поставщика определяет, есть ли совпадение отпечатков пальцев в текущем наборе зарегистрированных шаблонов отпечатков пальцев.
  3. Результаты сопоставления передаются в FingerprintService .

В этом потоке предполагается, что отпечаток пальца уже зарегистрирован на устройстве, то есть библиотека конкретного поставщика зарегистрировала шаблон для отпечатка пальца. Дополнительные сведения см. в разделе Аутентификация .

Архитектура

HAL отпечатков пальцев взаимодействует со следующими компонентами.

  • BiometricManager напрямую взаимодействует с приложением в процессе приложения. Каждое приложение имеет экземпляр IBiometricsFingerprint.hal
  • FingerprintService работает в системном процессе, который обрабатывает связь с HAL отпечатков пальцев.
  • Fingerprint HAL — это реализация HIDL-интерфейса IBiometricsFingerprint на языке C/C++. Он содержит библиотеку конкретного поставщика, которая взаимодействует с аппаратным обеспечением конкретного устройства.
  • Компоненты Keystore API и Keymaster обеспечивают аппаратную криптографию для безопасного хранения ключей в безопасной среде, такой как доверенная среда выполнения (TEE).
Поток данных для аутентификации по отпечатку пальца
Рисунок 1. Поток данных высокого уровня для аутентификации по отпечаткам пальцев

Реализация HAL, зависящая от поставщика, должна использовать протокол связи, требуемый TEE. Необработанные изображения и обработанные элементы отпечатков пальцев не должны передаваться в ненадежную память. Все такие биометрические данные необходимо хранить на защищенном оборудовании, таком как TEE. Рутинг не должен подвергать риску биометрические данные.

FingerprintService и fingerprintd осуществляют вызовы через HAL Fingerprint к библиотеке конкретного поставщика для регистрации отпечатков пальцев и выполнения других операций.

Взаимодействие с отпечатками пальцев
Рис. 2. Взаимодействие демона отпечатков пальцев с библиотекой конкретного поставщика отпечатков пальцев

Рекомендации по внедрению

Следующие рекомендации 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 .