Status e provisionamento da malha

O modo de inicialização da SDV define como o agente de descoberta de serviço da SDV em uma VM da SDV se comporta ao tentar se conectar a outros agentes de descoberta de serviço (em execução em outras VMs da SDV) para estabelecer uma malha segura. Isso é semelhante ao conceito de estado do dispositivo da Inicialização verificada do Android. O modo de inicialização da SDV pode ser LOCKED ou UNLOCKED.

O modo de inicialização da SDV é usado ao provisionar ou atualizar o armazenamento confiável da VM do veículo.

Comportamento da malha segura da SDV

A malha de descoberta de serviço está em um dos seguintes estados, dependendo dos valores de inicialização que recebe: Normal, Warning ou Fatal.

Um carro só chega às mãos do proprietário quando a malha está em um estado Normal. A malha exige intervenção de diagnóstico para mudar de um estado Normal para Warning. Em um ambiente de produção (por exemplo, não de desenvolvimento ou depuração), o estado Warning ocorre apenas durante o provisionamento.

Fatal é uma falha fundamental, semelhante a uma imagem system_ext que falha na verificação de assinatura no bootloader do Android. Se a malha da SDV fizer a transição de Normal para Fatal apenas devido a uma atualização over-the-air (OTA), a atualização será considerada ruim e a malha vai reverter para a versão Normal original.

As seções a seguir descrevem os estados com mais detalhes.

Normal

  • A inicialização do sistema é SECURE do ponto de vista da descoberta de serviço.
  • A descoberta de serviço se conecta apenas com peers que foram inicializados com segurança. Um peer inicializado com segurança implica que a malha segura da SDV também é segura.

Warning

  • A inicialização do sistema pode ter sido comprometida, já que algumas verificações estão desativadas.
  • A descoberta de serviço se conecta apenas com peers que também têm as mesmas verificações desativadas. Ela faz parte de uma malha segura da SDV com as mesmas propriedades de segurança.
  • Não é possível verificar o sucesso de uma inicialização de peer devido a falhas locais ou recursos desativados.
  • Fora de um ambiente ou situação de desenvolvimento, isso tem as seguintes implicações:
    • Os dados do usuário não podem estar disponíveis. Ou seja, eles não podem ser transmitidos nem afetados pela comunicação na malha segura da SDV.
    • Somente os serviços necessários para fluxos de provisionamento precisam estar disponíveis quando a malha está nesse estado.

Fatal

  • Um erro crítico durante os estágios de inicialização do sistema.
  • Há pelo menos uma falha ou erro fundamental que impede que o agente de descoberta de serviço estabeleça uma malha. Os serviços locais não podem se comunicar com serviços remotos.
  • A inicialização do sistema é UNSECURE do ponto de vista da descoberta de serviço.

Modo de inicialização da SDV

O modo de inicialização da SDV tem dois valores possíveis: UNLOCKED e LOCKED. Para o estabelecimento da malha de descoberta de serviço, LOCKED indica que os erros de verificação são fatais, e UNLOCKED significa que não são.

Condição Modo de inicialização da SDV
UNLOCKED LOCKED
Armazenamento confiável da VVM local vazio Warning Fatal
Cadeia de DICE local ausente Fatal Fatal
Falha na verificação da cadeia de DICE local Warning Fatal
O modo SDV e AVB local correspondem Consulte a tabela em O modo SDV e AVB local correspondem
Comparação do valor do modo de dispositivo remoto Consulte a tabela em Comparação do valor do modo de dispositivo remoto
Falha na correspondência de uds_pubs remoto Warning Fatal
Falha na verificação da cadeia de DICE remota (usando políticas de DICE) Warning Fatal
Falha no handshake de autenticação remota Fatal Fatal

O modo SDV e AVB local correspondem

A tabela a seguir mostra como o modo AVB e o modo de inicialização da SDV afetam o comportamento da malha segura da SDV. As cores são definidas na seção de integração específica do Android da documentação do AVB.

