网状网络状态和配置

SDV 启动模式(可以是锁定或解锁)这一新概念定义了 SDV 虚拟机中的 SDV 服务发现代理在尝试连接到其他 SDV 虚拟机中运行的其他服务发现代理以建立安全网状网时的行为。它类似于 Android 启动时验证中现有的设备状态概念。

在配置车辆虚拟机信任库或更新该信任库时,会利用 SDV 启动模式。

SDV 安全网格行为

服务发现网格可能处于以下任一状态,具体取决于其收到的启动值:正常、警告或严重。

只有当汽车的网状网处于“正常”状态时,车主才能拿到汽车。如果没有诊断干预,网状网不可能从“正常”状态变为“警告”状态。“警告”状态在生产环境(例如,非开发/调试)中仅在配置期间出现。

“严重”是一种基本故障,类似于 system_ext 映像在 Android 引导加载程序中未能通过签名验证。如果 SDV 网状网仅因 OTA 更新而从“正常”过渡到“严重”,则该更新会被视为不良更新,您会回退到原始版本“正常”。

以下部分将详细介绍这些状态。

正常

  • 从服务发现的角度来看,系统启动是 SECURE
  • 服务发现仅与它认为已安全启动的对等方连接,因此它认为自己所属的 SDV 安全网格是安全的。

个警告

  • 由于某些验证已停用,系统启动可能已受到影响。
  • 服务发现仅与同样停用了验证的对等方连接。因此,它属于具有相同安全属性的 SDV 安全网格。
  • 对等启动可能已成功完成,也可能未成功完成 - 由于本地故障 / 停用,无法进行验证。
  • 在开发环境或情况之外,这会带来以下影响:
    • 用户数据不得可用。也就是说,它既不能通过 SDV Secure 进行传输,也不能受到 SDV Secure 通信的影响。
    • 当网格处于此状态时,应仅提供配置流程所需的服务。

严重

  • 系统启动阶段出现严重错误。
  • 存在至少一个基本故障或错误,导致服务发现代理无法建立网格。本地服务无法与远程服务通信。
  • 从服务发现的角度来看,系统启动是不安全的。

SDV 启动模式

SDV 启动模式有两个可能的值:UNLOCKEDLOCKED。在服务发现网状网建立方面,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,
}

算法

  1. deviceModeDeviceMode::Normal
  2. 假设 diceChainList 是与 SDV 虚拟机相关的 DICE 链的列表
  3. 对于 diceChainList 中的每个 diceChain
    1. 假设 cdiListdiceChain 中的 CDI 证书列表:
    2. 对于 cdiList 中的每个 cdiCert
      1. cdiDeviceMode 为与 cdiCert.mode 对应的 DeviceMode
      2. deviceMode 设置为 min(deviceMode, cdiDeviceMode)
  4. 返回 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 的哈希并将其输出。

第 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 步