OMAPI 供應商穩定接口

介紹

開放移動 API (OMAPI) 是用於與設備的安全元件通信的標準 API。在 Android 13 之前,只有應用程序和框架模塊可以訪問此接口。通過將其轉換為供應商穩定的接口,HAL 模塊還能夠通過 OMAPI 服務與安全元件進行通信。

為 HAL 模塊添加了一個新的 OMAPI 訪問條目,而無需修改當前現有接口中的任何 API。使用此接口的現有應用程序和框架模塊無需修改。

作為Android Ready SE 計劃的一部分,我們正在 Secure Elements 上提供核心 Android 安全功能,例如 Keymaster、Keymint、身份憑證和遠程密鑰配置。啟用這些功能需要這些功能的 HAL(供應商組件)通過 OMAPI 供應商穩定接口與安全元件通信。

設計架構

設計架構
圖 1 :設計架構

將 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