本頁介紹如何啟用基於車輛的綁定加密種子功能。
概述
車輛綁定種子功能的主要目標是透過保護車載資訊娛樂 (IVI) 系統上的資料免於從車輛中刪除來進一步保護使用者的隱私。這是透過將儲存加密金鑰綁定到其他一些電子控制單元(ECU) 來完成的,這樣,如果IVI 被移除並放置在另一輛車上(或在測試台上運行),則IVI 上的加密用戶資料無法解密。
為了綁定檔案加密金鑰,Vold 將車輛特定的種子與金鑰加密金鑰派生混合在一起,因此金鑰是唯一的並物理綁定到車輛。種子是一個位元組數組,由 OEM STORAGE_ENCRYPTION_BINDING_SEED
作為新的車輛硬體抽象層 (VHAL) 屬性公開。此屬性的權限受到限制,只能由特權系統守護程式查詢。
架構圖
下圖說明了車輛綁定整合的架構:
圖 1.車輛綁定架構。
啟用基於車輛的綁定
必須明確啟用儲存加密與車輛的綁定,並且在不執行出廠重置的情況下無法開啟或關閉。這意味著無線 (OTA) 更新無法在不擦除裝置的情況下啟用該功能。如果 OEM 也對設備進行了出廠重置,則他們可以選擇在升級時啟用該功能。例如,在服務存取中。
此功能是透過支援供應商提供的車輛 HAL 中的STORAGE_ENCRYPTION_BINDING_SEED
屬性來啟用的。此屬性保存一個長度為 16 個位元組的位元組字串,預計將保存在與 IVI 分開的 ECU 上。此屬性最初由 Android 汽車作業系統 (AAOS) 設置,並使用加密安全隨機數產生器 (CSRNG) 產生。然後 AAOS 在後續啟動時讀取該屬性。
VHAL 如何儲存STORAGE_ENCRYPTION_BINDING_SEED
的值是特定於供應商的。我們對保護種子有一般建議:
- (建議)種子由車輛中的 ECU 存儲,並受到良好的物理保護。如果沒有,那麼從車輛上拆下 IVI 和 ECU 就很簡單了。
- (建議)IVI 和 ECU 應相互驗證以交換種子,以防止來自 ECU 的種子欺騙請求。
- (建議)種子應使用安全通道傳輸,以防止 CAN 總線嗅探。
此外,新增以下內容以確保在mount_all --late
之前的late-fs
上供應商init.target.rc
:
# feed vehicle binding seed to vold exec_start vold_seed_binding
車輛 HAL 應該在early_hal
而不是hal now
中啟動。任何persist.*
系統屬性都無法在early-hal
中訪問,因為/data
分割區尚未安裝。
配置基於車輛的綁定
如果 ECU 種子不匹配,設備將重新啟動進入恢復狀態,並提示使用者擦除/data
分區或重試。
提示和擦除資料行為可以在builtins.cpp中更改:
- 將
prompt_and_wipe_data
改為wipe_data
。設備會擦除數據,然後在沒有提示的情況下重新啟動。 - 提示訊息包含在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 測試。
要執行此整合測試:
atest vehicle_binding_integration_test