Uso del cifrado de archivos vinculados al vehículo

Este contenido describe cómo habilitar las características iniciales de cifrado de enlace basado en vehículos.

Visión general

El objetivo principal de la función de semilla de vinculación del vehículo es proteger aún más la privacidad del usuario al proteger los datos en el sistema de infoentretenimiento en el vehículo (IVI) para que no se eliminen del vehículo. Esto se hace vinculando las claves de cifrado de almacenamiento a alguna otra unidad de control electrónico (ECU), de modo que si el IVI se retira y se coloca en otro vehículo (o se ejecuta en un banco de pruebas), los datos de usuario cifrados en el IVI no se pueden descifrar.

Para vincular las claves de cifrado de archivos, Vold mezcla una semilla específica del vehículo con la derivación de la clave de cifrado de claves para que las claves sean únicas y estén vinculadas físicamente al vehículo. La semilla es una matriz de bytes, expuesta como una nueva propiedad de Capa de abstracción de hardware del vehículo (VHAL) por el OEM, STORAGE_ENCRYPTION_BINDING_SEED . Los permisos de esta propiedad están restringidos de modo que solo los demonios del sistema privilegiados pueden consultarla.

Diagrama de arquitectura

Esta figura ilustra la arquitectura de la integración ligada al vehículo:

Figura 1. Arquitectura ligada al vehículo

Habilitación del enlace basado en vehículos

La vinculación del cifrado de almacenamiento al vehículo debe habilitarse explícitamente y no se puede activar o desactivar sin realizar un restablecimiento de fábrica. Esto significa que una actualización Over-the-Air (OTA) no puede habilitar la función sin borrar también el dispositivo. Un OEM podría optar por habilitar la función tras la actualización si también restablece el dispositivo de fábrica. Por ejemplo, en una visita de servicio.

Esta función se habilita al admitir la propiedad STORAGE_ENCRYPTION_BINDING_SEED en la HAL del vehículo proporcionada por el proveedor. Esta propiedad contiene una cadena de bytes de 16 bytes de longitud y se espera que se conserve en una ECU separada del IVI. La propiedad la establece inicialmente el sistema operativo Android Automotive (AAOS), que la genera mediante un generador de números aleatorios criptográficamente seguros (CSRNG). AAOS luego lee la propiedad en los arranques posteriores.

La forma en que VHAL almacena el valor de STORAGE_ENCRYPTION_BINDING_SEED es específica del proveedor. Tenemos recomendaciones generales para proteger la semilla:

  1. ( Recomendado ) La semilla es almacenada por una ECU en el vehículo que está físicamente bien protegido. Si no, es trivial que tanto el IVI como la ECU se extraigan del vehículo.
  2. ( Recomendado ) IVI y ECU deben autenticarse mutuamente para intercambiar la semilla para evitar la suplantación de solicitudes de la semilla de la ECU.
  3. ( Recomendado ) La semilla debe transmitirse utilizando un canal seguro para protegerse contra la detección del bus CAN.

Además, agregue lo siguiente para garantizar que el proveedor init.target.rc en late-fs antes mount_all --late :

# feed vehicle binding seed to vold
exec_start vold_seed_binding

El vehículo HAL debe iniciarse en early_hal en lugar de hal now . No se puede acceder a ninguna propiedad del sistema persist.* en early-hal ya que la partición /data aún no está montada.

Configuración del enlace basado en vehículos

Si la semilla de ECU no coincide, el dispositivo se reinicia en modo de recuperación y solicita al usuario que borre la partición /data o vuelva a intentarlo.

El comportamiento de aviso y borrado de datos se puede cambiar en builtins.cpp :

  1. Cambie prompt_and_wipe_data a wipe_data . El dispositivo se borra y luego se reinicia sin un aviso.
  2. El mensaje de aviso está contenido en recovery.cpp .

    Figura 2. Mensaje de solicitud

Prueba de unión basada en vehículos

prueba simulada

Se proporciona una prueba simulada en packages/services/Car/cpp/security/vehicle_binding_util/tests .

Para ejecutar esta prueba simulada:

attest libvehicle_binding_util_test

Pruebas de integración

Se proporciona una prueba de prueba en packages/services/Car/cpp/security/vehicle_binding_util/tests .

Para ejecutar esta prueba de integración:

atest vehicle_binding_integration_test