智能家居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 方案還有很多高級的用法,如使用多個簽名或者注銷失效的公鑰。