到底什么是HSE(Hardware Security Engine-硬件安全引擎)?实现安全启动需要掌握哪些预备知识?

学习更多Boot相关内容,获取HSE基于IVT安全启动方案?
>>>>>>>>> 返回专栏总目录 《S32G3系列芯片——Boot详解》<<<<<<<<<

Tip📌:
  鼠标悬停双虚线关键词/句,可获得更详细的描述;
  建议按照专栏文章目录顺序依次阅读以便了解相关背景知识。尤其建议先通读下:
《Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?》《S32G3系列芯片Boot流程详解!》

一、引言

  在汽车行业快速发展的浪潮下,车载系统的安全性变得越来越重要。随着车辆变得更智能,它们越来越依赖于复杂的软件和硬件系统。这提高了对车辆系统安全性的要求,特别是在启动过程中。

  S32G3xx/S32k3XX系列芯片(下文统一简称S32系列芯片)的HSE模组提供了高级的安全启动解决方案,确保车辆系统的完整性和安全。S32系列芯片是NXP公司的重要产品之一,他们在嵌入式设备领域占据着重要地位。在引入HSE之后,该系列芯片不仅能够提升设备的性能,还能有效保障设备的安全性。那么,什么是HSE?

  HSE(Hardware Security Engine)是硬件安全引擎的缩写,是NXP S32系列芯片中的一个关键安全功能,旨在提供全面的硬件安全支持。它包括一系列的加密算法、安全存储、安全引导等特性,并利用这些特性来保护设备的启动过程,防止恶意攻击者对设备进行非法篡改或者破坏,能够有效保护设备的启动过程,确保设备的安全性(简单来说就是负责实现安全启动,验证启动软件的完整性和真实性)。此外,它还可以提供加密服务,保护数据传输的安全,以及安全存储敏感信息,如密钥和证书。

Tip📌:
  网络上S32系列的资料还是比较少的,涉及到HSE安全启动这种跟实际项目紧密相关的资料更难寻找,资料质量更是良莠不齐。同时,原版英文手册对不少开发者来说,阅读起来十分艰难。这些都导致项目上新接触到HSE相关内容的开发者们做起事来比较缓慢,于是博主决定梳理下通过HSE使能安全启动的相关知识,能力有限,文中难免有纰漏存在,欢迎并感谢大家及时提出问题,共同学习进步!

  在准备深入学习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提供了多种安全功能来保护系统免受攻击,比如:

  1. 安全启动:确保系统只能通过验证了的、未被篡改的软件启动。

  2. 密钥管理:安全地存储和管理加密密钥,保护它们不被非法读取或篡改。

  3. 加密/解密加速:硬件级别的加解密运算,加速这些运算以减少CPU负担。

  4. 加密通讯:支持各种加密协议来保证数据在传输过程中的安全。

  5. 数字签名和验证:确保数据和软件的完整性,防止未授权的修改。

  因此,HSE是S32系列芯片的一个组成部分,它们不是两个独立的芯片,HSE是作为硬件安全模块被集成到了NXP的S32系列芯片中,为它们提供了增强的安全特性。简单来说HSE是一个专门的子系统,负责提供安全功能,如加密和解密、身份验证等。它与应用域之间有一个专用接口,以确保安全性。HSE具有以下特点:

  • 资源独立:HSE拥有自己的专用资源,这些资源是与应用域分开的,以保护安全操作的完整性。

  • 是系统主控之一(System Master):HSE及其他设备子系统被称为系统主控,这些主控可以通过系统总线(System Bus)读写片上和片外的某些资源。每个主控都有一个唯一的标识符,访问权限可以通过设计(如HSE的设计)或具体的设备配置(通过扩展资源域控制器,XRDC,后文有解释,可先忽略)来定义。

2.2 芯片应用域(主机)

Tip📌:建议先阅读《Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?》,了解S32系列芯片启动所需的相关镜像。

