
引言本用户手册介绍了如何开始使用X-CUBE-SBSFU STM32Cube扩展包。% m5 _2 L# B! j u3 D X-CUBE-SBSFU安全启动和安全固件更新解决方案使STM32微控制器内部固件可升级到新版本,添加新功能,和纠正潜在问题。升级过程是以安全的方式进行,以防未经授权的更新,并阻止访问设备上的机密数据。 安全启动(可信根服务)是一种不可变代码,总是在系统复位后执行,它检查STM32静态保护、激活STM32运行时保护、然后在每次执行前验证应用程序代码的真实性和完整性,以确保无效或恶意代码无法运行。 安全固件更新应用通过使用Ymodem协议的UART接口接收固件映像,检查其真实性,并在安装代码之前检查其完整性。固件更新可更新整个固件镜像,或者部分镜像。单槽示例适用于固件映像最小化的情况,而双槽示例则适用于确保映像安全安装的情况,且也适用于IoT设备中常用的无线固件更新功能。对于复杂系统,固件映像配置可扩展至最多三个映像。示例代码可灵活配置,可配置使用对你或非对称加密方案,采用明文或密文方案。7 L' ?& Z& Y$ ]- J) C3 Z2 } 安全密钥管理服务(KMS)通过PKCS #11 API(基于KEY ID的API)向用户应用程序提供加密服务,这些API在受保护和隔离的环境中执行。用户应用程序密钥存储在受保护和隔离的环境中,以便进行安全更新:真实性检查、数据解密和数据完整性检查。 STSAFE-A110是一种防篡改安全元件(通过硬件通用标准EAL5+认证),用于托管X509证书和密钥,并在安全启动和安全固件更新过程中执行用于固件镜像身份确认的验证。" Q' } F& N& O3 m, g X-CUBE-SBSFU基于STM32Cube软件技术,易于在不同STM32微控制器之间移植。它以参考代码的形式提供,演示了STM32安全保护措施的最佳使用方式。, O" \" `1 Y0 u, {4 k: L) f$ P+ r X-CUBE-SBSFU归类为ECCN 5D002。8 l$ T2 \7 N7 ?, ?8 t3 N# q5 j / f9 V6 c3 z# B) G6 f# V3 o2 S 1 概述 X-CUBE-SBSFU扩展包附带在STM32F4系列、STM32F7系列、STM32G0系列、STM32G4系列、STM32H7系列、STM32L0系列、STM32L1系列、STM32L4系列、STM32L4+系列和STM32WB系列产品上运行的示例。此外,还为STM32L4+系列提供了一个结合了STM32微控制器和STSAFE-A110的示例。. B# z" O: Y5 h X-CUBE-SBSFU以独立STM32系统解决方案示例的参考代码的形式提供,这些示例演示了用来保护资产免遭未授权外部和内部访问的STM32保护措施的最佳使用方式。X-CUBESBSFU还提供了一个结合了STM32和STSAFE-A110的系统解决方案示例,演示了面向安全身份验证服务和安全数据存储的硬件安全元件保护。) d# P. o9 Z% g9 }* }/ X% J$ k X-CUBE-SBSFU是OEM根据其产品的安全要求级别开发安全启动和安全固件更新的起点。 X-CUBE-SBSFU安全启动和安全固件更新扩展包可在基于Arm®(a) Cortex®-M处理器的STM3232位微控制器上运行。 6 P7 h* C6 b# ?- ~, V' N4 d& @ & j" J& `# g& z0 V- A 2.术语和定义 8 k$ K3 T9 l5 b, e ![]() ![]() 9 N) h2 W, {, ]* r& a4 t7 `) I$ y2 { 2 STM32Cube 概述 STM32Cube是什么? STM32Cube源自意法半导体,旨在通过减少开发工作量、时间和成本,明显提高设计人员的生产率。STM32Cube涵盖整个STM32产品系列。& K7 G; q9 D+ H STM32Cube 包括: • 一套用户友好的软件开发工具,覆盖从概念到实现的整个项目开发过程,其中包括:$ H4 p! K, j4 s5 _" { – 图形软件配置工具STM32CubeMX,可通过图形向导自动生成初始化C代码. O, u+ v3 i; G$ E – STM32CubeIDE,一种集外设配置、代码生成、代码编译和调试功能于一体的开发工具 – STM32CubeProgrammer(STM32CubeProg),图形版本和命令行版本中可用的编程工具' T2 v# E- A7 g' ~9 b – STM32CubeMonitor(STM32CubeMonitor、STM32CubeMonPwr、STM32CubeMonRF和STM32CubeMonUCPD)是功能强大的监控工具,用于实时微调STM32应用的行为和性能9 l7 ?0 z# @+ D8 O3 W • STM32Cube MCU和MPU包,特定于每个微控制器和微处理器系列的综合嵌入式软件平台(如用于STM32L4系列和STM32L4+系列的STM32CubeL4),其中包含: – STM32Cube硬件抽象层(HAL),确保在STM32各个产品之间实现最大限度的可移植性 – STM32Cube底层API,通过硬件提供高度用户控制,确保最佳性能和内存开销. k$ L, q0 i1 G; f8 N9 V – 一组一致的中间件组件,如FAT文件系统、RTOS、OpenBootloader、USB主机、USB设备、TCP/IP、触摸感应库,以及图形库 – 包含的软件覆盖了全套外设以及对应可用的示例" J/ z1 o) p x) a' p# p • STM32Cube扩展包,包含的软件组件是STM32Cube MCU和MPU包的功能补充:; Z5 x! k' D! H5 r8 k6 K! x – 中间件扩展和应用层" _, d- \% U+ Q+ h/ \ – 在特定的意法半导体开发板上运行的实现案例1 E1 e! f4 |" H2 V1 V1 Q" b! I & ^0 P0 Y# ^6 T' H 此软件如何补充STM32Cube? 该软件基于STM32CubeHAL,即STM32微控制器的硬件抽象层。此软件包通过提供以下中间件组件扩展STM32Cube:9 x( u1 ^# z" g W3 T% J$ t • 用于管理所有关键数据和操作(如访问固件加密密钥的加密操作等)的安全引擎 • 通过PKCS #11 API提供密码服务的密钥管理服务! P8 k! K: U( C • 用于管理硬件安全元件特性的STSAFE-A 该软件包包含有不同的示例应用程序,可提供完整的SBSFU解决方案:: x* _3 O1 F5 f- m4 i • SE_CoreBin应用程序:提供包含所有“可信”代码的二进制文件。 • 安全启动和安全固件升级(SBSFU)应用程序:– 安全启动(可信根)6 {" n' p- [! D6 R1 W4 E – 本地下载通过串口7 m5 \& I# Y7 S6 {! V – 固件安装管理8 g0 @: @. q7 y2 u1 p8 y7 R2 h4 V • 用户应用程序: – 在双插槽操作模式下下载新固件 – 提供了测试保护机制的示例" z& z4 r1 Y% |; S- ~1 q – 提供了使用KMS API的示例/ n1 ?5 ^' X5 e; }. q# T! X 示例应用提供了双插槽和单插槽操作模式,并且可以配置为不同加密方案。4 h" ]0 G+ ^2 o1 f6 m! O/ K* f 注: 在名称为1_Image 的示例中对单插槽配置进行了演示。5 |* Z V7 E% r) Q% ] 在名为2_Images 的示例中对双插槽配置进行了演示。' x) Q ~# N% g W+ B3 R; F 本用户手册介绍了软件包的典型用法: • 基于NUCLEO-L476RG板1 l4 d8 J: i _1 V • 示例应用在双插槽模式下运行,并配置了非对称身份验证和对称固件加密 有关配置选项和单槽操作模式的更多信息,请参阅本文档的附录。) V- V$ n: E* L9 l, r( n 注: STM32L4系列和STM32L4+系列提供KMS功能,所提供示例基于B-L475E-IOT01A和B-L4S5IIOT01A板。6 G) m2 |4 X' l+ y( z) F1 \ 注: STM32L4+系列提供STSAFE-A110功能,所提供示例基于B-L4S5I-IOT01A板。 * ]2 Q# M6 }5 m$ {3 T9 I* }+ H3 H / p! s( i' E q0 g8 C% C% F 3.安全启动和安全固件升级(SBSFU 3.1 产品安全介绍 现场部署的设备在不受信任的环境中运行,因此会受到威胁和攻击。为了减轻受攻击风险,我们的目标是只在设备上运行可靠的固件。已连接的设备时常需要更新固件映像以修复错误,或引入新功能或对策,否则极易遭受攻击。+ U; H* @" B+ Y# Z/ {4 ~* M4 `% l 其后果可能是破坏性的,如固件克隆、恶意软件下载或设备损坏。因此必须设计出一套安全的解决方案来保护敏感数据(甚至可能是固件本身)和关键操作。 典型的对策基于加密技术(带有相关密钥)和内存保护:6 C* v6 ? n$ V- _& z • 密码可确保固件传输期间的完整性(确保数据未被破坏)、身份验证(确保某个实体确实符合其声明)以及机密性(确保只有经过授权的用户才能读取敏感数据)。 • 内存保护机制可以防止外部攻击(例如,通过JTAG物理访问设备)以及来自内部其它进程的攻击。 以下章节介绍实现机密性、完整性和身份验证服务的解决方案,以解决IoT终端节点设备最常见的威胁。 3.2 安全启动5 z& H" s/ W* B/ E% u% v7 |; t 安全启动(SB)确保所执行的用户应用程序映像的完整性和真实性:使用密码检查,防止运行未经授权或恶意修改的软件。安全启动过程实现可信根(参见图 1):从该可信组件(1)开始,其他每个组件在其执行之前(3)都要经过认证(2)。 对完整性进行验证,以确保即将执行的映像未被破坏或恶意修改。 K" @) g% a/ c/ R) D% ?( R 可靠性检查旨在验证固件映像是来自可信且已知的源,以防止未经授权的实体安装及执行代码。 0 B. I7 [( [! l; q ![]() ) d% S6 T$ \8 F: b/ y. x 3.3 安全固件更新 安全固件更新(SFU)实现了安全的现场固件更新,可以安全地将新固件映像下载到设备。如图 2中所示,通常有两个实体参与固件更新过程:7 x" z7 i9 n! e0 }2 J" b; y0 w • 服务器 – OEM制造商服务器/Web服务 – 存储设备固件的新版本 – 与设备通信,如果可用,则以加密形式发送该新映像版本. Y4 y: t& |' | • 设备6 ^- b. O( N I: j – 现场部署 – 内置了执行固件更新过程的代码。! }7 @7 ]& ?" F+ V! c5 k – 与服务器通信并接收新的固件映像。6 j7 k5 v# |; P – 验证、解密并安装新固件映像,然后执行它。 ![]() 5 ?: I4 H6 ]; v1 V$ z6 y 固件更新通过以下步骤进行:3 z- {+ y1 U1 P+ {" Z: z* y 1. 如果需要更新固件,则创建一个新的加密固件映像并将其存储在服务器中。 2. 新的加密固件映像通过不受信任的通道发送到现场部署的设备。 3. 下载、检查并安装新映像。( b ]# W4 o) v; _ 可对整个固件映像或仅固件映像的一部分(仅适用于双插槽配置)执行固件更新。 固件更新容易受到第 3.1节:产品安全介绍中所示风险的影响:密码学技术用来确保机密性、完整性和身份验证。 机密性:用以保护固件映象,此固件映像可能是制造商的关键资产。它以加密的方式通过不可信通道发送,因此只有具备加密密钥访问权的设备才能解密固件包。 完整性:用来验证接收到的映象无任务损坏。 可靠性:检查旨在验证固件映像是来自可信且已知的源,以防止未经授权的实体安装及执行代码。( j$ j2 s( o8 @ 1 y# {" d- f' h& q! ]" U" G 3.4 密码操作 X-CUBE-SBSFU STM32Cube扩展包提供了同时使用非对称和对称加密的四种加密方案。. u/ k1 R. L/ {6 J' R 默认的加密方案演示了用于固件验证的ECDSA非对称加密和用于固件解密的AES-CBC对称加密。利用非对称加密技术,固件验证可以通过公钥操作执行,因此设备中不需要任何保密信息。1 j& c2 e& w [. A( U X-CUBE-SBSFU扩展包中提供的其他加密方案是: • 用于固件验证的ECDSA非对称加密技术,用AES-CBC或AES-CTR对称加密技术进行固件加密 • 用于明文固件验证的ECDSA非对称加密技术6 e( \7 S( C7 g • 用于明文固件验证的基于X509证书的ECDSA非对称加密技术 • 用于固件验证和加密的AES-GCM对称加密技术。 表 3介绍了每种密码方案相关的各种安全特性。4 [ x! q- D' g/ E0 w1 ? 0 |' j+ ?0 Y1 k2 D7 M ![]() 4 密钥管理服务(KMS) 密钥管理服务中间件通过标准PKCS #11 API(由OASIS指定)提供密码服务,这些API能够将密钥值提取给调用方(使用对象ID而非直接使用密钥值)。KMS运行在一个受保护/隔离的环境之内,主要是为了确保密钥值本身不能被未授权的外部代码访问。: u# U2 q9 q2 E% e4 _- i KMS也可以提供一些密码学服务,且由STM32微控制器以外的元件来安全管理,比如STSAFE-A110(基于令牌ID)。& r: N3 A, |( e1 P& i. I( Z1 I. _ KMS只支持PKCS #11 API的子集:) a9 S1 _# x7 d0 n • 对象管理功能:创建/更新/删除9 i0 o2 m/ K1 O2 `4 ~1 Q6 A _ • AES加密功能' v# F# G* M6 C* D, o* S3 n/ a" F • AES解密功能 • 摘要功能& r% ]9 f; s/ V3 ~' A( j • RSA和ECDSA签名/验证功能 • 密钥管理功能:密钥生成/派生KMS管理三类密钥: • 静态嵌入式密钥:0 D) d0 E% j+ f& m2 y: K – 在代码中嵌入预定义密钥。此类密钥不能修改。 • 具有静态ID的可更新密钥:2 [+ y: i& O8 g# Z) l' h7 ?( Z – 在系统中预定义密钥ID* s2 j' v5 k9 d9 k. l1 Y' B, ~ – 可通过使用静态嵌入式根密钥的安全流程更新NVM存储器中的密钥值(真实性检查、数据完整性检查和数据解密) – 密钥无法删除+ G I* z# D" W6 i • 具有动态ID的可更新密钥:, K O0 n; l, X# J – 密钥ID在创建密钥时定义' q8 g: n( C0 n! Z) |+ ]4 d6 Z – 密钥值由使用内部函数来创建, 如DeriveKey()函数,可创建动态对象。 – 密钥可以删除 ; i5 \6 ~* J" }4 b 完整版请查看:附件 |
X_CUBE_SBSFU安全启动和固件更新软件入门.pdf
下载4.88 MB, 下载次数: 1
新版STM32Cube for Visual Studio Code开发体验
【STM32N6570-DK评测】3.CubeMX关于DCMIPP和CSI的BUG整理及摄像头使用
经验分享常被误解的开、关总中断
【STM32C0测评】Nucleo-C092开发板功耗测试
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(软件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件软件IIC一网打尽)
【STM32C0测评】Nucleo-C092开发板USART串口测试
【STM32C0测评】Nucleo-C092开发板使用PWM控制板载LED呼吸灯
【STM32C0测评】Nucleo-C092板卡外部中断控制板载LED灯