SDV 開機模式定義 SDV VM 中的 SDV 服務探索代理程式,在嘗試連線至其他服務探索代理程式 (在其他 SDV VM 中執行) 以建立安全網格時的行為。這與 Android 驗證開機程序現有的裝置狀態概念類似。
在佈建或更新車輛 VM 信任存放區 (VVM 信任存放區,也稱為 vvmtruststore) 時,會使用 SDV 開機模式。
SDV Secure Mesh 行為
服務探索網格會根據收到的啟動值,處於下列其中一種狀態:Normal、Warning 或 Fatal。
交付給顧客的量產車輛中,SDV 安全網狀網路必須處於 Normal 狀態。網狀網路需要診斷介入,才能從 Normal 狀態切換至 Warning 狀態。在正式環境 (例如非開發或偵錯環境) 中,Warning 狀態只會在佈建期間發生。
Fatal 是基本故障,類似於 system_ext 圖片在 Android 開機載入程式中無法通過簽章驗證。如果 SDV Secure Mesh 僅因無線更新 (OTA) 而從 Normal 轉換為 Fatal,則該更新視為不良,網狀網路會回復為原始的 Normal 版本。
以下各節將詳細說明這些狀態。
一般
- 從服務探索的角度來看,系統啟動是
SECURE。 - 服務探索只會連線至安全啟動的對等互連裝置。安全啟動的對等互連裝置表示 SDV 安全網格也安全無虞。
警告
- 由於部分驗證程序已停用,系統開機程序可能遭到入侵。
- 服務探索只會連線至具有完全相同停用驗證集的對等互連,確保 SDV 安全網格中的所有對等互連都具有相同的安全性屬性。
- 由於本機發生失敗或功能已停用,因此無法驗證對等互連啟動是否成功。
- 在開發環境或情況以外,這會產生下列影響:
- 使用者資料不得提供。也就是說,資料不得透過 SDV 安全網格傳輸,也不得受到 SDV 安全網格通訊影響。
- 當網狀網路處於這種狀態時,只有佈建流程所需的服務才能使用。
嚴重
- 系統啟動階段發生重大錯誤。
- 至少有一個基本故障或錯誤,導致 Service Discovery 代理程式無法建立網格。在地服務無法與遠端服務通訊。
- 從服務探索的角度來看,系統啟動是
UNSECURE。
SDV 啟動模式
SDV 開機模式有兩個可能的值:LOCKED 和 UNLOCKED。如果是服務探索網格建立作業,LOCKED 表示驗證錯誤是嚴重錯誤,UNLOCKED 則表示不是。
| 條件 | SDV 啟動模式 | |
|---|---|---|
UNLOCKED |
LOCKED |
|
| 本機 VVM 信任商店為空 | 警告 | 嚴重 |
| 缺少當地 DICE 鏈結 | 嚴重 | 嚴重 |
| 本機 DICE 鏈結驗證失敗 | 警告 | 嚴重 |
| 本機 SDV 和 AVB 模式相符 | 請參閱本機 SDV 和 AVB 模式比對中的表格 | |
| 比較遠端裝置模式值 | 請參閱「遠端裝置模式值比較」一文中的表格 | |
遙控器 uds_pubs 比對失敗 |
警告 | 嚴重 |
| 遠端 DICE 鏈結驗證失敗 (使用 DICE 政策) | 警告 | 嚴重 |
| 遠端驗證信號交換失敗 | 嚴重 | 嚴重 |
本機 SDV 和 AVB 模式相符
下表說明 AVB 模式和 SDV 開機模式對 SDV 安全網格行為的影響。這些顏色定義於 AVB 文件的「Android 專屬整合」一節。
| AVB 模式 x SDV 啟動模式 | SDV 啟動模式 | ||
|---|---|---|---|
UNLOCKED |
LOCKED |
||
AVB LOCKED |
綠色 | 警告 | 一般 |
| 黃色 | 嚴重 | 嚴重 | |
AVB UNLOCKED |
Orange | 警告 | 嚴重 |
裝置模式值
在 DICE 鏈結中,每個 CDI 憑證都有模式值。這個值會根據設定輸入內容,說明該層的安全狀態。為表達裝置上所有軟體的安全狀態,SDV 規格定義了裝置模式值。這個值衍生自與特定 SDV VM (即 Android HLOS 和安全世界) 相關的 DICE 鏈中所有 CDI 階段的模式值,並使用下列列舉:
enum DeviceMode {
NotConfigured = 0,
Recovery = 1,
Debug = 2,
Normal = 3,
}
演算法
計算裝置模式值的演算法如下:
- 將
deviceMode指定為DeviceMode::Normal。 - 將
diceChainList指定為與 SDV VM 相關的 DICE 鏈結清單。 - 針對
diceChainList中的每個diceChain:- 在
diceChain中,將cdiList指定為 CDI 憑證清單: - 針對
cdiList中的每個cdiCert:- 將
cdiDeviceMode指定為與cdiCert.mode對應的DeviceMode。 - 將
deviceMode設為min(deviceMode, cdiDeviceMode)。
- 將
- 在
- 回程日期:
deviceMode。
比較遠端裝置模式值
服務探索代理程式只會連線至具有相同裝置模式值的其他代理程式。
「裝置模式」值可確保網狀架構成員不會有不同的安全性屬性。產生的網格在所有成員之間具有一致的安全態勢。
| 裝置模式值 | 遠端 | ||||
|---|---|---|---|---|---|
| 未設定 | 偵錯 | 復原 | 一般 | ||
| 本機 | 未設定 | 嚴重 | 嚴重 | 嚴重 | 嚴重 |
| 偵錯 | 嚴重 | 警告 | 嚴重 | 嚴重 | |
| 復原 | 嚴重 | 嚴重 | 警告 | 嚴重 | |
| 一般 | 嚴重 | 嚴重 | 嚴重 | 一般 | |
工廠佈建流程
這是車輛組裝線的佈建流程,假設公開金鑰基礎架構無法使用。這個流程取決於儲存在一次性可程式化 (OTP) 記憶體中的 32 位元組值,稱為車輛 VM (VVM) 工廠信任或 vvmfactorytrust。設定後,這個值會以名為 androidboot.sdv.vvmfactorytrust 的參數形式傳遞至核心。
ECU 中的所有 VM 都必須具備相同的 SDV 啟動模式和 VVM Factory Trust。
初始狀態
所有 ECU 最初都處於 UNLOCKED 模式的 SDV 開機模式,且除了 uds_certs 以外,VVM Factory Trust 和 Vehicle VM Trust Store 皆為空白。vvmtruststore圖 1 顯示的範例有三個 SDV VM (VM-A、VM-B 和 VM-C),分布在兩個不同的 ECU (ECU-0 和 ECU-1):
圖 1. 工廠佈建,初始狀態。
步驟 1:執行 sdv_provisioning_tool
從所有 ECU 啟動所有 VM。
在每個 VM 上執行 sdv_provisioning_tool。
- 這項工具會與本機服務探索代理程式通訊,並等待代理程式發出 SDV 安全網狀網路完成的信號,以及代理程式將 UDS 公開金鑰清單寫入
/vvmtruststore/uds_pubs。 - 發生這種情況時,工具會取得剛寫入的
/vvmtruststore/uds_pubs的雜湊,並輸出該雜湊。
圖 2. 工廠佈建,步驟 1。
步驟 2:撰寫 VVM Factory Trust
在每個 ECU 的一個 VM 上:
- 將上一步中
sdv_provisioning_tool輸出的/vvmtruststore/uds_pubs雜湊值寫入 VVM Factory Trust。如何執行這項寫入作業,取決於原始設備製造商或供應商,不在本規格的範圍內。
圖 3. 工廠佈建,步驟 2。
步驟 3:以 SDV 開機模式重新啟動裝置 (已鎖定)
在 LOCKED 模式下,以 SDV 開機模式重新啟動所有 ECU 中的所有 VM。
由於這個檔案的雜湊與 VVM Factory Trust 相符,因此 Service Discovery 代理程式會信任 ECU 中的 VM,並使用 uds_pubs 列出的 UDS 公開金鑰。
由於 ECU 是同時佈建,因此會永久繫結在一起,從 DICE 鏈結驗證的角度來看,可視為單一硬體。
圖 4. 工廠佈建,步驟 3。
零件更換流程
這是授權汽車維修廠或車庫的佈建流程,必須以未佈建的新 ECU 更換故障的 ECU。
這個流程取決於 UDS 憑證是由 vvmconfig 中所述的根授權單位直接核發,還是透過某個中間授權單位鏈結間接核發。
初始狀態
所有 VM 都已完成原廠佈建,並以 SDV 開機模式在 LOCKED 模式下執行。
圖 5 顯示 ECU-0 故障且需要更換的範例:
圖 5. 更換零件,初始狀態。
步驟 1:安裝新的 ECU
安裝新的 ECU,該 ECU 處於空白的未佈建狀態。
如圖 6 所示,當 ECU-2 (更換的 ECU) 啟動電源時,會有兩個不相交的 SDV 安全網格:一個處於 Warning 狀態,另一個處於 Normal 狀態。兩個 SDV 安全網格都不完整。
圖 6. 更換零件 (步驟 1)。
步驟 2:以解鎖的 SDV 開機模式重新啟動
在 UNLOCKED 模式下,以 SDV 開機模式重新啟動所有 ECU 的所有 VM。
在圖 7 中,VM-B 和 VM-C 加入 Warning SDV 安全網格,該網格已完成。
圖 7. 更換零件,步驟 2。
步驟 3:執行 sdv_provisioning_tool
在每個 VM 上執行 sdv_provisioning_tool。
這項工具會與本機服務探索代理程式通訊,並等待代理程式發出 SDV 安全網狀網路完成的信號,以及代理程式將 UDS 公開金鑰清單寫入 /vvmtruststore/uds_pubs。
發生這種情況時,工具會取得剛寫入的 /vvmtruststore/uds_pubs 的雜湊值並輸出,但這個雜湊值不會用於這個流程。
圖 8. 更換零件,步驟 3。
步驟 4:安裝 UDS 憑證
- 從任意 SDV VM 擷取
/vvmtruststore/uds_pubs。不論選擇哪個,因為在同一個 SDV Secure Mesh 中,所有 VM 都會使用相同的指令碼。 - 為該
/vvmtruststore/uds_pubs中列出的所有 UDS 公開金鑰擷取佈建憑證。- 這個步驟通常是將擷取的 UDS 公開金鑰 (或
/vvmtruststore/uds_pubs檔案) 傳送至遠端佈建伺服器。伺服器會比對接收到的公開金鑰與 ECU 製造期間建立的已知 UDS 公開金鑰資料庫,藉此擷取現有憑證或產生新憑證。
- 這個步驟通常是將擷取的 UDS 公開金鑰 (或
- 寫下每個 SDV VM 的
/vvmtruststore/uds_certs。
圖 9.更換零件,步驟 4。
步驟 5:以 SDV 開機模式重新啟動裝置 (已鎖定)
以 LOCKED 模式重新啟動 SDV 開機模式中的所有 VM。
如果 SDV 安全網格不完整,請返回步驟 2。
圖 10. 更換零件 (步驟 5)。