你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

H5E5评测-2

[复制链接]
种花家刘氓兔 发布时间:2026-10-10 23:56


### T1 安全启动(任务 1)

**架构**:Bootloader @0x08000000(128K)+ 签名应用槽 @0x08020000。
镜像格式:`512B H5SB头(magic/版本/大小) + payload + 64B ECDSA-P256签名(r||s)`,签 SHA-256(头+payload)。
**密码学实现**:SHA-256 → HASH 硬件外设;ECDSA P-256 验签 → PKA 硬件外设;公钥固化于 bootloader。
**工具链**:`tools/imgtool.py`(零依赖纯 Python P-256 实现,keygen/sign/verify/tamper)。

| 用例 | 操作 | 期望 | 实测 | 判定 |
|------|------|------|------|------|
| T1.1 签名工具自检 | imgtool sign→verify | VALID | `signed ... (host-verified)` / `VALID (ver 1.0.0)` | ✅ |
| T1.2 篡改检测(主机) | tamper 后 verify | INVALID | `INVALID`,verify 退出码 1 | ✅ |
| T1.3 正常启动 | 烧合法镜像复位 | 验签通过→跳转 | 见下方实录 | ✅ |
| T1.4 篡改启动 | 篡改 1 字节后复位 | 拒绝启动+报错 | 见下方实录 | ✅ |
| T1.5 验签性能 | - | - | SHA256≈0ms + ECDSA **12ms**(PKA 硬件) | ✅ |

**T1.3 实测输出**:

=== NUCLEO-H5E5ZJ Secure Bootloader v1.0 (ECDSA-P256 + SHA-256, HW PKA/HASH) === [SB] image @0x08020000: ver 1.0.0, 18544 bytes [SB] SHA-256 (HASH hw) OK in 0 ms: C0F872B2... [SB] ECDSA P-256 (PKA hw) verify: VALID in 12 ms [SB] secure boot PASS -> jumping to application

Signed APP v1.0.0 running (booted by secure bootloader) <<< APP: HAL_Init ok, sysclk=250 MHz, VTOR=0x08020200 [app 1s] heartbeat, sysclk=250 MHz ...


**T1.4 实测输出**(篡改 payload 1 字节):

[SB] SHA-256 (HASH hw) OK in 0 ms: 7EA8B791... [SB] ECDSA P-256 (PKA hw) verify: INVALID in 12 ms


  • SECURE BOOT FAILED: signature mismatch
  • boot stopped — LD3 (blue) fast blink

**结论**:fail-closed 行为正确;LD3 快闪 + 串口报错,符合"密钥验证失败则停止启动,显示报错"。

#### T1 过程中发现并修复的硬件级问题(评测重要发现)

1. **H5E5 PKA 首次初始化必须做 RCC 外设级复位**:不复位则 `PKA_SR.INITOK` 永不置位,`HAL_PKA_Init` 超时(10s)。现象 SR 曾读到 `0x00200002`(OPERRF|LMF)。修复:`__HAL_RCC_PKA_FORCE_RESET/RELEASE_RESET` 后再 Init,一次通过。
2. **PKA RAM 擦除依赖 RNG**:RNG 未初始化时 INITOK 不置位(RM0481 PKA_SR.INITOK 说明),需先 `HAL_RNG_Init`。
3. **Cortex-M33 VTOR 512B 对齐**:镜像头 48B 会导致向量表不对齐→早期故障;改为 512B 头后 app 链接地址同步到 slot+512。
4. **跳转交接**:C 编译器在 `__set_MSP` 后仍生成访问旧栈的函数尾声(反汇编证实 `ldmia sp!,{r4-r6,lr}` 在 MSR 之后);改为单块内联汇编 `msr msp / dsb / isb / bx`。
5. **ST 自带 SystemInit 每次启动清空时钟树**(RCC->CFGR1=0、关 PLL),bootloader 传下的 250MHz 被销毁导致 app 波特率错乱;加 `KEEP_BOOTLOADER_CLOCK` 编译开关。
6. **bootloader 跳转前 __disable_irq**,app 必须自行 `__enable_irq()` 否则 SysTick 不运行。

---
赞 收藏 评论0 发布时间:2026-10-10 23:56

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版