このドキュメントは、LPC55S6xデバイスのTrustZoneについて紹介するものです。
LPC55S6x MCUプラットフォームおよび汎用ブロック
このLPC55S69には、TrustZone、MPU、FPU、SIMD を備えた 100MHz Cortex-M33 コアが 1 つと、セキュリティ機能が有効になっていない 100MHz Cortex-M33 が 1 つあります。LPC55Sxxファミリには、100MHzコアを1つだけ実装する別のLPC55S66があります。コア 0 には、PowerQuad と呼ばれる DSP アクセラレータと CASPER と呼ばれる暗号化エンジンの 2 つのコプロセッサがあります。コアプラットフォームには、両方のコアからの同時実行と、他のマスターのペリフェラルやメモリへの並列アクセスを可能にするマルチレイヤーバスマトリックスがあります。メモリ・オン・チップには、最大640KBのフラッシュメモリ、最大320KBのRAM、および128KBのROMが含まれます。
タイマーには、5ビットから32ビットのタイマー、SCTimer/PWM、マルチレートタイマー、ウィンドウウォッチドッグタイマー、リアルタイムクロック(RTC)、マイクロタイマーなどがあります。各コアには、独自のサイスティックタイマーがあります。
通信インターフェースには、オンチップHS PHYを備えたUSBハイスピード、水晶発振器レスで動作可能なUSBフルスピード、WIFIカードとSDカードを同時にサポートする2つのSDIOインターフェース、最大50MHzのクロックレートの1つの高速SPI、最大8つのSPI、I2C、UART、または4つのI2Sをサポートする8つのFlexcommが含まれます。
アナログシステムには、1MSPSでサンプリングする16チャンネル16ビットADC、アナログコンパレータ、16チャンネル静電容量式タッチコントローラ、および温度センサが含まれています。
その他のモジュールには、プログラマブルロジックユニット、降圧DC-DCコンバータ、-40〜105°Cの温度範囲で1.71〜3.6Vの動作電圧が含まれます。

