Usar a criptografia de arquivos vinculados ao veículo

Nesta página, descrevemos como ativar os recursos de origem da criptografia de vinculação baseada em veículo.

Visão geral

O objetivo principal do recurso de origem de vinculação de veículos é proteger ainda mais a privacidade do usuário, proteger dados no sistema de infoentretenimento interno do veículo (IVI, na sigla em inglês) contra remoções do veículo. Isso é isso é feito vinculando as chaves de criptografia de armazenamento a alguma outra unidade de controle eletrônico (ECU), de modo que, se o O IVI é removido e colocado em outro veículo (ou executado em um banco de testes), os dados do usuário criptografados Não é possível descriptografar o IVI.

Para vincular chaves de criptografia de arquivos, o Vold mistura uma semente específica do veículo com criptografia de chaves. derivação de chaves para que as chaves sejam únicas e vinculadas fisicamente ao veículo. A sugestão é uma matriz de bytes, expostas como uma nova propriedade do OEM na camada de abstração de hardware do veículo (VHAL, na sigla em inglês), STORAGE_ENCRYPTION_BINDING_SEED: As permissões desta propriedade são restritas, de modo que só pode ser consultado por daemons do sistema com privilégios.

Diagrama da arquitetura

Esta figura ilustra a arquitetura da integração vinculada ao veículo:

Figura 1. Arquitetura vinculada a veículos.

Ativar vinculação baseada em veículo

A vinculação da criptografia de armazenamento ao veículo precisa ser explicitamente ativada e não pode ser ativada sem redefinir o dispositivo para a configuração original. Isso significa que uma atualização OTA não pode ser ativar o recurso sem limpar o dispositivo. Um OEM pode optar por ativar o recurso se eles também redefinirem o dispositivo para a configuração original. Por exemplo, em uma visita de serviço.

Esse recurso é ativado ao oferecer suporte à propriedade STORAGE_ENCRYPTION_BINDING_SEED na HAL do veículo fornecido pelo fornecedor. Essa propriedade contém uma string de bytes de 16 bytes de comprimento e é deverá ser mantida em uma ECU separada da IVI. A propriedade é definida inicialmente pelo Android Automotive OS (AAOS), que o gera usando um número aleatório criptograficamente seguro. (CSRNG). Em seguida, o AAOS lê a propriedade nas inicializações seguintes.

A forma como a VHAL armazena o valor de STORAGE_ENCRYPTION_BINDING_SEED é específica do fornecedor. Temos recomendações gerais para proteger a semente:

  1. (Recomendado) A semente é armazenada por uma ECU no veículo que está fisicamente bem protegidas. Caso contrário, é trivial que a IVI e a ECU sejam extraídas do veículo
  2. (Recomendado) A IVI e a ECU devem se autenticar mutuamente para trocar a semente com evitar solicitações de spoofing para a semente da ECU.
  3. (Recomendado) A semente precisa ser transmitida usando um canal seguro para evitar Interceptação de barramento CAN.

Além disso, adicione o seguinte para garantir que o fornecedor init.target.rc nos late-fs antes de mount_all --late:

# feed vehicle binding seed to vold
exec_start vold_seed_binding

A HAL do veículo precisa ser iniciada em early_hal, e não em hal now. Qualquer propriedade do sistema persist.* não pode ser acessada em early-hal porque o A partição /data ainda não foi montada.

Configurar a vinculação baseada em veículo

Se a semente da ECU não corresponder, o dispositivo será reinicializado na recuperação e solicitará que o usuário faça a limpeza /data ou tente novamente.

O comportamento de comando e limpeza de dados pode ser alterado em builtins.cpp (link em inglês):

  1. Mude prompt_and_wipe_data para wipe_data. O dispositivo exclui permanentemente e é reinicializado sem enviar solicitação.
  2. A mensagem de solicitação está contida recovery.cpp (em inglês).

    Figura 2. Mensagem de solicitação.

Testar a vinculação baseada em veículo

Simulação de teste

Um teste simulado é fornecido packages/services/Car/cpp/security/vehicle_binding_util/tests:

Para executar esse teste simulado:

attest libvehicle_binding_util_test

Testes de integração

Um teste de teste é fornecido packages/services/Car/cpp/security/vehicle_binding_util/tests:

Para executar esse teste de integração:

atest vehicle_binding_integration_test