简介
Open Mobile API (OMAPI) 是一种标准 API,用于与设备的安全元件进行通信。在 Android 13 之前,只有应用和框架模块可以访问此接口。通过将其转换为供应商稳定版接口,HAL 模块还能够通过 OMAPI 服务与安全元件进行通信。
为 HAL 模块添加了对 OMAPI 的新访问条目,而没有修改当前现有接口中的任何 API。使用此接口的现有应用和框架模块无需进行任何修改。
作为 Android Ready SE 计划的一部分,我们将针对安全元件提供核心 Android 安全功能,例如 Keymaster、Keymint、身份凭据和远程密钥配置。启用这些功能需要这些功能的 HAL(供应商组件)通过 OMAPI 供应商稳定版接口与安全元件进行通信。
设计架构
![设计架构](https://source.android.google.cn/static/docs/security/images/omapi-design-architecture.png?authuser=9&hl=ca)
如果原始设备制造商 (OEM) 将安全元件和 Android Ready SE 功能集成到设备中,则需要启用此接口,因为默认情况下此接口处于停用状态。 在此次更新之前,安全元件访问规则由软件包名称或其签名哈希(设备应用参考)和 AID(SE 应用参考)定义。HAL 模块没有唯一标识符(例如软件包名称或签名证书)。现在,在 Android 13 中,OMAPI 供应商稳定版服务允许 HAL 模块访问安全元件。 SE 供应商可以定义 16 字节的唯一标识符 UUID。 如需将此访问规则应用于 HAL 模块,SE 供应商需要在其供应商 UUID 映射配置 XML 中将此 16 字节唯一标识符 UUID 映射到 HAL 模块 UID。
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 供应商稳定版服务会在 /odm/etc/
、/vendor/etc/
和 /etc/
文件夹下搜索此文件。如需详细了解供应商 UUID 映射配置文件,请访问此处。
实现
如需在目标 build 中启用 OMAPI 供应商稳定版服务功能,需要进行以下更改。
SecureElement
SecureElement
在设备专用文件夹下使用资源叠加层启用服务标志 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