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 são necessárias modificações nos módulos de aplicativo e framework que usam essa interface.
Como parte do programa Android Ready SE, estamos disponibilizando os principais recursos de segurança do Android, como Keymaster, Keymint, Credenciais de identidade e Provisionamento remoto de chaves, nos Elementos de segurança. Para ativar esses recursos, é necessário que as HALs (componentes do fornecedor) desses recursos se comuniquem com o elemento de segurança pela interface estável do fornecedor da OMAPI.
Arquitetura de design

Os OEMs que integram um elemento de segurança e recursos do Android Ready SE aos dispositivos precisam ativar essa interface, que é desativada por padrão. Antes dessa atualização, as regras de acesso do elemento seguro eram definidas pelo nome do pacote ou pelos hashes de assinatura (referência do aplicativo do dispositivo) e pelo AID (referência do aplicativo do elemento seguro). Os módulos HAL não tinham identificadores exclusivos, como nomes de pacote ou certificados de assinatura. Agora, no Android 13, 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 HAL, os fornecedores de SE precisam mapear esse UUID de identificador exclusivo de 16 bytes para o UID do módulo HAL no XML de configuração UUID do fornecedor.
O serviço estável do fornecedor OMAPI preenche o UUID com FF, se necessário, para torná-lo de 20 bytes, conforme a seção 6.1, DeviceAppID-REF-DO página: 66 e define regras de acesso em elementos seguros 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
hal_uuid_map_
predefinido e anexado ao valor da propriedade
ro.boot.product.hardware.sku
do sistema.
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/
. A descrição detalhada do arquivo de configuração do mapeamento de UUID do fornecedor
está disponível
aqui.
Implementação
As mudanças a seguir são necessárias para ativar o recurso de serviço estável do fornecedor OMAPI em um build de destino.
SecureElement
SecureElement (link em inglês)
Ative a flag de serviço
secure_element_vintf_enabled
usando a sobreposição de recursos nas
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 as ARs do elemento de segurança para o serviço HAL usando UUIDs como referências de aplicativos de dispositivo. Adicione uma entrada de mapeamento na configuração em que você pode mapear esse UUID para UIDs de módulo HAL. Com esse mapeamento, os fornecedores permitem que os módulos HAL acessem o elemento de segurança. Os testes de VTS da OMAPI podem ser usados como implementações de referência para ativar o serviço estável do fornecedor da OMAPI nos módulos HAL.
Atualização da política de segurança do módulo HAL: adicione uma regra de política de segurança para o módulo HAL para permitir que o domínio acesse o serviço estável do fornecedor OMAPI.
allow hal_module_label secure_element_service:service_manager find
Conectar-se ao serviço estável do fornecedor OMAPI: nos módulos 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 testes de VTS do OMAPI.
run vts -m VtsHalOmapiSeServiceV1_TargetTest run vts -m VtsHalOmapiSeAccessControlTestCases