这是描述信息

智能家居matter模块乐鑫科技wifi ble芯片Secure Boot方案

智能家居matter模块乐鑫科技wifi ble芯片Secure Boot方案

智能家居matter模块乐鑫科技wifi ble芯片Secure Boot方案

智能家居matter模块乐鑫科技wifi ble芯片Secure Boot方案

智能家居matter模块乐鑫科技wifi

智能家居matter模块乐鑫科技wifi ble芯片Secure Boot方案,Secure Boot 方案用于实现固件 (包括 Bootloader 固件app 固件)数据的合法性保护,它使用RSA数字签名算法,在加载运行新固件数据前,对固件数据附加的签名进行校验,从而验证待加载运行固件的数据是否合法。智能家居matter模块乐鑫科技wifi ble芯片启用 Secure Boot方案后,设备端将仅加载运行指定私钥签名授权的固件。


Secure Boot的中文释义为“安全引导”或“安全启动”,因此,在介绍Secure Boot方案的实现原理前,我们来简单复习下 ESP32-C3 的启动引导流程,如图 13-11 所示。

ROM Boot-->Bootloader-->app

图13-11ESP32-C3启动引导流程


设备端上电后,系统首先运行 ROM Boot,然后从 ROM Boot 跳转到 Bootloader,后在Bootloader 运行结束后跳转到 app 固件。其中,ROM Boot是固化在片内 ROM 中的一段可执行程序,它不可被更改。因此,Secure Boot 方案需要保护的数据是可能发生改变的 Bootloader固件和 app 固件。智能家居matter模块乐鑫科技wifi ble芯片更改固件数据的方式有两种:一种是物理烧录,即通过烧录工具,将新的Bootloader 固件和 app 固件烧录到设备端的 Flash 中;另一种 OTA 升级,这种方式仅能更新app 固件,不能更新 Bootloader 固件。


那么,如何保证无论从哪种途径发送到设备端上的固件数据都是合法的呢? 带着疑问,我们将在下面两节分别介绍智能家居matter模块乐鑫科技wifi ble芯片Secure Boot 的两种工作模式即软 Secure Boot和硬 SecureBoot。
注意:Secure Boot 方案有两个版本,即 v1 和 v2,ESP32-C3 仅支持 v2,因此这里介绍的内容主要适用于 Secure Boot v2。
软 Secure Boot 介绍
Software Secure Boot 即软件 Secure Boot,简称软 Secure Boot,是一种无硬件 (主要是 eFuse)参与校验的 Secure Boot 方案。
在启用软 Secure Boot 方案前,需要生成 RSA 签名私钥,运行下述命令可生成私钥:
$ espsecure.py generate_signing_key --version 2 secure_boot_signing_key.pem


生成的私钥数据将保存在 secure boot signing key.pem 文件内。
启用软 Secure Boot 方案的方法很简单,在menuconfig 中,选择 Require signed app images选项,然后编译烧录固件即可。ESP32-C3 使用软 Secure Boot 的方法如图 13-12 所示。


[*]Require signed app images
APP Signing Scheme (RSA)-->
[]Verify app signature on update
[*]Enable hardware Secure Boot in bootloader (READ DOCS FIRST)
[]Sign binaries during build
(secure_boot_signing_key.pm) Secure boot private signing key
[]Enable flash encryption on boot (READ DOCS FIRST)

图13-12 ESP32-C3 使用软 Secure Boot 的方法


启用软 Secure Boot方案后,在编译固件时,将在生成的app 固件 (下述称为 origin_app)中包含公钥,该公钥将用于验证OTA升级发送的新固件 new_app 的合法性。智能家居matter模块乐鑫科技wifi ble芯片当执行 OTA 升级时,接收完固件,调用 esp_ota_end()或者 esp_ota set_bootpartition()函数时,其内部将自动使用 origin_app 中的公校验 new_app 中附带的数字签名。


启用软 Secure Boot 方案后,通过 OTA 升级方式发送到设备端的 app 固件必须使用私钥进行签名,有两种方式可以用于签名:
(1) 配置选项 sign binaries during build,并指明私钥文件的目录位置,在编译时即可自动对 app 固件进行签名。
(2)使用下面的命令可对 app 固件进行签名:
$ espsecure.py sign data --version 2 --keyfile PRIVATE_SIGNING_KEY BINARY_FILE上述命令将直接修改当前文件,并在当前文件中添加校验信息,使用--output 选项可以指定添加签名后的文件名称。智能家居matter模块乐鑫科技wifi ble芯片使用命令对固件进行签名的方法允许将签名的私钥存储在远程服务器上,而不是存储在编译固件的主机上,因此对于设备量产后实现批量签名更加方便。


