OMAPI ( Open Mobile API ) — это стандартный API, используемый для связи с защищенным элементом устройства. До Android 13 доступ к этому интерфейсу имели только приложения и модули фреймворка. Благодаря преобразованию его в стабильный интерфейс от поставщика, модули HAL также могут взаимодействовать с защищенными элементами через службу OMAPI.
Для модулей HAL добавлена запись доступа к OMAPI без изменения каких-либо API в существующем интерфейсе. Для существующих модулей приложений и фреймворков, использующих этот интерфейс, никаких изменений не требуется.
В рамках программы Android Ready SE мы делаем основные функции безопасности Android, такие как Keymaster, KeyMint, Identity Credentials и Remote Key Provisioning, доступными на защищенных элементах. Для их включения требуется, чтобы HAL (компоненты поставщика) этих функций взаимодействовали с защищенным элементом через стабильный интерфейс OMAPI поставщика.
Архитектурный дизайн

Рисунок 1. Архитектурный проект.
Производителям устройств, интегрирующим в свои устройства функции Secure Element и Android Ready SE, необходимо включить этот интерфейс, поскольку по умолчанию он отключен. До этого обновления правила доступа к Secure Element определялись именем пакета или его хэшами подписи (ссылка на приложение устройства) и AID (ссылка на приложение SE). Модули HAL не имели уникальных идентификаторов, таких как имена пакетов или сертификаты подписи. В Android 13 и выше служба OMAPI Vendor Stable Service позволяет модулям HAL получать доступ к Secure Element. Производители SE могут определить уникальный идентификатор UUID размером 16 байт. Для применения этого правила доступа к модулям HAL производители SE должны сопоставить этот 16-байтовый уникальный идентификатор UUID с UID модуля HAL в своем XML-файле конфигурации сопоставления UUID поставщика.
В соответствии с разделом 6.1, страница 66, служба OMAPI Vendor Stable Service дополняет UUID символом FF, если это необходимо, чтобы его размер составлял 20 байт, и определяет правила доступа в защищенных элементах, используя этот 20-байтовый UUID в качестве ссылки на приложение устройства.
Имя файла сопоставления UUID поставщика формируется с использованием предопределенного префикса hal_uuid_map_ и дополняется значением системного свойства ro.boot.product.hardware.sku
hal_uuid_map_value_of_ro.boot.product.hardware.sku.xml Служба OMAPI Vendor Stable ищет этот файл в папках /odm/etc/ , /vendor/etc/ и /etc/ . Подробное описание файла конфигурации сопоставления UUID поставщика доступно здесь .
Выполнение
Для включения функции OMAPI Vendor Stable Service в целевой сборке необходимы следующие изменения.
SecureElement
SecureElement Включите флаг службы secure_element_vintf_enabled используя наложение ресурсов в папках, специфичных для устройства.
<bool name="secure_element_vintf_enabled">true</bool>
Определите UID и XML-файл сопоставления UUID для вашей службы.
<ref_do>
<uuid_ref_do>
<uids>
<uid>0</uid>
</uids>
<uuid>9f36407ead0639fc966f14dde7970f68</uuid>
</uuid_ref_do>
<uuid_ref_do>
<uids>
<uid>1096</uid>
<uid>1097</uid>
</uids>
<uuid>a9b7ba70783b317e9998dc4dd82eb3c5</uuid>
</uuid_ref_do>
</ref_do>Создайте экземпляры Secure Element AR для службы HAL, используя UUID в качестве ссылок на приложения устройств. Добавьте запись сопоставления в конфигурацию сопоставления, где вы сможете сопоставить этот UUID с UID(-ами) модуля(-ов) HAL. Благодаря этому сопоставлению поставщики разрешают модулям HAL доступ к Secure Element. Тесты OMAPI VTS можно использовать в качестве эталонных реализаций для включения стабильной службы OMAPI Vendor Stable Service в модулях HAL.
Обновить правила sepolicy для модуля HAL: добавить правило sepolicy для модуля HAL, разрешающее его домену доступ к стабильной службе поставщика OMAPI.
allow hal_module_label secure_element_service:service_manager find
Подключение к стабильной службе поставщика OMAPI: В модулях HAL используйте метку службы поставщика OMAPI android.se.omapi.ISecureElementService/defaultandroid.se.omapi.ISecureElementService/default для подключения к службе.
Проверка
Убедитесь в успешной реализации стабильной службы OMAPI Vendor Stable Service, запустив тесты OMAPI VTS .
run vts -m VtsHalOmapiSeServiceV1_TargetTest
run vts -m VtsHalOmapiSeAccessControlTestCases