vvmconfig وvvmtruststore

يحتاج برنامج SDV Service Discovery إلى مجموعتَين من معلومات الإعداد:

  1. إعداد الآلة الافتراضية للمركبة (VVM Config)، الذي يحتوي على معلومات مشتركة بين جميع المركبات من الطراز أو النظام الأساسي نفسه
  2. مخزن الثقة للآلة الافتراضية للمركبة (VVM Trust Store)، الذي يحتوي على معلومات فريدة لتلك المركبة تحديدًا
محتوى vvmtruststore وvvmconfig
الشكل 1: محتويات vvmtruststore وvvmconfig.

إعداد الآلة الافتراضية للمركبة (VVM Config)

إعداد الآلة الافتراضية للمركبة (VVM Config) هو ملف باسم vvmconfig[.SUFFIX] موجود في دليل /etc لقسم product. لاحقة ملف vvmconfig اختيارية وليس لها أي معنى في Android SDV. يمكن للشركاء إضافة أي معلومات في لاحقة vvmconfig التي يجدونها مفيدة، مثل اسم النظام الأساسي للمركبة أو اسم المنتج.

إذا كان النظام يحتوي على ملفات إعداد متعددة للآلة الافتراضية للمركبة (VVM Config)، يجب أن يحدّد برنامج التحميل الملف الذي تم اختياره باستخدام مَعلمة kernel‏ androidboot.sdv.vvmconfig. يجب أن تحتوي هذه المَعلمة على اسم الملف فقط (مثل vvmconfig.example)، بدون أي مكوّن مسار. على سبيل المثال، سيكون /etc/vvmconfig.example قيمة غير صالحة.

يتم توفير ملف إعداد الآلة الافتراضية للمركبة (VVM Config) بتنسيق 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 (COSE).

ipv4-address وipv6-address تم تعريفهما في RFC 9164، علامات تمثيل الكائنات الثنائية الموجزة (CBOR) لعناوين IPv4 وIPv6 وبادئاتهما.

سياسات DICE

يقدّم مصنّع المعدات الأصلية (OEM) إلى Android SDV مجموعة من سياسات DICE التي تحدّد الـ قيود التي يجب أن تلتزم بها سلاسل DICE الصالحة (والموثوق بها). يجب أن تغطي مجموعة السياسات هذه جميع سلاسل DICE المرتبطة بجميع الآلات الافتراضية لـ SDV في المركبة.

يجب أن تفشل جميع سلاسل DICE في "العالم الآمن" في سياسة DICE في Android SDV. في المقابل، يجب أن تفشل جميع سلاسل DICE في Android SDV في سياسة DICE في "العالم الآمن". وهذا يعني أنّه لا يجب أن يكون من الممكن اجتياز سلسلة DICE في Android SDV بنجاح كسلسلة DICE في "العالم الآمن" والعكس صحيح.

مخزن الثقة للآلة الافتراضية للمركبة (VVM Trust Store)

يحتوي مخزن الثقة للآلة الافتراضية للمركبة (VVM Trust Store) على المفاتيح العامة لخدمة UDS لجميع المشاركين في شبكة SDV الآمنة. وهو قسم غير موقَّع باسم vvmtruststore بنظام ملفات ext4 ومثبَّت على الدليل /vvmtruststore. يمكن أن يتم اعتماد هذه المفاتيح العامة اختياريًا من قِبل السلطة الجذرية المحدّدة في إعداد الآلة الافتراضية للمركبة (VVM Config).

يتم تثبيت هذا القسم إما للقراءة والكتابة، عند تشغيل نظام Android HLOS باستخدام وضع التشغيل SDV unlocked، أو للقراءة فقط، عندما يكون وضع التشغيل 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 الموقَّعة من مرجع التصديق (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).