SemiDrive E3 Secure Debug 理論及驗證

關鍵字 :SemiDriveE3Debug

一. 概述

安全調試(Secure Debug)顧名思義就是調試接口可以被安全管理,可以通過管理,實現只允許合法調試者調試。

二、Secure Debug 理論

E3 的 Secure Debug 根據控制強度,基本分三種控制形式:

① 對於生命周期處於開發模式的晶片,默認使能調試接口;
② 對於生命周期處於量產模式的晶片,根據權限驗證開放調試接口,分為 BootROM 控制方式、JTAG Challenge/Response 機制;
③ 強制關閉調試:通過燒寫 efuse  的  JTAG_DISABLE  bit 永久關閉調試口。

2.1 BootROM 控制方式

       晶片上電默認先啟動 BootROM 程序(晶片啟動代碼,固化在晶片中),BootROM 根據 boot pin 的設置從 XSPI/eMMC/SD/UART/USB 等介質中獲取下級啟動鏡像,啟動鏡像的格式必須滿足 Boot Package 格式,然後根據 efuse 的配置情況對啟動鏡像進行安全啟動驗證,如果啟動鏡像合法驗證,系統將成功啟動鏡像,表現為程序可以正常啟動,具體安全啟動流程如下:

  • 計算 BPT 中公鑰的 HASH(SHA256)並與 ROTPK1 中保存的 HASH 對比,如果兩者不一致,則啟動失敗;
  • 使用 BPT 中的公鑰驗證 BPT 中存儲的簽名,如果簽名驗證失敗,則啟動失敗;
  • 計算每個 core 鏡像 HASH,與保存在 BPT 中的 HASH 對比,如果不一致則啟動失敗;
  • 上述都成功,則啟動 BPT 中所指定的 core 鏡像。

       上述過程為常規 BootROM 驗證流程,雖然鏡像可以正常啟動,但在 Secure Debug 時,不代表可以正常打開調試口;若要開啟 Debug 調試口,需要將 .json 文件 ctrl 控制欄位設置成 0xffffffffffffffff,將 uuid 欄位設置成與 efuse DID 欄位一致(此欄位由用戶燒寫,注意大小端格式),此過程在 Secure Debug 中非必要過程,Secure Debug 可以不開啟 BootROM 驗證機制僅採用 JTAG Challenge/Response 機制,對 JTAG 口進行安全調試,詳細流程見下圖。

2.2 JTAG Challenge/Response 機制
 
       通過燒寫 efuse SDBG_MODE 使能 JTAG Challenge/Response機制,將debugkey 燒寫至efuse“e3/SEC_DBG_CFG/0-63bit”, 同時燒寫相應的 Lock bit(Lock後軟體無法讀取該密鑰),如果使能了SecureJTAG,只有使用JTAG Challenge/Response機制通過 JTAG 工具提供該密鑰,驗證成功後打開調試接口,詳細流程見下圖。

 

2.3 Fuse Disable 機制

       通過燒寫 efuse 中 JTAG_DISABLE bit 位實現,燒寫完之後將無法逆轉,並且 JTAG_DISABLE 的控制位擁有最高優先級,disable 後將永久無法開啟 JTAG 調試口。

三 、Secure Debug 驗證過程

       3.1 燒寫 efuse 驗證

        3.1.1 生成PAC包

       更改 json 腳本,ctrl 欄位為:0xffffffffffffffff,uuid 欄位對應 efuse DID 一致,通過 CMD 命令行打包成 PAC 包,並將 PAC 包燒寫進 Flash,燒寫完固件之後,撥碼到 0000 斷電重啟,確認固件是否正常啟動。

       3.1.2 燒寫 efuse

       ① 燒寫公鑰 Hash,執行打包指令時,在 log 區會輸出 HASH of Root Cert dump 為公鑰 hash,保存並燒寫到 efuse -> ROTPK1,具體見下圖;




       ② 燒寫 DID,需要與生成 PAC 的 JSON 腳本中的 uuid 欄位對應,注意大小端對應關係



        ③ 燒寫 PROD位,將開啟 production 模式,在這個模式下,晶片將無法再被隨意燒寫,也無法隨意連接調試器(只能通過 USB 口進行 PAC 燒寫,燒寫/讀取 efuse)



        ④ 燒寫 DebugKey

        ⑤ 燒寫 SDBG_MODE 位,開啟 Secure Debug 後,板卡上的 JTAG 口被保護,只能通過輸入密碼的方式重新打開 JTAG 口,(此時雖然 JTAG 口被保護,使用 SDFuseTool 工具以無法通過JTAG 鏈路鏈接,僅能通過 USB 鏈路方式可以讀取或燒寫efuse)


         ⑥ Lock密鑰



  • Bank 後面的序號用於與 LockBank 的序號相對應,即 BankX 的鎖對應 SafeLockBankX 及APLockBankX
  • Bank 中標識含 [D] 的 fuse 項支持單 bit 從 0 到 1 的修改,沒包含此標誌的表示的是 ECC 保護功能,僅支持以 WORD 為單位的一次性寫入,不支持單 bit 改寫
  • LockBank 中的 HLock、OLock、RLock、Plock 含義
    • PLock:置 1 後將不能無法燒寫對應 Bank 的 Fuse 內容;
    • RLock:置 1 後軟體將無法讀取對應 Bank 的 Fuse 內容;
    • OLock:置 1 後無法修改對應 Bank 的 Fuse 的 shadow register 內容;
    • HLock:置 1 後硬體讀取對應 Bank 的 Fuse 內容均為 0;
3.2 寫寄存器模擬驗證
 
參考secure debug - 函數方式驗證(敬請期待)。

四、Secure Debug 解鎖

        參見Secure Debug - 解鎖方式(敬請期待)。

五、參考文檔

《AppNote_E3_Boot_and_OTA_Rev01.06》

《E3 secure debug V1.0》

《Semidrive_E3信息安全_Rev1.0》

《AppNote_E3_燒錄流程_Rev2.0》

《SDToolBox_User_Guide》


歡迎在博文下方留言評論,我們會及時回復您的問題。

如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com   
作者:娜就這麼嘀


更多資訊,請掃碼關注我們!


★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論