פרופיל SDV ל-DICE

פרופיל ה-SDV של Device Identifier Composition Engine‏ (DICE) הוא הרחבה של פרופיל Android של DICE. ב-SDV, מכונה וירטואלית משתמשת בשני שרשראות DICE מקבילות:

  • שרשרת Secure World DICE
  • שרשרת SDV DICE ב-Android

השדות האלה מתוך מתאר ההגדרה של פרופיל Android עבור DICE רלוונטיים לכל אחת מהשרשראות האלה:

שם מפתח סוג תיאור
שם הרכיב <0x0A -70002 tstr מומלץ בכל שכבת CDI. שם הרכיב מזהה באופן חד-משמעי את השלב בין כל שרשראות ה-DICE של החומרה שמריצות מכונות וירטואליות של Android SDV ברכב או בפלטפורמת רכב.
גרסת האבטחה <0x0 -70005 uint נדרש בכל שלב של CDI. מאפשר להגדיר מדיניות DICE שמונעת מגרסאות לא מאובטחות של מכונות וירטואליות מרוחקות להצטרף לרשת המאובטחת של SDV.
שם המכונה של הרכיב < -70007 tstr נדרש בשכבת ה-CDI הראשונה שספציפית למכונה וירטואלית. לדוגמה, אחרי ההיפר-ויז'ור, עבור שרשרת Android SDV DICE. השם של מופע ה-SDV. אם כמה שכבות של CDI מכילות את שם המופע של הרכיב, לכל שכבה צריך להיות אותו ערך.

שרשרת Secure World DICE

שרשרת ה-DICE של Secure World זהה לשרשרת ששרת Remote Key Provisioning (RKP) של Android מקבל ממכשירי Android. ‫ IRemotelyProvisionedComponent HAL generateCertificateRequestV2() חושף את שרשרת ה-DICE הזו ל-Android.

בטבלה הזו מוצגת דוגמה לשרשרת DICE מאובטחת בעולם:

שלב ההפעלה שכבת ה-CDI של DICE הונפק על ידי
תוכנת אתחול ראשית CDI[0] UDS
תוכנת אתחול משנית CDI[1] תוכנת אתחול ראשית
הפעלה של TEE CDI[2] תוכנת אתחול משנית
אתחול של KeyMint TA CDI[3] (עלה) TEE

כדי להטמיע את אפליקציית KeyMint המהימנה (TA), אפשר להשתמש באחת מהאפשרויות הבאות:

  • מופע KeyMint יחיד לכל המכונות הווירטואליות של SDV: חובה להגדיר CDI יחיד לכל המכונות הווירטואליות.

או,

  • מופע אחד של KeyMint לכל מכונה וירטואלית של SDV: חובה להקצות ערך CDI שונה לכל מכונה וירטואלית. ערכי CDI נפרדים חייבים להכיל Component Instance Name (שם מופע של רכיב) שתואם ל-Component Instance Name של המכונה הווירטואלית.

שרשרת DICE של SDV ב-Android

שרשרת ה-DICE של SDV מאשרת את התוכנה שפועלת בנתיב ההפעלה שמוביל דרך ההיפר-ויז'ור אל מערכת ההפעלה ברמה גבוהה (HLOS) של Android שפועלת במכונות הווירטואליות של SDV.

בטבלה הזו מוצגת דוגמה לשרשרת DICE של SDV ב-Android:

שלב ההפעלה שכבת ה-CDI של DICE הונפק על ידי
תוכנת אתחול ראשית CDI[0] UDS
תוכנת אתחול משנית CDI[1] תוכנת אתחול ראשית
Hypervisor CDI[2] תוכנת אתחול משנית
Android HLOS CDI[3] (עלה) ‫(Android loader in the) Hypervisor1

1 Hypervisor מאשר את תוכנת האתחול של Android במערכת האורחת כשכבה. תוכנת האתחול של Android מאשרת את HLOS של Android.

אישור CDI של מערכת הפעלה ברמה גבוהה (HLOS) ב-Android

טוען האתחול של Android (או ההיפרווייזר, אם אין טוען אתחול של Android אלא רק תוכנת 'טוען' של Android שטוענת את המכונה הווירטואלית בתוך ההיפרווייזר) חותם על אישור ה-CDI של מערכת ההפעלה ברמה גבוהה של Android ומכסה את מערכת ההפעלה ברמה גבוהה של Android. לדוגמה, הוא כולל את כל הקוד ש-Android Bootloader מאמת בהתאם ל-Android Verified Boot‏ (AVB).

אישור ה-CDI של מערכת ההפעלה Android HLOS חייב להכיל ערכים ספציפיים ל-SDV של מערכת ההפעלה Android, שמצמצמים את הסיכון לפרצות אבטחה. לדוגמה, מניעת דליפה פוטנציאלית של סודות על ידי איסור שימוש במכונות וירטואליות עם פרצות ידועות ב-SDV Secure Mesh. רוב הערכים האלה מסופקים על ידי אימות AVB.

