Interfaz estable del proveedor de OMAPI

La API de Open Mobile (OMAPI) es una API estándar que se usa para comunicarse con el Elemento seguro de un dispositivo. Antes de Android 13, solo las apps y los módulos del framework tenían acceso a esta interfaz. Si los conviertes en una interfaz estable de proveedor, los módulos HAL también pueden comunicarse con los elementos seguros a través del servicio OMAPI.

Se agregó una entrada de acceso a OMAPI para los módulos HAL sin modificar ninguna API en la interfaz existente actual. No se requieren modificaciones en los módulos existentes de la aplicación y del framework que usan esta interfaz.

Como parte del programa Android Ready SE, ponemos a disposición de los elementos seguros funciones de seguridad principales de Android, como Keymaster, KeyMint, credenciales de identidad y aprovisionamiento remoto de claves. Para habilitar estas funciones, se requieren HALs (componentes del proveedor) de estas funciones para comunicarse con el elemento seguro a través de la interfaz estable del proveedor de OMAPI.

Diseño de arquitectura

Diseño de arquitectura

Figura 1: Diseñar la arquitectura

Los OEM que integran un elemento seguro y funciones de SE compatibles con Android en sus dispositivos deben habilitar esta interfaz, ya que está inhabilitada de forma predeterminada. Antes de esta actualización, las reglas de acceso al elemento seguro se definían por nombre de paquete o sus hashes de firma (referencia de la aplicación del dispositivo) y AID (referencia de la aplicación del SE). Los módulos HAL no tenían identificadores únicos, como nombres de paquetes o certificados de firma. En Android 13 y versiones posteriores, el servicio estable para proveedores de OMAPI permite que los módulos HAL accedan al elemento seguro. Los proveedores de SE pueden definir un identificador único UUID de 16 bytes. Para aplicar esta regla de acceso a los módulos de HAL, los proveedores de SE deben asignar este UUID de identificador único de 16 bytes al UID del módulo de HAL en su archivo XML de configuración de asignación de UUID del proveedor.

El servicio estable del proveedor de OMAPI agrega FF al UUID si es necesario para que tenga 20 bytes, según la sección 6.1, página DeviceAppID-REF-DO: 66, y define reglas de acceso en elementos seguros con este UUID de 20 bytes como referencia de la aplicación del dispositivo.

El nombre del archivo de asignación de UUID del proveedor se forma con el prefijo predefinido hal_uuid_map_ y se le agrega el valor de la propiedad del sistema ro.boot.product.hardware.sku.

    hal_uuid_map_value_of_ro.boot.product.hardware.sku.xml

El servicio estable del proveedor de OMAPI busca este archivo en las carpetas /odm/etc/, /vendor/etc/ y /etc/. Puedes encontrar una descripción detallada del archivo de configuración de la asignación del UUID del proveedor aquí.

Implementación

Se requieren los siguientes cambios para habilitar la función de servicio estable para proveedores de OMAPI en una compilación de destino.

SecureElement

SecureElement

Habilita la marca de servicio secure_element_vintf_enabled con la superposición de recursos en carpetas específicas del dispositivo.

    <bool name="secure_element_vintf_enabled">true</bool>

Define el XML de asignación de UID y UUID para tu servicio.

<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>

Aprovisiona los AR de Secure Element para el servicio HAL con UUID como referencias de aplicaciones del dispositivo. Agrega una entrada de asignación en la configuración de asignación donde puedas asignar este UUID a los UID de los módulos de HAL. Con esta asignación, los proveedores permiten que los módulos HAL accedan al Elemento seguro. Las pruebas de VTS de OMAPI se pueden usar como implementaciones de referencia para habilitar el servicio estable de proveedor de OMAPI en los módulos HAL.

Actualiza la sepolicy del módulo HAL: Agrega una regla de sepolicy para que el módulo HAL permita que su dominio acceda al servicio estable de proveedor de OMAPI.

    allow hal_module_label secure_element_service:service_manager find

Conéctate al servicio estable de proveedor de OMAPI: Desde los módulos HAL, usa la etiqueta de servicio de proveedor de OMAPI android.se.omapi.ISecureElementService/defaultandroid.se.omapi.ISecureElementService/default para conectarte al servicio.

Validación

Ejecuta las pruebas de VTS de OMAPI para validar que el servicio estable del proveedor de OMAPI se haya implementado correctamente.

    run vts -m VtsHalOmapiSeServiceV1_TargetTest
    run vts -m VtsHalOmapiSeAccessControlTestCases