SDV Boot Mode define el comportamiento del agente de Service Discovery de SDV en una VM de SDV cuando intenta conectarse a otros agentes de Service Discovery (que se ejecutan en otras VMs de SDV) para establecer una malla segura. Esto es similar al concepto de estado del dispositivo existente del inicio verificado de Android. El modo de inicio de SDV puede ser LOCKED o
UNLOCKED.
El modo de inicio de SDV se aprovecha cuando se aprovisiona o actualiza el almacén de confianza de la VM del vehículo.
Comportamiento de la malla segura de SDV
La malla de Service Discovery se encuentra en uno de los siguientes estados, según los valores de inicio que recibe: Normal, Warning o Fatal.
Un automóvil llega a manos de su propietario solo cuando su malla está en estado Normal. La malla requiere una intervención de diagnóstico para cambiar de un estado Normal a Warning. En un entorno de producción (por ejemplo, no de desarrollo ni de depuración), el estado Warning solo se produce durante el aprovisionamiento.
Fatal es una falla fundamental, similar a una imagen system_ext que no pasa la verificación de firma en el bootloader de Android. Si la malla de SDV pasa de Normal a Fatal solo debido a una actualización inalámbrica (OTA), la actualización se considera incorrecta y la malla vuelve a la versión Normal original.
En las siguientes secciones, se describen los estados con más detalle.
Normal
- El inicio del sistema es
SECUREdesde la perspectiva de Service Discovery. - Service Discovery solo se conecta con pares que se iniciaron de forma segura. Un par iniciado de forma segura implica que la malla segura de SDV también es segura.
Warning
- Es posible que el inicio del sistema se haya vulnerado, ya que se inhabilitaron algunas verificaciones.
- Service Discovery solo se conecta con pares que también tienen las mismas verificaciones inhabilitadas. Forma parte de una malla segura de SDV con las mismas propiedades de seguridad que ella.
- No se puede verificar el éxito del inicio de un par debido a fallas locales o funciones inhabilitadas.
- Fuera de un entorno o situación de desarrollo, esto tiene las siguientes implicaciones:
- Los datos del usuario no deben estar disponibles. Es decir, no deben transmitirse ni verse afectados por la comunicación a través de la malla segura de SDV.
- Solo los servicios necesarios para los flujos de aprovisionamiento deben estar disponibles cuando la malla se encuentra en este estado.
Fatal
- Un error crítico durante las etapas de inicio del sistema.
- Hay al menos una falla o error fundamental que impide que el agente de Service Discovery establezca una malla. Los servicios locales no pueden comunicarse con los servicios remotos.
- El inicio del sistema es UNSECURE desde la perspectiva de Service Discovery.
Modo de inicio de SDV
El modo de inicio de SDV tiene dos valores posibles: UNLOCKED y LOCKED. Para el establecimiento de la malla de Service
Discovery, LOCKED indica que los errores de verificación son
fatales, y UNLOCKED significa que no lo son.
| Condición | Modo de inicio de SDV | |
|---|---|---|
UNLOCKED
| LOCKED |
|
| Almacén de confianza de VVM local vacío | Warning | Fatal |
| Falta la cadena DICE local | Fatal | Fatal |
| Falla en la verificación de la cadena DICE local | Warning | Fatal |
| Coincidencia del modo SDV y AVB local | Consulta la tabla en Coincidencia del modo SDV y AVB local | |
| Comparación del valor del modo del dispositivo remoto | Consulta la tabla en Comparación del valor del modo del dispositivo remoto | |
Falla en la coincidencia de uds_pubs remota |
Warning | Fatal |
| Falla en la verificación de la cadena DICE remota (con políticas de DICE) | Warning | Fatal |
| Falla en el protocolo de enlace de autenticación remota | Fatal | Fatal |
Coincidencia del modo SDV y AVB local
En la siguiente tabla, se muestra cómo el modo AVB y el modo de inicio de SDV afectan el comportamiento de la malla segura de SDV. Los colores se definen en la sección de integración específica de Android de la documentación de AVB.
| Modo AVB x modo de inicio de SDV | Modo de inicio de SDV | ||
|---|---|---|---|
UNLOCKED |
LOCKED |
||
AVB LOCKED |
Verde | Warning | Normal |
| Amarillo | Fatal | Fatal | |
AVB UNLOCKED |
Orange | Warning | Fatal |
Valor del modo del dispositivo
En una cadena DICE, cada certificado CDI tiene un valor de modo. Este valor describe el estado de seguridad de esa capa en función de su entrada de configuración. Para expresar la postura de seguridad de todo el software del dispositivo, se define un valor del modo del dispositivo, que se deriva del valor del modo de todas las etapas de CDI de las cadenas DICE relevantes para una VM de SDV determinada (es decir, HLOS de Android y Secure World) y se define de la siguiente manera:
enum DeviceMode {
NotConfigured = 0,
Recovery = 1,
Debug = 2,
Normal = 3,
}
Algoritmo
El algoritmo para calcular el valor del modo del dispositivo es el siguiente:
- Especifica
deviceModecomoDeviceMode::Normal. - Especifica
diceChainListcomo la lista de cadenas DICE relevantes para una VM de SDV. - Para cada
diceChainendiceChainList:- Especifica
cdiListcomo la lista de certificados CDI endiceChain: - Para cada
cdiCertencdiList, haz lo siguiente:- Especifica
cdiDeviceModecomo elDeviceModecorrespondiente acdiCert.mode. - Establece
deviceModeenmin(deviceMode, cdiDeviceMode).
- Especifica
- Especifica
- Muestra
deviceMode.
Comparación del valor del modo del dispositivo remoto
Un agente de Service Discovery solo se conecta con otros agentes que tienen el mismo valor del modo del dispositivo.
El valor del modo del dispositivo garantiza que una malla no pueda tener miembros con diferentes propiedades de seguridad. La malla resultante tiene una postura de seguridad uniforme entre todos sus miembros.
| Valor del modo del dispositivo | Control remoto | ||||
|---|---|---|---|---|---|
| No configurada | Depurar | Recuperación | Normal | ||
| Local | No configurada | Fatal | Fatal | Fatal | Fatal |
| Depurar | Fatal | Warning | Fatal | Fatal | |
| Recuperación | Fatal | Fatal | Warning | Fatal | |
| Normal | Fatal | Fatal | Fatal | Normal | |
Flujo de aprovisionamiento de fábrica
Este es el flujo de aprovisionamiento en la línea de ensamblaje del vehículo, en el que se supone que la infraestructura de clave pública no está disponible.
Este flujo depende de un valor de 32 bytes almacenado en la memoria programable de una sola vez (OTP) llamada VVMFactoryTrust. Cuando se establece, este valor se pasa al kernel como un parámetro llamado androidboot.sdv.vvmfactorytrust.
Todas las VMs de una ECU deben tener el mismo modo de inicio de SDV y VVMFactoryTrust.
Estado inicial
Inicialmente, todas las ECUs están en modo de inicio de SDV en modo UNLOCKED, con VVMFactoryTrust en blanco
y el almacén de confianza de la VM del vehículo, además de cualquier uds_certs
presente en VVMTrustStore.
En la figura 1, se muestra un ejemplo en el que hay tres VMs de SDV (VM-A, VM-B y VM-C) distribuidas en dos ECUs separadas (ECU-0 y ECU-1):
Figura 1: Aprovisionamiento de fábrica, estado inicial
Paso 1: Ejecuta sdv_provisioning_tool
Inicia todas las VMs de todas las ECUs.
En cada VM, ejecuta sdv_provisioning_tool.
- La herramienta se comunica con el agente de Service Discovery local y espera a que indique que la malla segura de SDV está completa y que el agente escribió la lista de claves públicas de UDS en
/vvmtruststore/uds_pubs. - Cuando esto sucede, la herramienta obtiene el hash de
/vvmtruststore/uds_pubsque acaba de escribir y lo muestra.
Figura 2: Aprovisionamiento de fábrica, paso 1
Paso 2: Escribe VVMFactoryTrust
En una VM de cada ECU, haz lo siguiente:
- Escribe el hash de
/vvmtruststore/uds_pubsque generósdv_provisioning_toolen el paso anterior en VVMFactoryTrust. La forma en que se realiza esta escritura es específica del OEM o del proveedor y está fuera del alcance de esta especificación.
Figura 3: Aprovisionamiento de fábrica, paso 2
Paso 3: Reinicia en el modo de inicio de SDV bloqueado
Reinicia todas las VMs de todas las ECUs en el modo de inicio de SDV en modo LOCKED.
El agente de Service Discovery confía en las VMs de las ECUs con las claves públicas de UDS que se enumeran en uds_pubs porque el hash de este archivo coincide con VVMFactoryTrust.
Debido a que las ECUs se aprovisionaron juntas, están vinculadas de forma permanente y se pueden considerar como una sola pieza de hardware desde una perspectiva de verificación de la cadena DICE.
Figura 4: Aprovisionamiento de fábrica, paso 3
Flujo de reemplazo de piezas
Este es el flujo de aprovisionamiento en un taller o garaje de reparación de automóviles autorizado, en el que se debe reemplazar una ECU defectuosa por una nueva sin aprovisionar.
Este flujo depende de los certificados de UDS emitidos directamente por la autoridad raíz
indicada en vvmconfig o indirectamente, a través de alguna cadena de
autoridades intermedias.
Estado inicial
Todas las VMs ya están aprovisionadas de fábrica y se ejecutan en el modo de inicio de SDV en modo LOCKED.
En la figura 5, se muestra un ejemplo en el que la ECU-0 no funciona correctamente y debe reemplazarse:
Figura 5: Reemplazo de piezas, estado inicial
Paso 1: Instala la ECU nueva
Instala la ECU nueva, que está en un estado en blanco y sin aprovisionar.
En la figura 6, cuando se enciende la ECU-2 (la ECU de reemplazo), hay dos mallas seguras de SDV disjuntas: una en estado Warning y otra en estado Normal. Ambas mallas seguras de SDV están incompletas.
Figura 6: Reemplazo de piezas, paso 1
Paso 2: Reinicia en el modo de inicio de SDV desbloqueado
Reinicia todas las VMs de todas las ECUs en el modo de inicio de SDV en modo UNLOCKED.
En la figura 7, la VM-B y la VM-C se unen a la malla segura de SDV Warning, que está completa.
Figura 7: Reemplazo de piezas, paso 2
Paso 3: Ejecuta sdv_provisioning_tool
En cada VM, ejecuta sdv_provisioning_tool.
La herramienta se comunica con el agente de Service Discovery local y espera a que indique que la malla segura de SDV está completa y que el agente escribió la lista de claves públicas de UDS en /vvmtruststore/uds_pubs.
Cuando esto sucede, la herramienta obtiene el hash de /vvmtruststore/uds_pubs que acaba de escribir y lo muestra, pero este hash no se usa en este flujo.
Figura 8: Reemplazo de piezas, paso 3
Paso 4: Instala certificados de UDS
- Extrae
/vvmtruststore/uds_pubsde una VM de SDV arbitraria. No importa cuál, ya que es la misma para todas las VMs de la misma malla segura de SDV. - Recupera los certificados de aprovisionamiento para todas las claves públicas de UDS que se enumeran en ese
/vvmtruststore/uds_pubs.- Por lo general, esto significa enviarlo a un servidor remoto que ya tiene almacenados los certificados o los genera verificando las claves públicas recibidas en una base de datos de claves públicas de UDS conocidas. Esta base de datos se compiló a partir de las claves públicas de UDS extraídas durante la fabricación de la ECU.
- Escribe el
/vvmtruststore/uds_certsde cada VM de SDV.
Figura 9: Reemplazo de piezas, paso 4
Paso 5: Reinicia en el modo de inicio de SDV bloqueado
Reinicia todas las VMs en el modo de inicio de SDV en modo LOCKED.
Si la malla segura de SDV está incompleta, vuelve al paso 2.
Figura 10: Reemplazo de piezas, paso 5