需求如下:

想对量产固件进行加密,加密后可用工具擦除旧固件固件,支持重复烧录固件。

所需工具:

  • esptool , 可参考 “esptool.py 介绍和使用”
  • Flash 下载工具

参考文档:

  • Flash 加密
  • ESP32-Secure Boot 安全方案

解决方案:

指定 Flash 加密密钥(key.bin),即每个模块使用相同的 Flash 加密密钥(key.bin)。先把工程编译出的单独的二进制明文固件 使用 Flash 加密密钥(key.bin)进行加密;然后可以直接使用Flash 下载工具烧录加密后的密文固件。密文固件烧录后,需要使用 esptool 把 Flash 加密密钥(key.bin)烧录到 Efuse 中以及开启 Efuse 中的 Flash 加密的控制位来使加密后的固件正常运行启动。步骤如下:*


1 使用 esptool 工具,为量产固件生成 Flash 加密密钥(key.bin) ,例如生成的加密秘钥为 key.bin

espsecure.py generate_flash_encryption_key key.bin

2 对每个待量产烧录的固件( bin 文件)进行加密, 以 hello-world 例程为例

  • 需要在 menuconfig 中开启 Flash 加密选项,如下:

menuconfig -> Security features -> Enable flash encryption on boot

  • 由于 Flash 加密会增加 bootloader.bin 固件的大小,所以需要调整默认分区表的偏移量,默认是 0x8000 , 可调整至 0xa000 。可在 menuconfig 中修改 partition_table 的设置。如下:

menuconfig -> Partition Table -> Offset of partition table

  • 然后对工程进行编译,查看编译后的固件对应的固件下载地址。可以看到 hello-world.bin 的下载地址变成了 0x20000
Project build complete. To flash, run this command:
E:\.espressif\python_env\idf4.3_py3.8_env\Scripts\python.exe ..\..\..\components\esptool_py\esptool\esptool.py -p (PORT) -b 460800 --before default_reset --after no_reset --chip esp32c3  write_flash --flash_mode dio --flash_size detect --flash_freq 80m 0x0 build\bootloader\bootloader.bin 0xa000 build\partition_table\partition-table.bin 0x20000 build\hello-world.bin
or run 'idf.py -p (PORT) flash'

3 然后,使用生成的 Flash 加密密钥( key.bin 文件)对工程编译后的每个独立的固件( bin 文件)进行加密。如下:

  • 使用生成的 Flash 加密密钥( key.bin )对 bootloader.bin 进行加密,加密后的 bootloader.bin 为 key_bootloader.bin
espsecure.py encrypt_flash_data --keyfile key.bin --address 0x1000 -o key_bootloader.bin build/bootloader/bootloader.bin
  • 使用生成的 Flash 加密密钥( key.bin )对 partition-table.bin 进行加密,加密后的 partition-table.bin 为 key_partition-table.bin
espsecure.py encrypt_flash_data --keyfile key.bin --address 0xa000 -o key_partition-table.bin build/partition_table/partition-table.bin
  • 使用生成的 Flash 加密密钥( key.bin )对 hello_world.bin 进行加密,加密后的 hello-world.bin 为 key_hello-world.bin
espsecure.py encrypt_flash_data --keyfile key.bin --address 0x20000 -o key_hello-world.bin build/hello_world.bin

4 按照工程编译生成后的固件的对应的下载地址,烧录加密后的固件( 加密的 bin 文件),如下使用 esptool 工具来下载加密后的固件 :

esptool.py -b 460800 --before default_reset --after no_reset --chip esp32  write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x1000 key_bootloader.bin 0xa000 key_partition-table.bin 0x20000 key_hello-world.bin

注意:

此下载加密固件的步骤也可以直接使用 Flash 下载工具 来下载,如下:


5 将 Flash 加密密钥(key.bin) 烧录到 Efuse 中:

espefuse.py burn_key flash_encryption key.bin

6 使用 esptool 工具开启 Efuse 中的 Flash 加密的控制位:

espefuse.py burn_efuse FLASH_CRYPT_CONFIG 0xF FLASH_CRYPT_CNT 1

说明:

  • 若 Efuse 中没有写入 Flash 加密秘钥( key.bin )和开启 Efuse 中的 Flash 加密的控制位,则无法正常运行加密后的 “固件”( bin 文件)。
  • 模组开启 Flash 加密后,无法使用 Flash 下载工具 来进行重烧固件和擦除固件的操作,但支持使用 esptool 工具来重烧固件和擦除固件。
  • 对 Flash 加密后的模组重烧固件,重烧的固件要求在 menuconfig 中开启 ”Flash 加密“ 的配置选项并使用与旧固件相同的加密密钥(key.bin)来进行加密后进行烧录,这样重烧后的固件才能正常运行。
  • Efuse 中烧录加密密钥不可擦除,因此无法重烧新的密钥。
  • 此解决方案满足对模组量产固件加密后还能使用 esptool 工具来对模组进行重烧固件、擦除、读 Flash 的操作,但读出的固件为加密固件。若新的模组没有烧录加密固件对应的密钥(key.bin)的话,仅把读出的加密固件烧录到新的模组上也是无法正常运行启动的。

