简介
Open Mobile API (OMAPI) 是一种标准 API,用于与设备的安全元件通信。在 Android 13 之前,只有应用和框架模块可以访问此接口。通过将其转换为供应商稳定接口,HAL 模块也能够通过 OMAPI 服务与安全元件通信。
为 HAL 模块添加了对 OMAPI 的新访问入口,而无需修改当前现有接口中的任何 API。使用此接口的现有应用和框架模块无需进行任何修改。
作为 Android Ready SE 计划 的一部分,我们正在安全元件上提供核心 Android 安全功能,如 Keymaster、Keymint、身份凭据和远程密钥配置。启用这些功能需要这些功能的 HAL(供应商组件)通过 OMAPI 供应商稳定接口与安全元件通信。
设计架构

将安全元件和 Android Ready SE 功能集成到其设备中的 OEM 需要启用此接口,因为它默认处于禁用状态。在此更新之前,安全元件访问规则由软件包名称或其签名哈希值(设备应用参考)和 AID(SE 应用参考)定义。HAL 模块没有像软件包名称或签名证书这样的唯一标识符。现在在 Android 13 中,OMAPI 供应商稳定服务允许 HAL 模块访问安全元件。SE 供应商可以定义 16 字节的唯一标识符 UUID。要将此访问规则应用于 HAL 模块,SE 供应商需要在其供应商 UUID 映射配置 XML 中将此 16 字节唯一标识符 UUID 映射到 HAL 模块 UID。
OMAPI 供应商稳定服务会根据需要用 FF 填充 UUID,使其达到 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 供应商稳定服务在 /odm/etc/
、/vendor/etc/
和 /etc/
文件夹下搜索此文件。有关供应商 UUID 映射配置文件的详细说明,请访问此处。
实现
需要在目标版本上启用 OMAPI 供应商稳定服务功能,需要进行以下更改。
安全元件
安全元件使用设备特定文件夹下的资源叠加启用 服务标志 secure_element_vintf_enabled
。
<bool name="secure_element_vintf_enabled">true</bool>
为您的服务定义 UID 和 UUID 映射 xml。
<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>
使用 UUID 作为设备应用参考,为 HAL 服务配置安全元件 AR。在映射配置中添加映射条目,您可以在其中将此 UUID 映射到 HAL 模块 UID。通过此映射,供应商允许 HAL 模块访问安全元件。OMAPI VTS 测试 可以用作在 HAL 模块中启用 OMAPI 供应商稳定服务的参考实现。
更新 HAL 模块 sepolicy:为 HAL 模块添加 sepolicy 规则,以允许其域访问 OMAPI 供应商稳定服务。
allow hal_module_label secure_element_service:service_manager find
连接到 OMAPI 供应商稳定服务:从 HAL 模块使用 OMAPI 供应商服务标签 android.se.omapi.ISecureElementService/defaultandroid.se.omapi.ISecureElementService/default
连接到服务。
验证
通过运行 OMAPI VTS 测试 验证 OMAPI 供应商稳定服务是否已成功实施。
run vts -m VtsHalOmapiSeServiceV1_TargetTest run vts -m VtsHalOmapiSeAccessControlTestCases