vvmconfig ve vvmtruststore

SDV Hizmet Keşfi aracının iki yapılandırma bilgisi kümesine ihtiyacı vardır:

  1. Aynı model veya platformdaki tüm araçlarda ortak olan bilgileri içeren Araç Sanal Makine Yapılandırması (VVM Yapılandırması).
  2. İlgili araca özgü bilgileri içeren Araç Sanal Makinesi Güven Deposu (VVM Trust Store).
vvmtruststore ve vvmconfig içerikleri
Şekil 1: vvmtruststore ve vvmconfig içerikleri.

Araç sanal makine yapılandırması

Araç VM Yapılandırması, product bölümünün /etc dizininde bulunan vvmconfig[.SUFFIX] adlı bir dosyadır. vvmconfig dosya soneki isteğe bağlıdır ve Android SDV için bir anlamı yoktur. İş ortakları, vvmconfig sonekine araç platformu adı veya ürün adı gibi yararlı buldukları bilgileri ekleyebilir.

Sistemde birden fazla Vehicle VM Config dosyası varsa önyükleyici, androidboot.sdv.vvmconfig çekirdek parametresini kullanarak seçilen dosyayı belirtmelidir. Bu parametre, herhangi bir yol bileşeni olmadan yalnızca dosya adını (ör. vvmconfig.example) içermelidir. Örneğin, /etc/vvmconfig.example geçersiz bir değer olur.

Araç VM yapılandırma dosyası, aşağıdaki CDDL parçasında tanımlanan CBOR biçiminde sağlanır:

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, CBOR Object Signing and Encryption (COSE) (CBOR Nesne İmzalama ve Şifreleme) başlıklı RFC 8152'de tanımlanmıştır.

ipv4-address ve ipv6-address, RFC 9164, Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes içinde tanımlanmıştır.

DICE Politikaları

OEM, geçerli (ve güvenilir) DICE zincirlerinin uyması gereken kısıtlamaları tanımlayan bir DICE politikaları koleksiyonuyla Android SDV'yi sağlar. Bu politika koleksiyonu, araçtaki tüm SDV VM'leriyle ilgili tüm DICE zincirlerini kapsamalıdır.

Tüm Secure World DICE zincirleri, Android SDV DICE Politikası'nı ihlal etmelidir. Aksine, tüm Android SDV DICE zincirleri Secure World DICE politikasını ihlal etmelidir. Bu, bir Android SDV DICE zincirinin Secure World DICE zinciri olarak ve bunun tersinin başarılı bir şekilde geçirilmesinin mümkün olmaması gerektiği anlamına gelir.

Araç VM'si Güvenilir Sertifika Deposu

Araç VM güven deposu, SDV Secure Mesh'in tüm katılımcılarının UDS ortak anahtarlarını içerir. Bu, /vvmtruststore dizinine bağlanmış ve ext4 dosya sistemine sahip vvmtruststore adlı imzalanmamış bir bölümdür. Bu genel anahtarlar, isteğe bağlı olarak VVMConfig'de belirtilen kök yetkili tarafından onaylanabilir.

Bu bölüm, Android HLOS, SDV başlatma modu unlocked ile başlatıldığında okuma ve yazma olarak, SDV başlatma modu locked olduğunda ise salt okunur olarak bağlanır. En fazla iki dosya içerebilir: uds_pubs ve uds_certs.

uds_pubs, mevcut SDV Mesh'inde SDV VM'lerini barındıran tüm ECU'lardaki tüm UDS genel anahtarlarını içeren bir CBOR dosyasıdır. Bu UDS ortak anahtarları, sağlama sırasında eş SDV VM'leri tarafından sağlanan DICE zincirlerinden toplanır. Bu dosya, sdv_provisioning_tool tarafından sağlama akışı sırasında oluşturulur.

uds_certs, aşağıdaki CDDL parçasında tanımlanan bir CBOR dosyasıdır:

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, yalnızca yerel cihazın UDS ortak anahtarlarının CA imzalı UDS sertifikalarını (uds_pubs'de listelenen tüm anahtarların aksine) içerir. Bu dosya OEM tarafından sağlanmalıdır ve yalnızca parça değişimi için hazırlama akışında zorunludur.

uds_certs içindeki UDS sertifikaları, Uzaktan Sağlama HAL'sinde tanımlanan spesifikasyonlara uymalıdır. Ayrıca, sertifikaları imzalayan dijital imzalar Ed25519 veya P-256 ya da P-384 eğrileriyle ECDSA olmalıdır. Remote Provisioning HAL'ı kullanmak, özellikle UDS sertifika zincirinin yaprak sertifikasının UDS sertifikası için belirtildiği şekilde BasicConstraints ve KeyUsage içermesi, tüm ara ve kök sertifikaların ise CA sertifikalarıyla ilgili kurallara uyması gerektiği anlamına gelir.