固件加密与安全问答合集
本合集由同主题多个问答的答案精华重新组织而成,原帖均保留未动。
一、行业内的单片机加密是怎么做的
固件加解密即课程作业中的那套方案;通信上的加密则更注重防重放攻击和中间人攻击。行业内也存在通过 HSM 芯片加密的做法:把明文交给 HSM,由它加密后回传。
— 行业内单片机加密是怎么做的:(Jack)
二、为什么要用硬件加密芯片
过去普遍做软件加密,始终无法彻底杜绝中间人攻击;硬件加密同样不能彻底杜绝,但破解难度比软件大得多——为每个产品专门定制一批芯片、刻入特定密钥。市面上防抄板的硬件方案也很流行,因此软件加密之外还要扩展到硬件。
— 为什么要用硬件加密芯片? 以(Jack)
三、一套典型的 STM32 固件加密方案
前提:STM32 非常容易被破解读出固件,所以要让读出来也没用。
- APP 以密文形式存储;
- 下载时由 Bootloader 密钥混合 STM32 芯片 ID + 产品序列号 + 一段随机数生成密钥,每颗芯片都不一样,密钥保存在云端;
- Bootloader 解密 B 分区时读取芯片内部 ID,混合出密钥再解密 APP;
- OTA 升级时服务器按序列号找到对应密钥,下发加密固件完成升级。
— stm32固件加密的一些问题(Jack)
四、生产环境中固件如何加密发布
发布时通过 CMake 构建后调用 Python 脚本做 MD5 加密并自动打包,不需要人工逐个处理。
— 如果是在实际生产当中是自己进行文件加密再发(Jack)
五、OTA 还要防"旧固件攻击"
嵌入式 OTA 的一个安全点是防止别人刷入旧固件进行攻击(回滚攻击)——升级机制除了验签,还要考虑版本防回滚。
— 嵌入式OTA其中一个问题,别人可能刷入旧固件攻击你(Jack)