En esta página, se describe cómo habilitar las funciones de origen de encriptación de vinculación basada en vehículos.
Descripción general
El objetivo principal de la función básica de vinculación del vehículo es proteger aún más la privacidad del usuario al proteger los datos del sistema de infoentretenimiento en el vehículo (IVI) contra la eliminación del vehículo. Este es mediante la vinculación de las claves de encriptación de almacenamiento con otra unidad de control electrónico (ECU), de modo que si la IVI se quita y se coloca en otro vehículo (o se ejecuta en un banco de pruebas), y se encriptan los datos del usuario en la IVI no se puede desencriptar.
Para vincular las claves de encriptación de archivos, Vold combina un valor inicial específico del vehículo con la encriptación de claves.
la derivación de claves para que sean únicas y estén vinculadas físicamente al vehículo. El valor inicial es un array de bytes,
que el OEM expuso 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 pueden ser consultadas
por daemons del sistema con privilegios.
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 vehículos
La vinculación de la encriptación de almacenamiento con el vehículo debe habilitarse de forma explícita y no se puede activar sin restablecer la configuración de fábrica. Esto significa que una actualización inalámbrica (OTA) no puede habilitar la función sin limpiar el dispositivo. Un OEM podría optar por habilitar la función cuando si también restablecen su configuración de fábrica. Por ejemplo, durante una visita de servicio.
Para habilitar esta función, es compatible con 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 está
se espera que persistan en una ECU separada de la IVI. La propiedad se establece inicialmente
SO Android Automotive (AAOS), que lo genera con un número aleatorio criptográficamente seguro
de generación de demanda (CSRNG). Luego, AAOS lee la propiedad en los inicios posteriores.
La forma en que el VHAL almacena el valor de STORAGE_ENCRYPTION_BINDING_SEED
es específico del proveedor.
Tenemos recomendaciones generales para proteger la semilla:
- (Recomendado) Una ECU almacena las semillas en el vehículo que está físicamente estén bien protegidos. Si no es así, es trivial que tanto la IVI como la ECU se extraigan de la vehículo.
- (Recomendado) IVI y ECU deben autenticarse mutuamente para intercambiar el valor inicial a para evitar la falsificación de identidad para el origen de la ECU.
- (Recomendado) El valor inicial debe transmitirse a través de un canal seguro como protección contra CAN bus: Sniffing
Además, agrega lo siguiente para garantizar que el proveedor init.target.rc
en
late-fs
antes del mount_all --late
:
# feed vehicle binding seed to vold
exec_start vold_seed_binding
La 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
Aún no se activó la partición /data
.
Configura la vinculación basada en vehículos
Si el valor inicial de la ECU no coincide, el dispositivo se reinicia en la recuperación y le pide al usuario que borre
la partición /data
o vuelve a intentarlo.
El comportamiento de solicitar y borrar datos se puede cambiar en builtins.cpp:
- Cambia
prompt_and_wipe_data
porwipe_data
. El dispositivo limpia y, luego, se reinicia sin solicitarlo. - El mensaje de solicitud se incluye en
recovery.cpp
Figura 2: Mensaje de solicitud.
Prueba la vinculación basada en vehículos
Pruebas simuladas
Hay una prueba de prueba en
packages/services/Car/cpp/security/vehicle_binding_util/tests
Para ejecutar esta prueba de prueba, haz lo siguiente:
attest libvehicle_binding_util_test
Pruebas de integración
Se proporciona una prueba 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