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

OEM-производителям, интегрирующим элементы безопасности (Secure Element) и функции Android Ready SE в свои устройства, необходимо включить этот интерфейс, так как по умолчанию он отключен. До этого обновления правила доступа к элементам безопасности (Secure Element) определялись по имени пакета или хэшам его подписей (ссылка на приложение устройства) и AID (ссылка на приложение SE). Модули HAL не имели уникальных идентификаторов, таких как имена пакетов или сертификаты подписей. Теперь, в Android 13, стабильная служба поставщика OMAPI позволяет модулям HAL получать доступ к элементу безопасности (Secure Element). Поставщики модулей безопасности (SE) могут определить уникальный идентификатор UUID из 16 байт. Чтобы применить это правило доступа к модулям HAL, поставщики SE должны сопоставить этот 16-байтовый уникальный идентификатор UUID с UID модуля HAL в своем XML-файле конфигурации сопоставления UUID поставщика.
Стабильная служба поставщика OMAPI при необходимости дополняет UUID FF, чтобы сделать его 20-байтовым, согласно разделу 6.1, страница DeviceAppID-REF-DO: 66, и определяет правила доступа в защищенных элементах, используя этот 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>
Определите XML-сопоставление UID и 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>
Подготовьте AR-элементы безопасности для службы HAL, используя UUID в качестве ссылок на приложения устройств. Добавьте запись сопоставления в конфигурацию сопоставления, где можно сопоставить этот UUID с UID модулей HAL. Благодаря этому сопоставлению поставщики разрешают модулям HAL доступ к Secure Element. Тесты OMAPI VTS можно использовать в качестве эталонных реализаций для включения стабильной службы OMAPI Vendor в модулях HAL.
Обновление политики модуля HAL: добавление правила политики для модуля 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 успешно реализована, выполнив тесты OMAPI VTS .
run vts -m VtsHalOmapiSeServiceV1_TargetTest run vts -m VtsHalOmapiSeAccessControlTestCases