Modo AVB x modo de inicialização da SDV Modo de inicialização da SDV
UNLOCKED LOCKED
AVB LOCKED Verde Warning Normal
Amarelo Fatal Fatal
AVB UNLOCKED Orange Warning Fatal

Valor do modo de dispositivo

Em uma cadeia de DICE, cada certificado CDI tem um valor de modo. Esse valor descreve o estado de segurança dessa camada com base na entrada de configuração. Para expressar a postura de segurança de todo o software no dispositivo, um valor de modo de dispositivo é definido, que é derivado do valor de modo de todos os estágios de CDI das cadeias de DICE relevantes para uma determinada VM da SDV (ou seja, HLOS do Android e mundo seguro) e é definido da seguinte maneira:

enum DeviceMode {
  NotConfigured = 0,
  Recovery = 1,
  Debug = 2,
  Normal = 3,
}

Algoritmo

O algoritmo para calcular o valor do Modo dispositivo é o seguinte:

  1. Especifique deviceMode como DeviceMode::Normal.
  2. Especifique diceChainList como a lista de cadeias de DICE relevantes para uma VM da SDV.
  3. Para cada diceChain em diceChainList:
    1. Especifique cdiList como a lista de certificados CDI em diceChain:
    2. Para cada cdiCert em cdiList:
      1. Especifique cdiDeviceMode como o DeviceMode correspondente a cdiCert.mode.
      2. Defina deviceMode como min(deviceMode, cdiDeviceMode).
  4. Retorne deviceMode.

Comparação do valor do modo de dispositivo remoto

Um agente de descoberta de serviços se conecta apenas com outros agentes que têm o mesmo valor de Modo dispositivo.

O valor do Modo dispositivo garante que uma malha não possa ter membros com propriedades de segurança diferentes. A malha resultante tem uma postura de segurança uniforme entre todos os membros.

Valor do modo dispositivo Controle remoto
Não configurado Depurar Recuperação Normal
Local Não configurado Fatal Fatal Fatal Fatal
Depurar Fatal Warning Fatal Fatal
Recuperação Fatal Fatal Warning Fatal
Normal Fatal Fatal Fatal Normal

Fluxo de provisionamento de fábrica

Esse é o fluxo de provisionamento na linha de montagem do veículo, em que a infraestrutura de chave pública não está disponível.

Esse fluxo depende de um valor de 32 bytes armazenado em uma memória programável única (OTP, na sigla em inglês) chamada VVMFactoryTrust. Quando definido, esse valor é transmitido ao kernel como um parâmetro chamado androidboot.sdv.vvmfactorytrust.

Todas as VMs em uma ECU precisam ter o mesmo modo de inicialização da SDV e VVMFactoryTrust.

Estado inicial

Todas as ECUs estão inicialmente no modo de inicialização da SDV no modo UNLOCKED, com VVMFactoryTrust em branco e armazenamento confiável da VM do veículo, exceto por uds_certs presentes no VVMTrustStore.

A Figura 1 mostra um exemplo em que há três VMs da SDV (VM-A, VM-B e VM-C) distribuídas em duas ECUs separadas (ECU-0 e ECU-1):

Exemplo de provisionamento de fábrica, estado inicial

Figura 1. Provisionamento de fábrica, estado inicial.

Etapa 1: executar sdv_provisioning_tool

Inicialize todas as VMs de todas as ECUs.

Em cada VM, execute sdv_provisioning_tool.

  1. A ferramenta se comunica com o agente de descoberta de serviço local e aguarda que ele sinalize que a malha segura da SDV está concluída e que o agente gravou a lista de chaves públicas de UDS em /vvmtruststore/uds_pubs.
  2. Quando isso ocorre, a ferramenta recebe o hash do /vvmtruststore/uds_pubs recém-gravado e o gera.

Provisionamento de fábrica, etapa 1

Figura 2. Provisionamento de fábrica, etapa 1.

Etapa 2: gravar VVMFactoryTrust

Em uma VM de cada ECU:

  1. Grave o hash de /vvmtruststore/uds_pubs que foi gerado por sdv_provisioning_tool na etapa anterior em VVMFactoryTrust. A forma como essa gravação é realizada é específica do OEM ou do fornecedor e está fora do escopo desta especificação.

