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 apps 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 entrada de acesso à OMAPI foi adicionada aos módulos da HAL sem modificar nenhuma API na interface atual. Não é necessário fazer modificações nos aplicativos e módulos de framework atuais que usam essa interface.
Como parte do programa Android Ready SE estamos disponibilizando recursos de segurança principais do Android, como Keymaster, KeyMint, credenciais de identidade e provisionamento de chaves remotas em Elementos de segurança. 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.
Arquitetura de design

Figura 1. Arquitetura de design.
Os OEMs que integram um Elemento de segurança e recursos do Android Ready SE aos dispositivos precisam ativar essa interface, porque ela fica desativada por padrão. Antes dessa atualização, as regras de acesso ao Elemento de segurança 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 da HAL não tinham identificadores exclusivos como nomes de pacotes ou certificados de assinatura. No Android 13 e versões mais recentes, o serviço estável do fornecedor OMAPI permite que os módulos da HAL acessem o Elemento de segurança. Os fornecedores de SE podem definir um UUID de identificador exclusivo de 16 bytes. Para aplicar essa regra de acesso aos módulos da HAL, os fornecedores de SE precisam mapear esse UUID de identificador exclusivo de 16 bytes para o UID do módulo da HAL no XML de configuração de mapeamento de UUID do fornecedor.
O serviço estável do fornecedor OMAPI preenche o UUID com FF, 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 de segurança usando esse UUID de 20 bytes como referência do aplicativo do dispositivo.
O nome do arquivo de mapeamento de UUID do fornecedor é formado com o prefixo predefinido
hal_uuid_map_ e anexado ao 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 pesquisa 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 sobreposiçã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 de dispositivos. Adicione uma entrada de mapeamento na configuração em que você pode mapear esse UUID para UIDs de módulos da HAL. Com esse mapeamento, os fornecedores permitem que os módulos da 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 OMAPI em módulos da HAL.
Atualize a sepolicy do módulo da HAL: adicione uma regra de sepolicy para que o módulo da HAL permita que o domínio 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 da HAL, use o rótulo de 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 executando os testes VTS da OMAPI.
run vts -m VtsHalOmapiSeServiceV1_TargetTest
run vts -m VtsHalOmapiSeAccessControlTestCases