2.2.1 什么是系统总线(System Bus)和XRDC

  1. 系统总线:系统总线是连接CPU子系统与系统资源(如RAM和内部闪存)的通道。它允许不同的子系统和资源之间进行数据传输。

  2. 扩展资源域控制器(XRDC: Extended Resource Domain Controller)
      XRDC用于限制某些CPU子系统(系统主控)访问特定的系统资源。每个主控在系统中通过进程ID(PID)进行标识,并可以与特定的资源域关联。每个资源域通过域ID(DID)进行标识,并可以链接到一组外设(通过外设访问控制,简称PAC:via the Peripheral Access Controlled)和不同的内存范围(通过内存区域控制器,简称MRC:via the Memory Region Controller)。

Tip📌:
  XRDC的配置主要由应用程序进行管理。HSE只对与安全区域相关的部分(如安全代码闪存和安全数据闪存)进行最小配置,即HSE相关的代码或者数据flash资源只与HSE关联,从而确保这些资源只能由HSE子系统访问。
  此外,所有HSE相关内存(如代码闪存、数据闪存和安全RAM)的大小都可以从HSE的通用寄存器(GPR)中读取。

2.2.2 设备的UID是什么?

  每个芯片都有一个64位的唯一设备标识符(UID:Unique device identifier),这是由NXP在应用NVM中预置的。这个UID用于唯一识别每个设备,确保每个芯片都是独特的。UID可以通过特定的接口(如SDA-AP接口)或从OTP区域读取。

2.3 芯片安全域(HSE子系统)

  HSE子系统是一个专门的安全子系统,旨在执行与应用程序相关的安全功能,尤其是那些对机密性和真实性有严格要求的应用。HSE子系统的主要目标包括:

  • 保护安全敏感信息:例如存储密钥值,确保这些信息不被未经授权的访问。
  • 减轻应用负担:通过专用的协处理器(安全核)处理加密操作,从而减轻主机CPU的负担。
  • 执行安全措施:在运行时和系统启动过程中实施安全措施。

  HSE子系统是唯一在上电复位(Power-On Reset, POR)后运行的系统主控。它选择性地释放主机中的CPU子系统(即决定将权限释放给主机中哪个CPU子系统,比如让Cortex-A53启动或者让Cortex-M7启动),并在此过程中可以进行某些检查(正是重要的安全启动功能)。HSE也可以在运行时根据特定条件触发中断和重置信号。

2.3.1 HSE子系统类型和软件包

  HSE子系统有三种类型,具体取决于集成的设备:

  • HSE_H (高):适用于无闪存的S32x产品(如S32G2、S32G3、S32ZSE和S32R45)。
  • HSE_M (中):适用于无闪存的S32x产品(如S32R41和SAF85XX)。
  • HSE_B (基础):适用于具有嵌入式闪存的S32x产品(如S32K3x4、S32K3x2、S32K3x8、S32K3x6、S32K3x1)。

  HSE固件分为两种软件包:

  • 标准包:支持NXP发布的HSE手册中描述的所有功能。
  • 高级包:定制固件,支持特定功能,需联系NXP销售代表去了解以及定制。

2.3.2 HSE子系统的主要构成有哪些?

  • CPU子系统:HSE CPU子系统负责运行HSE镜像并控制该子系统资源,以向应用域(主机)提供一系列安全服务。

  • 加密加速器:HSE子系统配备了多个加密加速器,包括:

    • AES引擎:支持所有标准密钥大小(128、192、256位)和各种复杂的加密模式(如CBC、CTR、GCM等)。
    • 哈希引擎:支持标准SHA1和SHA2哈希原语,最大支持256位哈希,对于SHA-384和SHA-512,则提供软件支持。
    • 公钥密码学(PKC)引擎:加速RSA和ECC(椭圆曲线密码学)操作。
  • 真随机数生成器(TRNG):用于生成随机数,签名一般会用得到。TRNG遵循以下标准:AIS31 Class P2 High 和 FIPS 140-2。

  • 系统定时器:可以定期执行某些功能,如运行时内存验证检查,并且有看门狗定时器在发生意外运行时故障时重置HSE子系统。

  • 内存资源

  • Secure RAM:仅可被HSE子系统访问的RAM区域,用于操作HSE并存储正在使用的加密密钥副本。

  • Secure NVM:仅可被HSE子系统访问的非易失性存储器。
    Tip📌:默认情况下,HSE子系统可以通过系统总线无限制地访问内存映射的系统资源。通过XRDC配置,应用程序可以限制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文件名格式:
