汽车信息安全 -- 再谈车规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的设计要注意一些设计原则,在本节中我…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...