Device Identifier Composition Engine (DICE) הוא מפרט של Trusted Computing Group (TCG) שאומץ ב-Android. הוא יוצר קבוצה של זהויות קריפטוגרפיות חזקות ובלתי ניתנות לשינוי לכל קטע של קושחה שנטען במהלך רצף האתחול. הזהויות האלה מאפשרות אימות מרחוק של מצב האבטחה של המכשיר, וניתן לעקוף את האימות רק אם יש פגיעה ב-ROM.
תהליך הנגזרת של DICE

איור 1. תהליך פשוט יותר לגזירת DICE.
תהליך הנגזרת של DICE מבטיח שכל שינוי בתמונת קושחה כלשהי יוביל למזהה ייחודי חדש עבור השלב הזה וכל שלב אחריו. הסיבה לכך היא שכל שלב של קושחה שנטענת מודד ומאשר את השלב הבא, ויוצר זהויות ייחודיות ומפתחות משויכים שמונעים עקיפה או שיבוש. זיכרון לקריאה בלבד (ROM) מעבד את המדידה, ההגדרה והסוד הייחודי של המכשיר (UDS) באמצעות פונקציית גזירת מפתח (KDF) כדי לגזור את הסוד לשלב הבא שצריך לטעון. הסוד הזה נקרא מזהה מכשיר מורכב (CDI).
שלב 0: אתחול
תהליך DICE מתחיל בטעינת ה-UDS מ-ROM של ערכת השבבים, מתוך מאגר של נתונים שלא ניתן לשנות, בדרך כלל נתיכים. ה-UDS הזה מוקצה באופן מאובטח עם ערך אקראי מוצפן במהלך תהליך הייצור של השבב. אחרי קריאת ה-UDS, ה-ROM משתמש במנגנון נעילה של חומרה שתלוי בספק, כמו תפס, כדי לנעול את הגישה ל-UDS עד לאתחול הבא.
שלב 1: נגזרת מפתח ראשונית
ה-ROM משתמש ב-UDS כקלט לפונקציית נגזרת מפתח (KDF) כדי ליצור את זוג המפתחות האסימטריים הקבועים שמזהים באופן ייחודי את המכשיר. הוא מודד את השלב הבא בקושחה, כולל מטא-נתונים על סביבת האתחול, כמו האם ההפעלה המאובטחת מופעלת. לאחר מכן, ה-ROM משלב את ה-UDS, את נתוני המדידה של הקושחה ואת נתוני ההגדרה ב-KDF כדי ליצור את ה-CDI הראשון, שמועבר לשלב הבא כסוד.
שלב 2 עד n: נגזרת מפתח רקורסיבית
התהליך חוזר על עצמו. בכל השלבים הבאים, ה-CDI מהשלב הקודם משמש כקלט ל-KDF חדש. ה-KDF הזה משתמש ב-CDI ובגיבוב של תמונת הקושחה הבאה כדי ליצור CDI נגזר חדש. כל שלב יוצר זוג מפתחות משלו ומשתמש בו כדי לחתום על אישור שכולל מדידות ספציפיות לשלב ומטא-נתונים משויכים אחרים.