此篇博客为 ESP32 Secure Boot 与 ESP32 Flash encryption 的介绍与实践。
1 ESP32 Secure Boot
1.1 ESP32 Secure Boot 功能概述
- Secure Boot 的目的是保证芯片只运行用户指定的程序,芯片每次启动时都会验证从 flash 中加载的 partition table 和 app images 是否是用户指定的
- Secure Boot 中采用 ECDSA 签名算法对 partition table 和 app images 进行签名和验证,ECDSA 签名算法使用公钥/私钥对,秘钥用于对指定的二进制文件签名,公钥用于验证签名。
- 由于 partition table 和 app images 是在软件 bootloader 中被验证的,所以为了防止攻击者篡改软件 bootloader 从而跳过签名验证,Secure Boot 过程中会在 ROM bootloader 时检查软件 bootloader image 是否被篡改,检查用到的 secure boot key 可由硬件随机数生成器产生,保存的 efuse 中,对于软件是读写保护的。
1.2 ESP32 Secure Boot 实践
此部分分为 开发者模式 和 量产模式。
1.2.1 开发者模式
在 make menuconfig
中的 Security features
里需要做以下配置: