El agente de SDV Service Discovery necesita dos conjuntos de información de configuración:
- La configuración de la máquina virtual del vehículo (VVM Config), que contiene información común a todos los vehículos del mismo modelo o plataforma.
- El almacén de confianza de la máquina virtual del vehículo (VVM Trust Store), que contiene información única de ese vehículo en particular
Configuración de VM del vehículo
La configuración de VM del vehículo es un archivo llamado vvmconfig[.SUFFIX] que se encuentra en el directorio /etc de la partición product. El sufijo de archivo vvmconfig es opcional y no tiene ningún significado para el SDV de Android. Los socios pueden agregar cualquier información en el sufijo vvmconfig que les resulte útil, como el nombre de la plataforma del vehículo o el nombre del producto.
Si el sistema tiene varios archivos de configuración de VM del vehículo, el cargador de arranque debe especificar el archivo elegido con el parámetro del kernel androidboot.sdv.vvmconfig. Este parámetro solo debe contener el nombre del archivo (p.ej., vvmconfig.example), sin ningún componente de ruta de acceso. Por ejemplo, /etc/vvmconfig.example sería un valor no válido.
El archivo de configuración de la VM del vehículo se proporciona en un formato CBOR definido en el siguiente fragmento de CDDL:
VvmConfig = [
version: 1,
; Public key of the UDS root provisioning authority
udsCaPub: COSE_Key,
; Revocation list of intermediate CAs of UDS certificates
udsCaRevList: KeyList,
policies: DicePolicies,
vmConfigs: VmConfigMap,
]
DicePolicies = [+ DicePolicy]
KeyList = [* COSE_Key]
; Maps a VM instance name to its configuration
VmConfigMap = {
VmInstanceName => VmConfig
}
VmConfig = [
; IP addresses of this virtual machine.
ips: [+ IpAndPort],
; Index of the DICE policy for the Android SDV VM DICE chain.
android: PolicyIndex,
; Index of the DICE policy for the Secure World DICE chain used by the Android SDV VM.
secureWorld: PolicyIndex,
]
IpAndPort = [
ip: IpAddress,
; If not specified, the default Service Discovery agent port will be used.
? port: uint
]
IpAddress = ipv4-address / ipv6-address
; Index of a DicePolicy in the DicePolicies array.
PolicyIndex = uint
; The VM Name (as defind in the VVM Config). This must comply with VM Name identifier
; definition in Service Identity docs.
VmInstanceName = tstr
; INCLUDE /hardware/interfaces/security/authgraph/aidl/android/hardware/security/authgraph/DicePolicy.cddl for: DicePolicy
COSE_Key se define en RFC 8152, CBOR Object Signing and Encryption (COSE).
ipv4-address y ipv6-address se definen en RFC 9164, Etiquetas de representación de objetos binarios concisos (CBOR) para direcciones y prefijos IPv4 e IPv6.
Políticas de DICE
El OEM proporciona Android SDV con una colección de políticas de DICE que definen las restricciones que deben cumplir las cadenas de DICE válidas (y confiables). Esta colección de políticas debe abarcar todas las cadenas de DICE relacionadas con todas las VMs de SDV del vehículo.
Todas las cadenas de DICE de Secure World deben fallar en una política de DICE de SDV de Android. Por el contrario, todas las cadenas de DICE de SDV de Android deben fallar en una política de DICE de Secure World. Esto significa que no debe ser posible pasar correctamente una cadena de DICE de SDV de Android como una cadena de DICE de Secure World y viceversa.
Almacén de confianza de la VM del vehículo
El almacén de confianza de la VM del vehículo contiene las claves públicas de UDS de todos los participantes de la malla segura del SDV. Es una partición sin firma llamada vvmtruststore con un sistema de archivos ext4 y activada en el directorio /vvmtruststore. Esas claves públicas se pueden certificar de forma opcional con la autoridad raíz especificada en VVMConfig.
Esta partición se activa como de lectura y escritura cuando se inicia el HLOS de Android con el modo de inicio de SDV unlocked, o como de solo lectura cuando el modo de inicio de SDV es locked. Puede tener hasta dos archivos: uds_pubs y uds_certs.
uds_pubs es un archivo CBOR que contiene todas las claves públicas de UDS de todas las ECU que alojan VMs de SDV en la malla de SDV actual. Esas claves públicas del UDS se recopilan de las cadenas de DICE que proporcionan las VMs de SDV de la misma entidad durante el aprovisionamiento.
sdv_provisioning_tool crea este archivo durante el flujo de aprovisionamiento.
uds_certs es un archivo CBOR definido en el siguiente fragmento de CDDL:
UdsCertificates = [
1, ; version
* UdsCertChain
]
UdsCertChain = [
2* X509Certificate ; Root -> ... -> Leaf. "Root" is the vendor self-signed
; cert, "Leaf" contains UDS_Public. There may also be
; intermediate certificates between Root and Leaf.
]
; A bstr containing a DER-encoded X.509 certificate.
X509Certificate = bstr
uds_certs contiene solo los certificados de UDS firmados por la CA de las claves públicas de UDS del dispositivo local (a diferencia de todas las claves que se enumeran en uds_pubs). El OEM debe proporcionar este archivo, y solo es obligatorio para el flujo de aprovisionamiento de reemplazo de piezas.
Los certificados de UDS en uds_certs deben seguir las especificaciones definidas en el HAL de Remote Provisioning.
Además, los certificados de firma de firmas digitales deben ser Ed25519 o ECDSA con curvas P-256 o P-384. Seguir el HAL de Remote Provisioning significa, en particular, que el certificado de hoja de la cadena de certificados de UDS debe tener BasicConstraints y KeyUsage como se especifica para el certificado de UDS, mientras que todos los certificados intermedios y raíz deben seguir las reglas para los certificados de CA.