flash 加密指南

##esp32安全介绍

esp32有两个重要的功能,安全启动(secure boot) flash加密(flash encryption)


secure boot


flash encryption

flash 加密是由eFuse

flash加密分开发模式和生产模式:
开发模式:
生产模式:

flash 加密过程

假设eFuse值处于默认状态,并且第二阶段引导加载程序被编译为支持闪存加密,则闪存加密过程执行如下:

在首次上电复位时,闪存中的所有数据都是未加密的(纯文本)。
第一阶段引导程序(ROM)将在IRAM中加载第二阶段引导程序。
第二阶段引导程序将读取flash_crypt_cnt(= 00000000b)eFuse值,并且由于该值为0(设置了偶数位数),因此它将配置并启用闪存加密块。它还会将FLASH_CRYPT_CFGeFuse编程为值0xF。
闪存加密块将生成AES-256位密钥并存储到BLOCK1 eFuse中。此操作在硬件中执行,密钥无法通过软件访问。
接下来,闪存加密块将加密闪存内容(基于分区表标志值)。就地加密可能需要一些时间(大型分区最多只需一分钟)。
然后,第二阶段引导加载程序设置flash_crypt_cnt(= 00000001b)中的第一个可用位,以将闪存内容标记为已加密(设置奇数位数)。
对于释放模式的第二阶段引导程序将编程download_dis_encryptdownload_dis_decryptdownload_dis_cache的eFuse位为1,以防止引导程序UART从解密闪存内容。它还会写保护FLASH_CRYPT_CNTeFuse位。
对于开发模式,第二阶段引导加载程序将仅编程download_dis_decrypt&download_dis_cacheeFuse位,以允许UART引导加载程序重新刷新加密的二进制文件。此外,FLASH_CRYPT_CNTeFuse位不会被写保护。
然后,第二阶段引导加载程序重新启动设备以开始执行加密映像。它将透明地解密闪存内容并加载到IRAM中。
在开发阶段,经常需要编写不同的明文闪存映像并测试闪存加密过程。这要求UART下载模式能够根据需要多次加载新的纯文本图像。但是,在制造或生产过程中,由于安全原因,不应允许UART下载模式访问闪存内容。因此,这需要两种不同的ESP32配置:一种用于开发,另一种用于生产。以下部分介绍了闪存加密的development模式和release模式以及使用它们的分步过程。


flash 加密步骤

1. Development Mode

利用esp32内部生成的密钥或外部主机生产的密钥来作为开发的flash加密过程进行开发

开发模式的flash加密过程:

  1. 切换到flash例程中:cd $IDF_PATH/examples/get-started/hello_world

make menuconfig->security features->Enable flash encryption on boot
Partition Table->offset of partition table设置为0x10000

保存退出后,make -j8 flash monitor就进行第一次烧录。

espfuse.py burn_efuse FLASH_CRYPT_CNT

Example to check Flash Encryption status
This is ESP32 chip with 2 CPU cores, WiFi/BT/BLE, silicon revision 0, 2MB external flash
FLASH_CRYPT_CNT eFuse value is 0
Flash encryption feature is disabled
Erasing partition "storage" (0x1000 bytes)
Writing data with esp_partition_write:
I (440) example: 0x3ffb4f60   00 01 02 03 04 05 06 07  08 09 0a 0b 0c 0d 0e 0f  |................|
I (440) example: 0x3ffb4f70   10 11 12 13 14 15 16 17  18 19 1a 1b 1c 1d 1e 1f  |................|
Reading with esp_partition_read:
I (450) example: 0x3ffb4f40   00 01 02 03 04 05 06 07  08 09 0a 0b 0c 0d 0e 0f  |................|
I (460) example: 0x3ffb4f50   10 11 12 13 14 15 16 17  18 19 1a 1b 1c 1d 1e 1f  |................|
Reading with spi_flash_read:
I (470) example: 0x3ffb4f40   00 01 02 03 04 05 06 07  08 09 0a 0b 0c 0d 0e 0f  |................|
I (480) example: 0x3ffb4f50   10 11 12 13 14 15 16 17  18 19 1a 1b 1c 1d 1e 1f  |................|

2. Release Mode

XXXXXXXXXX施工中XXXXXXXXX


