מנוע הלחמה של מזהי המכשיר

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

תהליך הנגזרת של DICE

תהליך פשוט יותר ליצירת נתוני 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 נגזר חדש. כל שלב יוצר זוג מפתחות משלו ומשתמש בו כדי לחתום על אישור שכולל מדידות ספציפיות לשלב ומטא-נתונים משויכים אחרים.