問題簡介
在《深扒HAB boot 啟動安全性》中,小編介紹了HAB boot的啟動流程(如圖1所示),其中的1、2、3驗證步驟本質上就是驗簽過程。
圖1驗簽過程在公鑰可信的情況下,可用于檢測數據的完整性(Integrity),身份認證(Authentication)和不可否認(Non-repudiation/Undeniable),而hab4_pki_tree.sh和hab4_pki_tree.bat腳本又保證生成的公鑰與私鑰對,證書是可信的,所以能“完美閉環”,使得HAB boot的安全性得到保證。
在應用手冊AN12079中,介紹了實現HAB boot的步驟,大致可分為:
- 生成證書與密鑰
- 對bootable image進行簽名
- 打包簽名后的bootable image生成SB文件
簽名過程需借助elftosb工具和BD文件,其中BD文件包含了實現簽名的命令,
options{
flags=0x08;
startAddress=0x60000000;
ivtOffset=0x1000;
initialLoadSize=0x2000;
entryPointAddress=0x60004645;
}
sources{
elfFile=extern(0);
}
constants{
SEC_CSF_HEADER=20;
SEC_CSF_INSTALL_SRK=21;
SEC_CSF_INSTALL_CSFK=22;
SEC_CSF_INSTALL_NOCAK=23;
SEC_CSF_AUTHENTICATE_CSF=24;
SEC_CSF_INSTALL_KEY=25;
SEC_CSF_AUTHENTICATE_DATA=26;
SEC_CSF_INSTALL_SECRET_KEY=27;
SEC_CSF_DECRYPT_DATA=28;
SEC_NOP=29;
SEC_SET_MID=30;
SEC_SET_ENGINE=31;
SEC_INIT=32;
SEC_UNLOCK=33;
}
section(SEC_CSF_HEADER;
Header_Version="4.2",
Header_HashAlgorithm="sha256",
Header_Engine="DCP",
Header_EngineConfiguration=0,
Header_CertificateFormat="x509",
Header_SignatureFormat="CMS"
)
{
}
section(SEC_CSF_INSTALL_SRK;
InstallSRK_Table="............Users
xa07025secure_provisioning000000000000000000000000000gen_hab_certsSRK_hash.bin",
InstallSRK_SourceIndex=0
)
{
}
section(SEC_CSF_INSTALL_CSFK;
InstallCSFK_File="............Users
xa07025secure_provisioning000000000000000000000000000crtsCSF1_1_sha256_2048_65537_v3_usr_crt.pem",
InstallCSFK_CertificateFormat="x509"
)
{
}
section(SEC_CSF_AUTHENTICATE_CSF)
{
}
section(SEC_CSF_INSTALL_KEY;
InstallKey_File="............Users
xa07025secure_provisioning000000000000000000000000000crtsIMG1_1_sha256_2048_65537_v3_usr_crt.pem",
InstallKey_VerificationIndex=0,
InstallKey_TargetIndex=2)
{
}
section(SEC_CSF_AUTHENTICATE_DATA;
AuthenticateData_VerificationIndex=2,
AuthenticateData_Engine="DCP",
AuthenticateData_EngineConfiguration=0)
{
}
section(SEC_SET_ENGINE;
SetEngine_HashAlgorithm="sha256",
SetEngine_Engine="DCP",
SetEngine_EngineConfiguration="0")
{
}
section(SEC_UNLOCK;
Unlock_Engine="SNVS",
Unlock_features="ZMKWRITE"
)
{
}
在運行類似下面的命令后,bootable image的組成會有如圖2所示的變化。
./elftosb.exe-fimx-V-cimx-flexspinor-normal-signed.bd-oivt_application_signed.binled_demo_evk_flexspi_nor_0x60002000.srec
圖2在仔細查看BD文件后,我們會發現里面有加載SRK公鑰,IMG1和CSF1證書等命令,卻沒有了關于私鑰的相關命令?那么私鑰是如何參與bootable image的簽名過程的呢?
私鑰在哪里?
圖3的左邊部分表示elftosb.exe執行如下命令后,首先application和CSF(Command Sequence File)會進行Hash運算生成摘要,跟著私鑰會對其加密生成簽名。
./elftosb.exe-fimx-V-cimx-flexspinor-normal-signed.bd-oivt_application_signed.binled_demo_evk_flexspi_nor_0x60002000.srec
圖3
那么elftosb.exe是從哪里加載私鑰的呢?答案就是在與證書所處文件夾crts同一層目錄下的keys文件夾中,且elftosb.exe會加載與BD文件中的公鑰證書所對應的私鑰文件,比如上述BD文件的公鑰證書是CSF1_1_sha256_2048_65537_v3_usr_crt.pem和IMG1_1_sha256_2048_65537_v3_usr_crt.pem
,那么對應的私鑰文件就是CSF1_1_sha256_2048_65537_v3_usr_key.pem和IMG1_1_sha256_2048_65537_v3_usr_key.pem
,當然,你也可以移除keys文件夾來進行驗證。
-
Boot
+關注
關注
0文章
150瀏覽量
35886 -
啟動流程
+關注
關注
0文章
14瀏覽量
6491
原文標題:消失的私鑰-HAB boot
文章出處:【微信號:MCU頻道,微信公眾號:MCU頻道】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論