Ткач

Уровень аппаратной абстракции Weaver (HAL) ( IWeaver.aidl ), представленный в Android 8.1, обеспечивает безопасный интерфейс для аутентификации пользователя с помощью фактора знаний экрана блокировки (LSKF), такого как PIN-код, графический ключ и пароль.

Weaver заменяет функциональность проверки LSKF, используемую Gatekeeper . Однако Gatekeeper по-прежнему используется для генерации аппаратных токенов аутентификации .

В Android 9 и более поздних версиях CDD 9.11.2 требует, чтобы устройства, поддерживающие StrongBox, имели выделенное защищенное оборудование, обеспечивающее безопасную аутентификацию пользователей. Реализация Weaver HAL с использованием этого защищенного оборудования удовлетворяет требованию «безопасной аутентификации пользователей».

На устройствах без выделенного защищенного элемента (SE) Weaver по-прежнему может быть реализован в доверенной среде выполнения (TEE), такой как Trusty .

Компоненты

Система Weaver состоит из трех компонентов:

  • Интерфейс Weaver AIDL ( IWeaver ) : формальная спецификация HAL. В Android 13 и более ранних версиях вместо AIDL использовался HIDL.
  • Сервис Weaver Hardware Abstraction Layer (HAL) : специфический для производителя процесс Android, реализующий интерфейс IWeaver .
  • Weaver Trusted Application (TA) : основная логика, работающая в защищенной среде. Она выполняет проверку LSKF и обеспечивает ограничение скорости запросов. Служба HAL взаимодействует с TA, используя защищенный канал, специфичный для данной реализации.

Интерфейс

Интерфейс Weaver предоставляет массив постоянных слотов фиксированного размера, каждый из которых содержит ключ фиксированного размера и значение фиксированного размера. Каждый слот идентифицируется своим ID, целым числом в интервале [0, numSlots - 1] . Значение слота доступно только при наличии ключа, соответствующего сохраненному ключу.

Интерфейс Weaver состоит из:

  • getConfig() : Извлекает количество слотов, размер ключа и размер значения, поддерживаемые реализацией.
  • write() : Перезаписывает указанный слот новой парой ключ-значение. Эта операция является атомарной и делает предыдущие данные безвозвратно невосстановимыми (безопасное удаление).
  • read() : Пытается получить значение указанного слота. Это удается только в том случае, если таймаут ограничения скорости (устанавливаемый TA) не активен и предоставленный ключ точно совпадает с сохраненным ключом.

Полную спецификацию интерфейса см. в файле IWeaver.aidl .

Использовать на Android

Если доступна реализация Weaver, LockSettingsService в системном сервере Android использует её для защиты пользовательских данных. Для каждого пользователя на устройстве LockSettingsService управляет слотом Weaver:

  • Ключ слота ( weaverKey ): Хэш LSKF пользователя. Если у пользователя нет блокировки экрана, используется строка по умолчанию.
  • Значение слота ( weaverSecret ): Высокоэнтропийный, случайно сгенерированный криптографический секрет.

Объект weaverSecret предназначен для получения только одним из следующих способов:

  • Предоставление корректного weaverKey техническому представителю Weaver в рамках его политики ограничения скорости запросов.
  • Компрометация безопасной среды, в которой работает Weaver TA. Это должно быть очень сложно.

LockSettingsService использует weaverKey и weaverSecret для шифрования синтетического пароля пользователя. Поскольку синтетический пароль защищает хранилище учетных данных пользователя (Credential-Encrypted, CE) для шифрования на основе файлов (File-Based Encryption, FBE) и ключи аутентификации пользователя в хранилище ключей Android , данные остаются недоступными до тех пор, пока Weaver не освободит секрет.

Ткач против Привратника

Исторически сложилось так, что HAL-интерфейс Gatekeeper выполнял две различные роли в рамках одного вызова функции verify() :

  1. Проверка : Проверка LSKF с ограничением скорости, обеспечиваемым TEE.
  2. Аттестация : Выдача HardwareAuthToken для уведомления KeyMint (ранее Keymaster) об успешном завершении аутентификации LSKF.

Почему произошел переход на Weaver?

С появлением защищенных токенов сброса пароля в Android 8.1 «синтетический пароль» стал основным криптографическим секретом. Две описанные выше роли теперь обрабатываются отдельными регистрациями Gatekeeper: одна для LSKF под userId + 100000 , а другая для синтетического пароля под userId .

Для выполнения первой роли был создан Weaver, использующий более простой интерфейс HAL с поддержкой реализаций на основе Secure Element (SE).

Особенность Ткач Привратник
Безопасное удаление Необходимо обеспечить безопасное удаление, и это легко реализовать, поскольку интерфейс использует фиксированное количество слотов фиксированного размера. Безопасное удаление не требуется, и его сложно реализовать, поскольку интерфейс поддерживает неограниченное количество регистраций.
Аппаратное обеспечение Оптимизировано для систем с эпителиальной дисплазией, но также работает и в трансэзофагеальной эхокардиографии. По сути, это только TEE. Внедрение его в SE не обеспечивает преимуществ в плане безопасности при текущей конструкции.
Обработка ошибок Более понятные коды ошибок Неоднозначные коды ошибок. В результате экран блокировки не различает некорректные LSKF и несвязанные с ними сбои.
Атомность Код в LockSettingsService , использующий Weaver, выполняет изменения LSKF атомарно. Новые данные записываются в новый слот Weaver, а старый слот удаляется только тогда, когда это безопасно. Код в LockSettingsService , использующий Gatekeeper, не выполняет атомарные изменения LSKF. В случае возникновения проблем во время изменения LSKF все пользовательские данные могут быть потеряны.

Справочный код

Справочный код для реализаций Weaver в защищенных элементах, совместимых с ISO/IEC7816-4, доступен в AOSP: external/libese/ .

Тестирование

Для проверки реализации Weaver используйте VtsHalWeaverTargetTest :

atest VtsHalWeaverTargetTest

или:

vts-tradefed run vts -m VtsHalWeaverTargetTest