簡介
開放式行動裝置 API (OMAPI) 是用來與裝置安全元件通訊的標準 API。在 Android 13 之前,只有應用程式和架構模組可以存取這個介面。轉換為供應商穩定介面後,HAL 模組也能透過 OMAPI 服務與安全元件通訊。
HAL 模組新增了 OMAPI 的存取項目,但未修改現有介面中的任何 API。使用這個介面的現有應用程式和架構模組,都不需要進行任何修改。
我們正在Android Ready SE 計畫中,將 Keymaster、KeyMint、身分憑證和遠端金鑰佈建等核心 Android 安全性功能,提供給安全元件使用。如要啟用這些功能,必須讓這些功能的 HAL (供應商元件) 透過 OMAPI 供應商穩定介面與安全元件通訊。
設計架構

如果 OEM 廠商要在裝置中整合安全元件和 Android Ready SE 功能,就必須啟用這個介面,因為預設為停用。在這次更新前,安全元件存取規則是由套件名稱或簽章雜湊 (裝置應用程式參照) 和 AID (SE 應用程式參照) 所定義。HAL 模組沒有套件名稱或簽章憑證等專屬 ID。在 Android 13 中,HAL 模組可透過 OMAPI 供應商穩定服務存取安全元件。SE 供應商可以定義 16 位元組的專屬 UUID。 如要將這項存取規則套用至 HAL 模組,SE 供應商必須在供應商 UUID 對應設定 XML 中,將這個 16 位元組的專屬 ID 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 供應商穩定服務功能,必須進行下列變更。
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