esp32 flash加密介绍相关推荐

  1. 【esp32学习之路6——flash加密】

    在esp-idf中复制出(/esp/esp-idf/examples/security/flash_encryption)demo文件,详细加密描述参考乐鑫文档Flash加密 一.开发模式 在开发过程 ...

  2. ESP32 Secure Boot和Flash加密

    ESP32的代码是存在外部Flash中,如果不加密,很容易被窃取代码. ESP32的secure boot和flash加密是两个功能,但是要配合一起使用,其加密效果才好. 一.初次加密. 这里只写可重 ...

  3. ESP32 ECO3 手动启用 Secure Boot V2 与 flash 加密流程

    本篇文档用来说明 ESP32 ECO3 芯片同时使能 Secure Boot V2 和 flash 加密的操作流程,其中,flash 加密使用发布模式(Release Mode),使用主机生成的密钥对 ...

  4. ESP32 nvs 加密

    由于部分用户在 nvs 中存储了一些安全性需求较高的数据,比如 cloud 对应的秘钥.希望在 flash 加密时同时开启 nvs 加密.此篇文章着重描述 nvs 加密需要进行的流程,大体分为以下三步 ...

  5. esp32 Flash分区与OTA功能简析

    升级功能对于所有的嵌入式产品都是非常重要的.尤其是当产品量产/销售阶段,已经没有条件让厂家对产品升级,因此升级方式的设计必须防呆防错以及稳定. 乐鑫ESP32作为蓝牙WIFI合一的物联网芯片,开发成产 ...

  6. 转载:flash加密解密的相关知识

    转自:http://www.jz123.cn/text/0527317.html 希望大家了解一些解密方面的东西,对自己的心血好好保护.最好的方法就是完全不给,一旦作品发布,必须做好被人破解的准备.另 ...

  7. flash加密解密的相关知识

    希望大家了解一些解密方面的东西,对自己的心血好好保护.最好的方法就是完全不给,一旦作品发布,必须做好被人破解的准备.另外,无论何时,不是技术相当人之间的交流性质的话,不要发论坛短消息或邮件和我讨论这一 ...

  8. Arduino ESP32 flash数据存储结构

    Arduino ESP32 flash数据存储结构 分区表官方文档:<分区表> 想了解ESP32 flash数据存储结构需要从分区表开始了解.一点类似一台电脑上挂载的硬盘一样. 分区表保存 ...

  9. 《STM32从零开始学习历程》——SPI物理层及FLASH芯片介绍

    <STM32从零开始学习历程>@EnzoReventon SPI物理层及FLASH芯片介绍 相关链接: SPI协议层 SPI特性及架构 SPI固件库 参考资料: [野火EmbedFire] ...

最新文章

  1. Android 读取meta-data元素的数据
  2. 从理论角度理解L1、L2正则化
  3. Java8 Hashtable 源码阅读
  4. [推荐]Windows2003 Server 设置大全(一)
  5. [Java基础]生产者和消费者模式概述与案例分析
  6. 利用光学流跟踪关键点---30
  7. mysql数据库执行事务日志_第十章 MySQL事务及其日志介绍
  8. 通过一个用户管理实例学习路由react-router-dom知识
  9. Nginx 代理设置
  10. 由java导入excel表格数据引发的一个惨案…(黑眼圈又重了,头发又白了)
  11. Arduino基础入门篇25—红外遥控
  12. 离线环境下火狐浏览器Firefox完全信息迁移
  13. 作业20171127-4 事后诸葛亮会议
  14. 带联网功能的RFID宿舍门禁(六)-两年后的再次总结
  15. 欢迎加入微信交流群交流
  16. 147 completion机制基本概念
  17. 查找MySQL查询语句被阻塞阻塞原因
  18. VS2008中开发手持终端程序(PDA软件)总结
  19. 回忆杀--致敬八零后的六一儿童节
  20. PIC单片机RC振荡器的使用及校准方法

热门文章

  1. 使用cookie防止恶意点击
  2. 删除商品信息恢复的java_零基础学习java------35---------删除一个商品案例,删除多个商品,编辑(修改商品信息),校验用户名是否已经注册(ajax)...
  3. 「MoreThanJava」一文了解二进制和CPU工作原理
  4. Ansible中的常用模块介绍
  5. zabbix告警配置
  6. maya为什么不能导出fbx_maya无法导出fbx
  7. How to solve the lossless offline problem of Spring Cloud Alibaba service instance in Kubernetes
  8. Flume编写拦截器
  9. 【RFC6582 TCP快速恢复算法的NewReno修改】(翻译)
  10. JavaSE学习笔记 详解Set集合中实现类:LinkedHashSet以及TreeSet