網狀網路狀態和佈建

SDV 開機模式定義 SDV VM 中的 SDV 服務探索代理程式,在嘗試連線至其他服務探索代理程式 (在其他 SDV VM 中執行) 以建立安全網格時的行為。這與 Android 驗證開機程序現有的裝置狀態概念類似。

在佈建或更新車輛 VM 信任存放區 (VVM 信任存放區,也稱為 vvmtruststore) 時,會使用 SDV 開機模式。

SDV Secure Mesh 行為

服務探索網格會根據收到的啟動值,處於下列其中一種狀態:NormalWarningFatal

交付給顧客的量產車輛中,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 開機模式有兩個可能的值:LOCKEDUNLOCKED。如果是服務探索網格建立作業,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,
}

演算法

計算裝置模式值的演算法如下:

  1. deviceMode 指定為 DeviceMode::Normal
  2. diceChainList 指定為與 SDV VM 相關的 DICE 鏈結清單。
  3. 針對 diceChainList 中的每個 diceChain
    1. diceChain 中,將 cdiList 指定為 CDI 憑證清單:
    2. 針對 cdiList 中的每個 cdiCert
      1. cdiDeviceMode 指定為與 cdiCert.mode 對應的 DeviceMode
      2. deviceMode 設為 min(deviceMode, cdiDeviceMode)
  4. 回程日期: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

  1. 這項工具會與本機服務探索代理程式通訊,並等待代理程式發出 SDV 安全網狀網路完成的信號,以及代理程式將 UDS 公開金鑰清單寫入 /vvmtruststore/uds_pubs
  2. 發生這種情況時,工具會取得剛寫入的 /vvmtruststore/uds_pubs 的雜湊,並輸出該雜湊。

工廠佈建,步驟 1

圖 2. 工廠佈建,步驟 1。

步驟 2:撰寫 VVM Factory Trust

在每個 ECU 的一個 VM 上:

  1. 將上一步中 sdv_provisioning_tool 輸出的 /vvmtruststore/uds_pubs 雜湊值寫入 VVM Factory Trust。如何執行這項寫入作業,取決於原始設備製造商或供應商,不在本規格的範圍內。

工廠佈建,步驟 2

圖 3. 工廠佈建,步驟 2。

步驟 3:以 SDV 開機模式重新啟動裝置 (已鎖定)

LOCKED 模式下,以 SDV 開機模式重新啟動所有 ECU 中的所有 VM。

由於這個檔案的雜湊與 VVM Factory Trust 相符,因此 Service Discovery 代理程式會信任 ECU 中的 VM,並使用 uds_pubs 列出的 UDS 公開金鑰。

由於 ECU 是同時佈建,因此會永久繫結在一起,從 DICE 鏈結驗證的角度來看,可視為單一硬體。

原廠佈建,步驟 3

圖 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 安全網格都不完整。

更換零件 (步驟 1)

圖 6. 更換零件 (步驟 1)。

步驟 2:以解鎖的 SDV 開機模式重新啟動

UNLOCKED 模式下,以 SDV 開機模式重新啟動所有 ECU 的所有 VM。

在圖 7 中,VM-B 和 VM-C 加入 Warning SDV 安全網格,該網格已完成。

更換零件 (步驟 2)

圖 7. 更換零件,步驟 2。

步驟 3:執行 sdv_provisioning_tool

在每個 VM 上執行 sdv_provisioning_tool

這項工具會與本機服務探索代理程式通訊,並等待代理程式發出 SDV 安全網狀網路完成的信號,以及代理程式將 UDS 公開金鑰清單寫入 /vvmtruststore/uds_pubs

發生這種情況時,工具會取得剛寫入的 /vvmtruststore/uds_pubs 的雜湊值並輸出,但這個雜湊值不會用於這個流程。

更換零件 (步驟 3)

圖 8. 更換零件,步驟 3。

步驟 4:安裝 UDS 憑證

  • 從任意 SDV VM 擷取 /vvmtruststore/uds_pubs。不論選擇哪個,因為在同一個 SDV Secure Mesh 中,所有 VM 都會使用相同的指令碼。
  • 為該 /vvmtruststore/uds_pubs 中列出的所有 UDS 公開金鑰擷取佈建憑證。
    • 這個步驟通常是將擷取的 UDS 公開金鑰 (或 /vvmtruststore/uds_pubs 檔案) 傳送至遠端佈建伺服器。伺服器會比對接收到的公開金鑰與 ECU 製造期間建立的已知 UDS 公開金鑰資料庫,藉此擷取現有憑證或產生新憑證。
  • 寫下每個 SDV VM 的 /vvmtruststore/uds_certs

更換零件,步驟 4

圖 9.更換零件,步驟 4。

步驟 5:以 SDV 開機模式重新啟動裝置 (已鎖定)

LOCKED 模式重新啟動 SDV 開機模式中的所有 VM。

如果 SDV 安全網格不完整,請返回步驟 2

更換零件 (步驟 5)

圖 10. 更換零件 (步驟 5)。