Utilice cifrado de archivos vinculados al vehículo

Esta página describe cómo habilitar las funciones de inicialización de cifrado de enlaces basados ​​en vehículos.

Descripció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 del sistema de información y entretenimiento 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 la 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 pueden ser consultados por demonios del sistema privilegiados.

Diagrama de arquitectura

Esta figura ilustra la arquitectura de la integración vinculada a vehículos:

Figura 1. Arquitectura destinada al vehículo.

Habilitar el enlace basado en vehículos

La vinculación del cifrado de almacenamiento al vehículo debe habilitarse explícitamente y no se puede activar ni desactivar sin realizar un restablecimiento de fábrica. Esto significa que una actualización inalámbrica (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 característica se habilita al admitir la propiedad STORAGE_ENCRYPTION_BINDING_SEED en el vehículo HAL proporcionado por el proveedor. Esta propiedad contiene una cadena de bytes de 16 bytes de longitud y se espera que persista 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 seguro (CSRNG). Luego, AAOS lee la propiedad en arranques posteriores.

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

  1. ( Recomendado ) La semilla se almacena mediante una ECU en el vehículo que está físicamente bien protegido. De lo contrario, es trivial sacar tanto el IVI como la ECU del vehículo.
  2. ( Recomendado ) IVI y ECU deben autenticarse mutuamente para intercambiar la semilla para evitar solicitudes falsas de semilla desde la ECU.
  3. ( Recomendado ) La semilla debe transmitirse utilizando un canal seguro para protegerla contra el rastreo del bus CAN.

Además, agregue lo siguiente para garantizar que el proveedor init.target.rc esté en late-fs antes de 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 porque la partición /data aún no está montada.

Configurar el enlace basado en vehículos

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

El comportamiento de solicitud y borrado de datos se puede cambiar en incorporados.cpp :

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

    Figura 2. Mensaje de aviso.

Encuadernación basada en vehículos de prueba

Pruebas simuladas

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