Interfaz estable del proveedor de OMAPI

Introducción

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 aplicaciones 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 nueva entrada de acceso a OMAPI para los módulos HAL sin modificar ninguna API en la interfaz existente actual. No se requieren modificaciones para los módulos de aplicación y framework existentes que usan esta interfaz.

Como parte del programa de elementos seguros compatibles con Android, estamos haciendo que las funciones de seguridad principales de Android, como Keymaster, Keymint, credenciales de identidad y aprovisionamiento de claves remoto, estén disponibles en los elementos seguros. Para habilitarlos, se requieren HAL (componentes del proveedor) de estas funciones para comunicarse con el elemento seguro a través de la interfaz estable del proveedor de OMAPI.

Arquitectura de diseño

Arquitectura de diseño
Figura 1: Arquitectura de diseño

Los OEMs 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 del elemento seguro se definían por el nombre del paquete o sus hashes de firma (referencia de la aplicación del dispositivo) y el 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. Ahora, en Android 13, el servicio estable de proveedor de OMAPI permite que los módulos HAL accedan al elemento seguro. Los proveedores de SE pueden definir un UUID de identificador único de 16 bytes. Para aplicar esta regla de acceso a los módulos HAL, los proveedores de SE deben asignar este UUID de identificador único de 16 bytes al UID del módulo HAL en su archivo XML de configuración de asignación de UUID del proveedor.

El servicio estable del proveedor de OMAPI completa el UUID con FF 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 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/. La descripción detallada del archivo de configuración de asignación de UUID del proveedor está disponible aquí.

Implementación

Se requieren los siguientes cambios para habilitar la función de servicio estable del proveedor 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 las carpetas específicas del dispositivo.

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

Define el archivo en formato 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 las AR de elementos seguros para el servicio de HAL con UUIDs como referencias de la aplicación del dispositivo. Agrega una entrada de asignación en la configuración de asignación en la que puedas asignar este UUID a los UID del módulo 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 del proveedor de OMAPI en los módulos HAL.

Se actualizó la política de SE del módulo HAL: Se agregó una regla de política de SE para el módulo HAL para permitir que su dominio acceda al servicio estable del proveedor de OMAPI.

    allow hal_module_label secure_element_service:service_manager find

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

Validación

Ejecuta 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