You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32-C3 Flash加密不符合预期及模式适配疑问咨询

ESP32-C3 Flash加密疑问解答

背景操作

我在VSCode搭配ESP-IDF扩展的ESP32-C3-mini-1项目中做Flash加密,目的是防止别人读取固件。操作步骤如下:

  • 选自定义密钥开启Develop模式加密,按官方指南生成密钥并烧录到eFuse
  • 通过menuconfig调整设置,关闭Bootloader消息来适配分区大小
  • 刷入测试固件后运行正常;修改代码里的打印文本重新刷入也没问题

之后执行读取Flash的命令:

esptool.py --port COMX --baud 115200 read_flash 0 0x400000 on_off.bin

成功导出了on_off.bin文件,再用下面的命令把这个文件刷回设备:

esptool.py --chip esp32-c3 --port COMX --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x00 C:\Users\pkasu\Desktop\test_workspace\on_off.bin

设备依然能正常运行,由此产生两个疑问:


疑问1:为什么能读取加密后的Flash数据并重新刷入,Flash加密的作用是什么?

Develop模式是为开发调试设计的,它保留了UART bootloader对Flash的明文访问权限——你读取到的on_off.bin其实是加密后的密文,但因为你的设备eFuse里已经烧录了对应的解密密钥,所以刷入这个密文后,设备能正常解密运行。

Flash加密的核心作用是防止固件被非法提取复用:如果有人把你的Flash芯片拆下来,放到没有对应密钥的ESP32-C3设备上,或者用通用Flash读取器读取,拿到的只是无法解密的乱码,根本还原不出原始固件的内容。你现在用同一台带密钥的设备读取再刷入,自然能正常运行,但这个.bin文件拿到别的设备上完全用不了。

疑问2:通过串口(USB转UART)刷写固件时,只能使用Develop模式加密吗?

是的。根据官方说明:

Release模式下,UART bootloader无法执行Flash加密操作。新的明文固件只能通过OTA(空中升级)方式下载,OTA过程中会先加密明文固件再写入Flash。

简单说,一旦切换到Release模式,串口就彻底失去了刷写明文固件的权限,也没法直接访问Flash的明文内容;此时只能通过OTA方式推送新固件,设备会自动用eFuse里的密钥加密后写入Flash。所以如果要保留串口刷写固件的能力,只能用Develop模式。


内容的提问来源于stack exchange,提问作者Dominykas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:28:30