vvmconfig และ vvmtruststore

ตัวแทนการค้นพบบริการ SDV ต้องใช้ข้อมูลการกำหนดค่า 2 ชุด ได้แก่

  1. การกำหนดค่าเครื่องเสมือนของยานพาหนะ (VVM Config) ซึ่งมีข้อมูลที่ใช้ร่วมกันในยานพาหนะทั้งหมดที่เป็นรุ่นหรือแพลตฟอร์มเดียวกัน
  2. ที่เก็บ Trust Store ของเครื่องเสมือนของยานพาหนะ (VVM Trust Store) ซึ่งมีข้อมูลเฉพาะของยานพาหนะคันนั้นๆ
เนื้อหา vvmtruststore และ vvmconfig
รูปที่ 1: เนื้อหาของ vvmtruststore และ vvmconfig

การกำหนดค่า VM ของยานพาหนะ

การกำหนดค่า VM ของยานพาหนะเป็นไฟล์ชื่อ vvmconfig[.SUFFIX] ซึ่งอยู่ในไดเรกทอรี /etc ของพาร์ติชัน product โดยคำต่อท้ายของไฟล์ vvmconfig เป็นตัวเลือกและไม่มีความหมายสำหรับ Android SDV พาร์ทเนอร์สามารถเพิ่มข้อมูลใดก็ได้ในคำต่อท้าย vvmconfig ที่เห็นว่ามีประโยชน์ เช่น ชื่อแพลตฟอร์มของยานพาหนะหรือชื่อผลิตภัณฑ์

หากระบบมีไฟล์การกำหนดค่า VM ของยานพาหนะหลายไฟล์ Bootloader ควรระบุไฟล์ที่เลือกโดยใช้พารามิเตอร์เคอร์เนล androidboot.sdv.vvmconfig พารามิเตอร์นี้ควรมีเฉพาะชื่อไฟล์ (เช่น vvmconfig.example) โดยไม่มีคอมโพเนนต์เส้นทาง เช่น /etc/vvmconfig.example จะเป็นค่าที่ไม่ถูกต้อง

ไฟล์การกำหนดค่า VM ของยานพาหนะมีให้ในรูปแบบ 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

OEM จะให้ Android SDV มีคอลเล็กชันนโยบาย DICE ที่กำหนด ข้อจำกัดที่เชน DICE ที่ถูกต้อง (และเชื่อถือได้) ต้องปฏิบัติตาม คอลเล็กชันนโยบายนี้ต้องครอบคลุมเชน DICE ทั้งหมดที่เกี่ยวข้องกับ VM ของ SDV ทั้งหมดในยานพาหนะ

เชน DICE ของ Secure World ทั้งหมดต้องไม่ผ่านนโยบาย DICE ของ Android SDV ในทางกลับกัน เชน DICE ของ Android SDV ทั้งหมดต้องไม่ผ่านนโยบาย DICE ของ Secure World ซึ่งหมายความว่าต้องไม่สามารถส่งเชน DICE ของ Android SDV เป็นเชน DICE ของ Secure World ได้สำเร็จ และในทางกลับกัน

ที่เก็บ Trust Store ของ VM ของยานพาหนะ

ที่เก็บ Trust Store ของ VM ของยานพาหนะมีคีย์สาธารณะ UDS ของผู้เข้าร่วมทั้งหมดใน SDV Secure Mesh โดยเป็นพาร์ติชันที่ไม่ได้ลงชื่อชื่อ vvmtruststore ที่มี ระบบไฟล์ ext4 และติดตั้งในไดเรกทอรี /vvmtruststore คีย์สาธารณะเหล่านั้นสามารถได้รับการรับรองจากผู้ออกใบรับรองระดับรูทที่ระบุไว้ในการกำหนดค่า VVM ได้

พาร์ติชันนี้จะติดตั้งเป็นแบบอ่านและเขียนเมื่อบูต HLOS ของ Android ด้วยโหมดบูต SDV เป็น unlocked หรือเป็นแบบอ่านอย่างเดียวเมื่อโหมดบูต SDV เป็น locked โดยอาจมีไฟล์ได้สูงสุด 2 ไฟล์ ได้แก่ uds_pubs และ uds_certs

uds_pubs เป็นไฟล์ CBOR ที่มีคีย์สาธารณะ UDS ทั้งหมดจาก ECU ทั้งหมด ที่โฮสต์ VM ของ SDV ใน SDV Mesh ปัจจุบัน ระบบจะรวบรวมคีย์สาธารณะ UDS เหล่านั้นจากเชน DICE ที่ VM ของ 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 ที่ลงนามโดย CA ของคีย์สาธารณะ UDS ของอุปกรณ์ในเครื่อง (เทียบกับคีย์ทั้งหมดที่ระบุไว้ใน uds_pubs) OEM ต้องเป็นผู้จัดเตรียมไฟล์นี้ และจำเป็นเฉพาะสำหรับขั้นตอนการจัดสรรการเปลี่ยนชิ้นส่วน

ใบรับรอง UDS ใน uds_certs ต้องเป็นไปตาม ข้อกำหนดที่กำหนดไว้ใน Remote Provisioning HAL นอกจากนี้ ใบรับรองการลงนามดิจิทัลต้องเป็น Ed25519 หรือ ECDSA ที่มีเส้นโค้ง P-256 หรือ P-384 การปฏิบัติตาม Remote Provisioning HAL หมายความว่าใบรับรองลีฟของเชนใบรับรอง UDS ควรมี BasicConstraints และ KeyUsage ตามที่ระบุไว้สำหรับใบรับรอง UDS ขณะที่ใบรับรองระดับกลางและระดับรูททั้งหมดควรเป็นไปตามกฎสำหรับใบรับรอง CA