汽车信息安全 -- 再谈车规MCU的安全启动

目录

1. 安全启动流程回顾

1.1 TC3xx的安全启动

1.2 RH850的安全启动

1.3 NXP S32K3的安全启动

1.4 小结

2.信任链的问题

3.国产HSM IP的拓展


今天接着 汽车信息安全 -- 存到HSM中的密钥还需包裹吗?-CSDN博客这篇文章深究另一个重要功能-- 安全启动。

该文章的前提是假设有工具能够Dump出所有Flash数据(包含HSM),意味着逆向整个Code就不再那么困难(虽然个人对这个假设还是存疑:毕竟理论上HSM在防篡改上至少可以提供篡改抵抗和篡改留凭这两项基础功能的一个)。

而以目前我们常见的安全启动方式,大都将HSM作为信任锚,由HSM来保证Host侧所有运行软件授信,探测在运行时Host侧软件是否被篡改。

因此,我们首先回顾一下目前市面上常见的HSM固件的安全启动流程。

1. 安全启动流程回顾

不管是ETAS还是VECTOR,在安全启动上均提供了顺序安全启动、并行认证启动、混合启动方式(注意,上述启动流程两家实现基本一致,只是命名不同,这里统一成上述表达)。

  • 顺序启动:又称Secure Boot,它是指上电后HSM成功校验所有Host App后再释放Host内核,很明显这种方式会造成启动变慢;
  • 并行启动:又称Paraller Authenticated Boot,它是指上电后硬件同时释放Host和HSM内核,当HSM在校验Host App时,Host App也在并行运行,当校验失败时,由HSM来决定是否复位整个系统。这种方式虽然提高了系统启动性能,但存在一定的信息安全风险。
  • 混合启动:HSM固件对Host APP不同模块使用顺序\并行启动,这兼顾了启动时间和信息安全。

有趣的是,虽然说HSM在什么时候释放Host基本是由软件策略来决定,但是我们仍然可以从国外MCU大厂对安全启动方式的理解和设计。

1.1 TC3xx的安全启动

TC3xx上电后首先释放TriCore 0,执行它自己的Startup Software(SSW)。

SSW根据HSMBOOTEN是否置位来使能HSM内核,根据SSWWAIT是否置位来决定是否等待HSM Firmware的通知,具体流程如下图所示:

进一步讲,当SSWWAIT这一位使能后,芯片硬件认为安全启动相应地开启,需要等待HSM固件对Host软件校验结果。

由于SSW本身在ROM里,基本不会被篡改,因此这部分代码逻辑默认可信;HSM Firmware可以在任意时刻通知SSW,假设HSM Firmware开始运行就通知,这就是典型的并行启动;如果HSM Firmware将Host所有软件校验完成再通知SSW,这就是严格的顺序安全启动;如果HSM在校验部分Host App模块后通知SSW,这就是混合启动。

因此理论上讲,TC3xx从硬件层面就支持所谓的顺序、并行、混合启动。

1.2 RH850的安全启动

RH850 MCU型号太多了,因此咱们主要以ICU-M(即HSM)来看安全启动。

瑞萨的ICU全称Intelligent Cryptographic Unit,-M代表满足EVITA Medium等级,如下所示:

由于其设计雏形源于HIS SHE,因此安全启动逻辑也基本相似。在ICU-M内部有一个Secure Boot Key 用于校验Host Application。

上电后,ICUP率先复位释放,完成一系列初始化后,进入到ICU Firmware,由该Firmware的安全启动程序对Host Application进行校验,校验完成后有ICUP释放Host Core,逻辑如下图:

值得一提的是,在瑞萨提供的示例中,Program B是由Program A请求ICU-M进行校验。信任链从这个意义上也串了起来。

1.3 NXP S32K3的安全启动

在S32K3的启动流程,硬件复位后同样只有HSE(也就是HSM)子系统可以运行,首先运行sBAF()代码,完成基本环境配置,然后根据IVT(Image Vector table)中BOOT_SEQ来决定是否执行安全启动,如下图:

  • 当BOOT_SEQ = 0时,SBAF忽略掉HSE是否完成校验,直接运行Host App;
  • 当BOOT_SEQ = 1时,SBAF只运行HSE_Firmware,由HSE FW来选择什么时候释放Host Application 

基本流程如下图所示:

1.4 小结

可以看到,上述MCU均在自己的信息安全解决方案里考虑了安全启动,可以通过不同配置来选择是否启用安全启动,但是决定权还是在于HSM Firmware在什么时候复位Host软件。

因此,这也给了HSM固件供应商更大的舞台来设计安全启动流程。

例如,我们可以将用户Host Application按用途分成不同类别,比如说Group BootManager、Group AppA、Group AppB;然后在类别里根据启动时序要求拆分成不同的块,对这些块设置不同的启动模式,如下图:

这样就能够兼顾信息安全和OEM启动时间要求。 

2.信任链的问题

