网状网络状态和配置

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

在配置或更新车辆虚拟机信任存储区(VVM 信任存储区,也称为 vvmtruststore)时,会使用 SDV 启动模式。

SDV Secure Mesh 行为

服务发现网格处于以下状态之一,具体取决于其收到的启动值:NormalWarningFatal

在交付给客户的量产车辆中,SDV Secure Mesh 必须处于 Normal 状态。网状网络需要诊断干预才能从 Normal 状态切换到 Warning 状态。在生产环境(例如,非开发或调试环境)中,Warning 状态仅在预配期间出现。

Fatal 是一种基本故障,类似于 system_ext 映像在 Android 引导加载程序中未能通过签名验证。如果 SDV Secure Mesh 仅因无线下载 (OTA) 更新而从 Normal 转换到 Fatal,则该更新会被视为无效,并且网格会回退到原始的 Normal 版本。

下面几个部分将详细介绍这些状态。

正常

  • 从服务发现的角度来看,系统启动是 SECURE
  • 服务发现仅与安全启动的对等设备连接。安全启动的对等互联设备意味着 SDV 安全网格也是安全的。

个警告

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

严重

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

SDV 启动模式

SDV 启动模式有两个可能的值:LOCKEDUNLOCKED。对于服务发现网格建立,LOCKED 表示验证错误是致命的,而 UNLOCKED 表示验证错误不是致命的。

条件 SDV 启动模式
UNLOCKED LOCKED
本地 VVM 信任存储区为空 个警告 严重
缺少本地 DICE 链 严重 严重
本地 DICE 链验证失败 个警告 严重
本地 SDV 和 AVB 模式匹配 请参阅本地 SDV 和 AVB 模式匹配中的表格
远程设备模式值比较 请参阅远程设备模式值比较中的表格
遥控器 uds_pubs 匹配失败 个警告 严重
远程 DICE 链验证失败(使用 DICE 政策 个警告 严重
远程身份验证握手失败 严重 严重

本地 SDV 和 AVB 模式匹配

下表显示了 AVB 模式和 SDV 启动模式如何影响 SDV 安全网状网行为。颜色与 AVB 文档的 Android 特定集成部分中的定义相同。

AVB 模式 x SDV 启动模式 SDV 启动模式
UNLOCKED LOCKED
AVB LOCKED 绿色 个警告 正常
黄色 严重 严重
AVB UNLOCKED Orange 个警告 严重

设备模式值

在 DICE 链中,每个 CDI 证书都有一个模式值。此值根据相应层的配置输入描述了该层的安全状态。为了表达设备上所有软件的安全态势,SDV 规范定义了设备模式值。此值源自与给定 SDV 虚拟机(即 Android HLOS 和安全世界)相关的 DICE 链中所有 CDI 阶段的模式值,并使用以下枚举:

enum DeviceMode {
  NotConfigured = 0,
  Recovery = 1,
  Debug = 2,
  Normal = 3,
}

算法

计算设备模式值的算法如下:

  1. deviceMode 指定为 DeviceMode::Normal
  2. diceChainList 指定为与 SDV 虚拟机相关的 DICE 链列表。
  3. 对于 diceChainList 中的每个 diceChain
    1. diceChain 中指定 cdiList 作为 CDI 证书列表:
    2. 对于 cdiList 中的每个 cdiCert
      1. cdiDeviceMode 指定为与 cdiCert.mode 对应的 DeviceMode
      2. deviceMode 设置为 min(deviceMode, cdiDeviceMode)
  4. 返回 deviceMode

远程设备模式值比较

服务发现代理仅与其他具有相同设备模式值的代理连接。

设备模式值可确保网状网络中的成员不能具有不同的安全属性。生成的网状网络的所有成员都具有统一的安全态势。

设备模式值 远程
未配置 调试 恢复 正常
本地 未配置 严重 严重 严重 严重
调试 严重 个警告 严重 严重
恢复 严重 严重 个警告 严重
正常 严重 严重 严重 正常

出厂配置流程

这是车辆组装线上的配置流程,假设公钥基础架构不可用。此流程依赖于存储在一次性可编程 (OTP) 内存中的 32 字节值,该值称为车辆虚拟机 (VVM) 工厂信任或 vvmfactorytrust。设置后,此值会作为名为 androidboot.sdv.vvmfactorytrust 的参数传递给内核。

ECU 中的所有虚拟机的 SDV 启动模式和 VVM 工厂信任必须相同。

初始状态

所有 ECU 最初都处于 UNLOCKED 模式下的 SDV 启动模式,具有空白的 VVM 工厂信任和车辆 VM 信任库vvmtruststore 上存在的任何 uds_certs 除外)。图 1 描绘了一个示例,其中有三个 SDV 虚拟机(VM-A、VM-B 和 VM-C)分布在两个单独的 ECU(ECU-0 和 ECU-1)中:

