SDV 開機模式定義 SDV VM 中的 SDV 服務探索代理程式,在嘗試連線至其他服務探索代理程式 (在其他 SDV VM 中執行) 以建立安全網格時的行為。這與 Android 驗證開機程序現有的裝置狀態概念類似。SDV 開機模式可以是 LOCKED 或 UNLOCKED。
在佈建或更新車輛 VM 信任儲存區時,系統會運用 SDV 開機模式。
SDV Secure Mesh 行為
服務探索網格會根據收到的啟動值,處於下列其中一種狀態:Normal、Warning 或 Fatal。
只有在網格處於 Normal
狀態時,車輛才會交到車主手中。網狀架構需要診斷介入,才能從 Normal 狀態切換至 Warning 狀態。在正式環境中 (例如非開發或偵錯環境),Warning 狀態只會在佈建期間發生。
Fatal 是基本故障,類似於 system_ext 圖片在 Android 系統啟動載入程式中無法通過簽章驗證。如果 SDV 網狀網路僅因無線更新 (OTA) 而從 Normal 轉換為 Fatal,則該更新視為不良,網狀網路會回復為原始的 Normal 版本。
以下各節將詳細說明這些狀態。
正常
- 從服務探索的角度來看,系統啟動是
SECURE。 - 服務探索只會連線至安全啟動的對等互連裝置。安全啟動的對等互連裝置表示 SDV 安全網格也安全無虞。
警告
- 由於部分驗證程序已停用,系統開機程序可能遭到入侵。
- 服務探索只會連線至同樣停用驗證的對等互連裝置。這是 SDV 安全網格的一部分,具有與自身相同的安全屬性。
- 由於本機發生失敗或功能已停用,因此無法驗證對等互連啟動是否成功。
- 在開發環境或情況以外,這會產生下列影響:
- 使用者資料不得提供。也就是說,資料不得透過 SDV 安全網格傳輸,也不得受到 SDV 安全網格通訊影響。
- 當網狀網路處於這種狀態時,只有佈建流程所需的服務才能使用。
嚴重
- 系統啟動階段發生重大錯誤。
- 至少有一個基本故障或錯誤,導致 Service Discovery 代理程式無法建立網格。在地服務無法與遠端服務通訊。
- 從服務探索的角度來看,系統啟動是不安全的。
SDV 啟動模式
SDV 開機模式有兩個可能的值:UNLOCKED 和 LOCKED。如果是服務探索網格建立作業,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 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 位元組值,該記憶體稱為 VVMFactoryTrust。設定後,這個值會以名為 androidboot.sdv.vvmfactorytrust 的參數傳遞至核心。
ECU 中的所有 VM 都必須採用相同的 SDV 啟動模式和 VVMFactoryTrust。
初始狀態
所有 ECU 最初都處於 UNLOCKED 模式的 SDV 啟動模式,且 VVMFactoryTrust 和車輛 VM 信任儲存區空白,VVMTrustStore 中的 uds_certs 除外。
圖 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:撰寫 VVMFactoryTrust
在每個 ECU 的一個 VM 上:
- 將上一步中
sdv_provisioning_tool輸出的/vvmtruststore/uds_pubs雜湊值寫入 VVMFactoryTrust。如何執行這項寫入作業,取決於 OEM 或供應商,不在本規格的範圍內。
圖 3. 工廠佈建,步驟 2。
步驟 3:以 SDV 開機模式重新啟動裝置 (已鎖定)
在 LOCKED 模式下,以 SDV 開機模式重新啟動所有 ECU 中的所有 VM。
由於這個檔案的雜湊與 VVMFactoryTrust 相符,因此 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。不論選擇哪個 VM,結果都一樣,因為同一 SDV 安全網格中的所有 VM 都相同。 - 為該
/vvmtruststore/uds_pubs中列出的所有 UDS 公開金鑰擷取佈建憑證。- 這通常是指將這項資訊傳送至遠端伺服器,該伺服器已儲存憑證,或會根據已知的 UDS 公開金鑰資料庫檢查收到的公開金鑰,藉此產生憑證。這個資料庫是根據 ECU 製造期間擷取的 UDS 公開金鑰所建構。
- 寫下每個 SDV VM 的
/vvmtruststore/uds_certs。
圖 9.更換零件 (步驟 4)。
步驟 5:以 SDV 開機模式重新啟動裝置 (已鎖定)
以 LOCKED 模式重新啟動 SDV 開機模式中的所有 VM。
如果 SDV 安全網格不完整,請返回步驟 2。
圖 10. 更換零件,步驟 5。