LPC5500 MCUシリーズにおけるArm TrustZoneセキュリティの活用
Arm TrustZoneがNXPのLPC5500マイクロコントローラでセキュリティを強化する仕組みと、セキュア/ノンセキュアアプリケーションの実装方法を解説します。
コネクテッドデバイスの普及に伴い、高度な脅威も増大しています。NXPはLPC5500 MCUファミリに、FIPS準拠の乱数生成器、暗号化コード実行用の「Prince」暗号化エンジン、PUF技術による4096ビットのオンチップキー生成など、堅牢なセキュリティプリミティブを搭載しました。オンチップ暗号アクセラレータ「CASPER」と合わせて、これらのMCUはエンドツーエンドのキープロビジョニングと強靭なサイバーセキュリティを求める、ネットワークエッジのIoT展開に最適です。
この機能の中核をなすのが、Cortex-M向けArm TrustZoneです。以下のセクションでは、その基礎とプロジェクトでの活用方法を説明します。
Cortex-M向けArm TrustZone
TrustZoneは、セキュアワールドとノンセキュアワールドという2つの分離された実行コンテキストを作ります。セキュアワールドは独自または機密性の高いコードをホストし、ノンセキュアワールドはユーザーアプリケーション用です。メーカーの独自ライブラリをROMに配置し、リバースエンジニアリングから保護しながら、制御されたインターフェースを通じてアプリケーションコードから呼び出せるようにします。
図1は、同一シリコン上でセキュアROMとノンセキュアユーザーコードが共存する様子を示しています。
2つのワールド間の遷移はTrustZoneのセキュリティ拡張によって制御され、ノンセキュアアプリケーションは公開されたセキュア関数のみを呼び出せ、セキュアメモリには直接アクセスできません。
TrustZoneによるプロセッサモード
Cortex-M3とM4コアはスレッドモードとハンドラモード、それぞれに特権/非特権レベルを提供しますが、Cortex-M33ではTrustZoneが追加され、4つのモード(ノンセキュアスレッド、セキュアスレッド、ノンセキュアハンドラ、セキュアハンドラ)が生まれます。この分離により、各ドメイン専用のSysTickタイマーも導入されています。
メモリパーティショニング
TrustZoneはアドレス範囲にセキュリティ属性を割り当てます:セキュア(S)、ノンセキュア(NS)、ノンセキュアコーラブル(NSC)。各領域へのアクセスはコアの現在の状態に依存します。例えばLPC55S69では、ビット28が0のアドレスをノンセキュア、それ以外をセキュアとして扱いますが、プログラムメモリはSecurity Attribution Unit(SAU)で設定可能です。
セキュアアプリケーションの構築
セキュアコードは内部を直接公開しません。代わりにベニアテーブル(薄いレイヤーのノンセキュアコーラブル関数)を公開し、セキュアワールドへの呼び出しを仲介します。ベニアテーブルはNSCメモリに配置され、実装本体はセキュアメモリにあります。
典型的なセキュアプロジェクトは、オブジェクトライブラリとベニア関数を宣言するヘッダファイルにコンパイルされます。ノンセキュアアプリケーションはヘッダのみを含め、実行時にベニアテーブルがセキュアサービスへの呼び出しを仲介します。
ワールド間の遷移
状態切り替えには2つの特殊命令を使用します:
SG— コアをセキュアモードに切り替えます。BXNS— ノンセキュアモードに制御を戻します。
ノンセキュア呼び出しシーケンスは以下のようになります:
// ノンセキュアコード
SG(); // セキュアワールドに入る
SecureFunc(); // ベニア経由でセキュアサービスを呼び出し
BXNS(); // ノンセキュアに戻る
不正アクセスはSecure Fault例外を発生させ、システムの完全性を保ちます。
セキュアHello Worldの例
LPCXpresso55S69 SDKには、セキュアとノンセキュアのプロジェクトに分割されたTrustZoneデモが含まれています。セキュアプロジェクトは早期初期化呼び出しから始まります:
__attribute__((cmse_nonsecure_entry)) void BOARD_InitTrustZone(void);
この関数はSAU、IDAU、メモリパーティショニングを設定します。ノンセキュア側のmain関数は最小限ですべてのセットアップがセキュアドメインで処理されるため簡潔です:
int main(void) {
// 最小限のノンセキュアコード
return 0;
}
ノンセキュア側がセキュアサービスを必要とするとき、ベニア関数(例:PRINTF_NSE())を呼び出します:
void PRINTF_NSE(const char *format, ...) __attribute__((cmse_nonsecure_entry));
対応するセキュア実装はセキュアプロジェクトにあり、ベニアテーブルにエクスポートされます。
メモリパーティショニングツール
MCUXpressoのTEEパースペクティブでは、SAUとIDAUの設定用ビジュアルエディタを提供します:
左側のテーブルで各領域のセキュリティレベルを設定し、右側のマップで結果のパーティショニングを確認できます。
LPC5500におけるTrustZoneの意義
TrustZoneによりLPC5500は明確な関心事の分離を実現します:セキュアワールドが独自コードと暗号鍵を保護し、ノンセキュアワールドがユーザーアプリケーションをホストします。ハードウェアが不正メモリアクセスをブロックし、ソフトウェアインフラ(ベニアテーブル、SG/BXNS命令、TEEツール)がセキュアアプリケーション開発を簡素化します。
詳細については、NXPのウェビナー「TrustZone: Calling the Secure World」をご覧いただくか、公式ドキュメントを参照してください。
インダストリー記事は、業界パートナーがAll About Circuitsの読者に有用なニュース、メッセージ、技術を共有する形式のコンテンツです。編集コンテンツでは適さない形で情報提供を行います。すべてのインダストリー記事は厳格な編集ガイドラインの対象となり、読者に有用なニュース、技術的専門知識、ストーリーを提供することを意図しています。インダストリー記事で表明される見解と意見はパートナーのものであり、必ずしもAll About Circuitsやそのライターの見解を反映するものではありません。
クラウドコンピューティング
- クラウド革命:IT、セキュリティ、キャリアをどう変えるか
- なぜクラウドセキュリティが現代サイバー防御の要なのか
- クラウドセキュリティエンジニアへの道:スキル、責任、認定資格
- クラウドデータセキュリティがプログラマブルになる理由
- クラウドテクノロジーの保護:データ保護とリスク軽減のベストプラクティス
- クラウドセキュリティ完全攻略:リスク軽減と組織保護の実証済み戦略
- ハッカーがクラウド環境を標的にする手口とAWSセキュリティ強化策
- Google Cloudエンジニア認定資格をマスター:実証済みの学習戦略とインサイダーのヒント
- クラウドでのDevOps導入:デジタルトランスフォーメーションの実証済みブループリント
- エンタープライズリソースプラニング(ERP)のクラウド移行:成功への実証済みロードマップ
- パブリッククラウド導入でROIとセキュリティを最大化する