使用車輛綁定檔案加密

本頁介紹如何啟用基於車輛的綁定加密種子功能。

概述

車輛綁定種子功能的主要目標是透過保護車載資訊娛樂 (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的值是特定於供應商的。我們對保護種子有一般建議:

  1. 建議)種子由車輛中的 ECU 存儲,並受到良好的物理保護。如果沒有,那麼從車輛上拆下 IVI 和 ECU 就很簡單了。
  2. 建議)IVI 和 ECU 應相互驗證以交換種子,以防止來自 ECU 的種子欺騙請求。
  3. 建議)種子應使用安全通道傳輸,以防止 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中更改:

  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 測試。

要執行此整合測試:

atest vehicle_binding_integration_test