הם גם מועברים אל KeyMint ב-TEE, שם האישור נחתם על ידי ה-CDI של העלה בשרשרת ה-DICE של SecureWorld, ומועבר אל Android ב-DeviceInfo כדי להפעיל תכונות כמו אימות מזהה ומפתח בליבת Android.

שדות של קלט קוד ואישור codeHash

תקציר VBMeta (פלט שתוכנת האתחול של Android מבצעת לצורך אימות AVB) כולל את התוכנה של מערכת ההפעלה HLOS של Android. לכן, הוא משמש כandroid-dice-input-values ליצירת הסודות של ה-CDI, והוא מופיע בשדה dice-cert-fields של אישור ה-CDI.

אלגוריתם הגיבוב המומלץ ל-AVB הוא SHA-256, שיוצר תקציר VBMeta באורך 32 בייט. בניגוד לפרופיל הפתוח של DICE, פרופיל Android של DICE מאפשר android-dice-hash-algos באמצעות android-dice-input-values באורך 32 בייט לזרימת DICE, וגם מאפשר להציב את אותו ערך באורך 32 בייט כ-codeHash באישור DICE.

תיאור ההגדרה: שדות בפרופיל Android עבור DICE

בנוסף למה שמתואר לגבי כל שכבות ה-CDI, המאפיינים הספציפיים הבאים חלים על שדות מתאר התצורה מפרופיל Android עבור DICE:

שם מפתח סוג תיאור
גרסת הרכיב -70003 int גרסת מערכת ההפעלה מ-AVB‏ version-info-avb. בדיוק כמו ב-android.os.Build.VERSION.release.
גרסת האבטחה -70005 uint רמת תיקון האבטחה של המחיצה system בפורמט YYYYMMDD.
סמן של מכונה וירטואלית ב-RKP -70006 null הסמן של המכונה הווירטואלית RKP מונע מ- : Remote Key Provisioning להנפיק אישורים לשרשרת Android SDV DICE.

סמן המכונה הווירטואלית של RKP חייב להופיע באישור ה-CDI הראשון של שרשרת ה-DICE של Android SDV שלא משותפת עם שרשרת ה-DICE של Secure World. הוא לא יכול להופיע באישורי CDI נוספים כדי למנוע משרת ה-RKP‏ rkp-avf-support להתייחס לשרשרת ה-DICE כאילו היא מגיעה ממכונה וירטואלית של RKP.

תיאור ההגדרה: שדות חדשים

מתאר התצורה של אישור ה-CDI של מערכת ההפעלה ברמה גבוהה ב-Android חייב להכיל ערכים ספציפיים ל-SDV מעבר לאלה שמתוארים בפרופיל Android של DICE. פרופיל ה-SDV של DICE שומר את טווח ערכי המפתח [-71000, -71999] למטרה הזו. אפשר להוסיף שדות ספציפיים להטמעה באמצעות ערכי מפתח מחוץ לטווח השמור. הערכים הספציפיים ל-SDV הם:

שם מפתח סוג תיאור
מצב אתחול מאומת -71000 tstr green, ‏ yellow או orange.
build fingerprint -71001 tstr מחרוזת שניתן לקרוא, שמזהה באופן ייחודי את הגרסה הזו, כמו ro.build.fingerprint. ההגדרה הזו מופיעה ב-Android CDD, ‏ 3.2.2 Build Parameters, cdd-3-2-2. הערך הזה מאוחסן ב-VBMeta בתור המאפיין com.android.build.system.fingerprint.
system_ext security patch level -71002 uint רמת תיקון האבטחה של מחיצת system_ext בפורמט YYYYMMDD.
product security patch level -71003 uint רמת תיקון האבטחה של מחיצת product בפורמט YYYYMMDD.
vendor security patch level -71004 uint רמת תיקון האבטחה של מחיצת vendor בפורמט YYYYMMDD.
boot security patch level -71005 uint רמת תיקון האבטחה של המחיצה boot (שמכילה את ליבת Linux) בפורמט YYYYMMDD.
מצב ההפעלה (boot mode) של SDV -71006 tstr locked או unlocked. מידע נוסף זמין במאמר סטטוס וציוד של רשת Mesh.

בחירת ערך קלט של מצב ב-CDI של Android HLOS

ההגדרה הבאה משמשת ל-android-dice-mode של אישור ה-CDI של מערכת ההפעלה HLOS של Android:

AVB UNLOCKED נעילת AVB
מצב ההפעלה של SDV לא נעול ניפוי באגים ניפוי באגים
מצב ההפעלה של SDV נעול לא מוגדר (לא תקין) רגיל

פונקציית נגזרת מפתח

ה-android-dice-kdf שגוזר את זוג המפתחות הציבורי והפרטי מהסוד CDI_Attest עבור ה-CDI של מערכת ההפעלה ברמה גבוהה ב-Android חייב להיות HKDF עם SHA512 כפונקציית הגיבוב שלו.