El perfil de SDV para el motor de composición de identificadores de dispositivos (DICE) es una extensión del perfil de Android para DICE. En SDV, una VM usa dos cadenas de DICE paralelas:
- Cadena de DICE mundial segura
- Cadena de DICE del SDV de Android
Estos campos del descriptor de configuración del perfil de Android para DICE son relevantes para cada una de estas cadenas:
| Nombre | Clave | Tipo | Descripción |
|---|---|---|---|
| Nombre del componente | -70002
|
tstr
|
Se recomienda en cada capa del CDI. El nombre del componente identifica de forma inequívoca la etapa entre todas las cadenas de DICE del hardware que ejecutan VMs de SDV de Android en un vehículo o una plataforma de vehículos. |
| Versión de seguridad | -70005
|
uint
|
Se requiere en cada etapa de la CDI. Permite definir una política de DICE que impide que las versiones de VM remotas no seguras se unan a la malla segura de SDV. |
| Nombre de la instancia del componente <0x0 | -70007
|
tstr
|
Se requiere en la primera capa de CDI específica de la VM. Por ejemplo, después del hipervisor, para la cadena de DICE del SDV de Android. Nombre de la instancia de SDV. Si varias capas de CDI contienen el nombre de la instancia del componente, cada capa debe tener el mismo valor. |
Cadena de DICE mundial segura
La cadena de DICE de Secure World es la misma que el servidor de Remote Key Provisioning (RKP) de Android recibe de los dispositivos Android. El HAL IRemotelyProvisionedComponent de generateCertificateRequestV2() expone esta cadena de DICE a Android.
En esta tabla, se muestra una cadena de DICE de Secure World de ejemplo:
| Etapa de inicio | Capa de CDI de DICE | Emitido por |
|---|---|---|
| Bootloader principal | CDI[0] |
UDS |
| Bootloader secundario | CDI[1] |
Bootloader principal |
| Inicio de TEE | CDI[2] |
Bootloader secundario |
| Arranque de la TA de KeyMint | CDI[3] (Leaf) |
TEE |
Para implementar la aplicación de confianza (TA) de KeyMint, usa una de estas opciones:
- Una sola instancia de KeyMint para todas las VMs de SDV: DEBES designar un solo CDI para todas las VMs.
o
- Una instancia de KeyMint para cada VM de SDV: DEBES designar un valor de CDI diferente para cada VM. Los valores de CDI individuales DEBEN contener un nombre de instancia de componente que coincida con el nombre de instancia de componente de la VM.
Cadena de DICE del SDV de Android
La cadena de DICE del SDV de Android certifica el software que se ejecuta en la ruta de arranque que lleva a través del hipervisor al sistema operativo de alto nivel (HLOS) de Android que se ejecuta en las VMs del SDV.
En esta tabla, se muestra una cadena de DICE de SDV de Android de ejemplo:
| Etapa de inicio | Capa de CDI de DICE | Emitido por |
|---|---|---|
| Bootloader principal | CDI[0] |
UDS |
| Bootloader secundario | CDI[1] |
Bootloader principal |
| Hipervisor | CDI[2] |
Bootloader secundario |
| HLOS de Android | CDI[3] (hoja)
|
(Cargador de Android en el) hipervisor1 |
1 El hipervisor certifica el bootloader de Android en el invitado como una capa. El bootloader de Android certifica el HLOS de Android.
Certificado de CDI de HLOS de Android
El bootloader de Android (o el hipervisor, si no hay un bootloader de Android, sino solo un programa de "cargador" de Android que carga la VM dentro del hipervisor) firma el certificado de CDI del HLOS de Android y cubre el HLOS de Android. Por ejemplo, abarca todo el código que el bootloader de Android verifica según el inicio verificado de Android (AVB).
El certificado de CDI de HLOS de Android debe contener valores específicos del SDV del SO Android que mitiguen las vulnerabilidades de seguridad. Por ejemplo, se puede evitar la posible filtración de secretos prohibiendo las VMs con vulnerabilidades conocidas en la malla segura de SDV. La verificación de AVB proporciona la mayoría de estos valores.
También se entregan a KeyMint en el TEE, donde el certificado se firma con el CDI de hoja de la cadena de DICE de SecureWorld y se pasa a Android en el objeto DeviceInfo para habilitar funciones como la certificación de claves y de ID en el núcleo de Android.
Campos de entrada de código y certificado codeHash
El resumen de VBMeta (un resultado que el bootloader de Android realiza para la verificación de AVB) abarca el software del HLOS de Android. Por lo tanto, sirve como android-dice-input-values para derivar los secretos del CDI y se incluye en el campo dice-cert-fields del certificado del CDI.
El algoritmo de hash recomendado para AVB es SHA-256, que genera un resumen de VBMeta de 32 bytes de longitud. A diferencia del perfil abierto para DICE, el perfil de Android para DICE permite android-dice-hash-algos con android-dice-input-values de 32 bytes de longitud para el flujo de DICE, además de colocar el mismo valor de 32 bytes de longitud como codeHash en el certificado de DICE.
Descriptor de configuración: Campos en el perfil de Android para DICE
Además de lo que se describe para todas las capas de CDI, las siguientes especificaciones se aplican a los campos del descriptor de configuración del perfil de Android para DICE:
| Nombre | Clave | Tipo | Descripción |
|---|---|---|---|
| Versión del componente | -70003
|
int
|
Versión del SO del sistema de AVB version-info-avb. También es igual a android.os.Build.VERSION.release. |
| Versión de seguridad | -70005
|
uint
|
Nivel de parche de seguridad de la partición system en formato YYYYMMDD. |
| Marcador de VM de RKP | -70006
|
null
|
El marcador de VM del RKP impide que el aprovisionamiento remoto de claves emita certificados para la cadena de DICE del SDV de Android. |
El marcador de VM del RKP debe aparecer en el primer certificado de CDI de la cadena de DICE del SDV de Android que no sea común con la cadena de DICE del mundo seguro. NO debe aparecer en ningún otro certificado de CDI para evitar que el servidor de RKP rkp-avf-support considere que la cadena de DICE proviene de una VM de RKP.
Descriptor de configuración: campos nuevos
El descriptor de configuración del certificado de CDI del HLOS de Android debe contener valores específicos del SDV más allá de los que describe el perfil de Android para DICE. El perfil de SDV para DICE reserva el rango de valores clave [-71000, -71999] para este propósito. Puedes agregar campos específicos de la implementación con valores clave fuera del rango reservado. Los valores específicos del SDV son los siguientes:
| Nombre | Clave | Tipo | Descripción |
|---|---|---|---|
| Estado de inicio verificado | -71000
|
tstr
|
green, yellow o orange
|
| huella digital de compilación | -71001
|
tstr
|
Es una cadena legible que identifica de forma única esta compilación, igual que ro.build.fingerprint. El CDD de Android, 3.2.2 Parámetros de compilación, cdd-3-2-2 define esto.
VBMeta almacena esto como la propiedad llamada com.android.build.system.fingerprint. |
system_ext
nivel de
parche de seguridad |
-71002
|
uint
|
Nivel de parche de seguridad de la partición system_ext en formato YYYYMMDD. |
product
nivel de
parche de seguridad |
-71003
|
uint
|
Nivel de parche de seguridad de la partición product en formato YYYYMMDD. |
vendor
nivel de
parche de seguridad |
-71004
|
uint
|
Nivel de parche de seguridad de la partición vendor en formato YYYYMMDD. |
boot
nivel de
parche de seguridad |
-71005
|
uint
|
Nivel de parche de seguridad de la partición boot (que contiene el kernel de Linux) en formato YYYYMMDD. |
| Modo de inicio de SDV | -71006
|
tstr
|
locked o unlocked. Para obtener más información, consulta Mesh Status and Provisioning. |
Selección del valor de entrada del modo del CDI del HLOS de Android
El android-dice-mode del certificado de CDI del HLOS de Android usa la siguiente definición:
| AVB UNLOCKED | AVB LOCKED | |
|---|---|---|
| Modo de inicio de SDV DESBLOQUEADO | Depurar | Depurar |
| Modo de inicio del SDV BLOQUEADO | No configurado (no válido) | Normal |
Función de derivación de claves
El android-dice-kdf que deriva el par de claves públicas y privadas del secreto CDI_Attest para el CDI del HLOS de Android debe ser HKDF con SHA512 como su función hash.