כשמערכת Android HLOS מקבלת את הערכים והאישורים של Android HLOS CDI מהשלב הקודם, היא קוראת אותם ואז גוזרת ומנקה את הסודות הנדרשים – כמו צמדים של מפתחות ציבוריים ופרטיים ושלבי CDI נוספים – לצורך גילוי שירות SDV.
התהליך הזה מתבצע בהקדם האפשרי בתהליך האתחול, במהלך early-init בשלב השני של האתחול. כך מוודאים שמערכת Android HLOS צורכת את ערכי ה-CDI ומנקה אותם לפני שקוד של צד שלישי מופעל.
תוכנת האתחול של Android (או טוען האורח בהיפר-ויז'ר, אם לא קיימת תוכנת אתחול של Android) מעבירה את הערכים הבאים דרך ליבת ה-Linux של ה-SDV אל second stage init במרחב המשתמש של Android:
- ערך ה-CDI של האימות בשכבת ה-HLOS של Android.
- איטום של ערך ה-CDI בשכבת ה-HLOS של Android.
- שרשרת DICE עם קידוד CBOR עד לשכבת ה-HLOS של Android.
הערכים האלה הם בפורמט SdvDiceHandover. SdvDiceHandover הוא מפה מקודדת ב-CBOR שמתוארת על ידי קטע CDDL הזה:
SdvDiceHandover = {
1 : bstr .size 32, ; CDI_Attest
2 : bstr .size 32, ; CDI_Seal
3 : DiceCertChain, ; Android SDV DICE chain
}
ה-HAL IRemotelyProvisionedComponent DiceCertChain מציין את הפורמט של DiceCertChain. לא נדרש קידוד דטרמיניסטי של CBOR עבור SdvDiceHandover, אבל מומלץ מאוד להשתמש בו כי הוא תומך במגוון רחב יותר של מדיניות DICE.
הפורמט של SdvDiceHandover דומה מאוד לפורמט של:
פורמט
AndroidDiceHandoverשמוגדר בהטמעה לדוגמה של Open Profile for DICE,פורמט
PvmfwDiceHandoverשבוpvmfwמשתמש כדי להעביר את שרשרת ה-DICE ל-pVM. לדוגמה, Microdroid.
בניגוד לפורמט AndroidDiceHandover ובדומה לפורמט PvmfwDiceHandover, חובה להשתמש בפורמט DiceCertChain ולא ניתן להשתמש בו כאופציונלי.
פתיחת הפרופיל של מנהל התקן הליבה של DICE
העברת ה-CDI של Android HLOS מ-Android Bootloader (או מ-guest loader בהיפר-ויזור, אם אין bootloader) אל Android HLOS מסתמכת על Open Profile for DICE kernel driver. טוען האתחול של Android כותב את הערך של שרשרת ה-DICE לאזור בזיכרון של האורח שחייב להיות מוגדר ב-Device Tree (DT).
הדרייבר קורא את אזור הזיכרון הזה שצוין ב-DT ומציג אותו במרחב המשתמש כמכשיר /dev/open-dice0. הדרייבר מאפשר לקרוא ולמחוק את אזור הזיכרון הזה. האפשרות Open Profile for DICE driver קיימת רק בארכיטקטורות arm64 כי פירוט מבנה המכשיר (DT) הוא מושג שקיים רק ב-arm64.
מציינים את אזור הזיכרון שהדרייבר של Open Profile for DICE חושף באמצעות צומת reserved-memory ב-DT שמתייגים עבור הדרייבר על ידי ציון "google,open-dice" במאפיין compatible. לדוגמה:
reserved-memory {
// The number of u32 cells to represent the address of a memory region
#address-cells = <2>;
// The number of u32 cells to represent the size of a memory region
#size-cells = <2>;
ranges;
// The unit address (after the @) must match the address in the reg property
dice@D1C30000 {
compatible = "google,open-dice";
no-map;
// The address and the size of the memory region that is passed to the Open
// Profile for DICE driver. The address must be page-aligned, and the size a
// multiple of the page size. The first two hex numbers (cells) represent
// the address of the memory region, the last two represent its size.
reg = <0x0 0xD1C30000 0x0 0x1000>;
};
};