DA 證書(shū)鏈之初體驗(yàn)
1. 前言
本文引用地址:http://2s4d.com/article/202402/455407.htm本文是上文 《STM32H5 DA 之初體驗(yàn)(帶 TrustZone)》的后續(xù)之作。倘若你還沒(méi)有閱讀此 文,那么建議你先閱讀下,然后再回過(guò)頭來(lái)閱讀本文。
之前我們已經(jīng)講過(guò)了如何通過(guò) DA 認(rèn)證來(lái)回退芯片產(chǎn)品狀態(tài),或者重新打開(kāi)調(diào)試口,這樣開(kāi) 發(fā)人員在芯片為 Closed 狀態(tài)下時(shí)仍可以調(diào)試芯片。在這個(gè) DA 認(rèn)證過(guò)程中,有使用到兩個(gè)東 西:證書(shū)和私鑰,它與之前已經(jīng)預(yù)配置到芯片內(nèi)部的 obk 文件是對(duì)應(yīng)的關(guān)系。也就是說(shuō), 如果你 已經(jīng)預(yù)配置了芯片, 但對(duì)應(yīng)的私鑰文件或者證書(shū)丟失或忘記保存了, 那么此芯片多半是無(wú)法再還原 了, 除非你找到對(duì)應(yīng)的私鑰和證書(shū).
私鑰是如何來(lái)的 ? 如上文所述, 是通過(guò) TPC 工具生成的, 如下所示 :
點(diǎn)擊上圖中的 Regenerate 按鍵將自動(dòng)生成公鑰私鑰對(duì).
當(dāng)然你也可以使用其它工具來(lái)生成, 比如 openssl 工具, 只要是 ecdsa-p256 類型的密鑰即可.
證書(shū)是怎么來(lái)的 ? 也是通過(guò) TPC 工具生成的 。
如上圖所示, 輸入根密鑰的私鑰和公鑰, 證書(shū)類型選擇為 “ROOT”, 然后在操作許可內(nèi)選擇 所有權(quán)限(完全回退/半回退 + 安全調(diào)試 + 非安全調(diào)試).最終點(diǎn)擊 “Generate Certificate”按鍵, 生成根證書(shū). 由于這里選擇的類型為 ROOT, 輸入的密鑰也為根密鑰. 所以最終生成的證書(shū)為根證 書(shū). 它所許可的權(quán)限是最高的.
對(duì)于一個(gè)產(chǎn)品的開(kāi)發(fā), 可能由不同團(tuán)隊(duì)一起合作開(kāi)發(fā)的, 比如, 有一團(tuán)隊(duì), 專門(mén)負(fù)責(zé)開(kāi)發(fā) secure 部分的代碼, 向 non secure 工程提供 API 接口, 將那些關(guān)鍵算法放入到 secure 世界加以保護(hù), 僅 僅面向 non secure 工程開(kāi)放調(diào)用接口. 而另一個(gè)開(kāi)發(fā)團(tuán)隊(duì), 他們僅僅開(kāi)發(fā) non secure 部分的代 碼, 實(shí)現(xiàn)應(yīng)用層大部分功能, 需要時(shí)調(diào)用 secure 部分代碼開(kāi)放出來(lái)的接口以實(shí)現(xiàn)特定的功能. 那么 對(duì)于這種不同的開(kāi)發(fā)團(tuán)隊(duì), 其所允許的權(quán)限必須有所不同, 開(kāi)發(fā) secure 部分的團(tuán)隊(duì), 必然希望他們 自己能調(diào)試 secure 部分的代碼, 但不希望開(kāi)發(fā) non secure 部分的開(kāi)發(fā)團(tuán)隊(duì)也可以調(diào)試 secure 代碼. 但又要允許不影響他們可以調(diào)試自己 non secure 部分的代碼, 且可隨意回退 non secure 部分代碼. 如此復(fù)雜的權(quán)限控制, 就需要多個(gè)證書(shū)來(lái)實(shí)現(xiàn)了. 這就是證書(shū)鏈的意義所在.
2. 證書(shū)鏈介紹
在產(chǎn)品的開(kāi)發(fā)過(guò)程中, 我們假設(shè)有三個(gè)團(tuán)隊(duì):
· 安全開(kāi)發(fā)團(tuán)隊(duì): 負(fù)責(zé)開(kāi)發(fā) secure 部分代碼, 并向 non secure 提供 API 接口. 當(dāng)芯片燒
錄完 secure 代碼后, 芯片會(huì)被設(shè)置為 TZ_Closed 狀態(tài).
· OEM 開(kāi)發(fā)團(tuán)隊(duì): 負(fù)責(zé)開(kāi)發(fā) non secure 部分代碼, 無(wú)法直接訪問(wèn) secure 世界的代碼, 但能調(diào)用 secure 提供的特定的 API 接口, 以完成特定功能. 此團(tuán)隊(duì)拿到芯片時(shí), 芯片已 經(jīng)處于 TZ_Closed 狀態(tài). 在此狀態(tài)下, 開(kāi)發(fā) non secure 工程不受任何限制. 可以隨意 調(diào)試 NS 工程.
· 現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì): 產(chǎn)品到達(dá)終端客戶, 若出現(xiàn)任何問(wèn)題, 需要現(xiàn)場(chǎng)進(jìn)行技術(shù)支持.
對(duì)于這三個(gè)團(tuán)隊(duì), 需要授予不同的權(quán)限. 安全開(kāi)發(fā)團(tuán)隊(duì)需要授予平臺(tái)軟硬件完全訪問(wèn)的 權(quán)限. 且安全開(kāi)發(fā)團(tuán)隊(duì)可向 OEM 團(tuán)隊(duì)授予權(quán)限. 完全訪問(wèn)權(quán)限就包括了可完全回退+部分 回退, S+NS 調(diào)試.
OEM 開(kāi)發(fā)團(tuán)隊(duì)的權(quán)限應(yīng)該僅僅局限在 NS 部分, 不應(yīng)該影響其 NS 代碼的調(diào)試, 當(dāng)然回 退也不應(yīng)該限制. 僅需要限制其調(diào)試 S 代碼的權(quán)利. 因此, OEM 團(tuán)隊(duì)包括的權(quán)限應(yīng)該有: 完 全回退+部分回退, NS 調(diào)試. 除此之外, OEM 開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)可向現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)授予權(quán)限 的能力.
現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)的權(quán)限應(yīng)該僅限于回退的權(quán)利.而且僅能完全回退. 以便檢查硬件方面 的問(wèn)題.
針對(duì)這三個(gè)團(tuán)隊(duì)的授權(quán)情況, 引入三級(jí)證書(shū). 根證書(shū), 一級(jí)證書(shū)和二級(jí)證書(shū). 分別對(duì)應(yīng)這 三個(gè)團(tuán)隊(duì). 這種操作授權(quán)就放入到證書(shū)里邊.
如上圖所示, 安全開(kāi)發(fā)團(tuán)隊(duì)使用自己的根證書(shū)和根密鑰. OEM 開(kāi)發(fā)團(tuán)隊(duì)使用自己的一級(jí)密鑰和 一級(jí)證書(shū); 而現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)則使用自己的二級(jí)密鑰和二級(jí)證書(shū). 各自有自己的一套密鑰和證書(shū). 這里的密鑰是指私鑰. 那么這些密鑰和證書(shū)又是如何來(lái)的呢?
2.1. 密鑰和證書(shū)
這里的密鑰其實(shí)是指私鑰, 它和公鑰是一對(duì)的. 也就是說(shuō), 三個(gè)團(tuán)隊(duì)其實(shí)都有自己的密鑰對(duì). 在 做 DA 時(shí), 會(huì)使用到私鑰和證書(shū). 首先我們來(lái)看看這個(gè)密鑰對(duì)是如何來(lái)的呢?
如前文第一章節(jié)的前言部分, 我們就介紹了根密鑰對(duì)的來(lái)源, 它是由 TPC 工具內(nèi)在不同的路徑 下點(diǎn)擊 Regenerate 按鍵后生成的. 那么對(duì)于 OEM 開(kāi)發(fā)團(tuán)隊(duì)和現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)的密鑰對(duì), 也是 這么生成的. 當(dāng)然, 也可以通過(guò)第三方工具如 openssl 這類的工具生成. 我們將三個(gè)團(tuán)隊(duì)的密鑰(指 私鑰)分別叫做根密鑰, 一級(jí)密鑰, 二級(jí)密鑰. 它們是三個(gè)相互獨(dú)立的密鑰.
2.1.1. 根證書(shū)
如上圖所示, 根證書(shū)是安全開(kāi)發(fā)團(tuán)隊(duì)自己用私鑰對(duì)自己的公鑰以及操作許可簽名產(chǎn)生的. 這個(gè) 證書(shū)授權(quán)完全回退, 以及 S 調(diào)試+NS 調(diào)試.
它的生成正如前文第 1 章節(jié)如所描述, 生成的就是根證書(shū).
2.1.2. 一級(jí)證書(shū)
一級(jí)證書(shū)是由安全開(kāi)發(fā)團(tuán)隊(duì)負(fù)責(zé)生成, 但使用方卻是 OEM 開(kāi)發(fā)團(tuán)隊(duì). 也就是說(shuō), 它是由安全開(kāi) 發(fā)團(tuán)隊(duì)授權(quán)給 OEM 開(kāi)發(fā)團(tuán)隊(duì)的證書(shū).
如上圖所示, 它是拿 OEM 開(kāi)發(fā)團(tuán)隊(duì)的公鑰出來(lái), 用安全開(kāi)發(fā)團(tuán)隊(duì)的私鑰進(jìn)行簽名所產(chǎn)生, 再加
上授權(quán)許可. 它是安全開(kāi)發(fā)團(tuán)隊(duì)的根證書(shū)的子證書(shū):
2.1.3. 中間證書(shū)
中間證書(shū)也是一級(jí)證書(shū), 它也是由安全團(tuán)隊(duì)的根證書(shū)的子證書(shū), 由安全開(kāi)發(fā)團(tuán)隊(duì)授權(quán)而來(lái). 與一 級(jí)證書(shū)不同地是, 它只能用來(lái)派生二級(jí)證書(shū), 并不能直接拿來(lái)用, 比如 DA 回退, DA 調(diào)試. 它僅僅 用來(lái)頒發(fā)二級(jí)證書(shū), 給證書(shū)管理者用的.
如上圖所示, 中間證書(shū)是拿 OEM 開(kāi)發(fā)團(tuán)隊(duì)的公鑰, 用安全開(kāi)發(fā)團(tuán)隊(duì)的私鑰簽名產(chǎn)生, 再加上操
作許可信息. 它是給 OEM 開(kāi)發(fā)團(tuán)隊(duì)用的, 僅僅用于派生二級(jí)證書(shū). 它也是安全開(kāi)發(fā)團(tuán)隊(duì)的根證書(shū) 的子證書(shū).
2.1.4. 二級(jí)證書(shū)
二級(jí)證書(shū)是給現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)用的. 它是由中間證書(shū)派生而來(lái):
如上圖所示, 在從中間證書(shū)派生二級(jí)證書(shū)時(shí), 拿二級(jí)公鑰出來(lái), 用一級(jí)私鑰進(jìn)行簽名的, 再加上 操作許可信息. 二級(jí)證書(shū)生成過(guò)程完全是由 OEM 開(kāi)發(fā)團(tuán)隊(duì)負(fù)責(zé)的. 這里需要注意地是, 二級(jí)證書(shū) 是由中間證書(shū)派生而來(lái), 并不是由一級(jí)證書(shū)派生.
STM32H5 支持這三級(jí)證書(shū): 根證書(shū), 一級(jí)證書(shū), 中間證書(shū)和二級(jí)證書(shū), 其相互關(guān)系如下圖所示:
3. 動(dòng)手實(shí)驗(yàn)
3.1. 實(shí)驗(yàn)概覽
本實(shí)驗(yàn)將分別扮演安全開(kāi)發(fā)團(tuán)隊(duì), OEM 開(kāi)發(fā)團(tuán)隊(duì)和現(xiàn)場(chǎng)技術(shù)開(kāi)發(fā)團(tuán)隊(duì), 分別生成根證書(shū), 一級(jí) 證書(shū), 中間證書(shū)和二級(jí)證書(shū), 并驗(yàn)證此證書(shū)的有效性.
3.2. 安全開(kāi)發(fā)團(tuán)隊(duì)
安全開(kāi)發(fā)團(tuán)隊(duì)有以下幾個(gè)任務(wù) :
· 預(yù)配置 OBKey+芯片操作許可.
· 生成根證書(shū)
· 為 OEM 開(kāi)發(fā)團(tuán)隊(duì)生成一級(jí)證書(shū)
· 為 OEM 開(kāi)發(fā)團(tuán)隊(duì)生成中間證書(shū)
3.2.1. 預(yù)配置 OBKey+芯片操作許可
此過(guò)程與《STM32H5 DA 之初體驗(yàn)(帶 TrustZone)》的 3.2 節(jié)+3.4 節(jié)完全一致。這里不再贅 述。
3.2.2. 生成根證書(shū)
此過(guò)程與《STM32H5 DA 之初體驗(yàn)(帶 TrustZone)》的 3.3 節(jié)完全一致。這里不再贅述。
3.2.3. 測(cè)試根證書(shū)的有效性
此過(guò)程與《STM32H5 DA 之初體驗(yàn)(帶 TrustZone)》的第 4 章完全一致。這里不再贅述。
3.2.4. 為 OEM 開(kāi)發(fā)團(tuán)隊(duì)生成一級(jí)證書(shū)
為 OEM 開(kāi)發(fā)團(tuán)隊(duì)生成一級(jí)證書(shū)首先得拿到 OEM 開(kāi)發(fā)團(tuán)隊(duì)的公鑰. 關(guān)于 OEM 開(kāi)發(fā)團(tuán)隊(duì)如何 生成自己的公鑰私鑰對(duì), 請(qǐng)參考 3.3.1 節(jié).
如上 圖所示, 在 Certificate Role 處選擇 LEAF, 在 Issuer Private Key 處輸入根密鑰:
C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO- H563ZI/ROT_Provisioning/DA/Keys/key_1_root.pem, 用它來(lái)給證書(shū)簽名.
在 Leaf Public Key 處輸入 OEM 開(kāi)發(fā)團(tuán)隊(duì)的一級(jí)公鑰: C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Keys/key_2_intermediate_pub.pem
在 Settings 下設(shè)置開(kāi)放給 OEM 開(kāi)發(fā)團(tuán)隊(duì)的操作許可, 因?yàn)?OEM 開(kāi)發(fā)團(tuán)隊(duì)僅僅形式發(fā) NS
工程, 所以這里開(kāi)放完全回退+半回退, +NS Debug 權(quán)限.
然后在右側(cè) Input certificate for chaining 處輸入根證書(shū): C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64
在 Certificate file 出輸入需要生成的證書(shū)路徑及文件名: C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO- H563ZI/ROT_Provisioning/DA/Certificates/level1_cert_leaf.b64
最后點(diǎn)擊 Generate Certificate 按鍵生成一級(jí)證書(shū):
其中 level1_cert_leaf_chain.b64 為一級(jí)證書(shū)文件, 可發(fā)給 OEM 開(kāi)發(fā)團(tuán)隊(duì)用作 NS 工程調(diào)試和
完全回退+半回退.
3.2.5. 為 OEM 開(kāi)發(fā)團(tuán)隊(duì)生成中間證書(shū)
安全開(kāi)發(fā)團(tuán)隊(duì)還需要給 OEM 開(kāi)發(fā)團(tuán)隊(duì)生成中間證書(shū), 此證書(shū)是專門(mén)用來(lái)給下一級(jí)授權(quán)的, 即 生成二級(jí)證書(shū)用的.
如上圖所示, 在 Certificate Role 處選擇 INTERMEDIATE, 在 Issuer Private Key 處, 輸出 根密鑰 : C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO- H563ZI/ROT_Provisioning/DA/Keys/key_1_root.pem, 用它給證書(shū)簽名. 在 Intermediate Public Key 處, 輸入 OEM 開(kāi)發(fā)團(tuán)隊(duì)的公鑰 : C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Keys/key_2_intermediate_pub.pem
在下方 Settings 處, 我們僅僅選擇 Full, 即僅僅開(kāi)放完全回退權(quán)限. 這是由于此中間證書(shū)只 是給 OEM 開(kāi)發(fā)團(tuán)隊(duì)生成下一級(jí)證書(shū), 即給現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)用的, 它僅僅需要完全回退權(quán) 限即可.
在右側(cè) Input certificate for chaining 處輸入根證書(shū) :
C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64
在 Certificate file 處輸入生成的證書(shū)的路徑及文件名 : C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO- H563ZI/ROT_Provisioning/DA/Certificates/level1_cert_intermediate.b64
最后點(diǎn)擊 Generate Certificate 按鍵生成中間證書(shū) :
其中 level1_cert_intermediate_chain.b64 可發(fā)給 OEM 開(kāi)發(fā)團(tuán)隊(duì). 給他們生成下級(jí)證書(shū)用.
3.3. OEM 開(kāi)發(fā)團(tuán)隊(duì)
OEM 開(kāi)發(fā)團(tuán)隊(duì)主要是開(kāi)發(fā) NS 工程的團(tuán)隊(duì), 因此, 需要調(diào)試 NS 工程, 需要能回退到 TZ- Closed 的權(quán)限, 當(dāng)然完全回退權(quán)限也需要. 這些權(quán)限應(yīng)該包含在其對(duì)應(yīng)的一級(jí)證書(shū)內(nèi). 在生成 OEM 開(kāi)發(fā)團(tuán)隊(duì)自己的證書(shū)之前, OEM 開(kāi)發(fā)團(tuán)隊(duì)首先得擁有一套自己的公鑰私鑰對(duì).
3.3.1. 生成自己的公鑰私鑰對(duì)
如上圖所示, 用 TPC 打開(kāi) xml 文件 : C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml
然后在 Debug Authentication root key 下, 點(diǎn)擊 open, 打開(kāi) C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO- H563ZIROT_ProvisioningDAKeyskey_2_intermediate.pem 這個(gè)一級(jí)密鑰文件. 然后點(diǎn)擊 regenerate 按鍵, 重新生成一個(gè)密鑰對(duì):
這個(gè)密鑰就是 OEM 開(kāi)發(fā)團(tuán)隊(duì)自己的密鑰. 它的公鑰可以發(fā)給安全開(kāi)發(fā)團(tuán)隊(duì), 用來(lái)生成一級(jí)證 書(shū)和中間證書(shū)(請(qǐng)參考 3.2.4, 3.2.5 節(jié)).
當(dāng)然, 你也可以使用其它第三方工具, 比如 openssl 來(lái)生成自己的公鑰私鑰對(duì), 最終以 pem 文 件格式存在.
3.3.2. 測(cè)試一級(jí)證書(shū)的有效性
我們可以先在 provisioning 狀態(tài)下測(cè)試下完全回退.
如上圖所示, 輸入 OEM 自己的私鑰: C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIROT_ProvisioningDAKeyskey_2_intermediate.pem
同時(shí)輸入一級(jí)證書(shū): C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIROT_ProvisioningDACertificateslevel1_cert_leaf_chain.b64
選擇 Full Regression, 然后點(diǎn)擊 Execute 按鍵…
結(jié)果為可以完全回退成功.
接下來(lái)我們?cè)贉y(cè)試下此證書(shū)是否可以調(diào)試 NS 工程…
在 Open 狀態(tài)下, 我們燒一個(gè)測(cè)試程序: C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIExamplesGPIOGPIO_IOToggle_TrustZone
并修改芯片的選項(xiàng)字節(jié) TZEN=0xB4, SECWM2_STRT=0x7f, SECWM2_END=0x0
燒錄完固件后, 并確保此程序能正常運(yùn)行(兩個(gè) LED 燈來(lái)回閃爍)的情況下, 再切換到 provisioning 狀態(tài)下做 DA 預(yù)配置, 完了之后再切換到 closed 狀態(tài)下. 然后我們?cè)賴L試使用 STM32CubeIDE 調(diào)試 NS 工程.
修改 NS 工程的調(diào)試配置…
如上圖所示, 在 Key path 處輸入 OEM 開(kāi)發(fā)團(tuán)隊(duì)的私鑰:
C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIROT_ProvisioningDAKeyskey_2_intermediate.pem
在 Certificate path 處輸入一級(jí)證書(shū): C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO- H563ZIROT_ProvisioningDACertificateslevel1_cert_leaf_chain.b64
Permissions 處選擇 Debug Non Secure L1 Reset behavior 處選擇 None.
然后點(diǎn)擊 Debug 按鍵.. 之后在調(diào)試工具欄中點(diǎn)擊暫停
如上圖所示, 程序在 NS 工程的 while(1);已經(jīng)暫停了下來(lái), 這說(shuō)明使用一級(jí)證書(shū)調(diào)試 NS 工程 是 OK 的.
接下來(lái)我們嘗試使用一級(jí)證書(shū)進(jìn)行局部回退.
如上圖所示,進(jìn) STLink 斷開(kāi)的情況下,點(diǎn)擊 Discovery 后, 輸入 OEM 開(kāi)發(fā)團(tuán)隊(duì)的私鑰: C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIROT_ProvisioningDAKeyskey_2_intermediate.pem
在下面輸入框內(nèi)輸入一級(jí)證書(shū): C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIROT_ProvisioningDACertificateslevel1_cert_leaf_chain.b64
然后點(diǎn)擊 Continue 按鍵…
如上圖所示, 選擇 Partial Regression, 然后點(diǎn)擊 Execute 按鍵…
如上圖所示, 執(zhí)行成功, 并且 STLink 仍然保持連接, 此時(shí)查看狀態(tài)為 TZ-Closed 狀態(tài):
這表明使用此一級(jí)證書(shū)進(jìn)行半回退也是 OK 的.
3.3.3. 給現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)生成二級(jí)證書(shū)
在給現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)生成二級(jí)證書(shū)之前, 需要先拿到其公鑰(見(jiàn) 3.4.1 節(jié)). 然后使 TPC 生成 二級(jí)證書(shū):
如上圖所示, 在 Certificate Role 處選擇 LEAF, 在 Issuer Private Key 處輸入 OEM 開(kāi)發(fā)團(tuán)隊(duì)
的私鑰: C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Keys/key_2_intermediate.pem
在 Leaf Poblic Key 處輸入現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)的公鑰: C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Keys/key_3_leaf_pub.pem
然后在 Settings 處選擇給現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)開(kāi)放的權(quán)限. 需要注意地是, 由于中間證書(shū)都只有 Full Regression 的權(quán)限, 這里也就只能授權(quán)這個(gè)權(quán)限, 其它權(quán)限即便在這里點(diǎn)開(kāi)了, 也不會(huì)有實(shí)際 效果.
然后在右側(cè) Input certificate for chaining 處輸入中間證書(shū): C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Certificates/level1_cert_intermediate_chain.b64
接著在 Certificate file 處輸入需要導(dǎo)出的證書(shū)目錄以及文件名: C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Certificates/level2_cert_leaf.b64
最后點(diǎn)擊 Generate Certificate 按鍵生成二級(jí)證書(shū):
如上圖所示, 生成的 level2_cert_leaf_chain.b64 就是二級(jí)證書(shū), 就是需要發(fā)給現(xiàn)場(chǎng)技術(shù)支持 團(tuán)隊(duì)用的.
3.4. 現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)
現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)是負(fù)責(zé)現(xiàn)場(chǎng)給客戶進(jìn)行技術(shù)支持的, 往往需要將芯片完全回退, 以便檢查硬 件是否出現(xiàn)問(wèn)題. 因此, 需要完全回退的權(quán)限. 其證書(shū)僅僅需要此權(quán)限即可. 在生成對(duì)應(yīng)的二級(jí)證書(shū) 之前, 需要先擁有一對(duì)自己的公鑰私鑰對(duì).
3.4.1. 生成自己的公鑰私鑰對(duì)
與 3.3.1 節(jié)類似, 使用 TPC 自己的公鑰私鑰對(duì).
如上圖所示, 在 XML file 處輸入
C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml
在 Debug Authentication root key 處, 點(diǎn)擊 open 選擇
C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIROT_ProvisioningDAKeyskey_3_leaf.pem
最后點(diǎn)擊 Regenerate 按鍵生成密鑰對(duì):
如上圖, 其中的 key_3_leaf_pub.pem 文件為公鑰, 需要發(fā)給 OEM 開(kāi)發(fā)團(tuán)隊(duì)用來(lái)生成二級(jí)證書(shū)(見(jiàn) 3.3.3 節(jié)).
3.4.2. 測(cè)試二級(jí)證書(shū)的有效性
之前我們已經(jīng)將 NUCLEO-板回退到 TZ-Closed 狀態(tài), 可直接在此狀態(tài)下使用二級(jí)證書(shū)進(jìn)行完 全回退, 以驗(yàn)證二級(jí)證書(shū)的有效性.
如上圖所示, 在 STM32CubeProgrammer 中, 在 ST-Link 斷開(kāi)的情況下, 點(diǎn)擊 Discovery 按 鍵, 然后在 key File path 處輸入現(xiàn)場(chǎng)技術(shù)支持團(tuán)隊(duì)自己的私鑰: C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIROT_ProvisioningDAKeyskey_3_leaf.pem
在 Certificate File Path 處輸入二級(jí)證書(shū): C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIROT_ProvisioningDACertificateslevel2_cert_leaf_chain.b64
然后點(diǎn)擊 Continue 按鍵…
然后選擇 Full Regression, 最后點(diǎn)擊 Execute 按鍵…
最終完全回退成功.
這就驗(yàn)證了此二級(jí)證書(shū)的有效性.
至此, 根證書(shū), 一級(jí)證書(shū), 二級(jí)證書(shū)均已驗(yàn)證其有效性.
4. 其它問(wèn)題
在生成證書(shū)鏈過(guò)程中, 有涉及到中間證書(shū), 我們用它來(lái)生成二級(jí)證書(shū), 原則上中間證書(shū)只能用來(lái) 生成二級(jí)證書(shū), 其本身并不會(huì)直接使用, 那么這里有一個(gè)問(wèn)題, 直接使用中間證書(shū)能有效嗎? 我們 不妨來(lái)測(cè)試下.
4.1. 測(cè)試直接使用中間證書(shū)
在芯片 provisioning 狀態(tài)下, 我們給芯片做好預(yù)配置后, 可直接使用中間證書(shū)嘗試完全回退.
如上圖, 在 Key File Path 處使用 OEM 開(kāi)發(fā)團(tuán)隊(duì)的私鑰:
C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIROT_ProvisioningDAKeyskey_2_intermediate.pem
然后證書(shū)處輸入中間證書(shū): C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-
H563ZIROT_ProvisioningDACertificateslevel1_cert_intermediate_chain.b64
然后點(diǎn)擊 Continue 按鍵…
然后選擇 Full Regression, 最后點(diǎn)擊 Execute 按鍵…
之前在生成中間證書(shū)時(shí), 是給中間證書(shū)授權(quán)完全 回退的, 接下來(lái)看看實(shí)際測(cè)試結(jié)果…
如上圖所示, 實(shí)際測(cè)試結(jié)果為失敗. 由此可見(jiàn), 中間證書(shū)確實(shí)是不能直接拿來(lái)使用的.
4.2. 測(cè)試使用一級(jí)證書(shū)生成二級(jí)證書(shū)的有效性
之前我們是使用了中間證書(shū)來(lái)生成二級(jí)證書(shū), 如果我們直接使用一級(jí)證書(shū)生成二級(jí)證書(shū), 會(huì)怎 樣? 這個(gè)二級(jí)證書(shū)是否仍然有效? 我們接著來(lái)測(cè)試下.
如上圖所示, 在使用 TPC 生成二級(jí)證書(shū)過(guò)程中, 在右邊的 Certificate file 處輸入一級(jí)證書(shū)
C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-
H563ZI/ROT_Provisioning/DA/Certificates/level1_cert_leaf_chain.b64
時(shí), 會(huì)直接彈出錯(cuò)誤提示框, 且右下角 Generate Certificate 按鍵也是灰色的, TPC 不允許這 么操作. 實(shí)測(cè)通過(guò) TPC 是無(wú)法生成這種證書(shū)的.
更多相關(guān)信息請(qǐng)見(jiàn):DA 證書(shū)鏈之初體驗(yàn) https://share.eepw.com.cn/share/download/id/391492
評(píng)論