hse_fw_pb.pink
例如:s32g3xx_hse_fw_0.20.0_2.16.1_pb221011.pink

  pink image和blue image文件的功能完全相同,默认情况下HSE都可以自动加载并执行。可以通过配置HSE属性,禁止Pink image运行。
  Blue image启动速度会比pink image稍快,且支持反回滚策略。通常我们的设备在第一次启动及FOTA升级的时候,会将pink image转换为blue image,以加快设备的启动速度。

2.6 IVT的概念及其在系统启动过程中的重要地位!

  基于S32系列芯片开发的嵌入式设备,运行所需的系统镜像有:

  1. IVT(Image Vector Table),有时候也被叫做“boot header”
  2. Application Boot Code(Boot loader)
  3. 各种应用程序镜像(可执行文件,数据等),统称为应用程序App

  从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中的LCW:在此情况下,HSE在启动(重置)期间更改LC状态。
  • 通过HSE系统属性管理服务:在此情况下,HSE在运行时更改LC状态。

  关于IVT中的Lifecycle Configuration即生命周期配置字(LCW),其结构及相关概念同样已经在《Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?》一文中阐述清楚,这里不再赘述。

  LC的几种状态、每种状态的简介、每种状态对应的HSE固件状态以及对主机debug能力的影响如下所示:

LC 状态描述HSE固件功能主机调试能力
CUST_DEL设备(即NXP的IC)交付给系统集成商
(即NXP的客户)用于ECU制造和初始配置。
HSE固件准备好进行安装和配置。主机调试开放(不受限制)
OEM_PRODECU交付给OEM用于车辆集成和最终配置。HSE固件准备好进行额外配置;
除安全策略隐含限制外,没有其他限制。
主机调试受保护(使用ADKP)或永久禁用
IN_FIELDECU集成在车辆中并正常运行;
是设备正常使用状态(也是最安全的状态)。
密钥管理能力(导入、导出等)受到限制(最安全状态)。主机调试受保护(使用ADKP)或永久禁用
PRE_FA类似于IN_FIELD;提供故障分析能力。HSE固件完全配置。与IN_FIELD相似。主机调试受保护(使用ADKP)或永久禁用(见DEBUG_DISABLE)
FAECU故障;这是IC功能测试的状态。HSE固件不在运行。主机调试开放

  为了让NXP分析故障设备,可以将设备提升到FA生命周期或PRE_FA模式:

  • 提升到FA生命周期:只能由NXP进行。在此生命周期中,客户资产无法访问。提升设备到此生命周期是一个破坏性操作:设备再也不能用于正常操作。
  • 提升到PRE_FA生命周期:只能由NXP进行。此生命周期允许进行有限的测试功能,同时保持设备像IN_FIELD生命周期一样的能力。

  各个状态的推进顺序如下所示:

在这里插入图片描述

2.8 LC状态推进需要需要注意什么?(重要⭐⭐⭐⭐⭐)

  1. LC状态的推进方向只能是单向的,禁止回退;
  2. 从OEM_PORD或者IN_FIELD状态推进到FA状态这个过程只有NXP官方有权限、有能力办到;
  3. PRE_FA严格来说并不是一个LC状态,他也不是一个持久的状态;
  4. 从CUST_DEL到OEM_PORD在再到IN_FIELD状态的推进前提是ADKP已经导入了;
  5. 如果用户在设备中安装了HSE固件,则无法通过IVT中的LCW执行LC转换。

>>>>>>>>> 返回专栏总目录 《S32G3系列芯片——Boot详解》<<<<<<<<<

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

车载系统攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值