Un nuevo concepto llamado Modo de inicio de SDV, que puede estar bloqueado o desbloqueado, define cómo se comporta el agente de descubrimiento de servicios de SDV en una VM de SDV cuando intenta conectarse a otros agentes de descubrimiento de servicios (que se ejecutan en otras VMs de SDV) para establecer una malla segura. Es similar al concepto existente de Estado del dispositivo de Android inicio verificado.
El modo de arranque de SDV se aprovecha cuando se aprovisiona el almacén de confianza de la VM del vehículo o cuando se actualiza.
Comportamiento de Secure Mesh de SDV
La malla de Service Discovery puede estar en uno de los siguientes estados, según los valores de inicio que reciba: Normal, Warning o Fatal.
Un automóvil llega a manos de su propietario solo cuando su malla está en estado "Normal". Es imposible que la malla pase del estado "Normal" al estado "Advertencia" sin intervención de diagnóstico. La advertencia en un entorno de producción (por ejemplo, no de desarrollo o depuración) 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 del SDV pasó de "Normal" a "Fatal" solo debido a una actualización inalámbrica (OTA), esa actualización se consideraría incorrecta y volverías a la versión "Normal" original.
En las siguientes secciones, se describen esos estados con más detalle.
Normal
- El inicio del sistema es
SECUREdesde la perspectiva de Service Discovery. - El servicio de detección solo se conecta con los pares que cree que se iniciaron de forma segura y, como consecuencia, cree que la malla segura de SDV de la que forma parte es segura.
Advertencia
- Es posible que se haya vulnerado el inicio del sistema, ya que algunas verificaciones están inhabilitadas.
- El servicio de detección solo se conecta con pares que también tienen las mismas verificaciones inhabilitadas. Por lo tanto, forma parte de una malla segura de SDV con las mismas propiedades de seguridad que ella misma.
- Es posible que el inicio de pares se haya completado correctamente o no. No se puede verificar debido a fallas o inhabilitaciones locales.
- Fuera de un entorno o una situación de desarrollo, esto tiene las siguientes implicaciones:
- Los datos del usuario no deben estar disponibles. Es decir, no debe transmitirse ni verse afectado por la comunicación a través de SDV Secure.
- Solo deben estar disponibles los servicios necesarios para los flujos de aprovisionamiento cuando la malla se encuentre en este estado.
Fatal
- Error crítico en las etapas de inicio del sistema.
- Se produjo al menos una falla o un 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 INSEGURO desde la perspectiva del descubrimiento de servicios.
Modo de inicio de SDV
El modo de inicio del SDV tiene dos valores posibles: UNLOCKED y LOCKED. En cuanto al establecimiento de la malla de Service Discovery, el modo LOCKED significa que los errores de verificación son fatales, mientras que en el modo UNLOCKED no lo son.
Ten en cuenta que el modo de inicio del SDV es diferente del estado del dispositivo de Android (también conocido como modo AVB). El modo de inicio del SDV guía el comportamiento de la malla segura del SDV y determina si los errores de conexión de la malla son FATALES. El modo AVB dicta si las verificaciones que realiza el cargador de arranque de Android son fatales.
| CONDITION | Modo de inicio de SDV | |
|---|---|---|
| DESBLOQUEADO | BLOQUEADO | |
| La tienda de confianza de VVM local está vacía | Advertencia | Fatal |
| Falta la cadena local de DICE | Fatal | Fatal |
| Error en la verificación de la cadena de DICE local | Advertencia | Fatal |
| Coincidencia de modo SDV y AVB locales | Ver tabla | |
| Comparación de valores del modo de dispositivo remoto | Ver tabla | |
Error de coincidencia de uds_pubs remoto |
Advertencia | Fatal |
| Falla en la verificación de la cadena de DICE remota (con políticas de DICE) | Advertencia | Fatal |
| Fallo en la confirmación de autenticación remota | Fatal | Fatal |
Coincidencia de modo SDV y AVB locales
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 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 | ||
|---|---|---|---|
| DESBLOQUEADO | BLOQUEADO | ||
| AVB LOCKED | Verde | Advertencia | Normal |
| Amarillo | Fatal | Fatal | |
| AVB UNLOCKED | Orange | Advertencia | Fatal |
Valor del modo de dispositivo
En una cadena de DICE, cada certificado de CDI tiene un valor de modo. Se usa para describir el estado de seguridad de esa capa según su entrada de configuración. Para expresar la postura de seguridad de todo el software del dispositivo, se define un valor de modo del dispositivo, que se deriva del valor de modo de todas las etapas de CDI de las cadenas de DICE pertinentes para una VM de SDV determinada (es decir, Android HLOS y Secure World) y se define de la siguiente manera:
enum DeviceMode {
NotConfigured = 0,
Recovery = 1,
Debug = 2,
Normal = 3,
}
Algoritmo
- Sea
deviceModeigual aDeviceMode::Normal - Sea
diceChainListla lista de cadenas de DICE pertinentes para una VM de SDV. - Para cada
diceChainendiceChainList:- Sea
cdiListla lista de certificados de CDI endiceChain: - Para cada
cdiCertencdiList:- Sea
cdiDeviceModeelDeviceModecorrespondiente acdiCert.mode. - Establece
deviceModeenmin(deviceMode, cdiDeviceMode).
- Sea
- Sea
- Muestra
deviceMode.
Comparación de valores del modo de dispositivo remoto
Un agente de Service Discovery solo se conectará con otros agentes que tengan el mismo valor de modo de dispositivo que él.
El valor de Modo de dispositivo garantiza que una malla no pueda tener miembros con diferentes propiedades de seguridad. Por lo tanto, la malla resultante tiene una postura de seguridad uniforme entre todos sus miembros.
| Valor del modo de dispositivo | Remoto | ||||
|---|---|---|---|---|---|
| Sin configurar | Depurar | Recuperación | Normal | ||
| Local | Sin configurar | Fatal | Fatal | Fatal | Fatal |
| Depurar | Fatal | Advertencia | Fatal | Fatal | |
| Recuperación | Fatal | Fatal | Advertencia | Fatal | |
| Normal | Fatal | Fatal | Fatal | Normal | |
Flujo de aprovisionamiento de fábrica
Este es el flujo de aprovisionamiento en la línea de ensamblaje de vehículos, 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 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 arranque de SDV y VVMFactoryTrust.
Estado inicial
Todas las ECU se desbloquean inicialmente en el modo de arranque de SDV, con VVMFactoryTrust y VVMTrustStore en blanco, excepto posiblemente 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 ECU separadas (ECU-0 y ECU-1).
Paso 1: Ejecuta sdv_provisioning_tool
Inicia todas las VMs desde todas las ECU.
En cada VM, haz lo siguiente:
Ejecuta
sdv_provisioning_tool- La herramienta se comunica con el agente local de Service Discovery y espera a que este 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 ocurre, la herramienta obtiene el hash del
/vvmtruststore/uds_pubsrecién escrito y lo genera como resultado.
- La herramienta se comunica con el agente local de Service Discovery y espera a que este indique que la malla segura de SDV está completa y que el agente escribió la lista de claves públicas de UDS en
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, por lo tanto, está fuera del alcance de esta especificación.
Paso 3: Reinicia el dispositivo en el modo de arranque SDV bloqueado
Reinicia todas las VMs en todas las ECU en el modo de arranque bloqueado del SDV.
El agente de Service Discovery confía en las VMs de las ECU con las claves públicas de UDS que se indican en uds_pubs, ya que el hash de este archivo coincide con VVMFactoryTrust.
Como las ECU se aprovisionaron juntas, están vinculadas de forma permanente y, por lo tanto, se pueden considerar como una sola pieza de hardware desde la perspectiva de la verificación de la cadena de DICE.
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 con el modo de inicio de SDV bloqueado.
En la figura 5, se muestra un ejemplo en el que la ECU-0 no funciona correctamente y, por lo tanto, debe
reemplazarse.
Paso 1: Instala la ECU nueva
Instala la nueva ECU, que estará 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 de advertencia y otra en estado normal. Ambas mallas seguras de SDV están incompletas.
Paso 2: Reinicia el dispositivo en el modo de arranque de SDV desbloqueado
Reinicia todas las VMs de todas las ECU en el modo de arranque de SDV desbloqueado.
En la figura 7, las VMs B y C se unen a la malla segura de SDV de advertencia, que ahora está completa.
Paso 3: Ejecuta sdv_provisioning_tool
En cada VM, ejecuta sdv_provisioning_tool.
La herramienta se comunica con el agente local de Service Discovery y espera a que este 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 ocurre, la herramienta obtiene el hash del /vvmtruststore/uds_pubs recién escrito y lo genera como resultado, pero este hash no se usa en este flujo.
Paso 4: Instala los certificados de UDS
- Extrae
/vvmtruststore/uds_pubsde una VM de SDV arbitraria. No importa cuál elijas, ya que será la misma para todas las VMs en la misma malla segura de SDV. - Recupera los certificados de aprovisionamiento para todas las claves públicas del UDS que se indican en ese
/vvmtruststore/uds_pubs.- Por lo general, esto significa enviar la información a un servidor remoto que ya tiene los certificados almacenados o que los generará verificando las claves públicas recibidas en una base de datos de claves públicas de UDS conocidas. Esta base de datos se habría compilado a partir de las claves públicas de UDS extraídas durante la fabricación de la ECU.
- Escribe la
/vvmtruststore/uds_certsde cada VM de SDV.
Paso 5: Reinicia el dispositivo en el modo de arranque SDV bloqueado
Reinicia todas las VMs con el modo de arranque de SDV bloqueado.
Si por algún motivo la malla segura del SDV está incompleta, vuelve al paso 2.