Estado y aprovisionamiento de la malla

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

  1. Sea deviceMode igual a DeviceMode::Normal
  2. Sea diceChainList la lista de cadenas de DICE pertinentes para una VM de SDV.
  3. Para cada diceChain en diceChainList:
    1. Sea cdiList la lista de certificados de CDI en diceChain:
    2. Para cada cdiCert en cdiList:
      1. Sea cdiDeviceMode el DeviceMode correspondiente a cdiCert.mode.
      2. Establece deviceMode en min(deviceMode, cdiDeviceMode).
  4. 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_pubs recién escrito y lo genera como resultado.

Paso 2: Escribe VVMFactoryTrust

En una VM de cada ECU, haz lo siguiente:

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