Introdução
Open Mobile API (OMAPI) é uma API padrão usada para se comunicar com o Elemento Seguro de um dispositivo. Antes do Android 13, apenas aplicativos e módulos de framework tinham acesso a esta interface. Ao convertê-lo em uma interface estável do fornecedor, os módulos HAL também são capazes de se comunicar com os elementos seguros através do serviço OMAPI.
Uma nova entrada de acesso ao OMAPI foi adicionada para os módulos HAL sem modificar nenhuma API na interface existente atualmente. Não há modificações necessárias para aplicativos existentes e módulos de estrutura que usam esta 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 chave, no Secure Elements. Habilitá-los requer que HALs (componentes do fornecedor) desses recursos se comuniquem com o Elemento Seguro por meio da interface estável do fornecedor OMAPI.
Arquitetura de projeto
Os OEMs que integram recursos Secure Element e Android Ready SE em seus dispositivos precisam ativar essa interface, pois ela está desativada por padrão. Antes desta atualização, as regras de acesso ao Elemento Seguro eram definidas pelo nome do pacote ou seus 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 módulos HAL acessem o elemento seguro. Os fornecedores de SE podem definir um UUID de identificador exclusivo de 16 bytes. Para aplicar esta regra de acesso aos módulos HAL, os fornecedores SE são obrigados a mapear este identificador exclusivo UUID de 16 bytes para o UID do módulo HAL no XML de configuração de mapeamento UUID do fornecedor.
O serviço estável do fornecedor OMAPI preenche o UUID com FF, se necessário, para torná-lo 20 bytes, conforme 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 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 OMAPI Vendor Stable procura esse arquivo nas pastas /odm/etc/
, /vendor/etc/
e /etc/
. A descrição detalhada do arquivo de configuração de mapeamento UUID do fornecedor está disponível aqui .
Implementação
As alterações a seguir são necessárias para ativar o recurso OMAPI Vendor Stable Service em uma compilação de destino.
Elemento Seguro
Elemento Seguro Habilite o sinalizador de serviço secure_element_vintf_enabled
usando sobreposição de recursos em pastas específicas do dispositivo.
<bool name="secure_element_vintf_enabled">true</bool>
Defina o xml de mapeamento 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 Seguro para o serviço HAL usando UUIDs como referências de aplicativos de dispositivos. Adicione uma entrada de mapeamento na configuração de mapeamento onde você pode mapear este UUID para UID(s) do módulo HAL. Com este mapeamento, os fornecedores estão permitindo que módulos HAL acessem o Secure Element. Os testes OMAPI VTS podem ser usados como implementações de referência para habilitar o OMAPI Vendor Stable Service em módulos HAL.
Atualizar sepolicy do módulo HAL: adicione regra sepolicy para o módulo HAL para permitir que seu 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 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 com sucesso executando testes OMAPI VTS .
run vts -m VtsHalOmapiSeServiceV1_TargetTest run vts -m VtsHalOmapiSeAccessControlTestCases