使用車輛繫結檔案加密功能

本頁說明如何啟用車輛型繫結加密種子功能。

總覽

繫結種子功能的主要目標在於 保護車輛資訊娛樂 (IVI) 系統上的資料,防止車輛從車上取下。這是 將儲存空間加密金鑰繫結至其他電子控制單位 (ECU), IVI 會移除並放置在另一輛車上 (或在測試台上運作),則在 IVI 無法解密。

為了繫結檔案加密金鑰,Vn 會混合使用車輛專用「種子」和金鑰加密機制 索引鍵,確保索引鍵不會重複,且會將實體繫結至車輛。種子是位元組陣列 原始設備製造商 (OEM) 會以新車硬體抽象層 (VHAL) 屬性公開。 STORAGE_ENCRYPTION_BINDING_SEED。這項資源的權限受到限制 只能透過具有特殊權限的系統 Daemon 進行查詢。

架構圖

下圖說明車輛繫結整合的架構:

圖 1. 車輛繫結架構。

啟用車輛型繫結

車輛的儲存空間加密繫結必須明確啟用,且無法開啟 而不會恢復原廠設定也就是說,無線更新 (OTA) 無法 在不清除裝置資料的情況下啟用這項功能。原始設備製造商 (OEM) 可以選擇為 如果使用者也將裝置恢復原廠設定,請先升級。例如:造訪服務。

透過支援 STORAGE_ENCRYPTION_BINDING_SEED 屬性即可啟用這項功能 中,這個屬性可保留長度為 16 個位元組的位元組字串, 應保存在獨立於 IVI 的 ECU 上。這個屬性一開始是由 Android Automotive OS (AAOS):使用經過加密編譯的安全隨機號碼產生 Android Automotive OS 產生器 (CSRNG)。AAOS 接著會在後續開機時讀取屬性。

VHAL 如何儲存供應商專屬的 STORAGE_ENCRYPTION_BINDING_SEED 值。 我們對於保護種子,制定了一般建議:

  1. (建議) ECU 會將種子儲存在實體車上 並受到完善保護如果不是的話,從 IVI 和 ECU 提取出來並不容易 。
  2. (建議) IVI 和 ECU 應相互驗證,以便將種子交換到 避免 ECU 假冒種子請求。
  3. (建議) 傳輸種子時,請務必使用安全的通道防範 CAN 公車窺探。

此外,請加入下列內容來確保供應商「init.target.rc」已啟用 mount_all --late 之前late-fs

# feed vehicle binding seed to vold
exec_start vold_seed_binding

車輛 HAL 應以 early_hal 啟動,而非 hal now。 無法存取 early-hal 中的任何 persist.* 系統屬性,因為 尚未掛接「/data」分區。

設定車輛型繫結

如果 ECU 種子不相符,裝置會重新啟動並提示使用者清除資料 /data 分區或重試。

你可以前往以下頁面變更提示和抹除資料行為: buildins.cpp

  1. prompt_and_wipe_data 變更為 wipe_data。裝置會抹除, 並在系統不提示的情況下重新啟動
  2. 提示訊息包含在 recovery.cpp

    圖 2. 提示訊息。

測試車輛型繫結

模擬測試

系統會透過 packages/services/Car/cpp/security/vehicle_binding_util/tests

如何執行模擬測試:

attest libvehicle_binding_util_test

整合測試

這裡提供的測試測試 packages/services/Car/cpp/security/vehicle_binding_util/tests

如何執行這項整合測試:

atest vehicle_binding_integration_test