配图

为什么说 OTA 安全是硬件产品的生死线?

某智能门锁厂商因固件回滚漏洞被黑客降级到旧版,导致已修复的蓝牙配对缺陷被利用,最终引发大规模门锁异常开启事件。这类案例暴露出硬件 OTA 系统中三个致命盲区: 1. 版本号与熔丝机制缺失:未在硬件层固化最低允许版本 2. 密钥轮换形同虚设:所有历史固件用同一套密钥签名 3. 回滚计数器未同步:服务器与设备端版本校验不同步

防降级设计的四层防护架构

1. 硬件熔丝(Anti-rollback Fuse)

  • eFuse 物理熔断:STM32U5 等芯片支持烧写后不可逆的版本标记位
  • 安全启动约束:Hi3861 等国产芯片需在 bootloader 校验熔丝值
  • 典型错误:将熔丝位与软件版本号简单绑定(应保留 3 个以上历史版本兼容槽)

2. 版本号三维校验

// 版本号数据结构示例 (32bit)
typedef struct {
    uint16_t major;  // 重大安全更新
    uint8_t minor;   // 功能新增
    uint8_t patch;   // 紧急修复
    uint32_t crc;    // 包含前三个字段的校验值
} fw_version_t;
- 服务器强验证:拒绝任何版本号低于设备当前值的 OTA 包 - 防伪设计:在签名中包含版本号哈希(防止篡改版本标签)

3. 密钥轮换的工程实现

方案类型 适用场景 风险点
预置多套密钥 消费类低功耗设备 占用 Flash 存储空间
在线密钥分发 工业网关等高安全需求 依赖实时网络连接
证书链轮换 Linux 设备 需要 PKI 基础设施支持

实操建议: - Nordic nRF52 系列推荐使用 Key Manager Peripheral (KMU) 硬件加密单元 - ESP32 可将新密钥藏在差分升级包的尾部(需配合 AES-256 加密)

密钥管理中的隐藏陷阱

密钥存储方案对比

  • 安全元件(SE):如英飞凌 OPTIGA™ Trust M,提供 EAL6+ 安全等级,但 BOM 成本增加 $0.8-1.5
  • MCU 内置加密引擎:STM32L4 的 PKA 模块可处理椭圆曲线加密,需注意侧信道攻击防护
  • 软件模拟:RP2040 等无硬件加密芯片的方案,建议结合白盒加密技术

密钥注入流程

  1. 产线端:使用 HSM(硬件安全模块)生成设备唯一密钥
  2. 开发端:维护根密钥的物理隔离(如智能卡+密码机)
  3. 运维端:建立密钥生命周期管理系统,包含吊销列表自动下发

当安全与用户体验冲突时

某医疗设备厂商因强制签名校验导致 7% 的设备在升级时变砖,最终被迫关闭验证。这引出一个关键命题:

安全策略必须包含降级处理流程: 1. 设计双分区恢复机制(参考 Zephyr 的 MCUboot 方案) 2. 在 bootloader 实现最小功能集(网络恢复/本地 USB 刷机) 3. 对关键操作保留硬件级应急接口(如 STM32 的 DFU 模式)

量产前的五项压力测试

  1. 断电模拟测试:在固件写入过程中随机断电 100+ 次
  2. 版本跳跃测试:从最旧版本直接升级到最新版
  3. 密钥吊销测试:验证旧签名固件能否被正确拦截
  4. 网络劫持测试:模拟中间人攻击替换 OTA 包
  5. 存储极限测试:将 Flash 剩余空间压至 1KB 以下触发异常处理

你的下一个 OTA 系统该怎么做?

  1. 选型阶段
  2. 优先选择支持硬件安全启动的 MCU(如 GD32W515 的 TrustZone)
  3. 确认芯片厂商提供密钥吊销列表(CRL)更新机制

  4. 开发阶段

  5. 使用 ed25519 签名算法替代 RSA-2048(节省 50% 验证时间)
  6. 在 CI/CD 流水线中集成版本号自动化检查工具

  7. 运维阶段

  8. 保留最后 3 个可回退版本的安全补丁分支
  9. 对野外设备实施分批次灰度升级(先 1% 设备验证签名链)

争议点:部分开源社区主张完全开放刷机权限,但这在医疗/安防领域等同自杀。安全团队必须早期介入产品定义,将防降级机制写入硬件 PRD 的「不可协商需求」章节。

延伸思考:成本与安全的平衡点

  • 消费级设备可接受 0.5-1 秒的升级验证延迟
  • 工业设备应容忍不超过 $2 的额外安全芯片成本
  • 永远不要在安全日志中记录完整密钥指纹(前 4 字节足够)
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