工厂配置示例 - 初始状态

图 1. 出厂配置,初始状态。

第 1 步:运行 sdv_provisioning_tool

启动所有 ECU 中的所有虚拟机。

在每个虚拟机上,运行 sdv_provisioning_tool

  1. 该工具会与本地服务发现代理进行通信,并等待该代理发出 SDV Secure Mesh 已完成的信号,以及该代理已将 UDS 公钥列表写入 /vvmtruststore/uds_pubs
  2. 发生这种情况时,该工具会获取刚刚写入的 /vvmtruststore/uds_pubs 的哈希并将其输出。

出厂配置,第 1 步

图 2. 出厂配置,第 1 步。

第 2 步:写入 VVM 工厂信任

在每个 ECU 的一个虚拟机上:

  1. 将上一步中 sdv_provisioning_tool 输出的 /vvmtruststore/uds_pubs 的哈希写入 VVM Factory Trust。此写入操作的执行方式因 OEM 或供应商而异,不在本规范的讨论范围内。

出厂配置,第 2 步

图 3. 出厂配置,第 2 步。

第 3 步:在 SDV 启动模式下重新启动(已锁定)

LOCKED 模式下,以 SDV 启动模式重新启动所有 ECU 中的所有虚拟机。

服务发现代理信任 ECU 中具有 uds_pubs 中列出的 UDS 公钥的虚拟机,因为此文件的哈希与 VVM 工厂信任相匹配。

由于 ECU 是同时配置的,因此它们会永久绑定在一起,从 DICE 链验证的角度来看,可以有效地将它们视为单个硬件。

出厂配置,第 3 步

图 4. 出厂配置,第 3 步。

部件更换流程

这是在授权的汽车维修车间或车库中的配置流程,其中必须将有故障的 ECU 替换为新的未配置的 ECU。

此流程取决于由 vvmconfig 中所述的根授权机构直接或间接(通过某个中间授权机构链)颁发的 UDS 证书。

初始状态

所有虚拟机均已完成出厂配置,并以 SDV 启动模式在 LOCKED 模式下运行。

图 5 描绘了一个 ECU-0 出现故障并需要更换的示例:

零件替换,初始状态

图 5. 配件更换,初始状态。

第 1 步:安装新 ECU

安装处于空白未配置状态的新 ECU。

在图 6 中,当 ECU-2(替换 ECU)上电时,存在两个不相交的 SDV 安全网格:一个处于 Warning 状态,另一个处于 Normal 状态。两个 SDV 安全网格均不完整。

更换零件,第 1 步

图 6. 更换零件,第 1 步。

第 2 步:在 SDV 启动模式下重新启动(已解锁)

UNLOCKED 模式下,以 SDV 启动模式重启所有 ECU 的所有虚拟机。

在图 7 中,VM-B 和 VM-C 加入了完整的 Warning SDV 安全网格。

更换零件,第 2 步

图 7. 更换零件,第 2 步。

第 3 步:运行 sdv_provisioning_tool

在每个虚拟机上,运行 sdv_provisioning_tool

该工具会与本地服务发现代理通信,并等待该代理发出 SDV Secure Mesh 已完成的信号,以及该代理已将 UDS 公钥列表写入 /vvmtruststore/uds_pubs

发生这种情况时,该工具会获取刚刚写入的 /vvmtruststore/uds_pubs 的哈希并将其输出,但此哈希不会在此流程中使用。

更换部件,第 3 步

图 8. 更换零件,第 3 步。

第 4 步:安装 UDS 证书

  • 从任意 SDV 虚拟机中提取 /vvmtruststore/uds_pubs。选择哪个并不重要,因为同一 SDV 安全网格中的所有虚拟机的该值都相同。
  • 检索相应 /vvmtruststore/uds_pubs 中列出的所有 UDS 公钥的配置证书。
    • 此步骤通常涉及将提取的 UDS 公钥(或 /vvmtruststore/uds_pubs 文件)发送到远程配置服务器。服务器通过将收到的公钥与 ECU 制造期间构建的已知 UDS 公钥数据库进行比较,来检索预先存在的证书或生成新证书。
  • 写下每个 SDV 虚拟机的 /vvmtruststore/uds_certs

更换部件,第 4 步

图 9. 更换零件,第 4 步。

第 5 步:在 SDV 启动模式下重新启动(已锁定)

LOCKED 模式下,重新启动 SDV 启动模式下的所有虚拟机。

如果 SDV Secure Mesh 不完整,请返回到第 2 步

更换零件,第 5 步

图 10. 更换零件,第 5 步。