本页介绍了如何启用基于车辆绑定的加密种子功能。
概览
车辆绑定种子功能的主要目标是通过保护车载信息娱乐系统 (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
的值是供应商特定的。我们有一些关于保护种子的一般建议
- (推荐)种子由车辆中物理保护良好的 ECU 存储。否则,从车辆中拉出 IVI 和 ECU 都很简单。
- (推荐)IVI 和 ECU 应相互验证以交换种子,以防止来自 ECU 的种子请求被欺骗。
- (推荐)应使用安全通道传输种子,以防止 CAN 总线嗅探。
此外,添加以下内容以确保供应商 init.target.rc
在 late-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 中更改
- 将
prompt_and_wipe_data
更改为wipe_data
。设备擦除数据,然后在没有提示的情况下重启。 - 提示消息包含在 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