固件为什么需要安全
设备固件被篡改,等于把设备控制权交给攻击者:可以植入挖矿、监听数据、变成僵尸网络。固件安全的第一道门就是签名——只有持有私钥的厂商才能产出合法固件,设备只接受验签通过的固件。
攻击面不止升级通道:调试口、启动加载、存储加密都是入口。固件安全是系统工程,签名升级是其中最基础也最关键的一环。
固件签名 = 让设备只认自家人的代码。
- 签名验明正身。
- 加密防窃听。
- 防回滚禁降级。
- 密钥守好私钥。
签名机制设计
主流做法:厂商用私钥对固件哈希做签名,固件里附签名和公钥;设备启动升级时用内置公钥验签,验过才落盘执行。算法选 RSA 或 ECDSA,密钥长度按安全等级定,别用已经淘汰的弱算法。
# 生成签名示例(示意)
openssl dgst -sha256 -sign private.pem -out fw.sig firmware.bin
openssl dgst -sha256 -verify public.pem -signature fw.sig firmware.bin
安全升级链路
升级链路五步:云端发任务、设备下载、验签、双区切换、上报结果。下载通道用 HTTPS 或 DTLS 加密,防中间人替换固件。双区备份保证升级失败还能回退到旧固件,设备不会变砖。
升级包要区分全量包和差分包:差分包体积小、省流量,但生成和校验逻辑复杂,先在低风险批次验证。
防回滚与版本管理
防回滚防止攻击者把设备降级到有漏洞的旧版本:设备记录最低允许版本,固件头里带版本号,低于最低版本一律拒绝。版本号用单调递增的计数器,不能只靠字符串比较。
版本管理要有灰度策略:小批量试点、观察异常率、逐步放量。出问题能快速回滚到上一版。
密钥管理
私钥是固件安全的心脏。私钥存硬件安全模块或离线保险库,签固件走签名服务,私钥不出库。公钥烧进设备时要用安全通道,防替换。密钥轮换要有机制:旧密钥到期作废,新密钥平滑接管。
- 私钥永不进代码。
- 备份异地多份。
- 轮换定期更新。
- 审计签名留痕。
升级异常处理
升级失败要有兜底:下载失败重试三次退避;验签失败上报云端并保持旧固件运行;写入失败自动回退备份区。设备侧加看门狗,升级卡死能自恢复。云端记录每台设备的升级状态,批量失败能定位批次问题。
异常处理的目标:任何一步失败,设备都不能变砖,且能向云端报告原因。
小结与延伸阅读
固件安全的核心是签名、加密、防回滚、密钥管理四件事。签名让设备只认合法固件,双区备份让升级失败不致命,防回滚封死降级攻击,密钥管理守住最后一环。
- OTA 升级读《OTA 固件升级与设备生命周期实战》。
- 安全认证读《物联网安全与设备身份认证实战》。
- 设备影子读《设备影子实战》。