Enable Secure boot on software

news2024/11/18 12:43:49

User Guide:

  • Secure Boot V1
  • Secure Boot V2
  • espsecure.py

Please follow these steps:

1、Query the chip version

esptool.py chip_id

在这里插入图片描述

  • The V1.0 version chip only supports Secure boot V1

  • The V3.0 or later version chip support Secure boot V2


2、You need to get the secure boot private key. As follows:

  • The Secure Boot V1 key requires use the ECDSA 256(SHA-256) bit private keys.

在这里插入图片描述

  • Running the following command to obtain the Secure Boot V1 ECDSA 256 bit(SHA-256) private key.
espsecure.py generate_signing_key secure_boot_signing_key.pem --version 1 --scheme ecdsa256

在这里插入图片描述


  • If you are use the ECO3 or ECO4 SoC , we recommend to use the Secure Boot V2 . The Secure boot V2 key requires use the rsa3072 private keys.
  • To use Secure boot v2, need to set the chip version to ECO3 or ECO4 , as follows:

Component config → Hardware Settings → Chip revision → Minimum Supported ESP32 Revision
在这里插入图片描述

  • Running the following command to obtain the secure boot V2 key.
espsecure.py generate_signing_key secure_boot_signing_key.pem --version 2 --scheme rsa3072

在这里插入图片描述


3、You need to increase the partition table address Settings.

Since enable secure boot will increases the size of the bootloader.bin firmware, so the offset of the default partition table needs to be adjusted, which is 0x8000, can be adjusted to 0xc000. You can modify the settings for partition table in menuconfig. As follows:

在这里插入图片描述