启用软 Secure Boot 方案后,对 app 固件的签名将附加在 app 固件后面的签名块中,签名块中包含了对固件的签名和验证签名需要的其他数据。对于 ESP32-C3,在使用软 Secure Boot 时仅第一个签名块有效;在使用硬 Secure Boot 时多允许附加三个签名块,每个签名块都可以使用不同的私钥对其进行签名,只要其中一个签名有效则校验通过。ESP32-C3 签名后的 app固件数据格式如图 13-14 所示。

固件数据    签名块1        签名块2        签名块3

图 13-14 ESP32-C3 签名后的 app 固件数据格式


在软 Secure Boot 方案中,用于验证签名的公钥被编译在当前运行的 app 固件中,完全不需要用户管理它,设备端将自动管理公钥。如果想要查看公钥的具体内容,可以使用下述命令手动地导出私钥生成的公钥:
$ espsecure.py extract_public_key --version 2 --keyfile secure_boot_signing_key.pem pub_key .pem

其中,secure_boot_signing_key·pem为私钥,pub key.pem 为私钥生成的公钥。
从软 Secure Boot 方案的实现原理不难看出,软 Secure Boot 方案通过 origin app 校验 OTA升级发送的 new_apP,从而确保 new app 的合法性。智能家居matter模块乐鑫科技wifi ble芯片但是攻击者可能通过物理烧录的方式将未经签名授权的 Bootloader 固件和 origin app 固件烧录到设备端,软 Secure Boot方案无法应对这种物理攻击。因此,在确保设备端在不会受到物理攻击的场景中可以使用软 SecureBoot 方案。接下来,让我们探讨硬 Secure Boot 方案是如何应对物理攻击的。


硬 Secure Boot 介绍

Hardware Secure Boot即硬件 Secure Boot,简称硬Secure Boot,是一种添加了硬件校验的SecureBoot 方案。硬Secure Boot 方案中使用 eFuse 中存储的数据来校验固件数据的合法性。

硬Secure Boot 方案包含了 中所述的软 Secure Boot 方案的所有功能,在软 Secure Boot方案的基础上,硬 Secure Boot 方案可提供更多的校验,包括对烧录的 Bootloader 固件和origin app 固件的签名校验。介绍的生成私-公对的方法、对 app 固件签名的方法和 app 固件签名的格式同样适用于硬 Secure Boot 方案,这里不再重复介绍。


启用硬 Secure Boot 方案后,除了需要对 app 固件进行签名,还需要对使用的 Bootloader 固件进行签名,其签名的方法和格式与 app 固件签名的方法和格式一致。但是,启用硬 Secure Boot方案后,若要对 Bootloader 固件重新编译并签名,智能家居matter模块乐鑫科技wifi ble芯片则需要单独运行命令 idf.py bootloader,并运行命令 idf.py -p PORT bootloader-flash 烧录 Bootloader 固件,运行命令idf.pyflash 将仅烧录签名后的 app 固件和分区表,不再自动烧录 Bootloader 固件。我们可以按照下述步骤使用硬 Secure Boot 方案:


(1)配置编译选项。在menuconfig --> Security features 菜单中,选择Enable hardwareSecure Boot 选项。
(2)如果需要在编译时对固件进行签名,则需要指定签名的私钥。如图 13-15,在 menuconfig -->Security features 菜单中,通过选项 Secure Boot private key 可以指定签名需要的私钥文件。若还未生成私钥,请参考 13.4.3 中生成私的方法导出私钥。此外,我们也可以参考 13.4.3 中介绍的内容,通过命令 espsecure.py 对固件进行签名。
(3)先运行命令 idf.py bootloader 编译 Bootloader 固件,再运行命令 idf.py -p PORTbootloader-flash 烧录 Bootloader 固件。
(4)运行命令 idf.py flash monitor 烧录 app 固件和分区表。
(5)设备启动后将运行上述编译的 Bootloader 固件,自动地将 eFuse 中的 SECURE BOOT EN标志位置位,永久使用硬 Secure Boot 方案,并将 Bootloader 固件签名块中附带的公钥的摘要写入 eFuse 的 BLOCK KEY。编译时使用硬 Secure Boot 方案的方法如图 13-15 所示。


