Estado y aprovisionamiento de la malla

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 SECURE desde 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 UNSECURE desde 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:

  1. Especifica deviceMode como DeviceMode::Normal.
  2. Especifica diceChainList como la lista de cadenas DICE relevantes para una VM de SDV.
  3. Para cada diceChain en diceChainList:
    1. Especifica cdiList como la lista de certificados CDI en diceChain:
    2. Para cada cdiCert en cdiList, haz lo siguiente:
      1. Especifica cdiDeviceMode como el DeviceMode correspondiente a cdiCert.mode.
      2. Establece deviceMode en min(deviceMode, cdiDeviceMode).
  4. 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):

Ejemplo de aprovisionamiento de fábrica, estado inicial

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.

  1. 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.
  2. Cuando esto sucede, la herramienta obtiene el hash de /vvmtruststore/uds_pubs que acaba de escribir y lo muestra.

Aprovisionamiento de fábrica, paso 1

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:

  1. Escribe el hash de /vvmtruststore/uds_pubs que generó sdv_provisioning_tool en 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.

Aprovisionamiento de fábrica, paso 2

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.

Aprovisionamiento de fábrica, paso 3

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:

Reemplazo de piezas, estado inicial

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.

Reemplazo de piezas, paso 1

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.

Reemplazo de piezas, paso 2

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.

Reemplazo de piezas, paso 3

Figura 8: Reemplazo de piezas, paso 3

Paso 4: Instala certificados de UDS

  • Extrae /vvmtruststore/uds_pubs de 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.
  • Escribe el /vvmtruststore/uds_certs de cada VM de SDV.

Reemplazo de piezas, paso 4

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.

Cambio de piezas, paso 5

Figura 10: Reemplazo de piezas, paso 5