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:
- (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
- (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.
- (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):
- Mude
prompt_and_wipe_data
parawipe_data
. O dispositivo exclui permanentemente e é reinicializado sem enviar solicitação. - 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