我们仔细分析上述MCU的启动流程,会发现一个现象:除了S32K3在SBAF里有对HSE_FW进行验证,其余方案均默认HSM FW可信。

但我遇到很多人问过这样一个问题:那你这个启动流程的信任链就是断裂的,从芯片厂商 -> Tier 1 -> OEM这个信任过程没有建立起来。

有朋友以Inter Arria 10 SoC Secure Boot过程为例:

它总共历经3个步骤:

  1. BootRom作为信任根,用于解密、验证BootLoader。验签公钥、对称加密密钥预先存在设备中,完成解密和验证后加载Bootloader运行; 
  2. Bootloader主要用于OS运行前的环境配置,包括访问文件系统、外设初始化、配置I\O等等,验签OS作为可选项;
  3. OS运行或者是Bare Metal运行后,特别是需要从Flash copy至ram运行的应用程序,是必须进行验签。

该SoC的安全启动信任链就以上述方式完成。

最初我还是认为这个很有道理,但是仔细分析下来,这个过程通篇没有提到安全隔离,也没有提到任何关于HSM的信息;

再仔细思考,一般这种SoC是不带eFlash(Embedded Flash),大部分程序都是需要从不同存储介质加载到RAM中运行,因此这些程序是必须要保证完整可信;

但我们现在讨论的车规MCU,都带有内置HSM,天然地从架构上就将MCU划分为安全域和非安全域,

HSM内部包含自己Code、Data Flash,可以存储HSW_FW、密钥、车辆\车主敏感信息。

因此理论上,把HSM和ECU主密钥组合共同作为系统信任根是可行的。

3.国产HSM IP的拓展

正是基于这点,目前有很多国产HSM IP进行完善。

例如芯来科技的HSM IP提供了完整的安全启动流程,它们的安全启动中包含两级验证和加载启动,分别为芯片级和系统级两个层级,对应芯片厂商和系统厂商。并且每一级厂商都可以拥有自己的密钥对。

芯片厂商提供BootROM和一级Loader(NSBS固件),处于HSM系统中。

芯片厂商的公钥用于验签一级Loader(NSBS固件),系统厂商的公钥用于验签HOST系统的固件程序。整体安全启动流程如下图所示:

BootRom验签NSBS,NSBS验签Host App1、2等,这样看起来很美好,芯片原厂提供整套信息安全解决方案,但是不知道HSM固件供应商如何看待这一块,毕竟“NSBS”才是它们的核心价值所在。

纽创、安谋科技 HSM IP对于安全启动的思路和芯来类似,个人感觉理念大都源于以前IoT的安全启动概念:

做法没有对错,归根结底还是在于整车系统网络安全架构要实现的网络\信息安全目标,通过合理的TARA分析来选择系统的信任根。

### 车MCU对外部中断的支持能力 车MCU通常具备强大的外部中断支持能力,这使得它们能够在复杂的汽车环境中高效运行。以下是关于其处理频繁外部中断的能力及相关限制的关键点: #### 1. 响应速度 车MCU的外部中断功能设计注重高响应速度。类似于OpenMV Cam的功能描述,当检测到外部信号满足特定触发条件时,MCU可以迅速暂停当前任务并切换至中断服务程序[^1]。这种特性对于实时性和安全性要求极高的车载应用场景至关重要。 #### 2. 中断源数量与灵活性 现代车MCU提供了大量的可配置中断源,允许开发者针对不同外设设置独立的中断事件。例如,在pyboard上实现多路外部中断的方式同样适用于车级设备——即通过不同的引脚状态变化来触发各自对应的回调函数[^2]。然而,实际部署过程中需考虑资源分配问题以及潜在冲突情况下的优先级管理策略。 #### 3. 可靠性保障机制 由于车辆环境存在诸多不确定因素(如电磁干扰),因此车级产品特别强调增强型防护措施以提高系统稳定性。比如采用更严格的滤波算法过滤掉误触信号;或者利用硬件看门狗防止长时间占用CPU而导致死机等问题发生。 #### 4. 中断嵌套与优先级设定 为了更好地应对复杂场景下可能出现的同时到来多个请求的情况,许多高级别的汽车专用处理器还引入了基于ARM Cortex-M系列架构中的Nested Vectored Interrupt Controller (NVIC),并通过类似`NVIC_PriorityGroup_2`这样的指令完成精细划分各级别之间的关系从而决定谁先被执行[^4]。 #### 技术局限性分析 尽管上述优势显著但仍有一些固有约束需要注意: - **功耗考量**:持续监控大量输入端口可能增加整体能耗水平; - **存储需求增长**:随着项目模扩大所需堆栈空间也会相应增多进而影响启动时间长短; - **调试难度提升**:一旦涉及跨模块协作则定位具体错误位置变得更加困难。 ```c // 示例代码展示如何在STM32CubeMX生成的基础框架之上添加自定义GPIO中断处理逻辑 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(GPIO_Pin == USER_BUTTON_PIN){ ToggleLED(); // 切换指示灯状态作为反馈动作之一 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecurity_zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值