痞子衡嵌入式:恩智浦MCU安全加密啟動一站式工具nxpSecBoot用戶指南

来源:https://www.cnblogs.com/henjay724/archive/2018/11/30/10047071.html
-Advertisement-
Play Games

nxpSecBoot是一個專為NXP MCU安全加密啟動而設計的工具,其特性與NXP MCU里BootROM功能相對應,目前主要支持i.MXRT系列MCU晶元,與NXP官方提供的標準安全加密配套工具集(OpenSSL, CST, sdphost, blhost, elftosb, BD, MfgTo... ...


nxpSecBoot

1 軟體概覽

1.1 介紹

  nxpSecBoot是一個專為NXP MCU安全加密啟動而設計的工具,其特性與NXP MCU里BootROM功能相對應,目前主要支持i.MXRT系列MCU晶元,與NXP官方提供的標準安全加密配套工具集(OpenSSL, CST, sdphost, blhost, elftosb, BD, MfgTool2)相比,nxpSecBoot是一個真正的一站式工具,一個工具包含NXP官方所有加密配套工具的功能,並且是全圖形用戶界面操作。藉助於nxpSecBoot,你可以輕鬆上手NXP MCU安全加密啟動。
  nxpSecBoot主要功能如下:

  • 支持i.MXRT全系列MCU,包含i.MXRT1021、i.MXRT1051/1052、i.MXRT1061/1062、i.MXRT1064 SIP
  • 支持UART和USB-HID兩種串列下載方式
  • 支持.elf和.srec兩種格式的源image文件輸入
  • 支持將源image文件自動轉換成Bootable image
  • 支持下載Bootable image進主動啟動設備 - FlexSPI NOR、SEMC NAND介面Flash
  • 支持下載Bootable image進備份啟動設備 - LPSPI介面NOR/EEPROM Flash
  • 支持基於HAB實現的安全加密啟動(單簽名,簽名和加密)
  • 支持基於BEE實現的安全加密啟動(唯一SNVS key,用戶自定義key)
  • 支持基於HAB和BEE聯合實現的安全加密啟動(HAB簽名 & BEE加密)
  • 支持MCU晶元內部eFuse的回讀和燒寫操作(即專用eFuse燒寫器)
  • 支持啟動設備的任意讀寫擦操作(即通用Flash編程器)
  • 支持從啟動設備回讀已下載的Bootable image數據,並對數據組成部分進行標註

1.2 下載

  nxpSecBoot完全基於Python語言開發,並且源代碼全部開源,其具體開發環境為Python 2.7.14、wxPython 4.0.3、pySerial 3.4、bincopy 15.0.0、PyInstaller 3.3.1。

  nxpSecBoot在發佈時藉助PyInstaller將所有的Python依賴全部打包進一個可執行文件(\nxp-sec-boot-ui\bin\nxpSecBoot.exe),因此如果不是對nxpSecBoot的二次開發,你不需要安裝任何Python軟體及相關庫。

Note: 源代碼包里的nxpSecBoot.exe是在Windows 10 x64環境下打包的,也僅在該環境下測試過,如果因系統原因無法直接使用,你需要安裝相應的Python開發環境,併在\nxp-sec-boot-ui\bin\目錄下執行“pyinstaller .\nxpSecBoot.spec”命令重新生成nxpSecBoot.exe可執行文件。

1.3 安裝

  nxpSecBoot是一個是純綠色免安裝的工具,下載了源代碼包之後,直接雙擊\nxp-sec-boot-ui\bin\nxpSecBoot.exe即可使用。使用nxpSecBoot沒有任何軟體依賴,不需要額外安裝任何軟體。

Note: nxpSecBoot安裝包文件夾不能放置在含空格或中文的路徑下,否則軟體無法正常工作。

1.4 目錄

  nxpSecBoot軟體目錄組織如下:

\nxp-sec-boot-ui
                \apps                        --放置示例的源image文件
                \bin                         --放置nxpSecBoot可執行文件及PyInstaller打包描述文件
                \doc                         --放置NXP官方安全啟動相關的參考文檔
                \gen                         --放置nxpSecBoot使用過程中生成的臨時文件
                      \bd_file                  --根據配置動態生成的BD文件
                      \bee_crypto               --BEE加密過程中生成的文件
                      \bootable_image           --生成的bootable image文件
                      \hab_cert                 --HAB簽名過程中生成的文件
                      \hab_crypto               --HAB加密過程中生成的文件
                      \user_file                --軟體運行過程中緩存的臨時文件
                \gui                         --放置開發nxpSecBoot UI構建工程文件
                \img                         --放置nxpSecBoot使用過程中需載入的圖片
                \src                         --放置開發nxpSecBoot的所有Python源代碼文件
                \tools                       --放置nxpSecBoot使用過程中需調用的外部程式
                      \blhost                   --與Flashloader通信的上位機命令行工具
                      \cst                      --HAB加密的配套命令行工具
                      \elftosb                  --生成bootable image的命令行工具
                      \image_enc                --BEE加密的配套命令行工具
                      \openssl                  --生成證書和秘鑰的標準工具
                      \sdphost                  --與ROM通信的上位機命令行工具

1.5 界面

  下圖為nxpSecBoot工具的主界面,界面主要由六部分組成,各部分功能如下:

nxpSecBoot_mainWin_e

  • 【Menu Bar】:功能菜單欄,提供軟體通用設置。
  • 【Target Setup】:目標設備設置欄,提供MCU Device和Boot Device配置選項。
  • 【Port Setup】:串列介面設置欄,選擇用於連接MCU Device的介面。
  • 【Device Status】:目標設備狀態信息欄,當連接上目標設備之後,用於顯示目標設備的狀態。
  • 【Main Window】:安全加密啟動主界面,提供對目標設備做安全加密啟動的所有操作。
  • 【Log Window】:操作日誌欄,記錄軟體操作日誌。

2 準備工作

  在使用nxpSecBoot工具前主要有兩個準備工作:一、準備好i.MXRT硬體板以及串列下載連接線(USB/UART);二、準備好用於下載進Flash的源image文件。
  關於串列下載線連接,需要查看i.MXRT參考手冊System Boot章節,確保連接的UART/USB引腳是BootROM指定的。
  關於源image文件準備,nxpSecBoot工具主要能識別.elf(.out)/.srec(.s19)兩種格式的image,源image文件尾碼必須設為上面4種之一,否則nxpSecBoot無法識別。另外需要註意的是源image中不需要包含任何i.MXRT載入啟動所需要的頭(IVT, BootData等),nxpSecBoot會自動添加i.MXRT載入啟動所需的文件頭。
  以NXP官方SDK為例進一步講解源image文件的生成,註冊並登錄NXP官網,來到 MCUXpresso SDK Builder 頁面,選擇合適的MCU晶元以及IDE(以RT1060晶元,IAR IDE為例)並點擊Download SDK後便可得到SDK_2.4.0_EVK-MIMXRT1060.zip。
  使用IAR打開SDK包里的\boards\evkmimxrt1060\demo_apps\led_blinky\iar\led_blinky.eww示例應用:

nxpSecBoot_sdkProjectBuilds_e

  led_blinky應用其實包含了三個工程(ram/flexspi_nor/sdram),分別對應三個不同的linker文件(.icf),其中ram工程生成的image即是所謂的Non-XIP image,flexspi_nor工程生成的image即是所謂的XIP image。
  預設情況下,ram工程和flexspi_nor工程生成的image文件是無法直接為nxpSecBoot所用的,需要做一些小小的改變。
  ram工程需要修改linker文件如下:(推薦從0x3000開始鏈接中斷向量表,中斷向量表前面預留一段記憶體用於放置i.MXRT載入啟動所需的文件頭)。

define symbol m_interrupts_start       = 0x00003000;   // 0x00000000
define symbol m_interrupts_end         = 0x000033FF;   // 0x000003FF

define symbol m_text_start             = 0x00003400;   // 0x00000400
define symbol m_text_end               = 0x0001FFFF;

define symbol m_data_start             = 0x20000000;
define symbol m_data_end               = 0x2001FFFF;

define symbol m_data2_start            = 0x20200000;
define symbol m_data2_end              = 0x202BFFFF;

  flexspi_nor工程需要修改工程配置選項里的Defined symbols如下:(將XIP_BOOT_HEADER_ENABLE設為0,即不需要生成包含i.MXRT載入啟動文件頭的image)。

nxpSecBoot_sdkProjectOptions

  如果只是為了快速驗證nxpSecBoot工具,在nxpSecBoot\apps文件夾下預設存放了全系列恩智浦官方i.MXRT評估板的led_blinky應用的image文件。

3 軟體使用

3.1 設置目標設備

  在使用nxpSecBoot時首先需要配置目標設備,目標設備包括MCU Device和Boot Device。以NXP官方開發板EVK-MIMXRT1060為例,該開發板主晶元為i.MXRT1062DVL6A,所以【MCU Device】應設為i.MXRT106x。且以最常用的FlexSPI NOR啟動為例,【Boot Device】設為FLEXSPI NOR,開發板上對應的外部存儲晶元為IS25WP064AJBLE,其是一顆常用的四線QSPI NOR Flash,我們需要在軟體里進一步配置該Boot Device,單擊【Boot Device Configuration】按鈕可彈出如下新的配置頁面:

nxpSecBoot_flexspiNorCfgWin_e

  在彈出的名為FlexSPI NOR Device Configuration頁面里可以看到很多描述Multi-IO SPI NOR Flash特性的選項,比如Device Type、Query Pads等,這些選項都需要被正確地設置,以與開發板上的外部存儲晶元相匹配。
  除此以外,頁面上還有一個名為【Use Typical Device Model】的選項,nxpSecBoot軟體預先定義了一些常用的Multi-IO SPI NOR Flash型號模型,如果開發板上的外部存儲晶元恰好在軟體預定義的型號列表裡,那麼你可以直接在【Use Typical Device Model】選擇對應型號,而不必在Nor Option里逐一配置。
  EVK-MIMXRT1060開發板上的IS25WP064AJBLE晶元屬於ISSI - IS25LP064A大類,因此我們只需要在【Use Typical Device Model】選擇ISSI - IS25LP064A並點擊【Ok】即完成了目標設備的設置。

3.2 連接目標設備

  設置好目標設備之後,下一步便是連接目標設備,以USB-HID介面連接為例,給EVK-MIMXRT1060板子供電,並用USB Cable將PC與J9口連接起來,如果一切正常,應該可以在設備管理器找到vid,pid為0x1fc9,0x0135的HID-compliant vendor-defined device設備被枚舉。如果沒有發現該HID設備,請仔細檢查板子SW7撥碼開關是否將Boot Mode設為2'b01即Serial Downloader模式。

nxpSecBoot_usbhidDetected_e

  確認HID設備存在之後,在【Port Setup】選中USB-HID,然後直接點擊【Connect to ROM】按鈕,此時軟體便會自動完成目標設備連接全過程(使用sdphost連接ROM,獲取一些MCU內部寄存器信息,使用sdphost載入Flashloader並跳轉過去,使用blhost連接Flashloader,獲取一些eFuse信息,使用blhost去配置boot device並獲取boot device meomry信息),這個過程需要大概5s的時間,如果目標設備連接正常,你可以看到指示燈變藍,並且【Connect to ROM】按鈕標簽變為【Reset Device】。如果目標設備連接失敗,指示燈會變紅,並且【Connect to ROM】按鈕標簽變為【Reconnect】。

nxpSecBoot_connectedToDevice_e

  目標設備連接成功後可以在目標設備狀態信息欄看到一些有用的設備狀態信息,比如MCU晶元的UUID值、HAB狀態、與啟動相關的重要Fuse值,Boot Device的Page/Sector/Block大小等。

3.3 安全加密啟動

  目標設備連接成功後便可以開始最核心的安全加密啟動操作,在做安全加密啟動之前先來介紹安全加密啟動主界面分佈:

nxpSecBoot_secboot0_intro_e

  • 【Image Generation Sequence】:image生成視窗,用於對源image進行加密安全處理,生成可放在Boot Device中的bootable image
  • 【Image Loading Sequence】:image下載視窗,用於將生成的bootable image下載進Boot Device中,並且在MCU中燒錄相應的Fuse值(各種Key,HAB設置等)
  • 【eFuse Operation Utility】:eFuse回讀與燒錄視窗,用戶可燒錄自定義值進Fuse Region。
  • 【Boot Device Memory】:image回讀與標註顯示視窗,用於從Boot Device回讀已下載的Bootable image數據,並對數據組成各部分進行標註
  • 【Secure Boot Type】:安全加密模式選擇,選擇想要安全模式(不使能安全,HAB單簽名,HAB簽名加密,BEE加密)。
  • 【All-In-One Action】:一鍵操作,image生成視窗和image下載視窗里激活的操作自動按序執行
3.3.1 模式一:不啟用任何安全措施

  第一種模式是最簡單的模式,即不啟動任何安全措施,一般用於產品開發調試階段。
  【Secure Boot Type】選擇“Unsigned (XIP) Image Boot”,然後點擊【Browse】按鈕選擇一個原始image文件(使用IDE生成的裸.elf/.srec文件即可,不需要包含任何i.MXRT啟動所需的額外文件頭),點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。

nxpSecBoot_secboot1_unsigned

  上圖中Step4和Step5並不是必需操作,僅是用於確認【All-In-One Action】按鈕操作是否成功,尤其是Step5操作,可以對應image下載視窗里顯示的Bootable image構成圖做一遍檢查。
  一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,其餘保持全0,重新上電便可以看到unsigned image正常執行了。

3.3.2 模式二:啟用HAB簽名認證

  第二種模式是初級的安全模式,即僅對image進行簽名認證,一般用於對產品安全性要求較高的場合。簽名認證主要是對image合法性進行校驗,檢測image是否被異常破壞或篡改,如果檢測發現image不合法,那麼MCU便不會啟動執行該image。
  【Secure Boot Type】選擇“HAB Signed (XIP) Image Boot”,然後輸入serial(必須是8位數字)以及key_pass(任意長度字元)後點擊【Advanced Cert Settings】按鈕配置所有簽名認證的參數(熟悉 NXP官方HAB Code Signing Tool工具 使用的朋友應該對這些設置很熟悉),再點擊【Browse】按鈕選擇一個原始image文件,最後點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。

nxpSecBoot_secboot2_signed

  上圖中Step5主要確認兩點:一、HAB狀態是否是Closed的(Fuse 0x460[31:0]的bit1為1'b1);二、SRKH是否被正確燒錄(Fuse 0x580 - 0x5f0,一共256bit,即sha-256演算法),SRKH是最終bootable image里CSF數據里的Public RSA Key的Hash值,用於校驗Public RSA Key是否合法。
  一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,其餘保持全0,重新上電便可以看到HAB signed image正常執行了。
  因為此時MCU晶元HAB狀態已經是Closed,並且SRKH已經被燒錄無法更改,所以未經簽名認證的image無法正常運行,在軟體目錄\nxp-sec-boot\tools\cst\3.0.1\crts文件夾下存放著Private RSA Key文件,請妥善保存好,一旦遺失,那麼新的image將無法被正確簽名從而導致HAB認證失敗無法被啟動執行。

3.3.3 模式三:啟用HAB簽名認證與HAB加密

  第三種模式是中級的安全模式,即對image進行簽名認證以及HAB級加密,一般用於對產品安全性要求很高的場合。簽名認證主要是對image合法性進行校驗,而加密則可以保護image在外部Boot Device中不被非法盜用,因為在外部Boot Device中存放的是image的密文數據,即使被非法獲取也無法輕易破解,並且加密是和MCU晶元綁定的,因為HAB加密過程中使用了MCU內部SNVS模塊里的唯一Master Secret Key。
  【Secure Boot Type】選擇“HAB Signed Encrypted Image Boot”,然後配置所有簽名認證的參數(如果本地已有證書,可以不用配置,軟體會嘗試復用),再點擊【Browse】按鈕選擇一個原始image文件,最後點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。

nxpSecBoot_secboot3_hab_encrypted

  上圖中Step6操作之後可以看到下載進Boot Deivce里的image部分確實是密文,實際上HAB加密僅支持加密image區域,其他區域(比如FDCB、IVT、Boot Data等)均沒有加密。
  一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,其餘保持全0,重新上電便可以看到HAB signed encrypted image正常執行了。
  你可能會好奇,既然image是經過HAB加密的,那麼密碼在哪裡?怎麼設置的?其實image加密操作完全被HAB配套工具封裝好了,HAB加密使用的AES-128演算法,其對應的128bits的AES-128 Key不是由用戶自定義的,而是HAB加密工具自動隨機生成的,並且每一次加密操作生成的AES-128 Key都是不一樣的,即使你沒有更換輸入的原始image。AES-128 Key保存在\nxp-sec-boot\gen\hab_crypto\hab_dek.bin文件里。
  從上圖中image下載視窗里顯示的Bootable image構成圖裡可以看出,相比HAB單簽名的方式,HAB簽名加密方式最終使用的Bootable image的最後多了一個DEK KeyBlob組成部分,這個DEK KeyBlob是通過MCU晶元內部SNVS模塊里的Master Secret Key對hab_dek.bin里的key數據進行動態加密生成的,因為Master Secret Key是晶元唯一的,因此DEK KeyBlob也是晶元唯一的,這是保護image不被非法盜用的關鍵。
  關於HAB加密為何不支持XIP Image,其實簡單分析一下啟動原理便清楚,Image在Boot Device里存儲的是密文,這部分密文必須要經過HAB解密成明文才可以被CPU執行,因此必須要指定不同的存儲空間去存放Image明文,Non-XIP image天然指定了明文應存放在晶元內部SRAM或者外掛SDRAM中,而XIP Image是在Boot Device中直接執行的,一般明文地址與密文地址是相同的,因此HAB加密不支持XIP Image。

3.3.4 模式四:啟用單引擎BEE加密(唯一SNVS Key)

  第四種模式是高級的安全模式,即用唯一SNVS Key對image進行單引擎BEE級加密,一般用於對產品安全性要求極高的場合。BEE加密與HAB加密的主要區別是執行解密操作的主體不同,主要有如下三點區別:

  • HAB加密是由BootROM里的HAB將加密後的image全部解密成明文另存後再執行(靜態解密),而BEE加密是由MCU晶元內部的BEE模塊對加密後的image原地邊解密邊執行(動態解密)。
  • HAB加密僅支持Non-XIP Image(不限Boot Device),而BEE加密僅支持XIP在FlexSPI NOR中的Image。
  • HAB加密區域不可指定(預設全部用戶Image區域),而BEE加密的區域可由用戶指定。

  【Secure Boot Type】選擇“BEE (Signed) Encrypted XIP Image Boot”,點擊【Browse】按鈕選擇一個原始image文件(必須是XIP在FlexSPI NOR中的image),【Key Storage Region】選擇“Fixed SNVS Key”後點擊【Advanced Key Settings】按鈕配置所有BEE加密的參數,最後點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。

nxpSecBoot_secboot4_bee_encrypted_fixed_key

  上圖中Step5操作主要確認一點:BEE_KEY0_SEL是否設置的是From OTPMK[255:128](Fuse 0x460[31:0]的bit13,12為2'b10)。Step6操作之後可以看到下載進Boot Deivce里的Bootable image從IVT開始全是密文,本示例僅啟用一塊加密區域,具體對哪些區域進行加密是在【Advanced Key Settings】里指定的,最大支持指定3塊加密區域。
  一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,並且將BT_CFG[1]設為1'b1(使能Encrypted XIP),其餘保持全0,重新上電便可以看到BEE encrypted image正常執行了。
  BEE加密相比HAB加密是要更安全的,因為HAB加密畢竟是靜態解密,當HAB解密完成之後在SRAM/SDRAM中存儲的是全部的image明文,如果此刻黑客去非法訪問SRAM/SDRAM是有可能獲取全部image明文的;而BEE加密是動態解密,CPU執行到什麼地方纔會去解密什麼地方,任何時候都不存在完整的image明文,黑客永遠無法獲取全部的image明文。

3.3.5 模式五:啟用雙引擎BEE加密(用戶自定義Key)

  第五種模式也是高級的安全模式,即用用戶自定義Key對image進行雙引擎BEE級加密,跟第四種模式(單引擎)原理類似,一般用於對產品安全性要求極高的場合。單引擎BEE加密與雙引擎BEE加密具體區別如下:

  • 唯一SNVS Key單引擎BEE加密預設使用SNVS Key,晶元出廠已預先燒錄,無法更改;用戶自定義Key雙引擎BEE加密使用的Key是由用戶自己設的,需要手動燒錄在Fuse SW_GP2和GP4區域。
  • 唯一SNVS Key單引擎BEE加密只啟用了BEE引擎0;用戶自定義Key雙引擎BEE加密可以同時啟用BEE引擎0和引擎1。但需要註意的是無論啟動幾個BEE引擎,最大加密區域總數均是3個。

nxpSecBoot_secboot5_bee_encrypted_flexible_key

  【Secure Boot Type】選擇“BEE (Signed) Encrypted XIP Image Boot”,點擊【Browse】按鈕選擇一個原始image文件(必須是XIP在FlexSPI NOR中的image),【Key Storage Region】選擇“Flexible User Keys”後點擊【Advanced Key Settings】按鈕配置所有BEE加密的參數,最後點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。
  有必要對如下使用Flexible User Keys加密的BEE參數設置頁面再做一下介紹,首先是選擇要激活的BEE引擎,可以單獨激活BEE引擎0,也可以單獨激活BEE引擎1,當然更可以同時激活BEE引擎0和1,本示例同時激活BEE引擎0和1。指定了BEE引擎後需要進一步為該引擎配置加密所使用的Key的存儲空間以及需要用戶手動輸入Key(128bits)。最後還需要設置加密保護的區域,本示例共使能加密2個區域,分別為0x60001000 - 0x60001fff(由BEE引擎0保護),0x60002000 - 0x60002fff(由BEE引擎1保護)。

nxpSecBoot_flexibleUserKeysWin

  上圖中Step5操作主要確認兩點:一、BEE_KEY0_SEL是否設置正確(Fuse 0x460[31:0]的bit13,12)和BEE_KEY1_SEL是否設置正確(Fuse 0x460[31:0]的bit15,14);二、用戶Key是否被正確燒錄(SW_GP2: Fuse 0x690 - 0x6c0,GP4: Fuse 0x8c0 - 0x8f0)。
  為了確認image是否按指定區域加密,你可以打開\nxp-sec-boot\gen\bootable_image\文件夾下麵生成的未加密bootable image文件與image回讀視窗里的內容進行比對。
  一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,並且將BT_CFG[1]設為1'b1(使能Encrypted XIP),其餘保持全0,重新上電便可以看到BEE encrypted image正常執行了。
  雙引擎BEE加密是將用戶自定義的Key燒錄進了Fuse SW_GP2/GP4區域里,但該區域的Fuse內容是可以回讀的,如果黑客拿到Key,還是有可能破解存在外部Boot Device里的image密文,有沒有對Fuse SW_GP2/GP4區域進行保護的方法?當然有,你可以對指定的Fuse區域進行加鎖,可設置Fuse區域訪問許可權(讀保護,防寫,覆蓋保護),具體後面有單獨章節詳細介紹。
  雙引擎BEE加密相比單引擎BEE加密,從破解角度來說難度加倍,畢竟可以啟用兩組不同的Key來共同保護image不被非法獲取。

3.3.6 模式六:啟用HAB簽名認證與BEE加密

  第六種模式是頂級的安全模式,即對image進行HAB簽名認證以及BEE級加密(單引擎/雙引擎均可),一般用於對產品安全性要求最高的場合。模式四以及模式五均只有加密功能,並沒有對image進行合法性檢測,引入HAB簽名認證可以解決image合法性問題。

  【Secure Boot Type】選擇“BEE (Signed) Encrypted XIP Image Boot”,【Enable Certificate For BEE Encryption】選擇“Yes”並點擊【Advanced Cert Settings】按鈕配置所有簽名認證的參數,點擊【Browse】按鈕選擇一個原始image文件(必須是XIP在FlexSPI NOR中的image),【Key Storage Region】選擇“Fixed SNVS Key”或者“Flexible User Keys”均可並點擊【Advanced Key Settings】按鈕配置所有BEE加密的參數,最後點擊【All-In-One Action】按鈕即可完成bootable image生成與下載所有操作。

nxpSecBoot_secboot6_signed_bee_encrypted

  一切操作無誤,板子上SW7撥碼開關將Boot Mode設為2'b10即Internal Boot模式,並且將BT_CFG[1]設為1'b1(使能Encrypted XIP),其餘保持全0,重新上電便可以看到BEE encrypted image正常執行了。
  需要特別註意的是,因為引入了HAB簽名認證,如果BEE加密Key選擇的是Fixed SNVS Key,需要在HAB Closed的狀態下執行上述操作,否則會啟動失敗,這是HAB與BEE聯合使用的限制。

4 軟體進階

  nxpSecBoot軟體打開預設工作在Entry Mode下,可通過功能菜單欄Tools->Option選擇進入Master Mode,在Master模式下開放了一些高級功能,適用於對NXP MCU晶元以及Boot ROM非常熟悉的用戶。

nxpSecBoot_toolRunModeSet

4.1 分步連接設備

  進入Master模式下,可以不勾選One Step選項,這樣可以單步去連接目標設備,單步連接的主要意義在於,可以在不配置Boot Device的情況下僅連接到Flashloader去實現eFuse操作。

nxpSecBoot_nonOneStepConnection

4.2 專用eFuse燒寫器

  進入Master模式下,可以看到eFuse全部區域都開放了,你可以任意燒寫指定的eFuse區域。eFuse操作是按bit一次性的(類似熔絲燒斷),只能將0燒寫成1,燒錄成1之後便無法更改,所以eFuse的操作需要特別謹慎。

nxpSecBoot_fuseUnderMasterMode

  在上一章節安全加密啟動過程中,我們會燒錄SRKH(0x580 - 0x5f0)、SW_GP2(0x690 - 0x6c0)、GP4(0x8c0 - 0x8f0),這些區域一經燒錄便不得更改,甚至我們希望這些區域不僅不能被更改,也要不能被回讀。

nxpSecBoot_fuseLockerBits

  從上圖可知eFuse 0x400即是各Fuse功能區域的Locker,我們可以通過燒錄eFuse 0x400來鎖住SRKH, SW_GP2, GP4區域。那麼如何燒錄呢?其實非常簡單,直接在各eFuse框內填寫想要燒錄的值,點擊【Burn】按鈕即可。

4.3 通用Flash編程器

  進入Master模式下,可以點擊【Read】、【Erase】、【Write】按鈕實現已配置Flash的任意讀擦寫操作,這樣可以將nxpSecBoot工具當做通用Flash編程器。

nxpSecBoot_flashProgrammer_e


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 正則:^(0\.\d+|[1-9][0-9]|1)$ TextBox綁定正則驗證 <TextBox x:Name="txb" MaxLength="6" Margin="1 0 0 0" Width="40" > <TextBox.Text> <Binding Path="Opacity" Vali ...
  • 大概的翻看了一下這本書,這本[C# 7 and .NET Core 2.0 High Performance](http://www.csharptools.cn/post/11.html)內容要好很多,這裡先放出對應目錄,有興趣的朋友,可以到中國最大IT盜版書網站里找這本書。 ...
  • C# -- Lambda 表達式的使用 Lambda 表達式是作為對象處理的代碼塊(表達式或語句塊)。 它可作為參數傳遞給方法,也可通過方法調用返回。 Lambda 表達式是可以表示為委托的代碼,或者表示為表達式樹的代碼,它所表示的表達式樹可以編譯為委托。 Lambda 表達式的特定委托類型取決於其 ...
  • Emmm,游戲中的屬性購買頁面 話不多說先上代碼 <form id="vue" action="/ltgdGame.Web/Main/Index" method="post"> <input id="back" type="submit" value="返回" /> <div id="VIT"> < ...
  • 有會員購買的,分享給大家。完整一套,可以學習一下。 ├─L001-2017linux運維高級架構師13期-運維與自動化運維發展-10節 │ 1-1運維職業發展.avi │ 1-2運維職業發展.avi │ 1-3運維職業發展.avi │ 10-1ITIL故障管理和問題管理.avi │ 10-2ITIL ...
  • /etc/skel目錄的作用: /etc/skel目錄是用來存放新用戶配置文件的目錄,當我們添加新用戶時,這個目錄下的所有文件會自動被覆制到新添加的用戶家目錄下,預設情況下,/etc/skel 目錄下的所有文件都是隱藏文件(以.點開頭的文件);通過修改、添加、刪除/etc/skel目錄下的文件,我們 ...
  • Ubuntu(友幫拓、優般圖、烏班圖)是一個以桌面應用為主的開源GNU/Linux操作系統,Ubuntu 是基於Debian GNU/Linux,支持x86、amd64(即x64)和ppc架構,由全球化的專業開發團隊(Canonical Ltd)打造的。 接下來介紹在Windows10系統下VMwa ...
  • 一、前言 最近需要在虛擬機當中裝個 的系統,但是在虛擬機安裝的時候,並不像 那樣能一步步的進行配置,因此導致裝好後的虛擬機是動態IP地址。而該虛擬機要作為測試伺服器來使用,所以要將IP地址設置為靜態IP。 二、環境 系統:Ubuntu Server 16.04 虛擬機:VM 15.X 三、解決方案 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...