こんにちは、
私は、 i.MX RT1050 MCUのセキュア ブートの実装に取り組んでおり、外部フラッシュにある第 2 段階のブートローダ用とアプリケーション イメージ用の2 つのイメージ認証を実現したいと考えています。
SRK、IMG、および CSF 証明書は、 NXP Secure Provisioning Tool (SPT)を使用して生成されます。
第2 段階のブートローダは、HAB を使用して ROM によって署名および認証されます。
アプリケーション イメージはブートローダの後に外部フラッシュに保存され、独立して更新できます (例: USB または OTA 経由)。
2 番目の状態のブートローダは、実行前にROM HAB APIを呼び出してアプリケーション イメージを認証します。
両方のイメージ (ブートローダー + アプリ) は同じ SRK/CSF キー セットで署名されています。
第 2 段階のブートローダー内で、次のように HAB 認証を呼び出します。
load_addr = (uint32_t)hab_authenticate_image_no_dcd(1, ivt_offset, image_start, バイト);
hab_image_entry_f hab_authenticate_image_no_dcd(uint8_t cid, uint32_t ivt_offset, uint32_t start, size_t バイト)
{
g_habrvtTree->authenticate_image_no_dcd(cid, ivt_offset, (void **)&start, (size_t *)&bytes, NULL) を返します。
}
認証は機能します。関数は有効なリセット ハンドラー アドレスを返し、イメージが正常に検証されたことを確認します。
認証が成功したら、hab_rvt_report_status() と hab_rvt_report_event() を使用して HAB のステータスとイベント情報をログを照会します。
認証は成功しますが、HAB_SUCCESS ではなくHAB WARNING が常に表示されます。
出力例:
Hab rvt レポート ステータス = 0x69、構成 = 0xcc、ステータス = 0x99
イベント情報 #0 を報告 -> 0xf0
[HAB イベント情報 #0] (44 バイト):
DB 00 2C 43 69 0A C0 00 CA 00 24 00 02 C5 1B 00 ...
HAB4 ドキュメントに従ってこのイベントをデコードすると、次のようになります。
0x69 → 警告
0x0A → サポートされていないエンジン
0xC0 → hab_rvt.run_csf() に記録されたイベント情報
シーケンス02 C5 1B 00は次のようにマップされます。
画像キー検証インデックス
プロトコル: HAB_PCL_CMS
エンジン: DCP
デフォルト設定
このことから、ROM が警告を報告しているのは、CSF 実行中に DCP エンジンを使用しようとしているが、DCP が適切に初期化されていないか、第 2 段階のブートローダ コンテキストで使用できないためだとわかります。
SDK を使用して DCP を手動で初期化しました。
(すべてのチャネルが有効でデフォルト設定の場合)
ただし、警告は引き続き表示されます。認証は成功しますが、イベント情報ログには引き続きサポートされていないエンジン (DCP)が報告されます。
プライマリ HAB 認証SSB プロセス中に ROM はどのように DCP を初期化して使用するのでしょうか?
この警告は、HAB ROM API を手動で呼び出すときに予想されるものでしょうか、それとも無害なものでしょうか?
こんにちは@BiHDeveloper
お問い合わせいただきありがとうございます!
さらに進む前に、Header_Engine を any にするように BD ファイルを手動で変更していただけますか?結果を教えてください
編集: 上記のように bd ファイルを更新した後、イメージを再度ビルドします。イメージのビルド ボタンをクリックすると、SPT によって BD ファイルが車載生成されることに注意してください。これを回避するには、プロジェクト ワークスペースから build_image スクリプトを手動で実行できます。次に、新しいイメージをプロセッサに書き込みます。
何か変化がありましたらお知らせください。
ディエゴ