汽车信息安全 -- 再谈车规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个步骤:
- BootRom作为信任根,用于解密、验证BootLoader。验签公钥、对称加密密钥预先存在设备中,完成解密和验证后加载Bootloader运行;
- Bootloader主要用于OS运行前的环境配置,包括访问文件系统、外设初始化、配置I\O等等,验签OS作为可选项;
- 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的安全启动
目录 1. 安全启动流程回顾 1.1 TC3xx的安全启动 1.2 RH850的安全启动 1.3 NXP S32K3的安全启动 1.4 小结 2.信任链的问题 3.国产HSM IP的拓展 今天接着 汽车信息安全 -- 存到HSM中的密钥还需包裹吗?-CSDN博客这篇文章深究另一个重要功能-- 安全启动。 该文章…...
[Linux]从零开始的Linux的远程方法介绍与配置教程
一、为什么需要远程Linux 相信大家在学习Linux时,要么是使用Linux的虚拟机或者在物理机上直接安装Linux。这样确实非常方便,我们也能直接看到Linux的桌面或者终端。既然我们都能直接看到终端或者Linux的桌面了,那我们为什么还要远程Linux呢&a…...
手机改IP地址怎么弄?全面解析与操作指南
在当今数字化时代,IP地址作为设备在网络中的唯一标识,其重要性不言而喻。有时候,出于隐私保护、网络访问需求或其他特定原因,我们可能需要更改手机的IP地址。然而,对于大多数普通用户来说,如何操作可能还是…...
【React】useState 和 useRef:项目开发中该如何选择
如果你正踏入用 React 进行网页开发的世界,那你可能已经遇到了像 useState 和 useRef 这样的术语。这两个 Hook 在构建交互性和动态组件时起着至关重要的作用。 下面,我们将探讨它们是什么,它们的功能,它们的区别,并通…...
python装饰器用法
为什么用装饰器? 第一个原因是,使用装饰器可以提升代码复用,避免重复冗余代码。如果我有多个函数需要测量执行时间,我可以直接将装饰器应用在这些函数上,而不是给多个函数加上一样的代码。这样的代码既元余也不方便后…...
AI 写作太死板?原因竟然是这个!
有些同学跟我埋怨说AI生成的文章太死板,一堆的“首先、其次、然后、再次、接着、总而言之……”,说话太官方,内容还很水。 想要让它模仿谁的语气,或者谁的文章,一点儿都不像。 名人都不模仿不了,更别说模…...
ansible实用模块
简介 ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。…...
【JavaScript】JIT
JIT实际上指,JS的编译过程、运行时。 Just in Time 在传统的编译语言里,比如JAVA、Go等,是提前编译的,它们的执行是先在本地编译出一个"东西",然后在放到服务器上运行。 提前编译的三大过程: …...
Matlab实现麻雀优化算法优化回声状态网络模型 (SSA-ESN)(附源码)
目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新兴的群体智能优化算法,灵感来源于麻雀的觅食行为及其在面临危险时的预警机制。SSA通过模拟麻雀的这些自然行为来寻找问题…...
从 TCP Reno 经 BIC 到 CUBIC
重读 TCP拥塞控制算法-从BIC到CUBIC 以及 cubic 的 tcp friendliness 与拐点控制 这两篇文章,感觉还是啰嗦了,今日重新一气呵成这个话题。 reno 线性逼近管道容量 Wmax,相当于一次查询(capacity-seeking),但长肥管道从 0.5*Wmax …...
工厂模式与建造者模式的区别
在软件设计中,工厂模式和建造者模式是两种常见的设计模式,它们都是用于创建对象,但是各自有不同的应用场景和目的。本文将通过餐馆点餐的例子,深入探讨这两种模式的区别。 工厂模式 工厂模式的核心思想是通过一个抽象工厂类来创…...
电脑usb接口封禁如何实现?5种禁用USB接口的方法分享!(第一种你GET了吗?)
“防患于未然,安全始于细节。”在信息技术飞速发展的今天,企业的信息安全问题日益凸显。 USB接口作为数据传输的重要通道,在带来便利的同时,也成为了数据泄露和安全风险的高发地。 因此,对电脑USB接口进行封闭管理&a…...
有效的括号
有效的括号 思路:我们先创建一个栈,让左括号入栈,与右括号判断 Stack stacknew Stack<>(); 将字符串中的符号转化为字符 char ch s.charAt(i); 完整代码如下: class Solution {public boolean isValid(String s) {if (s …...
Vue3.0面试题汇总
Composition API 可以说是Vue3的最大特点,那么为什么要推出Composition Api,解决了什么问题? 通常使用Vue2开发的项目,普遍会存在以下问题: 代码的可读性随着组件变大而变差每一种代码复用的方式,都存在缺…...
TCP编程:从入门到实践
目录 一、引言 二、TCP协议原理 1.面向连接 2.可靠传输 三、TCP编程实践 1.TCP服务器 2.TCP客户端 四、总结 本文将带你了解TCP编程的基本原理,并通过实战案例,教你如何在网络编程中运用TCP协议。掌握TCP编程,为构建稳定、高效的网络通信…...
Python NumPy 数据分析:处理复杂数据的高效方法
Python NumPy 数据分析:处理复杂数据的高效方法 文章目录 Python NumPy 数据分析:处理复杂数据的高效方法一 数据来源二 获取指定日期数据三 获取指定行列数据四 求和计算五 比例计算六 平均值和标准差七 完整代码示例八 源码地址 本文详细介绍了如何使用…...
【Preference Learning】Reasoning with Language Model is Planning with World Model
arxiv: https://arxiv.org/abs/2305.14992 问题背景:当前LLM推理受到几个关键因素的限制: (1)LLM缺乏世界模型(一种人类就有的对环境的心理表征,可以模拟行动以及活动对外部世界状态的影响)去…...
OJ在线评测系统 后端基础部分开发 完善CRUD相关接口
完善相关接口 判斷编程语言是否合法 先从用户的请求拿到Language package com.dduo.dduoj.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dduo.dduoj…...
计算机网络--TCP、UDP抓包分析实验
计算机网络实验 目录 实验目的 实验环境 实验原理 1、UDP协议 2、TCP协议 实验具体步骤 实验目的 1、掌握使用wireshark工具对UDP协议进行抓包分析的方法,掌握UDP协议的报文格式,掌握UDP协议校验和的计算方法,理解UDP协议的优缺点&am…...
FreeRTOS的中断管理
前言 FreeRTOS的任务有优先级,MCU的硬件中断有中断优先级,这是两个不同的概念,FreeRTOS的任务管理要用到硬件中断,使用FreeRTOS时候也可以使用硬件中断,但是硬件中断ISR的设计要注意一些设计原则,在本节中我…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
