引言
目录预览
1.概述
2.文档和开源软件资源
3.STM32Cube 概述
4.Arm® 可信固件‑M (TF‑M)简介
5.安全启动和安全固件更新服务
(PSA 不可变 RoT)
6.运行时安全服务
7.保护措施和安全策略
8.软件包说明
9.硬件和软件环境设置
10.安装过程
11.逐步执行
12.集成商角色描述
章节预览
STM32Cube概述
STM32Cube 源自意法半导体,旨在通过减少开发工作量、时间和成本,明显提高设计人员的生产率。STM32Cube 涵盖整个 STM32 产品系列。
STM32Cube 包括:
• 一套用户友好的软件开发工具,覆盖从概念到实现的整个项目开发过程,其中包括:
– STM32CubeMX 图形软件配置工具 STM32CubeMX,可通过图形向导自动生成初始化 C 代码。
– STM32CubeIDE 一种集外设配置、代码生成、代码编译和调试功能于一体的开发工具
– STM32CubeProgrammer
(STM32CubeProg),图形版本和命令行版本中可用的编程工具。
– STM32CubeMonitor (STM32CubeMonitor、STM32CubeMonPwr、STM32CubeMonRF 和STM32CubeMonUCPD)功能强大的监控工具,用于实时微调 STM32 应用程序的行为和性能 。
• STM32Cube MCU 和 MPU 软件包,特定于每个微控制器和微处理器系列的综合嵌入式软件平台(如用于STM32U5 系列的 STM32CubeU5),它包含:
– STM32Cube 硬件抽象层(HAL),确保在 STM32 各个产品之间实现最大限度的可移植性。
– STM32Cube 底层 API,通过硬件提供高度用户控制,确保最佳性能和内存开销
– 一组一致的中间件组件,如 ThreadX、FileX / LevelX、NetX Duo、USBX、USB-PD 触控库、网络库、mbed-crypto、TFM 和 OpenBL
– 嵌入式软件实用工具以及全套外设和应用实例 。
• STM32Cube 扩展包,其中包含嵌入式软件组件,这些组件用以下内容补充 STM32Cube MCU 和 MPU 软件包的功能:– 中间件扩展和应用层– 在特定的意法半导体开发板上运行的实现案例。
Arm® 可信固件‑M (TF‑M)简介
TF‑M (参见[TF-M])是 Arm Limited 驱动的开源软件框架,提供 Arm® Cortex®‑M33(TrustZone®)处理器上PSA 标准的参考实现:
• PSA 不可变 RoT(可信根):在每次复位后执行不可变“安全启动和安全固件更新”应用程序。该应用程序基于 MCUboot 开源软件(参照[MCUboot])。
• PSA 可更新 RoT:“安全”应用程序,实现一组隔离在安全/特权级环境中的安全服务,非安全应用程序可通过PSA API 在非安全应用程序运行时间调用这些服务(参见[mbed-crypto]):
– 固件更新服务:TF‑M 固件更新(FWU)服务实现 PSA 固件更新 API,以便应用程序安装新固件。
– 内部可信存储 服务:TF‑M 内部可信存储(ITS)服务实现 PSA 内部可信存储 API,以便在微控制器内置 Flash 存储器区域中写入数据,该区域通过硬件安全保护机制与非安全或非特权级应用程序隔离开来。
– 密码服务:TF‑M 密码服务实现 PSA 密码 API,以便应用程序使用密码原语,如对称和非对称密码、哈希、消息认证码(MAC)、关联数据的认证加密(AEAD)、随机化和密钥派生。它附带 PSA 密码驱动程序接口,便于使用专用硬件。它基于 Mbed 密码开源软件(参照[mbed-crypto])。
– 初始认证服务:TF‑M 初始认证服务允许应用程序在验证过程中向验证实体证明设备身份。初始认证服务可以根据请求创建一个令牌,其中包含特定于设备的固定数据集。
• 应用程序可更新 RoT:隔离在安全/非特权级环境中的安全服务,非安全应用程序可在非安全应用程序运行时间调用这些服务。
– 受保护存储 服务:TF‑M 受保护存储(PS)服务实现 PSA 受保护存储 API,以便在可能不可信的存储环境中进行数据加密和写入结果。作为参考,PS 服务采用基于 AES-GCM 的 AEAD 加密策略来保护数据的完整性和真实性。
– 第三方:实现额外的产品特定的安全服务的 RoT 应用程序。
安全启动和安全固件更新服务
(PSA 不可变 RoT)
5.1 产品安全介绍
现场部署的设备在不受信任的环境中运行,因此会受到威胁和攻击。为了减轻受攻击风险,我们的目标是只在设备上运行可靠的固件。允许更新固件映像以便修复故障或引入新特性或应对措施,这对连接的器件而言十分常见。但是,如果不以安全的方式执行,则容易受到攻击。其后果可能是破坏性的,如固件克隆、恶意软件下载或设备损坏。
因此,必须设计安全解决方案来保护敏感数据(甚至可能是固件本身)和关键操作。典型的对策基于密码技术(带有相关密钥)和内存保护机制:
• 加密可确保固件传输期间的完整性(确保数据未被破坏)、身份验证(确保某个实体确实符合其声明)以及机密性(确保只有经过授权的用户才能读取敏感数据)。
• 内存保护机制可以防止外部攻击(例如,通过 JTAG 物理访问设备)以及来自其他嵌入式非安全进程的内部攻击。以下章节介绍实现完整性和身份验证服务的解决方案,以解决 IoT 终端节点设备最常见的威胁。
5.2安全启动
安全启动 (SB)确保所执行的用户固件映像的完整性和真实性:使用密码检查,防止运行未经授权或恶意修改的软件。
安全启动过程实现了一个可信根:从该可信组件开始(图 2 中的步骤 1),在其他每个组件执行(图 2 中的步骤 3)前验证该组件(图 2 中的步骤 2)。对完整性进行验证,以确保即将执行的映像未被破坏或恶意修改。可靠性检查旨在验证固件映像是来自可信且已知的源,以防止未经授权的实体安装及执行代码。
5.3安全固件更新
安全固件更新 (SFU)实现了安全的现场固件更新,可以安全地将新固件映像下载到设备。
如图 3 中所示,通常有两个实体参与固件更新过程:
• 服务器
– 可以是 OEM 制造商服务器或 Web 服务。
– 存储设备固件的新版本。
– 与设备通信,如果可用,则以加密形式发送该新映像版本。
• 器件
– 现场部署。
– 嵌入了运行固件更新过程的代码。
– 与服务器通信并接收新的固件映像。
– 验证、解密并安装新固件映像,然后执行它。
固件更新通过以下步骤进行:
1. 如果需要更新固件,则创建一个新的加密固件映像并将其存储在服务器中。
2. 新的加密固件映像通过不受信任的通道发送到现场部署的设备。
3. 下载、检查并安装新映像。固件更新在完整的固件映像上完成。
固件更新容易受到第 5.1 节 产品安全介绍中所示风险的影响:密码技术用来确保机密性、完整性和身份验证。实现机密性以保护固件映像,这可能是制造商的关键资产。
通过不受信任的通道发送的固件映像被加密,因此只有具有密钥访问权的设备才能解密固件包。验证完整性以确保接收的映像没有损坏。
可靠性检查旨在验证固件映像是来自可信且已知的源,以防止未经授权的实体安装及执行代码。
5.4加密操作
TFM_SBSFU_Boot 应用程序示例附带可配置的密码方案(固件验证和固件加密解决方案):
• 用于映像真实性验证的 RSA-2048 非对称加密,为确保映像机密性而进行密钥 RSA-OAEP 加密的 AES-CTR-128 对称加密,以及用于映像完整性检查的 SHA256 加密。
• 用于映像真实性验证的 RSA-3072 非对称加密,为确保映像机密性而进行密钥 RSA-OAEP 加密的 AES-CTR-128 对称加密,以及用于映像完整性检查的 SHA256 加密。
• 用于映像真实性验证的 ECDSA-256 非对称加密,为确保映像机密性而进行密钥 ECIES-P256 加密的AES-CTR-128 对称加密,以及用于映像完整性检查的 SHA256 加密。
请参考[MCUboot] 开源网站了解关于密码方案的更多信息。
长按扫码关注公众号
更多资讯,尽在STM32
▽点击“阅读原文”,可下载原文档