O modo de inicialização SDV define como o agente de descoberta de serviços SDV em uma VM SDV se comporta ao tentar se conectar a outros agentes de descoberta de serviços (em execução em outras VMs 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 SDV é usado ao provisionar ou atualizar a Vehicle VM Trust
Store (VVM Trust Store, também chamada de vvmtruststore).
Comportamento da malha segura SDV
A malha de descoberta de serviços está em um dos seguintes estados, dependendo dos valores de inicialização que recebe: Normal, Warning ou Fatal.
Em veículos de produção entregues aos clientes, a malha segura SDV precisa estar no estado Normal. A malha requer 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 segura 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 voltará para a versão Normal original.
As seções a seguir descrevem os estados com mais detalhes.
Normal
- A inicialização do sistema é
SECUREdo ponto de vista da descoberta de serviços. - A descoberta de serviços se conecta apenas a pares que foram inicializados com segurança. Um par inicializado com segurança implica que a malha segura 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ços se conecta apenas a pares que compartilham o mesmo conjunto de verificações desativadas, garantindo que todos os pares na malha segura SDV compartilhem propriedades de segurança idênticas.
- Não é possível verificar o sucesso de uma inicialização de par 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 SDV.
- Somente os serviços necessários para fluxos de provisionamento precisam estar disponíveis quando a malha estiver 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ços estabeleça uma malha. Os serviços locais não podem se comunicar com serviços remotos.
- A inicialização do sistema é
UNSECUREdo ponto de vista da descoberta de serviços.
Modo de inicialização SDV
O modo de inicialização SDV tem dois valores possíveis: LOCKED e UNLOCKED. Para o estabelecimento da malha de descoberta de serviços, 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 SDV | |
|---|---|---|
UNLOCKED |
LOCKED |
|
| VVM Trust Store local vazia | Warning | Fatal |
| Cadeia DICE local ausente | Fatal | Fatal |
| Falha na verificação da cadeia DICE local | Warning | Fatal |
| Modo SDV e AVB local correspondente | Consulte a tabela em SDV local e modo AVB correspondente | |
| Comparação do valor do modo do dispositivo remoto | Consulte a tabela em Remoto comparação do valor do modo do dispositivo | |
Falha na correspondência de uds_pubs remoto |
Warning | Fatal |
| Falha na verificação da cadeia DICE remota (usando políticas DICE) | Warning | Fatal |
| Falha no handshake de autenticação remota | Fatal | Fatal |
Modo SDV e AVB local correspondente
A tabela a seguir mostra como o modo AVB e o modo de inicialização SDV afetam o comportamento da malha segura 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 SDV | Modo de inicialização SDV | ||
|---|---|---|---|
UNLOCKED |
LOCKED |
||
AVB LOCKED |
Verde | Warning | Normal |
| Amarelo | Fatal | Fatal | |
AVB UNLOCKED |
Laranja | Warning | Fatal |
Valor do modo do dispositivo
Em uma cadeia 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, a especificação SDV define um valor de modo do dispositivo. Esse valor é derivado do valor do modo de todos os estágios de CDI nas cadeias DICE relevantes para uma determinada VM SDV (ou seja, HLOS do Android e Secure World) e usa a seguinte enumeração:
enum DeviceMode {
NotConfigured = 0,
Recovery = 1,
Debug = 2,
Normal = 3,
}
Algoritmo
O algoritmo para calcular o valor do modo do dispositivo é o seguinte:
- Especifique
deviceModecomoDeviceMode::Normal. - Especifique
diceChainListcomo a lista de cadeias DICE relevantes para uma VM SDV. - Para cada
diceChainemdiceChainList:- Especifique
cdiListcomo a lista de certificados CDI emdiceChain: - Para cada
cdiCertemcdiList:- Especifique
cdiDeviceModecomo oDeviceModecorrespondente acdiCert.mode. - Defina
deviceModecomomin(deviceMode, cdiDeviceMode).
- Especifique
- Especifique
- Retorne
deviceMode.
Comparação do valor do modo do dispositivo remoto
Um agente de descoberta de serviços se conecta apenas a outros agentes que têm o mesmo valor de modo do dispositivo.
O valor do modo do 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 do 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 na memória programável única (OTP, na sigla em inglês) chamada VVM Factory Trust ou 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 SDV e VVM Factory Trust.
Estado inicial
Todas as ECUs estão inicialmente no modo de inicialização SDV no modo UNLOCKED, com VVM Factory Trust e VVM Trust Store em branco, exceto por uds_certs
presentes na vvmtruststore. A Figura 1 mostra um exemplo em que há três VMs SDV (VM-A, VM-B e VM-C) distribuídas em duas ECUs separadas (ECU-0 e ECU-1):
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.
- A ferramenta se comunica com o agente de descoberta de serviços local e aguarda que ele sinalize que a malha segura SDV está concluída e que o agente gravou a lista de chaves públicas UDS em
/vvmtruststore/uds_pubs. - Quando isso ocorre, a ferramenta recebe o hash do
/vvmtruststore/uds_pubsrecém-gravado e o gera.
Figura 2. Provisionamento de fábrica, etapa 1.
Etapa 2: gravar VVM Factory Trust
Em uma VM de cada ECU:
- Grave o hash de
/vvmtruststore/uds_pubsque foi gerado porsdv_provisioning_toolna etapa anterior no VVM Factory Trust. A forma como essa gravação é realizada é específica do OEM ou do fornecedor e está fora do escopo desta especificação.
Figura 3. Provisionamento de fábrica, etapa 2.
Etapa 3: reinicializar no modo de inicialização SDV bloqueado
Reinicialize todas as VMs em todas as ECUs no modo de inicialização SDV no modo LOCKED.
O agente de descoberta de serviços confia em VMs em ECUs com as chaves públicas UDS listadas em uds_pubs, porque o hash desse arquivo corresponde ao VVM Factory Trust.
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 DICE.
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 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 SDV no modo LOCKED.
A Figura 5 mostra um exemplo em que a ECU-0 está com defeito e precisa ser substituída:
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 SDV separadas: uma no estado Warning e outra no estado Normal. Ambas as malhas seguras SDV estão incompletas.
Figura 6. Substituição de peças, etapa 1.
Etapa 2: reinicializar no modo de inicialização SDV desbloqueado
Reinicialize todas as VMs de todas as ECUs no modo de inicialização SDV no modo UNLOCKED.
Na Figura 7, a VM-B e a VM-C entram na malha segura SDV Warning, que está concluída.
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ços local e aguarda que ele sinalize que a malha segura SDV está concluída e que o agente gravou a lista de chaves públicas 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.
Figura 8. Substituição de peças, etapa 3.
Etapa 4: instalar certificados UDS
- Extraia
/vvmtruststore/uds_pubsde uma VM SDV arbitrária. Não importa qual, porque é a mesma para todas as VMs na mesma malha segura SDV. - Recupere os certificados de provisionamento para todas as chaves públicas UDS listadas em
/vvmtruststore/uds_pubs.- Essa etapa geralmente envolve o envio das chaves públicas UDS extraídas (ou do arquivo
/vvmtruststore/uds_pubs) para um servidor de provisionamento remoto. O servidor recupera certificados pré-existentes ou gera novos verificando as chaves públicas recebidas em um banco de dados de chaves públicas UDS conhecidas criadas durante a fabricação da ECU.
- Essa etapa geralmente envolve o envio das chaves públicas UDS extraídas (ou do arquivo
- Grave o
/vvmtruststore/uds_certsde cada VM SDV.
Figura 9. Substituição de peças, etapa 4.
Etapa 5: reinicializar no modo de inicialização SDV bloqueado
Reinicialize todas as VMs no modo de inicialização SDV no modo LOCKED.
Se a malha segura SDV estiver incompleta, volte à etapa 2.
Figura 10. Substituição de peças, etapa 5.