使用车辆绑定文件加密

本页介绍了如何启用基于车辆绑定的加密种子功能。

概览

车辆绑定种子功能的主要目标是通过保护车载信息娱乐系统 (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) 设置,AAOS 使用加密安全随机数生成器 (CSRNG) 生成该属性。然后,AAOS 在后续启动时读取该属性。

VHAL 如何存储 STORAGE_ENCRYPTION_BINDING_SEED 的值是供应商特定的。我们有一些关于保护种子的一般建议

  1. 推荐)种子由车辆中物理保护良好的 ECU 存储。否则,从车辆中拉出 IVI 和 ECU 都很简单。
  2. 推荐)IVI 和 ECU 应相互验证以交换种子,以防止来自 ECU 的种子请求被欺骗。
  3. 推荐)应使用安全通道传输种子,以防止 CAN 总线嗅探。

此外,添加以下内容以确保供应商 init.target.rclate-fs mount_all --late 之前

# 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

集成测试

atest 测试在 packages/services/Car/cpp/security/vehicle_binding_util/tests 中提供。

要运行此集成测试

atest vehicle_binding_integration_test