博主已开通同名公众号,通过文末或主页二维码关注博主,将为你推送最新、最细、最硬核的车载系统知识和嵌入式开发知识!公众号主页设有交流群作为同行江湖朋友们相互交流学习的驿站。 学习更多Boot相关内容,获取HSE基于IVT安全启动方案? Tip📌: 一、引言在汽车行业快速发展的浪潮下,车载系统的安全性变得越来越重要。随着车辆变得更智能,它们越来越依赖于复杂的软件和硬件系统。这提高了对车辆系统安全性的要求,特别是在启动过程中。 S32系列芯片的HSE模组提供了高级的安全启动解决方案,确保车辆系统的完整性和安全。S32系列芯片是NXP公司的重要产品之一,他们在嵌入式设备领域占据着重要地位。在引入HSE之后,该系列芯片不仅能够提升设备的性能,还能有效保障设备的安全性。那么,什么是HSE? HSE(Hardware Security Engine)是硬件安全引擎的缩写,是NXP S32系列芯片中的一个关键安全功能,旨在提供全面的硬件安全支持。它包括一系列的加密算法、安全存储、安全引导等特性,并利用这些特性来保护设备的启动过程,防止恶意攻击者对设备进行非法篡改或者破坏,能够有效保护设备的启动过程,确保设备的安全性(简单来说就是负责实现安全启动,验证启动软件的完整性和真实性)。此外,它还可以提供加密服务,保护数据传输的安全,以及安全存储敏感信息,如密钥和证书。 Tip📌: 在准备深入学习Secure Boot(安全启动)之前,需要先从宏观上了解HSE到底是个什么东西,以及相关的重要概念,比如LC(LifeCycle)、IVT、HSE镜像等等,这正是本文的主要内容,相当于学习安全启动功能的引子之一。 二、预先了解一些内容(重要⭐⭐⭐)2.1 HSE(Hardware Security Engine)和NXP S32系列芯片的关系是什么?HSE(Hardware Security Engine)不是一个独立的芯片,而是作为安全功能嵌入在微控制器和处理器内部的硬件模块。在NXP的S32系列芯片中,HSE就是这样一个内置的安全模块。或者说它是一个集成在片内包含了安全启动相关功能的子系统,在S32系列芯片中,以S32k3XX系列芯片为例,顶层架构如下图所示: ![]() 整个顶层结构可以简单地划分为两个主要部分:应用域(Host)和安全域(Security Domain)。可以看到其中Security Subsystem (HSE)是处理器内部相对独立的一个模块,他有自己的CPU,俗称安全核,他是安全域的主要构成部分。剩下的那些就是应用域(通常叫做主机),大家就比较熟悉了,正是常见的MCU的结构。着重讲一下安全域: 安全域主要由 硬件安全引擎(HSE) 组成。NXP的S32系列芯片是为汽车行业设计的一系列处理器芯片,这些芯片包含了多个内核,可能包括ARM Cortex-A53、Cortex-M7等(即上图中Application CPU Subsystem可能有多个),用于执行各种任务。在这样的处理器中,HSE提供了多种安全功能来保护系统免受攻击,比如:
因此,HSE是S32系列芯片的一个组成部分,它们不是两个独立的芯片,HSE是作为硬件安全模块被集成到了NXP的S32系列芯片中,为它们提供了增强的安全特性。简单来说HSE是一个专门的子系统,负责提供安全功能,如加密和解密、身份验证等。它与应用域之间有一个专用接口,以确保安全性。HSE具有以下特点:
2.2 芯片应用域(主机)Tip📌:建议先阅读《Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?》,了解S32系列芯片启动所需的相关镜像。 2.2.1 什么是系统总线(System Bus)和XRDC
Tip📌: 2.2.2 设备的UID是什么?每个芯片都有一个64位的唯一设备标识符(UID:Unique device identifier),这是由NXP在应用NVM中预置的。这个UID用于唯一识别每个设备,确保每个芯片都是独特的。UID可以通过特定的接口(如SDA-AP接口)或从OTP区域读取。 2.3 芯片安全域(HSE子系统)HSE子系统是一个专门的安全子系统,旨在执行与应用程序相关的安全功能,尤其是那些对机密性和真实性有严格要求的应用。HSE子系统的主要目标包括:
HSE子系统是唯一在上电复位(Power-On Reset, POR)后运行的系统主控。它选择性地释放主机中的CPU子系统(即决定将权限释放给主机中哪个CPU子系统,比如让Cortex-A53启动或者让Cortex-M7启动),并在此过程中可以进行某些检查(正是重要的安全启动功能)。HSE也可以在运行时根据特定条件触发中断和重置信号。 2.3.1 HSE子系统类型和软件包HSE子系统有三种类型,具体取决于集成的设备:
HSE固件分为两种软件包:
2.3.2 HSE子系统的主要构成有哪些?
2.4 HSE镜像HSE镜像主要包括两部分:HSE固件可执行文件(称为FW-IMG)和HSE系统镜像(称为SYS-IMG),SYS-IMG包含公钥、私钥和配置数据(也称为HSE系统属性)等内容。 每个HSE镜像的存储位置、访问和更新策略依赖于HSE集成的主机类型。对于HSE_B子系统,其所有镜像存储在映射到嵌入式闪存的Secure NVM中,而HSE_H可以把镜像存储到应用域的外置flash中,HSE上电启动的时候从外置flash载入这些镜像。HSE镜像只能由HSE独占读取和更新。 2.5 pink_image 和 blue_image是什么?HSE子系统是唯一在开机复位后仍能运行的主控系统,它还可以在运行期间根据某些条件触发中断以及向主机发送复位信号。HSE的Firmware Image文件由NXP官方发布,我们直接使用即可,这个HSE固件软件的安全性由NXP保证。如上所述,NXP发布的这个Image文件,叫做FW-IMG,一般也称为pink image,这是NXP使用通用密钥加密过的二进制可执行文件。可以通过HSE的接口,将pink image使用我们指定的key进行重新加密及签名,生成一个新的Image,叫做FW-IMG*,也叫blue image,这个blue image只能在执行解密操作的这个SOC上运行。 NXP原始发布的Image文件名格式: pink image和blue image文件的功能完全相同,默认情况下HSE都可以自动加载并执行。可以通过配置HSE属性,禁止Pink image运行。 2.6 IVT的概念及其在系统启动过程中的重要地位!基于S32系列芯片开发的嵌入式设备,运行所需的系统镜像有:
从Flash启动时,BootROM会读取IVT,从中获取启动所需的各镜像在Flash中的位置,包括DCD、HSE_H、Application Boot Code等在Flash中的地址,以及Boot Configuration、Lifecycle Configuration等信息,可见IVT是复位后系统运行的主要入口点,其重要性不言而喻。 IVT中的Boot Configuration即配置启动行为的启动配置字(BCW),BOOT_SEQ 等于1的时候,启用Secure Boot功能。IVT的结构和BCW的概念已经在《Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?》一文中阐述清楚,这里不再赘述。 现在的嵌入式产品基本都具有远程固件升级的功能,因此固件正式发布后,通过OTA升级时,为了保证安全,一般不会去修改IVT的内容(毕竟各镜像在Flash中的位置等信息存储在IVT中),以防止升级时由于意外导致该区域被破坏,进而导致系统无法启动。因此,对于DCD、HSE、Application Boot Code在Flash中的地址,一般会固定下来,不会因为固件升级而发生变化。 2.7 什么是Lifecycle(LC)?LC状态推进顺序和推进方式?Lifecycle(生命周期,下简称LC)是一种设备内部状态,由HSE子系统管理,LC状态可以在运行阶段通过HSE的系统属性管理服务读取和修改,也可以复位启动阶段使用IVT内部的LCW进行状态推进。推进手段有以下两种(在这两种情况下,新的LC状态在重置后生效):
关于IVT中的Lifecycle Configuration即生命周期配置字(LCW),其结构及相关概念同样已经在《Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?》一文中阐述清楚,这里不再赘述。 LC的几种状态、每种状态的简介、每种状态对应的HSE固件状态以及对主机debug能力的影响如下所示:
为了让NXP分析故障设备,可以将设备提升到FA生命周期或PRE_FA模式:
各个状态的推进顺序如下所示: ![]() 2.8 LC状态推进需要需要注意什么?(重要⭐⭐⭐⭐⭐)
>>>>>>>>> 返回专栏总目录 《S32系列芯片——Boot详解》<<<<<<<<< 免责声明:本内容来源于网络,如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |