2、TC3xx 架构基础:AURIX TC3xx 多核架构、HSM 子系统位置、CPU 与 HSM 的通信机制及内存映射
AURIX TC3xx 系列是英飞凌面向功能安全与信息安全需求推出的新一代多核微控制器,广泛应用于汽车电子控制单元(ECU)、域控制器及自动驾驶计算平台。在深入 HSM(硬件安全模块)安全启动与加密通信实战之前,必须首先建立对 TC3xx 整体架构的清晰认知:多核如何协同、HSM 在系统中的物理与逻辑位置、CPU 与 HSM 之间通过何种机制交换数据,以及内存映射如何决定访问权限与隔离边界。本章将围绕这四个核心维度展开,为后续的密钥管理、安全启动链验证及安全通信(SecOC/SHE+)打下坚实的硬件基础。
上图展示了 TC3xx 系列中多核 CPU 集群、SRI 交叉开关、HSM 子系统以及共享内存之间的核心连接关系。从工程视角看,这张图揭示了三个关键设计原则:第一,所有主设备(CPU、DMA、HSM)通过 SRI 交叉开关访问从设备(Flash、RAM、外设),SRI 是数据通路的枢纽;第二,HSM 并非简单的协处理器,而是拥有独立内核、独立存储和独立中断控制器的完整子系统,其安全边界由硬件强制隔离;第三,CPU 与 HSM 之间的数据交换不直接通过总线握手,而是通过共享内存(LMU)中的邮箱机制实现,这种设计避免了总线占用冲突,也便于实现访问权限控制。
2.1 多核架构核心原理:从单核到异构协同
TC3xx 系列(如 TC397、TC375、TC364)集成了最多 6 个 TriCore 内核,每个内核都是独立的 32 位处理器,具备 DSP(数字信号处理)和 FPU(浮点运算单元)能力。TriCore 架构的最大特点是将微控制器(MCU)、数字信号处理器(DSP)和精简指令集(RISC)三种技术融合于一身,使得单个内核既能执行控制逻辑,又能高效处理信号运算。
在多核协同方面,TC3xx 采用 SRI(Shared Resource Interconnect)交叉开关总线作为系统主干。SRI 支持多个主设备同时访问不同的从设备,从而避免总线冲突。例如,CPU0 访问程序 Flash 的同时,CPU1 可以访问数据 RAM,HSM 也可以并行访问其专用 Flash,三者互不阻塞。这种并行访问能力对于实时性要求极高的安全启动场景至关重要——在 CPU0 执行启动代码的同时,HSM 可以独立进行固件校验和密钥协商。
每个 TriCore 内核都配备了独立的 MPU(内存保护单元),可以配置为不同特权级别(User Mode / Supervisor Mode)。在安全启动流程中,CPU 的 MPU 通常被配置为限制用户态代码访问关键安全资源(如 HSM 寄存器、密钥存储区),而 HSM 的 MPU 则独立管理其内部资源。这种双层 MPU 隔离机制确保了即使 CPU 侧的应用代码被攻破,也无法直接访问 HSM 内部的密钥材料。
2.2 HSM 子系统定位:独立安全岛与硬件密码加速
HSM(Hardware Security Module)在 TC3xx 中是一个完全独立的子系统,其核心是一个 ARM Cortex-M3 处理器(运行频率通常为 100MHz),搭配专用的 SRAM(64KB)、Flash(128KB)以及硬件密码加速器(AES-128/256、SHA-2、TRNG 真随机数发生器)。HSM 与主 CPU 集群在物理上分离,拥有独立的时钟、复位和电源域(在部分型号中支持独立待机)。
HSM 的定位可以从三个层面理解:
- 安全启动的信任根:HSM 内部固化了不可修改的 BootROM(启动只读存储器),上电后 HSM 首先执行 BootROM 中的代码,验证外部 Flash 中的 HSM 固件完整性,然后才允许 HSM 固件运行。这一过程是整个系统安全启动链的第一环。
- 密钥管理的保险箱:HSM 支持将密钥存储在专用 Flash 或 SRAM 中,并通过硬件机制禁止 CPU 侧直接读取。密钥的使用(如 AES 加密、HMAC 计算)在 HSM 内部完成,明文密钥永不暴露到系统总线上。
- 密码运算的加速器:HSM 内置硬件 AES 引擎,支持 ECB/CBC/CTR/GCM 等多种模式,SHA-256 硬件加速,以及 TRNG 用于生成随机数。相比纯软件实现,硬件加速可将 AES-128 加解密速度提升 10 倍以上,这对于安全通信(SecOC)中的消息认证码计算至关重要。
HSM 与主 CPU 的通信接口通过 HSM 寄存器接口(映射到 CPU 的地址空间)和 共享内存(LMU)实现。CPU 通过写 HSM 控制寄存器触发 HSM 执行命令,HSM 完成运算后将结果写入共享内存,并通过中断通知 CPU。这种异步通信模型避免了 CPU 阻塞等待,提高了系统效率。
| 特性 | 主 CPU (TriCore) | HSM (Cortex-M3) |
|---|---|---|
| 架构 | TriCore 1.6.2P (32位) | ARM Cortex-M3 (32位) |
| 主频 | 最高 300MHz | 100MHz |
| 专用存储 | 程序 Flash + 数据 RAM | HSM Flash (128KB) + HSM SRAM (64KB) |
| 密码加速 | 无(软件实现) | AES / SHA / TRNG 硬件加速 |
| 安全隔离 | MPU 保护 | 硬件强制隔离,CPU 不可直接访问 |
| 启动流程 | 由 HSM 验证后释放复位 | 独立 BootROM 启动 |
2.3 CPU 与 HSM 通信机制:寄存器接口与共享内存邮箱
CPU 与 HSM 之间的通信是安全启动和加密通信实战中最频繁的操作。TC3xx 提供了两种互补的通信路径:控制路径(通过寄存器接口)和数据路径(通过共享内存)。
2.3.1 控制路径:HSM 寄存器接口
HSM 的控制寄存器被映射到 CPU 的地址空间中(通常位于 0xF0000000 附近的高地址段)。CPU 通过读写这些寄存器来发送命令、查询状态和获取结果。关键寄存器包括:
- HSM_CTRL:控制寄存器,用于启动 HSM、触发软复位、使能中断。
- HSM_CMD:命令寄存器,CPU 写入命令字(如“执行 AES 加密”、“验证签名”)。
- HSM_STAT:状态寄存器,反映 HSM 当前状态(空闲、忙、完成、错误)。
- HSM_MSG:消息寄存器,用于传递短消息(如命令参数、返回码)。
典型的通信流程如下:CPU 首先检查 HSM_STAT 确认 HSM 空闲,然后向共享内存写入待处理的数据,接着向 HSM_CMD 写入命令字并设置参数指针,最后 HSM 通过中断通知 CPU 处理完成。整个过程是异步的,CPU 可以在 HSM 执行运算期间继续执行其他任务。
2.3.2 数据路径:共享内存(LMU)邮箱机制
对于大数据量的传输(如固件镜像、消息认证码),TC3xx 使用 LMU(Local Memory Unit)作为共享内存区域。LMU 是一块可被 CPU 和 HSM 同时访问的 SRAM(通常为 32KB-64KB),通过 SRI 总线连接。LMU 中划分出若干邮箱(Mailbox)区域,每个邮箱包含控制块和数据缓冲区。
邮箱机制的设计要点包括:
- 生产者-消费者模型:CPU 作为生产者将待处理数据写入邮箱,HSM 作为消费者读取数据并处理;处理完成后 HSM 将结果写回邮箱,CPU 再读取。
- 状态标志:每个邮箱头部包含状态字(如 EMPTY、FULL、PROCESSING、DONE),通过原子操作(如 LDREX/STREX 指令)保证状态切换的原子性,避免竞争条件。
- 中断通知:HSM 完成处理后,通过 HSM 中断控制器向 CPU 发送中断(如 Service Request 20),CPU 在中断服务程序中读取邮箱结果。
2.4 内存映射与访问隔离:安全边界的具体实现
TC3xx 的内存映射遵循“统一编址、分区隔离”的原则。整个 4GB 地址空间被划分为多个区域,其中与安全相关的关键区域包括:
| 地址范围 | 区域名称 | 访问权限 | 安全用途 |
|---|---|---|---|
| 0x00000000 - 0x0FFFFFFF | 程序 Flash (PFlash0/1) | CPU 可读/执行,HSM 可读 | 存放启动代码和应用固件 |
| 0x10000000 - 0x1FFFFFFF | 数据 Flash (DFlash) | CPU 可读/写,HSM 可读 | 存储校准数据、安全日志 |
| 0x30000000 - 0x3FFFFFFF | LMU 共享内存 | CPU 与 HSM 均可读写 | 邮箱、共享缓冲区 |
| 0x50000000 - 0x5FFFFFFF | 外设寄存器空间 | CPU 读写 | 外设控制(CAN、ETH 等) |
| 0xF0000000 - 0xF00FFFFF | HSM 寄存器接口 | CPU 读写(受限) | HSM 控制与状态 |
| 0xF0100000 - 0xF01FFFFF | HSM 专用内存 | 仅 HSM 可访问 | HSM 固件、密钥存储 |
HSM 专用内存区域(0xF0100000 起)在硬件层面被设计为CPU 不可见。即使 CPU 尝试通过 SRI 总线发起访问,硬件也会返回总线错误(Bus Error)并触发异常。这种硬件级隔离比软件 MPU 配置更可靠,因为即使 CPU 侧的代码被完全攻破(例如通过缓冲区溢出执行任意代码),也无法绕过硬件限制读取 HSM 内存。
此外,TC3xx 还提供了 HSM 安全保护寄存器(HSM_SSR),允许 HSM 固件动态配置哪些 PFlash 区域可以被 CPU 访问。在安全启动流程中,HSM 在验证完 CPU 启动代码后,会通过 SSR 将已验证区域的访问权限开放给 CPU,而将未验证区域保持锁定。这种“先验证后开放”的策略确保了 CPU 只能执行经过 HSM 认证的代码。
2.5 案例拆解:基于 TC375 的安全启动内存布局设计
为了将上述架构知识落地,我们以一个典型的 TC375 安全启动项目为例,展示如何利用多核架构和 HSM 隔离特性设计启动流程。
项目背景与约束:某域控制器项目使用 TC375(3 个 TriCore + 1 个 HSM),要求满足 EVITA Full 安全等级,启动时间不超过 200ms(从复位释放到应用代码开始执行)。系统需要支持安全固件更新(A/B 分区切换)和安全通信(SecOC)。
初始现象与目标:在项目初期,安全团队发现如果 CPU0 在 HSM 完成验证前就开始执行 Flash 中的代码,存在被恶意固件攻击的风险。目标是将启动流程重构为“HSM 先行验证、CPU 后执行”的模式。
关键设计参数:
- PFlash 划分为两个 1MB 的 A/B 分区,每个分区包含完整的应用固件。
- HSM 固件大小为 96KB,存储在 HSM 专用 Flash 中。
- LMU 共享内存分配 8KB 作为启动邮箱,其中 4KB 用于传输固件哈希值,4KB 用于传输启动状态信息。
实施步骤:
- 硬件初始化:上电后,HSM 首先运行 BootROM,验证 HSM 固件签名(使用 RSA-2048),验证通过后 HSM 固件开始运行。
- CPU 复位控制:HSM 固件通过 HSM_CTRL 寄存器保持 CPU0 处于复位状态,同时通过 SRI 读取 PFlash 中 A 分区的启动镜像头部(包含版本号、哈希值、签名)。
- 固件验证:HSM 使用 SHA-256 计算 A 分区镜像的哈希值,并与签名中的哈希值比对。若一致,则通过 HSM_SSR 寄存器将 A 分区的执行权限开放给 CPU0;若不一致,则尝试验证 B 分区。
- 释放 CPU:验证通过后,HSM 清除 CPU0 的复位状态,CPU0 从 A 分区的入口地址开始执行。同时,HSM 通过中断通知 CPU0 验证结果。
- 后续通信:CPU0 启动后,通过 LMU 邮箱向 HSM 发送“获取会话密钥”请求,HSM 生成随机密钥并通过邮箱返回,用于后续的 SecOC 通信。
结果与复盘:该设计将安全启动时间控制在 180ms 以内(HSM 验证耗时约 120ms,CPU 启动约 60ms),满足 200ms 的约束。通过硬件隔离,即使 CPU 侧的应用代码存在漏洞,攻击者也无法读取 HSM 中的密钥或篡改已验证的固件。复盘中发现,LMU 邮箱的原子操作(使用 LDREX/STREX)在高负载下可能出现偶发竞争,最终通过增加邮箱状态机的“处理中”状态解决了该问题。