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

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

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

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

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

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

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

Архитектура

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

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

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

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

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

Руководство по внедрению

Следующие рекомендации HAL отпечатков пальцев предназначены для предотвращения утечки данных отпечатков пальцев и их удаления при удалении пользователя с устройства:

  • Необработанные данные отпечатков пальцев или их производные (например, шаблоны) никогда не должны быть доступны из-за пределов драйвера датчика или TEE. Если оборудование поддерживает TEE, доступ к оборудованию должен быть ограничен TEE и защищен политикой SELinux. Канал последовательного периферийного интерфейса (SPI) должен быть доступен только для TEE, и для всех файлов устройств должна быть явная политика SELinux.
  • Получение отпечатков пальцев, регистрация и распознавание должны происходить внутри TEE.
  • В файловой системе может храниться только зашифрованная форма данных отпечатков пальцев, даже если сама файловая система зашифрована.
  • Шаблоны отпечатков пальцев должны быть подписаны закрытым ключом для конкретного устройства. Для Advanced Encryption Standard (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 .

,

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

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

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

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

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

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

Архитектура

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

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

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

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

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

Руководство по внедрению

Следующие рекомендации HAL отпечатков пальцев предназначены для предотвращения утечки данных отпечатков пальцев и их удаления при удалении пользователя с устройства:

  • Необработанные данные отпечатков пальцев или их производные (например, шаблоны) никогда не должны быть доступны из-за пределов драйвера датчика или TEE. Если оборудование поддерживает TEE, доступ к оборудованию должен быть ограничен TEE и защищен политикой SELinux. Канал последовательного периферийного интерфейса (SPI) должен быть доступен только для TEE, и для всех файлов устройств должна быть явная политика SELinux.
  • Получение отпечатков пальцев, регистрация и распознавание должны происходить внутри TEE.
  • В файловой системе может храниться только зашифрованная форма данных отпечатков пальцев, даже если сама файловая система зашифрована.
  • Шаблоны отпечатков пальцев должны быть подписаны закрытым ключом для конкретного устройства. Для Advanced Encryption Standard (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 .