控制/MCU
在物联网(IoT)时代,无线通信在日常生活中越来越普及。在物联网设备领域,ESP32是一种流行的低成本片上系统(SoC)微控制器,内置了EspressifSystems的混合WiFi和蓝牙芯片。由于其稳健的设计和超低的功耗,它在物联网应用中变得如此流行。但是当我们谈论物联网应用时,我们会想到物联网的安全性,即数据安全和安全连接。ESP32支持基于X.509证书的HTTPs、IoT云(AWS-IoT、Azure、GoogleFirebase)的相互身份验证等)身份验证和数据通信。在Internet上,ESP32还为我们提供了存储数据到FLASH存储器和引导扇区的数据安全性,以防止数据被盗。今天我们来聊聊ESP32的安全特性,主要和Boot扇区有关。ESP32的两个主要安全功能称为安全启动和闪存安全,也称为闪存加密。
ESP32中有哪些eFUSE模块?
ESP32有一个1024位一次性可编程(OTP)内存块。此OTP内存块分为4块,每块256位。
这些内存块存储闪存加密和安全启动的密钥。由于OTP内存块,没有软件可以读取这些内存块。只有一个ESP32硬件可以读取和验证安全功能。
什么是Flash加密?如何在ESP32上启用它?
ESP32FlashEncryption是EspressifSystem的ESP-IDF为ESP32提供的一项安全功能,用于保护闪存。Flash加密是对ESP32的SPI闪存的内容进行加密,启用该功能后,默认加密以下类型的数据:
固件引导加载程序
分区表
“app”类型分区或应用程序分区
分区表中任何标有“已加密”标志的分区也会被加密。
在ESP-IDF项目中,用户可以通过项目配置轻松启用Flash加密
idf.py菜单配置
打开ESP32项目配置菜单后,现在导航到
“安全功能”--〉
“启动时启用闪存加密”--〉
“启用使用模式(开发(非安全))”/“启用使用模式(发布)”
在Flash加密中,有两种模式:
开发模式:该模式下,ESP32闪存分区全部加密并开放修改,也可通过UART读取闪存。
发布模式:此模式特别推荐用于制造和生产阶段。在此模式下,UART/JTAG对闪存的读取完全被阻止,新固件只能通过无线(OTA)更新。
启用闪存加密后,当前代码的二进制文件以纯文本文件的形式闪存到ESP32的内存中。但是刷机过程完成后,ESP32第一次启动时,设备本身使用刷机时存储在eFUSE-BLK1中的AES刷机加密密钥,对每一个上面提到的分区进行了加密。。加密分区后,ESP32设备会自行重启并使用编程逻辑进行处理。
当ESP32的执行单元尝试读取时,ESP32的flash执行过程会解密flash存储器数据,而对于写入过程,flash执行过程会在写入flash存储器之前对数据进行加密。
什么是安全启动?如何在ESP32上启用它?
ESP32Secure-boot是一项安全功能,可为在ESP32硬件上运行正确的应用程序提供安全保障。启用安全启动后,在使用基于RSA-3072的安全启动的签名密钥加载之前,会验证每个闪存的二进制文件[软件引导加载程序和应用程序固件]。我们可以将Secure-boot称为“ESP32的守护者”。
为了启用Flash加密,在相同的步骤中,我们可以从项目menuconfig启用Secure-boot。
“安全功能”-〉
“在引导加载程序中启用硬件安全启动”
安全启动如何工作?
当ESP32设备启动时,ESP32硬件的受信任ROM或者我们所说的第一阶段引导加载程序在软件引导加载程序上使用基于RSA-3072的安全引导密钥运行验证,然后软件引导加载程序使用相同的签名密钥验证应用程序固件和启动应用程序。
结论
ESP32带有一个安全环境[Secure-boot&Flash-Encryption],我们需要在刷新代码时启用它。为了提高安全性,我们需要同时启用它们。
全部0条评论
快来发表一下你的评论吧 !