SDV 启动模式(可以是锁定或解锁)这一新概念定义了 SDV 虚拟机中的 SDV 服务发现代理在尝试连接到其他 SDV 虚拟机中运行的其他服务发现代理以建立安全网状网时的行为。它类似于 Android 启动时验证中现有的设备状态概念。
在配置车辆虚拟机信任库或更新该信任库时,会利用 SDV 启动模式。
SDV 安全网格行为
服务发现网格可能处于以下任一状态,具体取决于其收到的启动值:正常、警告或严重。
只有当汽车的网状网处于“正常”状态时,车主才能拿到汽车。如果没有诊断干预,网状网不可能从“正常”状态变为“警告”状态。“警告”状态在生产环境(例如,非开发/调试)中仅在配置期间出现。
“严重”是一种基本故障,类似于 system_ext 映像在 Android 引导加载程序中未能通过签名验证。如果 SDV 网状网仅因 OTA 更新而从“正常”过渡到“严重”,则该更新会被视为不良更新,您会回退到原始版本“正常”。
以下部分将详细介绍这些状态。
正常
- 从服务发现的角度来看,系统启动是
SECURE。 - 服务发现仅与它认为已安全启动的对等方连接,因此它认为自己所属的 SDV 安全网格是安全的。
个警告
- 由于某些验证已停用,系统启动可能已受到影响。
- 服务发现仅与同样停用了验证的对等方连接。因此,它属于具有相同安全属性的 SDV 安全网格。
- 对等启动可能已成功完成,也可能未成功完成 - 由于本地故障 / 停用,无法进行验证。
- 在开发环境或情况之外,这会带来以下影响:
- 用户数据不得可用。也就是说,它既不能通过 SDV Secure 进行传输,也不能受到 SDV Secure 通信的影响。
- 当网格处于此状态时,应仅提供配置流程所需的服务。
严重
- 系统启动阶段出现严重错误。
- 存在至少一个基本故障或错误,导致服务发现代理无法建立网格。本地服务无法与远程服务通信。
- 从服务发现的角度来看,系统启动是不安全的。
SDV 启动模式
SDV 启动模式有两个可能的值:UNLOCKED 和 LOCKED。在服务发现网状网建立方面,LOCKED 模式意味着验证错误是致命的,而在 UNLOCKED 模式下则不是。
请注意,SDV 启动模式与 Android 的设备状态(也称为 AVB 模式)不同。SDV 启动模式可指导 SDV 安全网状网络的行为,并确定网状网络连接错误是否为严重错误。AVB 模式决定了 Android 引导加载程序执行的验证是否为致命验证。
| 条件 | SDV 启动模式 | |
|---|---|---|
| 达成 | LOCKED | |
| 本地 VVM 受信任证书存储区为空 | 个警告 | 严重 |
| 缺少本地 DICE 链 | 严重 | 严重 |
| 本地 DICE 链验证失败 | 个警告 | 严重 |
| 本地 SDV 和 AVB 模式匹配 | 查看表格 | |
| 远程设备模式值比较 | 查看表格 | |
遥控器 uds_pubs 匹配失败 |
个警告 | 严重 |
| 远程 DICE 链验证失败(使用 DICE 政策) | 个警告 | 严重 |
| 远程身份验证握手失败 | 严重 | 严重 |
本地 SDV 和 AVB 模式匹配
下表显示了 AVB 模式和 SDV 启动模式如何影响 SDV 安全网状网络行为。颜色定义与 AVB 文档的 Android 特定集成部分中的定义相同。
| AVB 模式 x SDV 启动模式 | SDV 启动模式 | ||
|---|---|---|---|
| 达成 | LOCKED | ||
| AVB LOCKED | 绿色 | 个警告 | 正常 |
| 黄色 | 严重 | 严重 | |
| AVB UNLOCKED | Orange | 个警告 | 严重 |
设备模式值
在 DICE 链中,每个 CDI 证书都有一个模式值。该值用于根据相应层的配置输入描述其安全状态。为了表达设备上所有软件的安全态势,我们定义了一个设备模式值,该值派生自与给定 SDV 虚拟机(即 Android HLOS 和安全世界)相关的 DICE 链的所有 CDI 阶段的模式值,并定义如下:
enum DeviceMode {
NotConfigured = 0,
Recovery = 1,
Debug = 2,
Normal = 3,
}
算法
- 让
deviceMode为DeviceMode::Normal - 假设
diceChainList是与 SDV 虚拟机相关的 DICE 链的列表 - 对于
diceChainList中的每个diceChain:- 假设
cdiList是diceChain中的 CDI 证书列表: - 对于
cdiList中的每个cdiCert:- 设
cdiDeviceMode为与cdiCert.mode对应的DeviceMode。 - 将
deviceMode设置为min(deviceMode, cdiDeviceMode)。
- 设
- 假设
- 返回
deviceMode。
远程设备模式值比较
服务发现代理只会与具有相同设备模式值的其他代理连接。
设备模式值可确保网状网络中的成员具有相同的安全属性。因此,生成的网状网络中的所有成员都具有统一的安全态势。
| 设备模式值 | 远程 | ||||
|---|---|---|---|---|---|
| 尚未配置 | 调试 | 恢复 | 正常 | ||
| 本地 | 尚未配置 | 严重 | 严重 | 严重 | 严重 |
| 调试 | 严重 | 个警告 | 严重 | 严重 | |
| 恢复 | 严重 | 严重 | 个警告 | 严重 | |
| 正常 | 严重 | 严重 | 严重 | 正常 | |
出厂配置流程
这是车辆组装线上的配置流程,假设公钥基础架构不可用。
此流程依赖于存储在一次性可编程 (OTP) 内存(称为 VVMFactoryTrust)中的 32 字节值。设置此值后,该值会作为名为 androidboot.sdv.vvmfactorytrust 的参数传递给内核。
ECU 中的所有虚拟机的 SDV 启动模式和 VVMFactoryTrust 必须相同。
Initial State
所有 ECU 最初都处于 SDV 启动模式解锁状态,具有空白的 VVMFactoryTrust 和 VVMTrustStore,但 VVMTrustStore 上可能存在任何 uds_certs。
图 1 描绘了一个示例,其中有三个 SDV 虚拟机(VM-A、VM-B 和 VM-C)分布在两个单独的 ECU(ECU-0 和 ECU-1)中。
第 1 步:运行 sdv_provisioning_tool
启动所有 ECU 中的所有虚拟机。
在每个虚拟机上:
运行
sdv_provisioning_tool- 该工具与本地服务发现代理进行通信,并等待该代理发出 SDV Secure Mesh 完成的信号,以及该代理已将 UDS 公钥列表写入
/vvmtruststore/uds_pubs。 - 发生这种情况时,该工具会获取刚刚写入的
/vvmtruststore/uds_pubs的哈希并将其输出。
- 该工具与本地服务发现代理进行通信,并等待该代理发出 SDV Secure Mesh 完成的信号,以及该代理已将 UDS 公钥列表写入
第 2 步:编写 VVMFactoryTrust
在每个 ECU 的一个虚拟机上:
- 将上一步中
sdv_provisioning_tool输出的/vvmtruststore/uds_pubs的哈希写入 VVMFactoryTrust。此写入操作的执行方式因 OEM/供应商而异,因此不在本规范的讨论范围内。
第 3 步:在 SDV 启动模式锁定状态下重新启动
在 SDV 启动模式锁定状态下,重新启动所有 ECU 中的所有虚拟机。
服务发现代理信任 ECU 中具有 uds_pubs 中列出的 UDS 公钥的虚拟机,因为此文件的哈希与 VVMFactoryTrust 相匹配。
由于 ECU 是同时配置的,因此它们会永久绑定在一起,从 DICE 链验证的角度来看,可以有效地将它们视为单个硬件。
零件更换流程
这是在授权的汽车维修车间或车库中的配置流程,其中必须将有故障的 ECU 更换为新的未配置的 ECU。
此流程取决于由 vvmconfig 中所述的根授权机构直接或间接(通过一些中间授权机构链)签发的 UDS 证书。
Initial State
所有虚拟机均已完成出厂配置,并以锁定状态的 SDV 启动模式运行。
图 5 描绘了一个示例,其中 ECU-0 出现故障,因此需要进行
更换。
第 1 步:安装新 ECU
安装新的 ECU,该 ECU 将处于空白的未配置状态。
在图 6 中,当 ECU-2(替换 ECU)上电时,存在两个不相交的 SDV 安全网格:一个处于警告状态,另一个处于正常状态。这两个 SDV 安全网格都不完整。
第 2 步:在 SDV 启动模式下重新启动(已解锁)
在 SDV 启动模式解锁的情况下,重新启动所有 ECU 的所有虚拟机。
在图 7 中,VM-B 和 VM-C 随后加入警告 SDV 安全网格,该网格现在已完成。
第 3 步:运行 sdv_provisioning_tool
在每个虚拟机上,运行 sdv_provisioning_tool。
该工具与本地服务发现代理进行通信,并等待该代理发出 SDV Secure Mesh 完成的信号,以及该代理已将 UDS 公钥列表写入 /vvmtruststore/uds_pubs。
发生这种情况时,该工具会获取刚刚写入的 /vvmtruststore/uds_pubs 的哈希并将其输出,但此哈希不会在此流程中使用。
第 4 步:安装 UDS 证书
- 从任意 SDV 虚拟机中提取
/vvmtruststore/uds_pubs。选择哪个并不重要,因为同一 SDV 安全网格中的所有虚拟机的设置都相同。 - 检索相应
/vvmtruststore/uds_pubs中列出的所有 UDS 公钥的配置证书。- 这通常意味着将此信息发送到远程服务器,该服务器要么已存储证书,要么会通过将收到的公钥与已知 UDS 公钥的数据库进行比较来生成证书。此数据库将根据 ECU 制造期间提取的 UDS 公钥构建而成。
- 写下每个 SDV 虚拟机的
/vvmtruststore/uds_certs。
第 5 步:在 SDV 启动模式下重新启动(已锁定)
重新启动所有 SDV 启动模式已锁定的虚拟机。
如果 SDV 安全网格因某种原因不完整,请返回到第 2 步。