App sionino scheme (RSA)--->
[*]Enable hardware Secure Boot in bootloader (READ DOCS FIRST)
Select secure boot version (Enable Secure Boot version 2)-->
[*]Sign binaries during build
(secure_boot_signing_key.pem) Secure boot private signing key
[*]Allow potentially insecure options
[] Enable flash encrytion on boot (READ DOCS FIRST)
Potentially insecure option --->

图 13-15 编译时使用硬 Secure Boot 方案的方法


注意:1、使用硬 Secure Boot 方案后,请务必保存好签名的私钥文件,否则可能导致无法将更改后的 Bootloader固件和 app 固件数据发送到设备端;2、使用硬 Secure Boot方案后,Bootloader固件的体积将增大,因此可能需要调整分区表或者减小 Bootloader 固件的大小,请参考中的描述进行调整;3、如果在 Bootloader 固件中添加了较多的内容,在使用硬 Secure Boot 方案后,Bootloader 固件大不能大于 0x10000。


提示:硬 Secure Boot 方案在 eFuse 中保存的是公的 SHA256 摘要,而不是公钥本身。因为公钥本身的数据很多,eFuse 的存储空间是受限的。
使用硬 Secure Boot 方案后,设备端在后续更新 Bootloader 固件或者 app 固件时将按照下述步骤执行校验。


(1)公校验。设备端上电后,ROM Boot 检测 eFuse,若使用了硬 eure Boot 方案,则读Bootloader 固件中的公钥,对比该公钥摘要与存储在 eFuse 中的公摘要是否相等。若不相副代表公钥已被篡改或损坏,引导终止:否则,认为 Bootloader 固件中的公钥是正确的,可继续向下执行。
(2)验证 Bootloader 根据的签名。ROM Bot 使用公校验 Bootloader 固件的签名,若校验失败则引导终止;否则继续向下执行。
(3)验证待加载 origin_app 的签名。Bootloader 固件使用公验证origin app 的签名若校验失败则引导终止。
(4)当设备执行端OTA升级时,将执行与软 Secure Boot 方案相同的过程,由origin_app验证 new app 的签名。


注意:详细的签名校验过程除校验签名信息外,还会校验固件的摘要等信息。硬Secure Boot 方案从 ROM Boot 开始签名校验,分层次地校验 Bootloader 固件、origin_app固件和new_app 固件的签名,智能家居matter模块乐鑫科技wifi ble芯片从而创建了 ROM boot --> bootloader --> origin_app --> new_app 的完整可信链。通过上述硬 Secure Boot 方案进行签名校验的基本流程,不难看出软 Secure Boot 方案与硬 Secure Boot 方案的区别。


硬Secure Boot 方案在从 ROM Boot 到执行 origin app 的过程中,增加了一些校验步骤因此在 Bootloader 固件代码中需要执行的步骤更多,设备启动时间将变长,并且 Bootloade固件大小将略微增加。在设备端需要快速启动,或者 Bootloader 固件需要足够小的应用场景,可以尝试使用软 Secure Boot 方案。


使用硬 Secure Boot 方案后,设备端的使用将有一些限制,主要包括:
1、设备端只能运行经过签名的 Bootloader 固件和 app 固件,因此烧录更改后的 Bootloader 固件和 app 固件,或者通过 OTA 升级更新 app 固件均需要使用对应的私钥进行签名。
2、为了加强系统的安全性,默认情况下在使用硬 Secure Boot 方案后将关闭JTAG 调试功能禁止 eFuse 读保护并注销掉 eFuse 中未使用的签名槽。在测试开发阶段,如果需要保留这些功能,智能家居matter模块乐鑫科技wifi ble芯片则可通过menuconfig -->Security features --> Potentially insecure options菜单保留这些功能。在量产时,应当默认关闭这些功能,增强设备的安全性。
3、启用硬 Secure Boot 方案后,设备端的 UART 下载固件的功能将发生变化,其具体影响取决于menuconfig --> security features --> UART ROM download mode 选项的值UART ROM download mode 选项的值有三种。


我们在这里介绍了硬 Secure Boot 方案基本原理和常见的使用方法,硬 Secure Boot 方案还有很多高级的用法,如使用多个签名或者注销失效的公钥。

地址:深圳市宝安区西乡街道麻布社区宝安互联网产业基地A区6栋7栋7706

邮箱:Sales@ferry-semi.com

版权所有©2020  深圳市飞睿科技有限公司  粤ICP备2020098907号    飞睿科技微波雷达wifi模块网站地图