Device Identifier Composition Engine (DICE) הוא מפרט של Trusted Computing Group (TCG) שאומץ ב-Android. הוא יוצר קבוצה של זהויות קריפטוגרפיות חזקות ואיתן לכל קטע של קושחת שמוטען במהלך רצף האתחול. הזהויות האלה מאפשרות אימות מרחוק של מצב האבטחה של המכשיר, ואפשר לעקוף אותן רק על ידי פגיעה ב-ROM.
תהליך הפקת DICE
איור 1. תהליך פשוט יותר של הפקת מודלים של DICE.
תהליך ההסקה של DICE מבטיח שכל שינוי בתמונת קושחה יגרום ליצירת מזהה ייחודי חדש לשלב הזה לכל שלב לאחר מכן. הסיבה לכך היא שכל שלב של קושחת הקצרום שנטען מודד ומאמת את השלב הבא, יוצר זהויות ייחודיות ומפתחות משויכים שמונעים עקיפה או פגיעה. זיכרון לקריאה בלבד (ROM) מעבד את המדידה, ההגדרה והסוד הייחודי של המכשיר (UDS) באמצעות פונקציית הפקת מפתחות (KDF) כדי להפיק את הסוד לשלב הבא שיוטען. הסוד הזה נקרא מזהה מכשיר מורכב (CDI).
שלב 0: אתחול
תהליך DICE מתחיל בטעינה של ה-UDS ממאגר של נתונים שלא ניתן לשנות, בדרך כלל רכיבי ניתוב (fuses), על ידי ה-ROM של הצ'יפסט. ה-UDS הזה מוקצה באופן מאובטח עם ערך אקראי קריפטוגרפית במהלך תהליך ייצור השבב. אחרי קריאת ה-UDS, ה-ROM משתמש במנגנון נעילה לחומרה שמשתנה בהתאם לספק, כמו טריז, כדי לנעול את הגישה ל-UDS עד לאתחול הבא.
שלב 1: הפקת מפתח ראשוני
ה-ROM משתמש ב-UDS כקלט לפונקציית הפקת מפתחות (KDF) כדי ליצור את זוג המפתחות האסימטרי הקבוע שמזהה באופן ייחודי את המכשיר. הוא מודד את שלב הקושחה הבא, כולל מטא-נתונים על סביבת האתחול, כמו אם ההפעלה המאובטחת מופעלת. לאחר מכן, ה-ROM משלב את ה-UDS, מדידת הקושחה ונתוני ההגדרה ב-KDF כדי להפיק את ה-CDI הראשון, שמוענק לשלב הבא כסוד.
שלב 2 עד n: הפקת מפתחות רפיקטיבית
לאחר מכן התהליך חוזר על עצמו. בכל השלבים הבאים, ה-CDI מהשלב הקודם משמש כקלט ל-KDF חדש. ה-KDF הזה משתמש ב-CDI ובגיבוב של קובץ האימג' הבא של הקושחה כדי ליצור CDI חדש נגזר. כל שלב יוצר זוג מפתחות משלו ומשתמש בו כדי לחתום על אישור שמכיל מדידות ספציפיות לשלב ומטא-נתונים משויכים אחרים.