vvmconfig и vvmtruststore

Агенту обнаружения служб SDV требуются два набора конфигурационных данных:

  1. Конфигурация виртуальной машины транспортного средства (VVM Config) содержит информацию, общую для всех транспортных средств одной модели или платформы.
  2. Хранилище доверенных данных виртуальной машины транспортного средства (VVM Trust Store) содержит информацию, уникальную для данного конкретного транспортного средства.
Содержимое vvmtruststore и vvmconfig
Рисунок 1: Содержимое vvmtruststore и vvmconfig.

Конфигурация виртуальной машины транспортного средства

Файл конфигурации виртуальной машины транспортного средства (Vehicle VM Config) называется vvmconfig[.SUFFIX] и находится в каталоге /etc раздела product . Суффикс файла vvmconfig является необязательным и не имеет значения для Android SDV. Партнеры могут добавлять в суффикс vvmconfig любую полезную для них информацию, например, название платформы транспортного средства или название продукта.

Если в системе имеется несколько файлов конфигурации виртуальной машины транспортного средства (Vehicle VM Config), загрузчик должен указать выбранный файл с помощью параметра ядра androidboot.sdv.vvmconfig . Этот параметр должен содержать только имя файла (например, vvmconfig.example ) без указания пути. Например, /etc/vvmconfig.example будет недопустимым значением.

Файл конфигурации виртуальной машины транспортного средства предоставляется в формате CBOR , определенном в следующем фрагменте 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 определен в RFC 8152 , CBOR Object Signing and Encryption (COSE) .

ipv4-address и ipv6-address определены в RFC 9164 , Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes .

Политика DICE

Производитель предоставляет Android SDV набор политик DICE , определяющих ограничения, которым должны соответствовать действительные (и заслуживающие доверия) цепочки DICE. Этот набор политик должен охватывать все цепочки DICE, связанные со всеми виртуальными машинами SDV в автомобиле.

Все цепочки DICE в рамках Secure World должны не соответствовать политике DICE Android SDV. И наоборот, все цепочки DICE в рамках Android SDV должны не соответствовать политике DICE Secure World. Это означает, что цепочка DICE Android SDV не должна быть успешно принята в качестве цепочки DICE Secure World, и наоборот.

Хранилище доверенных сертификатов Vehicle VM

Хранилище доверенных ключей виртуальной машины транспортного средства (VVM Trust Store) содержит открытые ключи UDS всех участников защищенной сети SDV Secure Mesh. Это неподписанный раздел с именем vvmtruststore , использующий файловую систему ext4 и смонтированный в каталог /vvmtruststore . Эти открытые ключи могут быть дополнительно сертифицированы корневым центром сертификации, указанным в конфигурации VVM.

Этот раздел монтируется либо в режиме чтения и записи, когда Android HLOS загружается с unlocked режимом загрузки SDV, либо в режиме только для чтения, когда режим загрузки SDV locked . Он может содержать до двух файлов: uds_pubs и uds_certs .

uds_pubs — это CBOR- файл, содержащий все открытые ключи UDS от всех блоков управления (ECU), на которых размещены виртуальные машины SDV в текущей сети SDV. Эти открытые ключи UDS собираются из цепочек DICE, предоставленных соседними виртуальными машинами SDV во время инициализации. Этот файл создается инструментом sdv_provisioning_tool в процессе инициализации .

uds_certs — это CBOR- файл, определенный в следующем фрагменте 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 хранятся подписанные центром сертификации UDS только для открытых ключей UDS локального устройства (в отличие от всех ключей, перечисленных в uds_pubs ). Этот файл должен быть предоставлен производителем оборудования и является обязательным только для процесса подготовки к замене компонентов.

Сертификаты UDS в uds_certs должны соответствовать спецификациям, определенным в HAL удаленного предоставления доступа. Кроме того, сертификаты для цифровой подписи должны соответствовать Ed25519 или ECDSA с кривыми P-256 или P-384. Соответствие HAL удаленного предоставления доступа означает, в частности, что конечный сертификат цепочки сертификатов UDS должен иметь BasicConstraints и KeyUsage , указанные для сертификата UDS, в то время как все промежуточные и корневые сертификаты должны соответствовать правилам для сертификатов центров сертификации.