OMAPI ベンダー安定版インターフェース

はじめに

Open Mobile API(OMAPI)は、デバイスのセキュア エレメントとの通信に使用される標準 API です。Android 13 より前、このインターフェースにアクセスできるのはアプリとフレームワーク モジュールだけでした。HAL モジュールは、これをベンダー安定版インターフェースに変換することにより、OMAPI サービスを介してセキュア エレメントと通信することもできます。

既存のインターフェース内の API を変更することなく、HAL モジュール用に OMAPI への新しいアクセス エントリが追加されました。このインターフェースを使用する既存のアプリとフレームワーク モジュールを変更する必要はありません。

Google は、Android Ready SE プログラムの一環として、Keymaster、Keymint、ID 認証情報、リモートキー プロビジョニングなどの Android のコア セキュリティ機能をセキュア エレメントで利用できるようにしました。これらを有効にするには、当該機能の HAL(ベンダー コンポーネント)が OMAPI ベンダー安定版インターフェースを介してセキュア エレメントと通信することが必要です。

設計アーキテクチャ

設計アーキテクチャ
図 1: 設計アーキテクチャ

セキュア エレメントと Android Reasy SE 機能をデバイスに統合する OEM は、デフォルトでは無効になっているこのインターフェースを有効にする必要があります。今回のアップデートの前、セキュア エレメントのアクセスルールは、パッケージ名またはその署名ハッシュ(デバイスアプリ リファレンス)と AID(SE アプリ リファレンス)によって定義されていました。HAL モジュールは、パッケージ名や署名証明書のような一意の識別子を持っていませんでした。Android 13 では、OMAPI ベンダー安定版サービスによって、HAL モジュールはセキュア エレメントにアクセスできます。SE ベンダーは 16 バイトの一意の識別子 UUID を定義できます。SE ベンダーがこのアクセスルールを HAL モジュールに適用するには、ベンダー UUID マッピング構成 XML で、この 16 バイトの一意の識別子 UUID を HAL モジュールの UID にマッピングする必要があります。

OMAPI ベンダー安定版サービスは、DeviceAppID-REF-DO ページ 66 のセクション 6.1 に基づき、必要であれば 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 ベンダー安定版サービスは、/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 モジュールがセキュア エレメントにアクセスできるようにします。HAL モジュールで OMAPI ベンダー安定版サービスを有効にするためのリファレンス実装として、OMAPI VTS テストを使用できます。

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 ベンダー安定版サービスが正常に実装されたことを検証するには、OMAPI VTS テストを実行します。

    run vts -m VtsHalOmapiSeServiceV1_TargetTest
    run vts -m VtsHalOmapiSeAccessControlTestCases