使用車輛綁定文件加密

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

概述

車輛綁定種子功能的主要目標是通過保護車載信息娛樂 (IVI) 系統上的數據不被從車輛中移除來進一步保護用戶的隱私。這是通過將存儲加密密鑰綁定到其他一些電子控制單元 (ECU) 來完成的,這樣如果 IVI 被移除並放置在另一輛車中(或在測試台上運行),IVI 上的加密用戶數據就無法解密。

為了綁定文件加密密鑰,Vold 將特定於車輛的種子與密鑰加密密鑰派生混合在一起,因此密鑰是唯一的並且物理綁定到車輛。種子是一個字節數組,由 OEM 作為新的車輛硬件抽象層 (VHAL) 屬性STORAGE_ENCRYPTION_BINDING_SEED公開。此屬性的權限受到限制,因此只能由特權系統守護程序查詢。

架構圖

下圖說明了車輛綁定集成的架構:

圖 1.車輛綁定架構

啟用基於車輛的綁定

必須明確啟用將存儲加密綁定到車輛,並且在不執行出廠重置的情況下無法打開或關閉。這意味著無線 (OTA) 更新無法在不擦除設備的情況下啟用該功能。如果 OEM 還對設備進行了出廠重置,他們可以選擇在升級時啟用該功能。例如,在服務訪問中。

通過支持供應商提供的車輛 HAL 中的STORAGE_ENCRYPTION_BINDING_SEED屬性啟用此功能。該屬性包含一個長度為 16 字節的字節串,預計將保留在與 IVI 分開的 ECU 上。該屬性最初由 Android Automotive OS (AAOS) 設置,它使用加密安全隨機數生成器 (CSRNG) 生成它。 AAOS 然後在後續引導時讀取該屬性。

VHAL 如何存儲STORAGE_ENCRYPTION_BINDING_SEED的值是特定於供應商的。我們對保護種子有一般性建議:

  1. 推薦)種子由車輛中的 ECU 存儲,該車輛受到物理保護。如果不是,那麼將 IVI 和 ECU 從車輛中拉出是微不足道的。
  2. 推薦)IVI 和 ECU 應該相互認證以交換種子,以防止來自 ECU 對種子的欺騙請求。
  3. 推薦)種子應使用安全通道傳輸,以防止 CAN 總線嗅探。

此外,在mount_all --late之前添加以下內容以確保供應商init.target.rclate-fs上:

# feed vehicle binding seed to vold
exec_start vold_seed_binding

車輛 HAL 應該在early_hal而不是hal now中啟動。由於/data分區尚未掛載,因此無法在early-hal中訪問任何persist.*系統屬性。

配置基於車輛的綁定

如果 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 vehicle_binding_integration_test