פרופיל ה-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 כפונקציית הגיבוב שלו.