Provisionamento de fábrica, etapa 2

Figura 3. Provisionamento de fábrica, etapa 2.

Etapa 3: reinicializar no modo de inicialização da SDV bloqueado

Reinicialize todas as VMs em todas as ECUs no modo de inicialização da SDV no modo LOCKED.

O agente de descoberta de serviço confia em VMs em ECUs com as chaves públicas de UDS listadas em uds_pubs, porque o hash desse arquivo corresponde ao VVMFactoryTrust.

Como as ECUs foram provisionadas juntas, elas estão permanentemente vinculadas e podem ser consideradas como uma única peça de hardware do ponto de vista da verificação da cadeia de DICE.

Provisionamento de fábrica, etapa 3

Figura 4. Provisionamento de fábrica, etapa 3.

Fluxo de substituição de peças

Esse é o fluxo de provisionamento em uma oficina ou garagem autorizada, em que uma ECU com defeito precisa ser substituída por uma nova e não provisionada.

Esse fluxo depende de certificados de UDS emitidos diretamente pela autoridade raiz declarada em vvmconfig ou indiretamente, por alguma cadeia de autoridades intermediárias.

Estado inicial

Todas as VMs já foram provisionadas de fábrica e estão em execução no modo de inicialização da SDV no modo LOCKED.

A Figura 5 mostra um exemplo em que a ECU-0 está com defeito e precisa ser substituída:

Substituição de peças, estado inicial

Figura 5. Substituição de peças, estado inicial.

Etapa 1: instalar a nova ECU

Instale a nova ECU, que está em um estado em branco e não provisionado.

Na Figura 6, quando a ECU-2 (a ECU de substituição) é ligada, há duas malhas seguras da SDV separadas: uma no estado Warning e outra no estado Normal. Ambas as malhas seguras da SDV estão incompletas.

Substituição de peças, etapa 1

Figura 6. Substituição de peças, etapa 1.

Etapa 2: reinicializar no modo de inicialização da SDV desbloqueado

Reinicialize todas as VMs de todas as ECUs no modo de inicialização da SDV no modo UNLOCKED.

Na Figura 7, a VM-B e a VM-C entram na malha segura da SDV Warning, que está concluída.

Substituição de peças, etapa 2

Figura 7. Substituição de peças, etapa 2.

Etapa 3: executar sdv_provisioning_tool

Em cada VM, execute sdv_provisioning_tool.

A ferramenta se comunica com o agente de descoberta de serviço local e aguarda que ele sinalize que a malha segura da SDV está concluída e que o agente gravou a lista de chaves públicas de UDS em /vvmtruststore/uds_pubs.

Quando isso ocorre, a ferramenta recebe o hash do /vvmtruststore/uds_pubs recém-gravado e o gera, mas esse hash não é usado nesse fluxo.

Substituição de peças, etapa 3

Figura 8. Substituição de peças, etapa 3.

Etapa 4: instalar certificados de UDS

  • Extraia /vvmtruststore/uds_pubs de uma VM da SDV arbitrária. Não importa qual, porque é a mesma para todas as VMs na mesma malha segura da SDV.
  • Recupere os certificados de provisionamento para todas as chaves públicas de UDS listadas em /vvmtruststore/uds_pubs.
    • Isso geralmente significa enviar para um servidor remoto que já tenha os certificados armazenados ou que os gere verificando as chaves públicas recebidas em um banco de dados de chaves públicas de UDS conhecidas. Esse banco de dados foi criado com as chaves públicas de UDS extraídas durante a fabricação da ECU.
  • Grave o /vvmtruststore/uds_certs de cada VM da SDV.

Substituição de peças, etapa 4

Figura 9. Substituição de peças, etapa 4.

Etapa 5: reinicializar no modo de inicialização da SDV bloqueado

Reinicialize todas as VMs no modo de inicialização da SDV no modo LOCKED.

Se a malha segura da SDV estiver incompleta, volte à etapa 2.

Substituição de peças, etapa 5

Figura 10. Substituição de peças, etapa 5.