主要参考资料:
【乐鑫全球开发者大会】DevCon24 #10 |乐鑫安全制造全流程
乐鑫官方文档Flash加密: https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/security/flash-encryption.html
【ESP32S3】使用 Flash 下载工具完成 Flash 加密功能: https://blog.csdn.net/Marchtwentytwo/article/details/138313656
乐鑫官方文档安全启动 (secure boot) v2: https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/security/secure-boot-v2.html
对称加密和非对称加密,一文讲解明白!: https://blog.csdn.net/askf01/article/details/133280265
简介
制造安全可以分为两个方面:设备身份安全 和 生产安全。
设备身份安全
设备身份的生成与保护
生成独一无二的设备身份有三个步骤:
(1)由随机数生成器(RNG)生成的设备密钥,结合设备公钥 和设备信息,一起组成了证书签名请求(CSR)。
(2)由证书授权的云端或本地 签名,产生设备证书。
(3)设备密钥 和 设备证书 一起组成了独一无二的设备身份。
生产安全
设备安全主要分为三部分:
(1)Flash加密——避免设备代码被读取
(2)安全启动——只有被信任的固件被启动
(3)Device Hardening——帮助Flash加密和安全启动 关闭debug接口
Flash加密
对于Flash加密,乐鑫采用了AES (Advanced Encryption Standard)加密,这是一种对称加密方法,也就是加密和解密的密码是一致的。
对称加密的优势在于速度快,加解密过程简单,适合用于传输大量数据。然而,对称加密也存在一些安全性的缺点。首先,密钥的安全性是关键,如果密钥泄露,加密的数据将会遭到破解。其次,对称加密无法提供身份验证和数据完整性保护,即无法判断消息的发送方是否可信以及数据是否被篡改。
ESP32提供以下 Flash 加密模式:
- 开发模式
建议仅在开发过程中使用。因为在这种模式下,仍然可以将新的明文固件烧录到设备,并且引导加载程序将使用存储在硬件中的密钥对该固件进行透明加密。此操作间接允许从 flash 中读出固件明文。
- 发布模式
推荐用于制造和生产。因为在这种模式下,如果不知道加密密钥,则不可能将明文固件烧录到设备。
安全启动
安全启动通过检查每个启动的软件是否已签名来确保设备不会运行任何未经授权(即未签名)的代码。在 ESP32 上,这些软件包括第二阶段的 bootloader 和每个应用程序的二进制文件。注意,第一阶段的 bootloader 是无法更改的 ROM 代码,因此不需要签名。
ESP32 (v3.0 及以上版本) 使用基于 RAS 的安全启动验证方案,即安全启动 v2。
ESP32 的安全启动包括以下步骤:
- 第一阶段 bootloader (ROM boot) 仍处于 ROM 中,加载第二阶段 bootloader,并验证第二阶段
bootloader 的 RSA-PSS 签名。验证通过后方可进入第二阶段。 - 第二阶段 bootloader 加载特定应用程序镜像时,会验证应用程序的 RSA-PSS 签名。若验证通过,则执行应用程序镜像。