裝置 ID 組合引擎

裝置 ID 組合引擎 (DICE) 是信任運算群組 (TCG) 規格,已採用至 Android。系統會為啟動序列中載入的每個韌體建立一組強大且不可變更的密碼編譯身分。這些身分可讓系統從遠端驗證裝置的安全狀態,而要規避這項驗證,唯一方法就是破壞 ROM。

DICE 推導程序

簡化 DICE 衍生程序

圖 1. 簡化 DICE 推導程序。

DICE 衍生程序可確保任何韌體映像檔的任何變更,都會為該階段和後續每個階段產生新的專屬 ID。這是因為每個已載入的韌體階段都會評估及認證下一個階段,並產生獨特的 ID 和相關金鑰,以防止繞過或竄改。唯讀記憶體 (ROM) 會使用金鑰衍生函式 (KDF) 處理評估、設定和獨特裝置密鑰 (UDS),藉此衍生要載入的下一個階段密鑰。這個機密金鑰稱為複合裝置 ID (CDI)。

階段 0:初始化

DICE 程序的開始,是晶片組的 ROM 從一組不可變動資料 (通常是熔絲) 載入 UDS。在晶片製造程序中,這項 UDS 會透過密碼編譯隨機值安全地佈建。讀取 UDS 後,ROM 會使用供應商專屬的硬體鎖定機制 (例如鎖定裝置),鎖定 UDS 存取權,直到下次啟動為止。

階段 1:初始金鑰衍生

ROM 會將 UDS 做為金鑰衍生函式 (KDF) 的輸入值,產生可用於唯一識別該裝置的永久性非對稱式金鑰組。它會評估下一個韌體階段,包括開機環境的中繼資料,例如是否已啟用安全啟動功能。接著,ROM 會結合 KDF 中的 UDS、韌體測量和設定資料,藉此衍生第一個 CDI,並以密碼的形式傳遞至下一個階段。

階段 2 至 n:遞迴索引鍵導出

然後重複此程序。在後續所有階段中,前一階段的 CDI 會做為新 KDF 的輸入內容。這個 KDF 會使用 CDI 和下一個韌體映像檔的雜湊值,產生新的衍生 CDI。每個階段都會產生自己的金鑰組,並使用該金鑰組簽署憑證,其中包含階段專屬的評估資料和其他相關中繼資料。