問題簡介
在《深扒HAB boot 啟動(dòng)安全性》中,小編介紹了HAB boot的啟動(dòng)流程(如圖1所示),其中的1、2、3驗(yàn)證步驟本質(zhì)上就是驗(yàn)簽過程。

驗(yàn)簽過程在公鑰可信的情況下,可用于檢測數(shù)據(jù)的完整性(Integrity),身份認(rèn)證(Authentication)和不可否認(rèn)(Non-repudiation/Undeniable),而hab4_pki_tree.sh和hab4_pki_tree.bat腳本又保證生成的公鑰與私鑰對(duì),證書是可信的,所以能“完美閉環(huán)”,使得HAB boot的安全性得到保證。
在應(yīng)用手冊(cè)AN12079中,介紹了實(shí)現(xiàn)HAB boot的步驟,大致可分為:
- 生成證書與密鑰
- 對(duì)bootable image進(jìn)行簽名
- 打包簽名后的bootable image生成SB文件
簽名過程需借助elftosb工具和BD文件,其中BD文件包含了實(shí)現(xiàn)簽名的命令,
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"
)
{
}
在運(yùn)行類似下面的命令后,bootable image的組成會(huì)有如圖2所示的變化。
./elftosb.exe-fimx-V-cimx-flexspinor-normal-signed.bd-oivt_application_signed.binled_demo_evk_flexspi_nor_0x60002000.srec

在仔細(xì)查看BD文件后,我們會(huì)發(fā)現(xiàn)里面有加載SRK公鑰,IMG1和CSF1證書等命令,卻沒有了關(guān)于私鑰的相關(guān)命令?那么私鑰是如何參與bootable image的簽名過程的呢?
私鑰在哪里?
圖3的左邊部分表示elftosb.exe執(zhí)行如下命令后,首先application和CSF(Command Sequence File)會(huì)進(jìn)行Hash運(yùn)算生成摘要,跟著私鑰會(huì)對(duì)其加密生成簽名。
./elftosb.exe-fimx-V-cimx-flexspinor-normal-signed.bd-oivt_application_signed.binled_demo_evk_flexspi_nor_0x60002000.srec

那么elftosb.exe是從哪里加載私鑰的呢?答案就是在與證書所處文件夾crts同一層目錄下的keys文件夾中,且elftosb.exe會(huì)加載與BD文件中的公鑰證書所對(duì)應(yīng)的私鑰文件,比如上述BD文件的公鑰證書是CSF1_1_sha256_2048_65537_v3_usr_crt.pem和IMG1_1_sha256_2048_65537_v3_usr_crt.pem
,那么對(duì)應(yīng)的私鑰文件就是CSF1_1_sha256_2048_65537_v3_usr_key.pem和IMG1_1_sha256_2048_65537_v3_usr_key.pem
,當(dāng)然,你也可以移除keys文件夾來進(jìn)行驗(yàn)證。

-
Boot
+關(guān)注
關(guān)注
0文章
153瀏覽量
36661 -
啟動(dòng)流程
+關(guān)注
關(guān)注
0文章
14瀏覽量
6591
原文標(biāo)題:消失的私鑰-HAB boot
文章出處:【微信號(hào):MCU頻道,微信公眾號(hào):MCU頻道】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
u-boot啟動(dòng)流程分析

U-BOOT的啟動(dòng)流程分享
為什么U-boot顯示的HAB事件數(shù)據(jù)不符合HAB的數(shù)據(jù)表?
i.MX8M Mini安全啟動(dòng)HAB錯(cuò)誤怎么解決?
IMX8M沒有HAB事件,而SRK_HASH未定義是為什么?
如何在imx6q實(shí)現(xiàn)HAB?
imx6q安全啟動(dòng)HAB錯(cuò)誤的原因?
嵌入式U-BOOT的啟動(dòng)流程及移植
串行SPI Nor Flash啟動(dòng)流程

Spring Boot啟動(dòng) Eureka流程

安全啟動(dòng)Secure Boot流程

冷啟動(dòng)(Cold boot)流程及階段劃分

評(píng)論