Um novo conceito chamado Modo de inicialização SDV, que pode ser bloqueado ou desbloqueado, define como o agente de descoberta de serviço SDV em uma VM SDV se comporta ao tentar se conectar a outros agentes de descoberta de serviço (em execução em outras VMs SDV) para estabelecer uma malha segura. Ele é semelhante ao conceito de estado do dispositivo do Android Inicialização verificada.
O modo de inicialização SDV é usado ao provisionar o armazenamento confiável da VM do veículo ou ao atualizá-lo.
Comportamento da malha segura SDV
A malha de descoberta de serviço pode estar em um dos seguintes estados, dependendo dos valores de inicialização que ela recebe: normal, aviso ou fatal.
Um carro só chega às mãos do proprietário quando a malha está no estado "Normal". É impossível que a malha passe do estado "Normal" para "Aviso" sem intervenção de diagnóstico. "Aviso", em um ambiente de produção (por exemplo, não de desenvolvimento/depuração), 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 SDV passar de "Normal" para "Fatal" apenas devido a uma atualização over-the-air (OTA), essa atualização será considerada ruim, e você voltará à versão "Normal" original.
As seções a seguir descrevem esses estados com mais detalhes.
Normal
- A inicialização do sistema é
SECUREdo ponto de vista da descoberta de serviço. - A descoberta de serviço só se conecta a pares que ela acredita terem sido inicializados com segurança e, como consequência, acredita que a malha segura SDV da qual faz parte é segura.
Alerta
- A inicialização do sistema pode ter sido comprometida, já que algumas verificações estão desativadas.
- A descoberta de serviço só se conecta a pares que também têm as mesmas verificações desativadas. Portanto, ela faz parte de uma malha segura SDV com as mesmas propriedades de segurança.
- A inicialização do par pode ter sido concluída com sucesso ou sem sucesso. Não é possível verificar devido a falhas / desativações locais.
- 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 SDV Secure.
- Somente os serviços necessários para fluxos de provisionamento precisam estar disponíveis quando a malha está nesse estado.
Fatal
- Erro crítico nas fases 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. Não é possível que os serviços locais se comuniquem com serviços remotos.
- A inicialização do sistema é UNSECURE do ponto de vista da descoberta de serviço.
Modo de inicialização SDV
O modo de inicialização SDV tem dois valores possíveis: UNLOCKED e LOCKED. Em relação ao estabelecimento da malha de descoberta de serviço, o modo LOCKED significa que os erros de verificação são fatais, enquanto no modo UNLOCKED eles não são.
Observe que o modo de inicialização SDV é diferente do estado do dispositivo do Android (também conhecido como modo AVB ). O modo de inicialização SDV orienta o comportamento da malha segura SDV e se os erros de conexão de malha são FATAL. O modo AVB determina se as verificações feitas pelo bootloader do Android são fatais.
| CONDIÇÃO | Modo de inicialização SDV | |
|---|---|---|
| DESBLOQUEADO | BLOQUEADO | |
| O armazenamento confiável da VVM local está vazio | Alerta | Fatal |
| Cadeia de DICE local ausente | Fatal | Fatal |
| Falha na verificação da cadeia de DICE local | Alerta | Fatal |
| Modo SDV e AVB local correspondente | Consulte a tabela | |
| Comparação do valor do modo do dispositivo remoto | Consulte a tabela | |
Falha na correspondência de uds_pubs remoto |
Alerta | Fatal |
| Falha na verificação da cadeia de DICE remota (usando políticas de DICE) | Alerta | 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 SDV comportamento da malha segura. As cores são definidas na seção Integração específica do Android da documentação do AVB.
| Modo AVB x modo de inicialização SDV | Modo de inicialização SDV | ||
|---|---|---|---|
| DESBLOQUEADO | BLOQUEADO | ||
| AVB BLOQUEADO | Verde | Alerta | Normal |
| Amarelo | Fatal | Fatal | |
| AVB DESBLOQUEADO | Orange | Alerta | Fatal |
Valor do modo do dispositivo
Em uma cadeia de DICE, cada certificado CDI tem um valor de modo. Ele é usado para descrever 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 do dispositivo é definido, que é derivado do valor de modo de todas as fases de CDI das cadeias de DICE relevantes para uma determinada VM 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
- Defina
deviceModecomoDeviceMode::Normal - Defina
diceChainListcomo a lista de cadeias de DICE relevantes para uma VM SDV - Para cada
diceChainemdiceChainList:- Defina
cdiListcomo a lista de certificados CDI emdiceChain: - Para cada
cdiCertemcdiList:- Defina
cdiDeviceModecomo oDeviceModecorrespondente acdiCert.mode. - Defina
deviceModecomomin(deviceMode, cdiDeviceMode).
- Defina
- Defina
- Retorne
deviceMode.
Comparação do valor do modo do dispositivo remoto
Um agente de descoberta de serviço só se conecta 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 tenha membros com propriedades de segurança diferentes. Portanto, 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 | Alerta | Fatal | Fatal | |
| Recuperação | Fatal | Fatal | Alerta | 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 SDV e VVMFactoryTrust.
Estado inicial
Todas as ECUs são inicialmente desbloqueadas no modo de inicialização SDV, com VVMFactoryTrust e
VVMTrustStore em branco, além de possivelmente qualquer uds_certs presente no
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).
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ço 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.
- A ferramenta se comunica com o agente de descoberta de serviço 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
Etapa 2: gravar VVMFactoryTrust
Em uma VM de cada ECU:
- Grave o hash de
/vvmtruststore/uds_pubsque foi gerado pelasdv_provisioning_toolna etapa anterior no VVMFactoryTrust. A forma como essa gravação é realizada é específica do OEM/fornecedor e, portanto, está fora do escopo desta especificação.
Etapa 3: reinicializar no modo de inicialização SDV bloqueado
Reinicialize todas as VMs em todas as ECUs no modo de inicialização SDV bloqueado.
O agente de descoberta de serviço confia em VMs em ECUs com as chaves públicas UDS listadas em uds_pubs, já que o hash desse arquivo corresponde ao VVMFactoryTrust.
Como as ECUs foram provisionadas juntas, elas estão permanentemente vinculadas e, portanto, podem ser consideradas como uma única peça de hardware do ponto de vista da verificação da cadeia de DICE.
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 no vvmconfig ou indiretamente, por alguma cadeia de autoridades intermediárias.
Estado inicial
Todas as VMs já estão provisionadas de fábrica e em execução com o modo de inicialização SDV bloqueado.
A Figura 5 mostra um exemplo em que a ECU-0 está com defeito e, portanto, precisa ser
substituída.
Etapa 1: instalar a nova ECU
Instale a nova ECU, que estará 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 em estado de aviso e outra em estado normal. Ambas as malhas seguras SDV estão incompletas.
Etapa 2: reinicializar no modo de inicialização SDV desbloqueado
Reinicialize todas as VMs de todas as ECUs no modo de inicialização SDV desbloqueado.
Na Figura 7, a VM-B e a VM-C se juntam à malha segura SDV de aviso, que agora está completa.
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 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.
Etapa 4: instalar certificados UDS
- Extraia
/vvmtruststore/uds_pubsde uma VM SDV arbitrária. Não importa qual, já que será igual 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.- 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 UDS conhecidas. Esse banco de dados teria sido criado com as chaves públicas UDS extraídas durante a fabricação da ECU.
- Grave o
/vvmtruststore/uds_certsde cada VM SDV.
Etapa 5: reinicializar no modo de inicialização SDV bloqueado
Reinicialize todas as VMs com o modo de inicialização SDV bloqueado.
Se, por algum motivo, a malha segura SDV estiver incompleta, volte à etapa 2.