|
ESP32 Secure Boot加密烧录过程
经过数天测试,数块ESP32被烧成砖后,终于摸索出ESP32加密烧录的经验☹。
1. 开发环境esp-idf-v3.1。执行~esp/esp-idf/components/esptool_py/esptool/espefuse.py --port /dev/ttyS1 summary查看EPS32芯片efuse未加密前的配置。
2. 在make menuconfig中使能secure boot、flash encryption加密功能。
3. 如果第一次执行make,将会提示生成secure_boot_signing_key.pem私钥文件,按提示操作即可。
4. 运行make flash,编译并烧写partition table和app images到ESP32。
5. 运行make bootLoader,按提示烧写secure bootloader到ESP32。
6. 复位重启ESP32后由于FLASH_CRYPT_CNT=0,ESP32将会用随机数烧写efuse BLK1(Flash encryption key),作为Flash encryption的密钥,并用这个密钥就地加密第4步的partition table和app image。请特别注意,加密过程可能需要花费超过1分钟,加密过程不要复位ESP32!!!加密完毕后efuse中自动变为FLASH_CRYPT_CNT=1,ABS_DONE_0=1说明partition table和app image加密已经生效。
7. 复位重启后的屏幕输出。
8. 重新烧写partition table和app image(3次重烧机会)。用户修改app应用后,执行make flash烧写新的partition table和app image到ESP32。
9. 使用命令行手动烧写 FLASH_CRYPT_CNT,此时2个 bit 被置为 1(取值为0x03)
10. 重启设备,bootloader 发现 FLASH_CRYPT_CNT 的值是 0x03(2 bit 1),于是重新加密 flash 数据,加密完成后 bootloader 将 FLASH_CRYPT_CNT 烧写为0x07(3 bit 1),flash 加密正常使用。
FLASH_CRYPT_CNT的作用
• FLASH_CRYPT_CNT 是 flash 加密方案中非常重要的控制标志,它是 8-bit 的值,它的值一方面决定 flash 中的值是否马上需要加密,另一方面控制 flash 烧写次数限制。
• 当 FLASH_CRYPT_CNT 有(0,2,4,6,8)位被烧写为1时,bootloader 会对 flash 中的内容进行加密。
• 当 FLASH_CRYPT_CNT 有(1,3,5,7)位被烧写为1时,bootloader 知道 flash 的内容已经过加密,直接读取 flash 中的数据解密后使用。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|