4、You need to enable secure boot config on software

  • Please set the correct private key file(secure_boot_signing_key.pem

在这里插入图片描述


5、To get the bootloadr.bin and download the bootloadr.bin

  • Running the follows command to get the bootloadr.bin
idf.py bootloader
  • Running the follows command to download the bootloadr.bin
idf.py -p COM6 bootloader-flash

在这里插入图片描述

  • You can also use the follows command to download the bootloadr.bin
esptool.py --chip esp32 --before=default_reset --after=no_reset write_flash --flash_mode dio --flash_freq 40m --flash_size keep 0x1000 E:/esp/esp-idf-v5.1/examples/get-started/blink/build/bootloader/bootloader.bin

在这里插入图片描述


6、 To compile the firmware

  • Then , Running the following command to compile the firmware and get the partition-table.bin and app.bin. As follows:
idf.py build 
  • If you are using the secure boot V1 , After compiled, you will get the signed firmware and a summary of the public key generated based on the secure boot signature private key.
    • The partition-table.bin and app.bin will be signed, the bootloader.bin firmware will not be signed. As follows:
      在这里插入图片描述
    • A summary of the public key generated based on the secure boot signature private key
      在这里插入图片描述

  • If you are using the secure boot V2 ,After compiled, you will get the signed firmware

    • The app.bin and bootloade.bin will be signed, the partition table firmware will not be signed.

在这里插入图片描述

  • When use the secure boot private key(secure_boot_signing_key.pem) to sign the plaintext firmware, the public key and the summary of the public key will are generated. The public key and the summary of the public key will storage to the signature block. The signature block is written at the end of the firmware.

7、To download the signed partition-table.bin and signed app.bin and monitor the running log.

  • Running the following command to download the signed partition-table.bin and signed app.bin and monitor the running log.
idf.py flash monitor

在这里插入图片描述

After the firmware is downloaded, the secure boot will be enabled when the first boot. You can confirm the secure boot process by viewing the running log . As follows:
在这里插入图片描述


You can running the “espefuse.py -p COM4 summary” command to query eFuse information, and you can seen secure boot is enabled.

espefuse.py summary
espefuse.py v4.7.dev1

A fatal error occurred: Could not open /dev/ttyUSB0, the port doesn't exist
Please make sure that you have specified the right port with the --port argument

E:\esp\esp-idf-v5.1\examples\get-started\blink>espefuse.py -p COM4 summary
espefuse.py v4.7.dev1
Connecting......
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP32

=== Run "summary" command ===
EFUSE_NAME (Block) Description  = [Meaningful Value] [Readable/Writeable] (Hex Value)
----------------------------------------------------------------------------------------
Calibration fuses:
ADC_VREF (BLOCK0)                                  True ADC reference voltage                         = 1114 R/W (0b00010)

Config fuses:
WR_DIS (BLOCK0)                                    Efuse write disable mask                           = 256 R/W (0x0100)
RD_DIS (BLOCK0)                                    Disable reading from BlOCK1-3                      = 2 R/W (0x2)
DISABLE_APP_CPU (BLOCK0)                           Disables APP CPU                                   = False R/W (0b0)
DISABLE_BT (BLOCK0)                                Disables Bluetooth                                 = False R/W (0b0)
DIS_CACHE (BLOCK0)                                 Disables cache                                     = False R/W (0b0)
CHIP_CPU_FREQ_LOW (BLOCK0)                         If set alongside EFUSE_RD_CHIP_CPU_FREQ_RATED; the = False R/W (0b0)
                                                    ESP32's max CPU frequency is rated for 160MHz. 24
                                                   0MHz otherwise
CHIP_CPU_FREQ_RATED (BLOCK0)                       If set; the ESP32's maximum CPU frequency has been = True R/W (0b1)
                                                    rated
BLK3_PART_RESERVE (BLOCK0)                         BLOCK3 partially served for ADC calibration data   = False R/W (0b0)
CLK8M_FREQ (BLOCK0)                                8MHz clock freq override                           = 50 R/W (0x32)
VOL_LEVEL_HP_INV (BLOCK0)                          This field stores the voltage level for CPU to run = 0 R/W (0b00)
                                                    at 240 MHz; or for flash/PSRAM to run at 80 MHz.0
                                                   x0: level 7; 0x1: level 6; 0x2: level 5; 0x3: leve
                                                   l 4. (RO)
CODING_SCHEME (BLOCK0)                             Efuse variable block length scheme
   = NONE (BLK1-3 len=256 bits) R/W (0b00)
CONSOLE_DEBUG_DISABLE (BLOCK0)                     Disable ROM BASIC interpreter fallback             = True R/W (0b1)
DISABLE_SDIO_HOST (BLOCK0)                                                                            = False R/W (0b0)
DISABLE_DL_CACHE (BLOCK0)                          Disable flash cache in UART bootloader             = False R/W (0b0)

Flash fuses:
FLASH_CRYPT_CNT (BLOCK0)                           Flash encryption is enabled if this field has an o = 0 R/W (0b0000000)
                                                   dd number of bits set
FLASH_CRYPT_CONFIG (BLOCK0)                        Flash encryption config (key tweak bits)           = 0 R/W (0x0)

Identity fuses:
CHIP_PACKAGE_4BIT (BLOCK0)                         Chip package identifier #4bit                      = False R/W (0b0)
CHIP_PACKAGE (BLOCK0)                              Chip package identifier                            = 1 R/W (0b001)
CHIP_VER_REV1 (BLOCK0)                             bit is set to 1 for rev1 silicon                   = True R/W (0b1)
CHIP_VER_REV2 (BLOCK0)                                                                                = False R/W (0b0)
WAFER_VERSION_MINOR (BLOCK0)                                                                          = 0 R/W (0b00)
WAFER_VERSION_MAJOR (BLOCK0)                       calc WAFER VERSION MAJOR from CHIP_VER_REV1 and CH = 1 R/W (0b001)
                                                   IP_VER_REV2 and apb_ctl_date (read only)
PKG_VERSION (BLOCK0)                               calc Chip package = CHIP_PACKAGE_4BIT << 3 + CHIP_ = 1 R/W (0x1)
                                                   PACKAGE (read only)

Jtag fuses:
JTAG_DISABLE (BLOCK0)                              Disable JTAG                                       = True R/W (0b1)

Mac fuses:
MAC (BLOCK0)                                       MAC address
   = fc:f5:c4:4c:07:cc (CRC 0xc1 OK) R/W
MAC_CRC (BLOCK0)                                   CRC8 for MAC address                               = 193 R/W (0xc1)
MAC_VERSION (BLOCK3)                               Version of the MAC field                           = 0 R/W (0x00)

Security fuses:
UART_DOWNLOAD_DIS (BLOCK0)                         Disable UART download mode. Valid for ESP32 V3 and = False R/W (0b0)
                                                    newer; only
ABS_DONE_0 (BLOCK0)                                Secure boot V1 is enabled for bootloader image     = True R/W (0b1)
ABS_DONE_1 (BLOCK0)                                Secure boot V2 is enabled for bootloader image     = False R/W (0b0)
DISABLE_DL_ENCRYPT (BLOCK0)                        Disable flash encryption in UART bootloader        = False R/W (0b0)
DISABLE_DL_DECRYPT (BLOCK0)                        Disable flash decryption in UART bootloader        = False R/W (0b0)
KEY_STATUS (BLOCK0)                                Usage of efuse block 3 (reserved)                  = False R/W (0b0)
SECURE_VERSION (BLOCK3)                            Secure version for anti-rollback                   = 0 R/W (0x00000000)
BLOCK1 (BLOCK1)                                    Flash encryption key
   = 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
BLOCK2 (BLOCK2)                                    Security boot key
   = ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? -/-
BLOCK3 (BLOCK3)                                    Variable Block 3
   = 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W

Spi Pad fuses:
SPI_PAD_CONFIG_HD (BLOCK0)                         read for SPI_pad_config_hd                         = 0 R/W (0b00000)
SPI_PAD_CONFIG_CLK (BLOCK0)                        Override SD_CLK pad (GPIO6/SPICLK)                 = 0 R/W (0b00000)
SPI_PAD_CONFIG_Q (BLOCK0)                          Override SD_DATA_0 pad (GPIO7/SPIQ)                = 0 R/W (0b00000)
SPI_PAD_CONFIG_D (BLOCK0)                          Override SD_DATA_1 pad (GPIO8/SPID)                = 0 R/W (0b00000)
SPI_PAD_CONFIG_CS0 (BLOCK0)                        Override SD_CMD pad (GPIO11/SPICS0)                = 0 R/W (0b00000)

Vdd fuses:
XPD_SDIO_REG (BLOCK0)                              read for XPD_SDIO_REG                              = False R/W (0b0)
XPD_SDIO_TIEH (BLOCK0)                             If XPD_SDIO_FORCE & XPD_SDIO_REG                   = 1.8V R/W (0b0)
XPD_SDIO_FORCE (BLOCK0)                            Ignore MTDI pin (GPIO12) for VDD_SDIO on reset     = False R/W (0b0)

Flash voltage (VDD_SDIO) determined by GPIO12 on reset (High for 1.8V, Low/NC for 3.3V)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/928387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring redis使用报错Read timed out排查解决

文章目录 使用场景报错信息解决方式 使用场景 我们使用redis作为缓存服务&#xff0c;缓存一些业务数据&#xff0c;如路口点位信息、渠化信息、设备信息等有一些需要实时计算的数据&#xff0c;缓存在redis里&#xff0c;如实时信号周期相位、周期内过车数量等有需要不同服务…

【CesiumJS入门】(9)获取地表两点的距离及中心点——EllipsoidGeodesic

前言 一般情况下&#xff0c;我们可以直接通过Cesium.Cartesian3.distance(left, right)来获取两点的距离&#xff0c;但获取到的是两点的直线距离&#xff1a; const start new Cesium.Cartesian3.fromDegrees(113,23); const end new Cesium.Cartesian3.fromDegrees(113,…

食品安全”有救了“!温湿度监控快速见效!

在储存、运输和加工过程中&#xff0c;适当的温湿度条件对于保持食品的新鲜度、延长货物寿命以及防止食品交叉污染至关重要。通过精确的温湿度监测和实时数据分析&#xff0c;食品行业能够降低损失、提高产品质量&#xff0c;并满足监管要求。 在这个竞争激烈的行业中&#xff…

大数据精准营销获客能为企业带来哪些东西?

广告圈里一句名言:我知道我的广告浪费了一半&#xff0c;但我不知道浪费了哪一半。当前&#xff0c;越来越多的企业在大数据思维指导下进行广告投放&#xff0c;广告能通过对人群的定向&#xff0c;投放给准确的目标顾客&#xff0c;特别是互联网广告现在能够做到根据不同的人向…

【SpringBoot】第一篇:redis使用

背景&#xff1a; 本文是教初学者如何正确使用和接入redis。 一、引入依赖 <!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><depen…

为什么项目经理离不开甘特图?究竟好在哪?

项目经理在管理项目过程中&#xff0c;需要面对众多的任务和时间安排&#xff0c;如何高效地完成项目目标成为了一个重要的课题。在这个时候&#xff0c;甘特图作为一种重要的工具&#xff0c;成为了项目经理的得力助手。 甘特图是一种以时间为轴的图形化工具&#xff0c;通过横…

数据分析案例-汽车客户信息数据可视化分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

基于模糊神经网络的嘉陵江水质评价Matlab代码

1.案例背景 1.1 模糊数学简介 模糊数学是用来描述、研究和处理事物所具有的模糊特征的数学&#xff0c;“模糊”是指它的研究对象,而“数学”是指它的研究方法。 模糊数学中最基本的概念是隶属度和模糊隶属度函数。其中,隶属度是指元素u属于模糊子集f的隶属程度,用uf(…

最简单 实现 Element-ui el-table的懒加载表格数据 el-table懒加载请求数据 element-ui 懒加载

最简单 实现 Element-ui el-table的懒加载表格数据 el-table懒加载请求数据 element-ui 懒加载 1、效果图2、代码 1、效果图 2、代码 <template> <el-table :data"tableData" style"width: 100%" expand-change"expandChange"><…

matlab使用教程(24)—常微分方程(ODE)求解器

1.常微分方程 常微分方程 (ODE) 包含与一个自变量 t&#xff08;通常称为时间&#xff09;相关的因变量 y 的一个或多个导数。此处用于表示 y 关于 t 的导数的表示法对于一阶导数为 y ′ &#xff0c;对于二阶导数为 y ′′&#xff0c;依此类推。ODE 的阶数等于 y 在方程中…

python爬虫实战零基础(3)——某云音乐

爬取某些云网页音乐&#xff0c;无需app 分析网页第二种方式批量爬取 声明&#xff1a;仅供参考学习&#xff0c;参考&#xff0c;若有不足&#xff0c;欢迎指正 你是不是遇到过这种情况&#xff0c;在pc端上音乐无法下载&#xff0c;必须下载客户端才能下载&#xff1f; 那么&…

采集项目和数仓项目的关系

1.介绍 采集项目和数仓项目 采集和数仓是企业数据管理平台的2个核心功能模块,相对独立,所以可以独立开发 区别 功能 采集:数据的采集和传输 数仓:数据的存储 流程 数据库->数据采集->数据仓库->可视化界面 2.数据仓库 什么是数仓? 1.名称 数据库 : database…

杰克逊霍尔央行年会倒计时!鲍威尔压轴登场,美股能否重现“厄运九分钟”?

“央行行长的达沃斯论坛”——杰克逊霍尔央行年会将于美国当地时间本周四至周六举行&#xff0c;主题为“全球经济的结构性变化”&#xff0c;来自全球主要的央行行长、财政官员、经济学家、知名学者、财经媒体等齐聚一堂&#xff0c;共商经济前景和货币政策。 对于这些主要货币…

shopee马来西亚站市场情况如何?卖家怎么选品?

一、shopee马来西亚市场 马来西亚是东南亚的中心地带&#xff0c;拥有3,278万人口&#xff0c;其中30岁以下的年轻人占总人口的49%。马来西亚的经济发展较好&#xff0c;在电商市场方面具备良好的发展潜力。在热销品类方面&#xff0c;母婴用品、时尚服饰、美妆保健品和家居用…

数据库-表连接的几种方式

文章目录 1. 数据库表连接方式简介2. 内连接&#xff08;INNER JOIN&#xff09;3. 左外连接&#xff08;LEFT JOIN&#xff09;4. 右外连接&#xff08;RIGHT JOIN&#xff09;5. 全连接&#xff08;FULL OUTER JOIN&#xff09;6. 交叉连接&#xff08;CROSS JOIN&#xff09…

vue组件的使用

一、首先要穿件组件构造器对象&#xff0c;或者导入组件 1..在本部分注册组件其中组件为子组件 2.在本部分注册组件 二、而后注册组件 1.在本部分注册组件其中组件为子组件 2.在本部分注册组件 三、 接着&#xff0c;使用组件。 1.在本部分注册组件其中组件为子组件 其中v-i…

帮助中心应该用什么工具做?

在线帮助中心是指一个位于互联网上的资源平台&#xff0c;提供给用户获取产品或服务相关信息、解决问题以及获取技术支持的渠道。它通常包含了组织化的知识库、常见问题解答&#xff08;FAQ&#xff09;、操作指南、教程视频、用户手册等内容。在线帮助中心的主要目标是为用户提…

M1 Pro 利用docker 搭建pytho2的开发环境,以vscode连接开发为例

使用 M1 Pro &#xff08;不支持python2的安装&#xff09;开发&#xff0c;需要使用 Python 2.7 的环境&#xff0c;在使用 pyenv 安装 Python 2 时遇到了各种奇怪的问题。最终&#xff0c;我决定使用 Docker 搭建开发环境&#xff0c;并使用 VS Code 连接到本地容器。以下是详…

run control for NI-RT

1.carsim运行配置 ①为选择车辆模型运行的平台&#xff1b; ② NIRT 平台&#xff08;transfer to NI-RT target&#xff09;&#xff1b; ③是选择车辆模型的配置文件&#xff08;包含NI 实时机连接配置及车辆输入输出接口配置&#xff09; 2.配置文件设置 选择模型传输方式“…

Discuz!论坛发帖标题字数限制80字符可以修改吗?修改发帖标题字数的方法

Discuz!论坛发帖标题字数限制80字符修改方法 1.数据库修改2.修改JS验证字符数文件3.修改模板中写死的字符限制数4.修改函数验证文件5.修改语言包文件6.更新缓存 Discuz X3.4论坛网站帖子标题字数限制80字符&#xff0c;当我们想使用长标题的时候就得一删再删&#xff0c;实在是…