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 existente de estado del dispositivo del inicio verificado de Android.
SDV Boot Mode se usa cuando se aprovisiona o actualiza el almacén de confianza de la VM del vehículo (VVM Trust Store, también conocido como vvmtruststore).
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.
En los vehículos de producción que se entregan a los clientes, la malla segura de SDV debe estar en el 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 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 cargador de arranque de Android. Si la malla segura 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 comparten el mismo conjunto exacto de verificaciones inhabilitadas, lo que garantiza que todos los pares de la malla segura de SDV compartan propiedades de seguridad idénticas.
- 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
UNSECUREdesde la perspectiva de Service Discovery.
SDV Boot Mode
SDV Boot Mode tiene dos valores posibles: LOCKED y UNLOCKED. 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 | SDV Boot Mode | |
|---|---|---|
UNLOCKED |
LOCKED |
|
| El almacén de confianza de VVM local está vacío | Warning | Fatal |
| Falta la cadena DICE local | Fatal | Fatal |
| Falla de verificación de la cadena DICE local | Warning | Fatal |
| Coinciden el modo SDV local y el modo AVB | Consulta la tabla en Coinciden el modo SDV local y el modo AVB | |
| Comparación del valor del modo del dispositivo remoto | Consulta la tabla en Remote device mode value comparison | |
Falla de coincidencia de uds_pubs remoto |
Warning | Fatal |
| Falla de verificación de la cadena DICE remota (con políticas de DICE) | Warning | Fatal |
| Falla de protocolo de enlace de autenticación remota | Fatal | Fatal |
Coinciden el modo SDV local y el modo AVB
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, la especificación de SDV define un valor de modo del dispositivo. Este valor se deriva del valor de modo de todas las etapas de CDI en las cadenas DICE relevantes para una VM de SDV determinada (es decir, HLOS de Android y Secure World) y usa la siguiente enumeración:
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 de 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 una memoria programable de una sola vez (OTP) llamada confianza de fábrica de la VM del vehículo (VVM) o 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 la misma confianza de fábrica de VVM.
Estado inicial
Inicialmente, todas las ECUs están en el modo de inicio de SDV en UNLOCKED modo, con la confianza de fábrica de VVM y el almacén de confianza de la VM del vehículo en blanco, además de cualquier uds_certs
presente en el 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 la confianza de fábrica de VVM
En una VM de cada ECU, haz lo siguiente:
- Escribe el hash de
/vvmtruststore/uds_pubsque generósdv_provisioning_toolen el paso anterior en la confianza de fábrica de VVM. 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 la confianza de fábrica de VVM.
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 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, VM-B y 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, este paso implica enviar las claves públicas de UDS extraídas (o el archivo
/vvmtruststore/uds_pubs) a un servidor de aprovisionamiento remoto. El servidor recupera certificados preexistentes o genera otros nuevos verificando las claves públicas recibidas en una base de datos de claves públicas de UDS conocidas que se creó durante la fabricación de la ECU.
- Por lo general, este paso implica enviar las claves públicas de UDS extraídas (o el archivo
- 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