裝置 ID 組成引擎 (DICE) 的 SDV 設定檔是 DICE 的 Android 設定檔的擴充功能。在 SDV 中,VM 會使用兩條平行的 DICE 鏈結:
- 保護 World DICE 鏈結
- Android SDV DICE 鏈結
Android Profile for DICE 的「設定描述元」中,下列欄位與這些鏈結相關:
| 名稱 | 鍵 | 類型 | 說明 |
|---|---|---|---|
| 元件名稱 <0x | -70002
|
tstr
|
建議在每個 CDI 層級上使用。元件名稱可明確識別在車輛或車輛平台上執行 Android SDV VM 的所有 DICE 鏈結中,屬於哪個階段。 |
| 安全性版本 | -70005
|
uint
|
每個 CDI 階段都必須提供。 可定義 DICE 政策,防止不安全的遠端 VM 版本加入 SDV 安全網格。 |
| 元件執行個體名稱 <0x0A | -70007
|
tstr
|
第一個 VM 專屬 CDI 層的必要項目。舉例來說,適用於 Android SDV DICE 鏈的 Hypervisor 後。SDV 執行個體的名稱。如果多個 CDI 層包含元件執行個體名稱,每個層必須具有相同的值。 |
保護 World DICE 鏈結
安全世界 DICE 鏈與 Android 裝置傳送給 Android 遠端金鑰佈建 (RKP) 伺服器的鏈結相同。IRemotelyProvisionedComponent HAL 的 generateCertificateRequestV2() 會將這個 DICE 鏈結公開給 Android。
下表顯示安全世界 DICE 鏈的範例:
| 啟動階段 | DICE CDI 層 | 核發者: |
|---|---|---|
| 主要系統啟動載入程式 | CDI[0] |
UDS |
| 次要系統啟動載入程式 | CDI[1] |
主要系統啟動載入程式 |
| TEE 開機 | CDI[2] |
次要系統啟動載入程式 |
| KeyMint TA 開機 | CDI[3] (Leaf) |
TEE |
如要實作 KeyMint 信任應用程式 (TA),請使用下列其中一種方式:
- 所有 SDV VM 的單一 KeyMint 執行個體:您必須為所有 VM 指定單一 CDI。
或
- 每個 SDV VM 各有一個 KeyMint 執行個體:您必須為每個 VM 指定不同的 CDI 值。個別 CDI 值必須包含與 VM 元件執行個體名稱相符的元件執行個體名稱。
Android SDV DICE 鏈結
Android SDV DICE 鏈結會認證在開機路徑上執行的軟體,該路徑會透過 Hypervisor 導向在 SDV VM 上執行的 Android 高階作業系統 (HLOS)。
下表顯示 Android SDV DICE 鏈結範例:
| 啟動階段 | DICE CDI 層 | 核發者: |
|---|---|---|
| 主要系統啟動載入程式 | CDI[0] |
UDS |
| 次要系統啟動載入程式 | CDI[1] |
主要系統啟動載入程式 |
| 管理程序 | CDI[2] |
次要系統啟動載入程式 |
| Android HLOS | CDI[3] (Leaf)
|
(Android 載入器位於) 管理程序1 |
1 管理程序會將客端中的 Android 啟動載入程式認證為一層。Android 系統啟動載入程式會認證 Android HLOS。
Android HLOS CDI 認證
Android 啟動載入程式 (或 Hypervisor,如果沒有 Android 啟動載入程式,只有在 Hypervisor 中載入 VM 的 Android「載入程式」程式) 會簽署 Android HLOS CDI 憑證,並涵蓋 Android HLOS。舉例來說,這項功能涵蓋 Android 啟動載入程式根據 Android 驗證啟動 (AVB) 驗證的所有程式碼。
Android HLOS CDI 憑證必須包含 Android OS 的 SDV 特定值,以減輕安全漏洞的影響。舉例來說,禁止 SDV 安全網格中含有已知安全漏洞的 VM,避免機密資訊外洩。AVB 驗證會提供大部分的值。
這些值也會移交給 TEE 中的 KeyMint,由 SecureWorld DICE 鏈結的葉片 CDI 簽署憑證,並傳遞至 DeviceInfo 中的 Android,以啟用 Android 核心中的金鑰和 ID 認證等功能。
程式碼輸入和 codeHash 憑證欄位
VBMeta 摘要 (Android 系統啟動載入程式為 AVB 驗證執行的輸出內容) 涵蓋 Android HLOS 的軟體。因此,這項值會做為衍生 CDI 密鑰的 android-dice-input-values,並填入 CDI 憑證的 dice-cert-fields 欄位。
建議您使用 SHA-256 演算法,因為這是 AVB 適用的雜湊演算法,可產生長度為 32 位元組的 VBMeta 摘要。與 DICE 的開放式設定檔不同,DICE 的 Android 設定檔允許 android-dice-hash-algos 使用 32 位元組的 android-dice-input-values 進行 DICE 流程,並將相同的 32 位元組值做為 DICE 憑證中的 codeHash。
設定描述元:Android Profile for DICE 中的欄位
除了所有 CDI 層級的說明外,下列具體內容也適用於 Android Profile for DICE 的設定描述元欄位:
| 名稱 | 鍵 | 類型 | 說明 |
|---|---|---|---|
| 元件版本 | -70003
|
int
|
系統 OS 版本 (來自 AVB version-info-avb)。與 android.os.Build.VERSION.release 相同。 |
| 安全性版本 | -70005
|
uint
|
YYYYMMDD 分割區的安全性修補程式等級,格式為 system。 |
| RKP VM 標記 | -70006
|
null
|
RKP VM 標記可防止「遠端金鑰佈建」為 Android SDV DICE 鏈核發憑證。 |
RKP VM 標記必須出現在 Android SDV DICE 鏈的第一個 CDI 憑證中,且不得與安全世界 DICE 鏈共用。此外,不得出現在任何後續 CDI 憑證中,以免 RKP 伺服器 rkp-avf-support將 DICE 鏈視為來自 RKP VM。
設定描述元:新欄位
Android HLOS CDI 憑證的設定描述元必須包含 SDV 專屬值,而非 Android Profile for DICE 描述的值。DICE 的 SDV 設定檔會保留 [-71000, -71999] 鍵值範圍,以供此用途使用。您可以使用保留範圍外的鍵值,新增實作專屬的欄位。SDV 的特定值如下:
| 名稱 | 鍵 | 類型 | 說明 |
|---|---|---|---|
| 驗證開機程序狀態 | -71000
|
tstr
|
green、yellow 或 orange。 |
| build fingerprint | -71001
|
tstr
|
可供使用者閱讀的字串,可做為這個建構版本的專屬 ID,與 ro.build.fingerprint 相同。Android CDD 3.2.2 建構參數 cdd-3-2-2 定義了這個字串。VBMeta 會將這個字串儲存為名為 com.android.build.system.fingerprint 的屬性。 |
system_ext
安全性修補程式等級 |
-71002
|
uint
|
system_ext 分區的安全性修補程式等級,格式為 YYYYMMDD。 |
product
安全性修補程式等級 |
-71003
|
uint
|
product 分區的安全性修補程式等級,格式為 YYYYMMDD。 |
vendor
安全性修補程式等級 |
-71004
|
uint
|
vendor 分區的安全性修補程式等級,格式為 YYYYMMDD。 |
boot
安全性修補程式等級 |
-71005
|
uint
|
boot分割區 (內含 Linux 核心) 的安全性修補程式等級,格式為 YYYYMMDD。 |
| SDV 開機模式 | -71006
|
tstr
|
locked 或 unlocked. 詳情請參閱「網狀網路狀態和佈建」。 |
Android HLOS CDI 的模式輸入值選取
Android HLOS CDI 憑證的 android-dice-mode 使用下列定義:
| AVB UNLOCKED | AVB 已鎖定 | |
|---|---|---|
| SDV 啟動模式 UNLOCKED | 偵錯 | 偵錯 |
| SDV 啟動模式已鎖定 | 未設定 (無效) | 一般 |
金鑰衍生函式
從 Android HLOS CDI 的 CDI_Attest 密鑰衍生公開和私密金鑰組的 android-dice-kdf 必須是 HKDF,且 SHA512 為其雜湊函式。