‫vvmconfig ו-vvmtruststore

סוכן גילוי השירות של SDV צריך שני סטים של פרטי הגדרה:

  1. ההגדרה של המכונה הווירטואלית של הרכב (VVM Config), שמכילה מידע משותף לכל כלי הרכב מאותו דגם או מאותה פלטפורמה.
  2. מאגר המידע המהימן של המכונה הווירטואלית של הרכב (VVM Trust Store), שמכיל מידע ייחודי לרכב הספציפי הזה.
התוכן של vvmtruststore ו-vvmconfig
איור 1: התוכן של vvmtruststore ו-vvmconfig.

הגדרת מכונה וירטואלית לרכב

ההגדרה של המכונה הווירטואלית ברכב היא קובץ בשם vvmconfig[.SUFFIX] שנמצא בספרייה /etc של המחיצה product. הסיומת vvmconfig היא אופציונלית ולא משפיעה על Android SDV. שותפים יכולים להוסיף לvvmconfig הסיומת כל מידע שימושי, כמו שם פלטפורמת הרכב או שם המוצר.

אם במערכת יש כמה קובצי תצורה של מכונה וירטואלית לרכב, בטוען האתחול צריך לציין את הקובץ שנבחר באמצעות פרמטר הליבה 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‏ (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 של SDV ב-Android חייבות להיכשל במדיניות DICE של Secure World. כלומר, לא יכול להיות מצב שבו שרשרת DICE של Android SDV תעבור בהצלחה כשרשרת DICE של Secure World, ולהפך.

מאגר אישורים של מכונות וירטואליות לרכב

מאגר המידע המהימן של המכונה הווירטואלית של הרכב מכיל את המפתחות הציבוריים של UDS של כל המשתתפים ברשת המאובטחת של SDV. זוהי מחיצה לא חתומה בשם vvmtruststore עם מערכת קבצים מסוג ext4, והיא מותקנת בספרייה /vvmtruststore. אפשר לאמת את המפתחות הציבוריים האלה באמצעות רשות הבסיס שצוינה ב-VVMConfig.

המחיצה הזו נטענת כקריאה וככתיבה, כשמערכת Android HLOS מופעלת עם מצב הפעלה של SDV‏ unlocked, או כקריאה בלבד, כשמצב ההפעלה של SDV הוא locked. יכולים להיות בו עד שני קבצים: uds_pubs ו-uds_certs.

uds_pubs הוא קובץ CBOR שמכיל את כל המפתחות הציבוריים של UDS מכל יחידות ה-ECU שמארחות מכונות וירטואליות של SDV ברשת SDV הנוכחית. המפתחות הציבוריים של 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 צריכים לעמוד במפרטים שמוגדרים ב-HAL של הקצאת הרשאות מרחוק. בנוסף, החתימות הדיגיטליות של אישורי החתימה צריכות להיות Ed25519 או ECDSA עם עקומות P-256 או P-384. המשמעות של Remote Provisioning HAL היא, בין היתר, שאישור העלה בשרשרת האישורים של UDS צריך לכלול את BasicConstraints ו-KeyUsage כפי שצוין באישור UDS, בעוד שכל אישורי הביניים והאישורים הבסיסיים צריכים לעמוד בכללים של אישורי CA.