En esta página, se describe cómo habilitar las funciones de valor inicial de encriptación de vinculación basadas en el vehículo.
Descripción general
El objetivo principal de la función de valor inicial de vinculación del vehículo es proteger aún más la privacidad del usuario, ya que resguarda los datos del sistema de infoentretenimiento (IVI) del vehículo contra la extracción. Para ello, se vinculan las claves de encriptación de almacenamiento a alguna otra unidad de control electrónico (ECU) de modo que, si se quita el sistema IVI y se coloca en otro vehículo (o se ejecuta en una plataforma de prueba), no se puedan desencriptar los datos del usuario en el sistema IVI.
Para vincular las claves de encriptación de archivos, Vold combina una semilla específica del vehículo con la derivación de claves de encriptación de claves para que las claves sean únicas y estén vinculadas físicamente al vehículo. La semilla es un array de bytes que el OEM expone como una nueva propiedad de la capa de abstracción de hardware del vehículo (VHAL), STORAGE_ENCRYPTION_BINDING_SEED
. Los permisos de esta propiedad están restringidos de modo que solo los demonios del sistema con privilegios pueden consultarla.
Diagrama de la arquitectura
En esta figura, se ilustra la arquitectura de la integración vinculada al vehículo:
Figura 1: Arquitectura vinculada al vehículo
Habilita la vinculación basada en el vehículo
La vinculación de la encriptación de almacenamiento al vehículo debe estar habilitada de forma explícita y no se puede activar ni desactivar sin restablecer la configuración de fábrica. Esto significa que una actualización inalámbrica (OTA) no puede habilitar la función sin borrar el dispositivo. Un OEM podría habilitar la función durante la actualización si también restablece la configuración de fábrica del dispositivo. Por ejemplo, en una visita de servicio.
Esta función se habilita admitiendo la propiedad STORAGE_ENCRYPTION_BINDING_SEED
en el HAL del vehículo proporcionado por el proveedor. Esta propiedad contiene una cadena de bytes de 16 bytes de longitud y se espera que se conserve en una ECU independiente del IVI. El SO Android Automotive (AAOS) establece la propiedad inicialmente, que la genera con un generador de números aleatorios seguros a nivel criptográfico (CSRNG). Luego, el AAOS lee la propiedad en los inicios posteriores.
La forma en que el VHAL almacena el valor de STORAGE_ENCRYPTION_BINDING_SEED
es específica de cada proveedor.
Tenemos recomendaciones generales para proteger la semilla:
- (Recomendado) Una ECU almacena la semilla en el vehículo, que está bien protegida físicamente. De lo contrario, es muy fácil extraer el IVI y la ECU del vehículo.
- (Recomendado) El IVI y la ECU deben autenticarse de forma mutua para intercambiar el valor inicial y evitar que la ECU realice solicitudes de falsificación del valor inicial.
- (Recomendado) La semilla se debe transmitir a través de un canal seguro para evitar el espionaje del bus CAN.
Además, agrega lo siguiente para asegurarte de 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 HAL del vehículo 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 se activa.
Configura la vinculación basada en el vehículo
Si la semilla de la ECU no coincide, el dispositivo se reinicia en modo de recuperación y le solicita al usuario que borre la partición /data
o que vuelva a intentarlo.
El comportamiento de los datos de limpieza y solicitud se puede cambiar en builtins.cpp:
- Cambia
prompt_and_wipe_data
porwipe_data
. El dispositivo se limpia y, luego, se reinicia sin una solicitud. - El mensaje de instrucciones se encuentra en recovery.cpp.
Figura 2: Mensaje de instrucciones
Prueba la vinculación basada en el vehículo
Pruebas simuladas
Se proporciona una prueba simulada en packages/services/Car/cpp/security/vehicle_binding_util/tests
.
Para ejecutar esta prueba simulada, haz lo siguiente:
attest libvehicle_binding_util_test
Pruebas de integración
Se proporciona una prueba de atest en
packages/services/Car/cpp/security/vehicle_binding_util/tests
.
Para ejecutar esta prueba de integración, haz lo siguiente:
atest vehicle_binding_integration_test