手动加密 ESP 设备量产固件并烧录的流程相关推荐

  1. 唐诗三百首加密软件如何使用_使用RT809H编程器跳过高安加密制作液晶电视量产软件的方法...

    普通的主板用RT809H编程器读取的数据可以直接用到其它同机芯主板上,非常方便快捷.高安加密的主板因为绑定了芯片ID使得有些读取的数据不通用,我们使用RT809H编程器跳过高安加密功能,可以方便的制作 ...

  2. USB设备量产导致通用串行总线控制器显示感叹号解决办法

    昨天量产U盘的时候死机了,刚开始还没出现什么问题,在随后的使用中突然所有的USB设备居不能使用了,打开Windows 7设备管理器里面一看,通用串行总线控制器显示一大片感叹号,所有的USB设备均不能使 ...

  3. ubuntu 串口调试工具推荐_升级版全系列视频第一个项目电子产品量产测试与烧录工具...

    第一章 前言 温馨提示:本文共10111字,预计阅读时间26分钟. 之前说过要开源100ASK_IMX6ULL批量测试GUI: 100ask_imx6ull批量测试神器即将开源 ,今天说到做到免费开源 ...

  4. 智微JMS901量产工具软件+固件,JMS901双接口U盘成功量产教程分享

    众所周知,智微的JMS901主控很早就出来了.依稀记得发布时间是2018年11月左右,JMS901为USB3.1 Gen1转UFS2.1的高速桥接芯片,是智微科技针对新兴UFS界面存储装置提出的全新解 ...

  5. 智微JMS901成功量产,附JMS901量产工具软件+固件+教程分享

    所周知,智微的JMS901主控很早就出来了.依稀记得发布时间是2018年11月左右,JMS901为USB3.1 Gen1转UFS2.1的高速桥接芯片,是智微科技针对新兴UFS界面存储装置提出的全新解决 ...

  6. 痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案. 对于以 i.MXRT 这类没有内部 NVM (Non-Volati ...

  7. 天龙固件U盘更新_硅格T18D量产工具下载_硅格T18D量产工具官方版下载[u盘格式化]...

          硅格T18D量产工具官方版是比较实用的u盘修复工具,硅格T18D量产工具官方版可以让使用者很轻松便捷的对硅格T18D进行量产操作,并支持修复和格式化的功能,提高U盘的性能,释放空间.硅格T ...

  8. 成功把变砖的RTL9210b硬盘盒救了回来,附量产工具和固件

    2021年国庆时买的一个RTL9210b主控板硬盘盒,一直插着固态给电视扩容用.昨晚看电视的时候狗子在家里乱窜绊掉了电源线,导致电视机掉电关机,再次开机发现电视无法读取固态,换电脑上也一样.猜测多半是 ...

  9. banq修复_SM3271AB_慧荣SM3271AB U盘量产加密及修复教程 - 系统部

    一个某宝买的便宜的BANQ U盘,由于想把U盘分成两个分区,一个做正常的U盘分区,一个做加密分区,但U盘跟硬盘是不一样的,直接用分区软件分出的U盘,电脑只识别一个分区,所以U盘必须要用量产工具才能分区 ...

最新文章

  1. 用Python如何查快递?
  2. 小余学调度:学习记录2021年9月
  3. java学习(29):大神指导(巩固练习)
  4. 2020中国数字营销人才发展报告
  5. mysql代码提示_聊一聊 php 代码提示
  6. 现代C++模板元编程基础
  7. designer pyqt5 界面切换_PyQT5堆叠布局:切换界面(QStackedLayout)
  8. 29. Element ownerDocument 属性
  9. POJ 2135Farm Tour--MCMF
  10. 点餐系统数据库设计--SQL Server
  11. 使用 Apache FOP 2.3 + docbook-xsl-ns-1.79.1 转换 Docbook 5.1 格式的 XML 文档成 PDF/RTF 文件
  12. 雷达干扰技术(二)数字干扰合成及相关技术
  13. 【Docker】No defult Boot2Docer ISO异常
  14. 网卡和网卡的驱动程序
  15. 2022年终总结——工作第五年
  16. 迪士尼超级计算机多少钱,上海迪士尼乐园公布票务调整方案,明年1月9日起实行新票价...
  17. NBUT1225-NEW RDSP MODE I
  18. 机器学习(MATLAB实现)——SVM支持向量机(一)
  19. 测试你的身份证号码最后一位,校验码的生成方式
  20. 极客日报:阿里再度调整组织架构:天猫淘宝大融合,新设三大中心;苹果M1首席芯片设计师跳槽至英特尔

热门文章

  1. 中国石油大学北京计算机专业保研,2020年中国石油大学(北京)保研率是多少...
  2. 如何从数据库中筛选出达成指定里程碑节点的项目_房地产企业如何搭建运营管理体系...
  3. 阿里云ECS服务器购买记录
  4. shell怎么使用制表符_shell中vi替换特殊字符(制表符\t等)的方法
  5. 看到一篇好的文章计算机专业的学习心得
  6. emoji mysql存储
  7. MySQL : Access denied for user ''@'localhost' to database 'mysql'问题看点。
  8. maps-api-v3_链接Google Maps和Flickr API
  9. 超分重建数据集 DIV2K Flickr2K 下载地址【有效分享】
  10. DailyTopic_4/27: 当当当当~ ~ 吃瓜!