TrustZoneとは何ですか?
近年、IoT(Internet of Things)は、組み込みシステム開発者にとってホットな話題となっています。IoTシステム製品はより複雑化しており、システムのセキュリティを確保するためには、より優れたソリューションが必要です。
ARM® TrustZone®テクノロジは、セキュリティに対するシステムオンチップ(SoC)およびCPUシステム全体のアプローチです。TrustZone® for ARMv8-Mセキュリティ拡張機能は、超低消費電力の組み込みアプリケーション向けに最適化されています。これにより、セキュア・メモリへのアクセスとI/Oへのアクセスを信頼できるソフトウェアのみに制限する複数のソフトウェア・セキュリティ・ドメインが可能になります。ARMv8-MのTrustZone®:
TrustZone®は、Cortex M23およびCortex M33で利用可能なテクノロジーです。TrustZone®は、分離とアクセス制御を実装して、信頼できるソフトウェアとリソースを分離し、重要なコンポーネントの攻撃対象領域を減らす手段を提供します。作成された信頼できるファームウェアは、信頼できる操作を保護でき、重要なセキュリティサービスを保存して実行するのに最適です。また、コードは、信頼できるソフトウェアを強化および強化するために、信頼できるハードウェアを保護する必要があります。これには、暗号化アクセラレータ、乱数ジェネレータ、およびセキュアストレージのハードウェアアシスト用のモジュールが含まれます。ベスト プラクティスでは、このコードは小さく、十分にレビューされたコードであり、セキュリティ サービスの規定があることが要求されます。
LPC55S66 と LPC55S69 は、コア 0 を Cortex-M33 として実装し、TEE と TrustZone® のフル サポートを有効にしています。LPC55S69には、TZを使用したセキュアな環境を実装していない2つ目のCortex-M33(コア1)があります。孤立は基盤にすぎません。セキュリティとは、保護のレイヤーであり、ハードウェアとソフトウェアを追加してレイヤーを作成することです。
TrustZone®テクノロジーの特徴:
セキュアメモリと非セキュアメモリ
TrustZone®テクノロジーは、システムをセーフ(S)と非セキュア(NS)の2つの状態に分割し、対応するコマンドを使用して2つの状態を切り替えることができます。CPU の状態は、セキュリティ特権、セキュリティ保護非特権、特権 (ハンドラー)、または非特権 (スレッド) です。
セキュアメモリ空間は、さらにセキュアと非セキュアコール可能(NSC)の2つのタイプに分けられます。
以下は、Trustzoneメモリ領域(S、NS、NSC)の機能/プロパティです。
− セキュアなデータは、セキュアなコードによってのみ読み取ることができます
− セキュアコードは、セキュアモードのCPUによってのみ実行できます
− NSデータは、セキュアステートと非セキュアステートの両方のCPUからアクセスできます
− セキュアコードでは実行できない
− NSコードがSecure Gateway(SG)オペコードに分岐して実行するための特別な領域です。
アトリビューションユニット
Security SAU と IDAU の組み合わせにより、特定のセキュリティ属性 (S、NS、または NSC) が CPU0 の特定のアドレスに割り当てられます。デバイスアトリビューションユニット(DAU)は、次の図に示すように、IDAUインターフェースを介してCPU0に接続します。CPU0 からのアクセスは、そのセキュリティ ステータスと、IDAU と SAU によって設定されたセキュリティ属性に応じて、セキュア AHB コントローラによって、メモリとペリフェラルのさまざまなアクセス ポリシーをマークする特定のチェッカーと比較されます。すべてのアドレスは、セキュアまたは非セキュアです。ARMv8-M内部のSAUは、MPUと連携して動作します。LPC55S69 でサポートされている SAU リージョンは 8 つあります。
セキュア コードと非セキュア コードは 1 つの CPU で実行され、効率的な組み込み実装を実現します。非セキュア状態の CPU は、非セキュア プログラム メモリからのみ実行できます。非セキュア状態の CPU は、両方の NS メモリからのみデータにアクセスできます。セキュリティで保護された信頼されたコードについては、新しいセキュリティで保護されたスタック ポインターとスタック制限チェックがあります。S領域とNS領域には個別のメモリ保護ユニット(MPU)があり、各状態にはプライベートSysTickタイマーがあります。セキュア側は、割り込みのターゲットドメインを構成できます。
NXP IDAU (Implementation Specific Device Attribution Unit) の core 0 に対する ARM TrustZone の実装では、アドレス ビット 28 を使用して、アドレス空間を潜在的なセキュア領域と非セキュア領域に分割します。アドレス ビット 28 はメモリ アクセス ハードウェアではデコードされないため、各物理位置は、配置されているバスの 2 つの場所に表示されます。他のハードウェアは、任意のアドレスに対して許可されるアクセスの種類 (非セキュア呼び出し可能を含む) を決定します。IDAUは、アドレスビット28を使用して、2つの場所でメモリをエイリアシングできるシンプルな設計です。アドレス ビット 28 が = 0 の場合、メモリは非セキュアです。アドレス ビット 28 = 1 の場合、メモリはセキュアです。
SAU では 8 つのメモリ領域が使用でき、ユーザーは IDAU の固定マップをオーバーライドして、非セキュア領域を定義できます。デフォルトでは、すべてのメモリがセキュアに設定されています。IDAUを有効にするには、少なくとも1つのASU記述子を使用する必要があります。IDAUまたはSAUが地域をマークしている場合、その地域は安全です。NSCエリアは、IDAUのNSリージョンで定義できます。
たとえば、設計者はアドレスのビット [28] を使用して、メモリがセキュアか非セキュアかを定義でき、次のメモリ マップの例が得られます。
シンプルなIDAUで、重要なタイミング・パスを作成せずに済みます。(CM33はIDAU機能にほとんど許可しません)
0x0000_0000から0x1FFF_FFFFのアドレスはNS、0x2000_0000から0xFFFF_FFFFのアドレスです
アドレス Bit_28 = 0 の場合、非セキュア
アドレスBit_28 = 1 Secure の場合
すべての周辺機器とメモリは、2つの場所でエイリアス化されています。
SAU は、各メモリ領域の領域番号を定義します。領域番号は 8 ビットで、Test Target(TT) 命令によって使用され、ソフトウェアがメモリ内のオブジェクトのアクセス許可とセキュリティ属性を決定できるようにします。
SAU に含まれるリージョンの数は、0、4、または 8 のいずれかに構成できます。
注: SAU の非セキュア領域をプログラミングする場合は、セキュアなデータとコードが非セキュア・アプリケーションに公開されないようにする必要があります。
セキュリティ状態の変更
システムはセキュア状態で起動し、次の図に示すように、ブランチを使用してセキュリティ状態を変更できます。
セキュア状態から非セキュア状態への移行は、ターゲット アドレスの最下位ビット (LSB) が設定されていない BXNS 命令と BLXNS 命令を使用して、ソフトウェアによって開始できます。
注 : M プロファイル アーキテクチャは A32 命令セットをサポートしていません。これにより、アドレスの LSB でセキュリティ状態を示すことができます。
非セキュリティ状態からセキュリティ保護状態への移行は、次の 2 つの方法でソフトウェアによって開始できます。
セキュア ゲートウェイは、非セキュア コール可能 (NSC) リージョン内のセキュア ゲートウェイ命令 (SG) の発生です。非セキュア ステートからセキュア ゲートウェイに分岐すると、SG 命令はセキュア ステートに切り替わり、lr のリターン アドレスの LSB をクリアします。その他の状況では、SG 命令はセキュリティ状態を変更したり、返送先アドレスを変更したりしません。予約値 FNC_RETURN への分岐により、ハードウェアはセキュア状態に切り替わり、セキュア スタックの最上位からアドレスを読み取り、そのアドレスに分岐します。予約値 FNC_RETURN は、BLXNS 命令の実行時に lr に書き込まれます。セキュリティ状態の遷移は、割り込みの処理を通じてハードウェアによって発生する可能性があります。これらの遷移はソフトウェアに対して透過的であり、このドキュメントの残りの部分では無視されます。
TT 命令
ARMv8-M アーキテクチャでは、テスト ターゲット命令 (TT) が導入されています。TT 命令はメモリ アドレスを受け取り、そのアドレスにあるメモリ保護ユニット (MPU) の構成を返します。オプションの T フラグは、特権実行モードまたは非特権実行モードのアクセス許可を返すかどうかを制御します。セキュア状態で実行すると、この命令の結果は拡張され、特定のアドレスの Security Attribution Unit(SAU)およびImplementation Defined Attribution Unit(IDAU)の設定が返されます。MPU は、2 つのセキュリティ状態間でバンクされます。オプションの A フラグは、TT 命令がセキュア ステートから実行されるときに、TT 命令が非セキュア ステートの MPU を読み取るようにします。TT 命令は、さまざまなセキュリティ状態と特権レベルが指定されたアドレスのメモリに対して持つアクセス許可を確認するために使用されます。
ARM® TrustZone® に関するその他の有用な情報については、 次のリンクを参照してください。
https://developer.arm.com/ip-products/security-ip/trustzone
https://www.nxp.com/docs/en/application-note/AN12278.pdf