Interface estável do fornecedor OMAPI

Introdução

A API Open Mobile (OMAPI, link em inglês) é uma API padrão usada para se comunicar com o Elemento de segurança de um dispositivo. Antes do Android 13, apenas aplicativos e módulos de framework tinham acesso a essa interface. Ao fazer a conversão para uma interface estável do fornecedor, os módulos da HAL também podem se comunicar com os Elementos de segurança pelo serviço OMAPI.

Uma nova entrada de acesso à OMAPI foi adicionada aos módulos HAL sem modificar nenhuma API na interface atual. Não é necessário fazer modificações nos módulos de aplicativo e framework atuais que usam essa interface.

Como parte do programa Android Ready SE, estamos disponibilizando recursos principais de segurança do Android, como Keymaster, KeyMint, credenciais de identidade e provisionamento remoto de chaves, em elementos seguros. Para ativar esses recursos, é necessário que as HALs (componentes do fornecedor) se comuniquem com o Elemento de segurança pela interface estável do fornecedor OMAPI.

Design da arquitetura

Arquitetura de design
Figura 1: arquitetura de design

Os OEMs que integram um elemento seguro e recursos do Android Ready SE aos dispositivos precisam ativar essa interface, já que ela fica desativada por padrão. Antes dessa atualização, as regras de acesso ao elemento seguro eram definidas pelo nome do pacote ou pelos hashes de assinatura (referência do aplicativo do dispositivo) e AID (referência do aplicativo SE). Os módulos HAL não tinham identificadores exclusivos, como nomes de pacotes ou certificados de assinatura. Agora, no Android 13, o serviço estável do fornecedor OMAPI permite que os módulos HAL acessem o elemento de segurança. Os fornecedores de SE podem definir um UUID de 16 bytes. Para aplicar essa regra de acesso aos módulos HAL, os fornecedores de SE precisam mapear esse identificador exclusivo de 16 bytes UUID para o UID do módulo HAL no XML de configuração de mapeamento de UUID do fornecedor.

O serviço estável do fornecedor OMAPI adiciona FF ao UUID, se necessário, para que ele tenha 20 bytes, conforme a seção 6.1, página DeviceAppID-REF-DO: 66, e define regras de acesso em elementos seguros usando esse UUID de 20 bytes como referência de aplicativo do dispositivo.

O nome do arquivo de mapeamento de UUID do fornecedor é formado com o prefixo predefinido hal_uuid_map_ e anexado com o valor da propriedade do sistema ro.boot.product.hardware.sku.

    hal_uuid_map_value_of_ro.boot.product.hardware.sku.xml

O serviço estável do fornecedor OMAPI procura esse arquivo nas pastas /odm/etc/, /vendor/etc/ e /etc/. Uma descrição detalhada do arquivo de configuração de mapeamento de UUID do fornecedor está disponível aqui.

Implementação

As seguintes mudanças são necessárias para ativar o recurso de serviço estável do fornecedor OMAPI em um build de destino.

SecureElement

SecureElement

Ative a flag de serviço secure_element_vintf_enabled usando a substituição de recursos em pastas específicas do dispositivo.

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

Defina o XML de mapeamento de UID e UUID para seu serviço.

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

Provisione os ARs do elemento de segurança para o serviço HAL usando UUIDs como referências de aplicativos do dispositivo. Adicione uma entrada de mapeamento na configuração em que é possível mapear esse UUID para UIDs de módulos HAL. Com esse mapeamento, os fornecedores permitem que os módulos HAL acessem o elemento de segurança. Os testes VTS da OMAPI podem ser usados como implementações de referência para ativar o serviço estável do fornecedor da OMAPI em módulos HAL.

Atualize a sepolicy do módulo HAL: adicione uma regra de sepolicy para que o módulo HAL permita que o domínio dele acesse o serviço estável do fornecedor OMAPI.

    allow hal_module_label secure_element_service:service_manager find

Conecte-se ao serviço estável do fornecedor OMAPI: nos módulos HAL, use o rótulo do serviço do fornecedor OMAPI android.se.omapi.ISecureElementService/defaultandroid.se.omapi.ISecureElementService/default para se conectar ao serviço.

Validação

Valide se o serviço estável do fornecedor OMAPI foi implementado com sucesso executando os testes do VTS do OMAPI.

    run vts -m VtsHalOmapiSeServiceV1_TargetTest
    run vts -m VtsHalOmapiSeAccessControlTestCases