こんにちは、
私たちは、S32K342のHSEファームウェアのAB_SWAPメカニズムを利用してOTAアップデートを行うアプリケーションを開発しています。現在、フラッシュメモリのパッシブ領域への書き込みが完了した時点で、パッシブブロックをアクティブ化するように設定しています。
起動元イメージが破損していないか確認できるフォールバックの仕組みがあるのか、またリセット後にパッシブ領域になった「既知の有効」領域にフォールバックできるのか知りたいです。
これは、時にはリセットを出さずにパッシブ領域を上書きし、途中でプロセッサをリセットしてしまい、フラッシュの映像が破損してしまうことがあるためです。
やあ、 @lukaszadrapa 、
ご説明ありがとうございます。私たちはまだ、アプリケーションでどのタイプのセキュアブート戦略を使うべきかを理解しようとしています。高度なセキュアブートは、SMRとCRをインストールする必要があるため、少し複雑に思える。
一方、ベーシックセキュアブートはインストールがやや容易なようだが、具体的な実装方法やインストール手順は不明瞭なようだ。
これらの選択肢について何かアドバイスをいただけませんか?私はHSE Bリファレンス・マニュアルを指しており、これに関して参照すべき追加ドキュメントがあるかどうかも知りたいです。
よろしくお願いいたします。
シヴ
こんにちは、 @Shiv_peak さん。
数日前に非常によく似た質問に回答しましたので、そちらをご覧ください。
https://community.nxp.com/t5/S32K/S32K-OTA-Rollback/m-p/2400332/highlight/true#M60125
さらに詳しい情報が必要な場合は、遠慮なくお申し付けください。
よろしくお願いいたします。
ルーカス
下記の私のコメントをご覧ください。
この件について理解を深めるにあたり、いくつか補足させてください。
よろしくお願いいたします。
ルーカス
ルカスさん、返信ありがとうございます。おかげでよく分かりました!Basic Secure Bootの実装を始め、ご質問やご不明点があればご連絡いたします。
よろしくお願いいたします。
シヴ
「2.6.1.3」の項をご覧ください。HSEファームウェアのリファレンスマニュアルに記載されている「リカバリーモード」と記載されています。2.7.
つまり、2つのモードがあります。
JTAGベースのリカバリーモードでは、デバイスはRAM上で無限ループにハングする(このコードはSBAFによってRAMにロードされます)。ユーザーがデバッガに接続していくつかのリカバリーステップを実行できます。
セキュアリカバリーモード - これは属性 HSE_SECURE_RECOVERY_CONFIG_ATTR_ID によって有効にする必要があります。これはUTESTメモリにプログラムされたOTP属性であることに注意してください。これによりリカバリイメージが起動しますが、まずこれを検証する必要があります。つまり、基本的なセキュアブートに似ています。検証に失敗した場合は、JTAGリカバリモードに移行します。
セキュアリカバリモードは実行時のリカバリーやロールバックに使用できます。しかし、パッシブパーティションからこれを実行することはお勧めしません。すべてのコードはアクティブパーティションから実行される必要があります。ABスワップモードでは、いずれにせよ両方のパーティションにセキュアリカバリイメージのコピーが存在します。
別の選択肢としては、十分な空き容量があれば、このコードをデータフラッシュメモリに保存する方法もあります。
私たちはこのアプリケーションノートを提供します:
https://www.nxp.com/webapp/Download?colCode=AN13465
Secure Bootアプリケーションノートの最新バージョンv0.1.1.0です(AN744511)2021年にリリースされ、以下からダウンロード可能です:
https://www.nxp.com/products/S32K3
申請書はこちらでご覧いただけます:
ドキュメント -> Secure Files -> Secure Boot アプリケーションノート v0.1.1.0(AN744511)
関連するデモプロジェクトはこちらからダウンロードできます:
Design Resources - > ソフトウェア - > Secure Files - > SecureBootAppNoteDemo(SW745310)
ソフトウェアは更新されていないので、 興味があれば前述SW745310を使ってください。
セキュアブートの他の例は、HSEデモ例(推奨)で見つけることができます:
https://www.nxp.com/webapp/Download?colCode=S32K3_HSE_DemoExamples
高度なセキュアブート、基本的なセキュアブート、およびSHEセキュアブートの3つのモードすべてについて例があります。
一般的に、高度なセキュアブートモードが推奨されます。はい、このモードでセキュアブートを設定するのは簡単な作業ではありません。しかし、最高の保護性能と設定の柔軟性を提供します。利点は、好きな署名方式を選べ、複数の地域をカバーでき、セキュアブートが失敗した場合に異なる制裁を設定できることです。
一方、基本的なセキュアブートモードは常にGMACタグのみを使用し、これはADKPから派生したキーで計算され、1つの地域のみをカバーできます。失敗した場合、デバイスは直接リカバリーモードに移行します。
HSE DemoExamplesに掲載されている以下のプロジェクトを学習することをお勧めします。
S32K344_アドバンストセキュアブート
S32K344_ベーシックセキュアブート
これらは、それらにリンクされたアプリケーションS32K344_SecureBootBlinkyを保護するための構成プロジェクトです。
よろしくお願いいたします。
ルーカス
なるほど、これでよく分かりました。ありがとうございます!
私の理解では:
この件について理解を深めるにあたり、いくつか補足させてください。
実装と基板上でのテストを開始する前に、これらの点についてもう少し明確な情報を得たいと思っています。ご連絡いただき、疑問を解消してくださり本当にありがとうございます!
よろしくお願いいたします。
シヴ
ルーカスさん、分かりやすく説明してくれてありがとう。
I will look into the アプリケーションノート and the HSE demo examples and revert back in case of any queries.
よろしくお願いいたします。
シヴ
基本的なセキュアブートが失敗した場合に「デバイスがリカバリーモードに入る」とはどういう意味か、もう少し詳しく教えてもらえますか?これはつまり、コアはリセットから解放されず、フォールバックやリカバリーも存在しないということですか?
セキュアブートが失敗した場合に、別のイメージ(おそらくパッシブバンクにあるイメージ)を起動する機能を持たせたいので、この質問をしています。