S32K344 用の高度なセキュア ブートを設定しようとしています。HSE SMRエントリインストールサービスのセットアップと実行中に、以下のエラーコードが混在して表示されます:HSE_SRV_RSP_INVALID_PARAM、HSE_SRV_RSP_NOT_SUPPORTED、HSE_SRV_RSP_NOT_ALLOWED。この件について、どなたかご教示いただけないでしょうか?よろしくお願いします!
私が使用しているアルゴリズムは、ECDSA P-256 + SHA2-256 です。
私は次のことを再確認しました:
命令キャッシュはオフになっています
データキャッシュはオフになっています
MPUがオフになっています
SMR領域は内部コードフラッシュ内にあるため、メモリマップされる
XRDC構成はデフォルト、SO HSEはコードフラッシュにアクセスできるはずです。
使用される公開鍵は検証のみに設定されています
スーパーユーザーアクセス権を持ち、CUST_DEL 状態にある
インストールサービスの前にSMRを消去しました
以下はコードの一部です。
#APP_BL_START_ADDR (0x00401000) を定義します
#APP_BL_SIZE (0x1000) を定義します
#定義 APP_BL_SIGNATURE_R_START_ADDR (0x0041ff00)
#APP_BL_SIGNATURE_R_SIZE (0x20) を定義します
#APP_BL_SIGNATURE_S_START_ADDR (0x0041ff80) を定義します
#APP_BL_SIGNATURE_S_SIZE (0x20) を定義します
// ECC公開鍵のキーハンドル
hseKeyHandle_t verif_key_handle =
(hseKeyHandle_t)GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM、0、0);
// 公開鍵をインポートする関数呼び出し、HSEは正常なステータスを返しました
// 署名スキームと署名用ハッシュアルゴリズムを設定する
hseAuthScheme_t 認証スキーム;
auth_scheme.sigScheme.signSch = HSE_SIGN_ECDSA;
auth_scheme.sigScheme.sch.ecdsa.hashAlgo = HSE_HASH_ALGO_SHA2_256;
// 復号化スキームを設定する。このCASEは、
// 暗号化/復号化
hseSmrDecrypt_t 復号化スキーム;
復号化スキーム.decryptKeyHandle= HSE_SMR_DECRYPT_KEY_HANDLE_NOT_USED;
hseSmrConfig_t smr_config = HSE_SMR_CFG_FLAG_INSTALL_AUTH;
// gs_bl_smr_entryは非キャッシュメモリ内に配置されています
gs_bl_smr_entry.pSmrsrc=(HOST_ADDR)APP_BL_START_ADDR;
gs_bl_smr_entry.smrSize = APP_BL_SIZE;
gs_bl_smr_entry.pSmrDest = 0;
gs_bl_smr_entry.configFlags = smr_config;
gs_bl_smr_entry.checkPeriod = 0;
gs_bl_smr_entry.authKeyHandle= verif_key_handle;
gs_bl_smr_entry.authScheme = auth_scheme;
gs_bl_smr_entry.pInstAuthTag[0]= (HOST_ADDR)(APP_BL_SIGNATURE_R_START_ADDR);
gs_bl_smr_entry.pInstAuthTag[1]= (HOST_ADDR)(APP_BL_SIGNATURE_S_START_ADDR);
gs_bl_smr_entry.smrDecrypt = 復号化スキーム;
gs_bl_smr_entry.バージョンオフセット= HSE_SMR_VERSION_NOT_USED;
// SMR インストール サービス、サービス記述子も非キャッシュ メモリ内にあります
hse_srv_desc_ptr->srvId = HSE_SRV_ID_SMR_ENTRY_INSTALL;
smr_entry_install_ptr->accessMode = HSE_ACCESS_MODE_ONE_PASS;
smr_entry_install_ptr->entryIndex = 0;
smr_entry_install_ptr->pSmrEntry = (HOST_ADDR)&gs_bl_smr_entry;
smr_entry_install_ptr->pSmrData = (HOST_ADDR)APP_BL_START_ADDR;
smr_entry_install_ptr->smrDataLength = APP_BL_SIZE;
smr_entry_install_ptr->pAuthTag[0] = (HOST_ADDR)APP_BL_SIGNATURE_R_START_ADDR;
smr_entry_install_ptr->pAuthTag[1] = (HOST_ADDR)APP_BL_SIGNATURE_S_START_ADDR;
smr_entry_install_ptr->authTagLength[0] = 256;
smr_entry_install_ptr->authTagLength[1] = 256;
// サービス記述子をhseに送信する
根本的な原因は、MPU が適切に無効化されていないことであることがわかりました。MPU が適切に無効にされると、これは機能します。