介紹
開放移動 API (OMAPI) 是用於與設備的安全元件通信的標準 API。在 Android 13 之前,只有應用程序和框架模塊可以訪問此接口。通過將其轉換為供應商穩定的接口,HAL 模塊還能夠通過 OMAPI 服務與安全元件進行通信。
為 HAL 模塊添加了一個新的 OMAPI 訪問條目,而無需修改當前現有接口中的任何 API。使用此接口的現有應用程序和框架模塊無需修改。
作為Android Ready SE 計劃的一部分,我們正在 Secure Elements 上提供核心 Android 安全功能,例如 Keymaster、Keymint、身份憑證和遠程密鑰配置。啟用這些功能需要這些功能的 HAL(供應商組件)通過 OMAPI 供應商穩定接口與安全元件通信。
設計架構

將 Secure Element 和 Android Ready SE 功能集成到其設備中的 OEM 需要啟用此接口,因為默認情況下該接口處於禁用狀態。在此更新之前,安全元件訪問規則由包名稱或其簽名哈希(設備應用程序參考)和 AID(SE 應用程序參考)定義。 HAL 模塊沒有包名或簽名證書等唯一標識符。現在在 Android 13 中,OMAPI 供應商穩定服務允許 HAL 模塊訪問安全元素。 SE 供應商可以定義一個 16 字節的唯一標識符 UUID。要將此訪問規則應用於 HAL 模塊,SE 供應商需要在其供應商 UUID 映射配置 XML 中將此 16 字節唯一標識符 UUID 映射到 HAL 模塊 UID。
OMAPI 供應商穩定服務根據第6.1 節,DeviceAppID-REF-DO 頁:66將 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 供應商穩定服務功能需要進行以下更改。
安全元件
安全元件使用設備特定文件夾下的資源覆蓋啟用服務標誌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