TrustZoneを使用して、ハードウェアの複雑さとコストを最小限に抑えながらIoTデバイスのセキュリティを確保する方法

著者 Jacob Beningo

Digi-Keyの北米担当編集者 の提供

IoTエッジデバイスでは、組み込み製品で以前から必要とされているセキュリティとは別のセキュリティ対策を新たに講じる必要があります。暗号化やシステムセキュリティの専門知識を持たない電気工学分野に属する開発チームや開発者にとっては、セキュリティを理解して実際に実装しようとしても難しい場合が多々あります。

現代の開発サイクルにおいて、開発者が一からセキュリティ構築を始めたりセキュリティの専門知識を蓄えたりする余裕は、時間および予算の面でほぼありません。代わりに、既存のセキュリティソリューションを特定のニーズに合わせながら活用できます。

この記事では、Arm®のTrustZoneについて紹介します。TrustZoneは、マイクロコントローラベースのシステムの設計者から幅広い支持を得ている注目のソリューションです。また、TrustZoneをサポートするデバイスの例として、STMicroelectronicsのSTM32L5シリーズ マイクロコントローラを紹介し、連携する開発キットとともにTrustZoneを使用する方法を示します。

分離によるセキュリティの実現

安全な組み込みシステムの中核となる基本的な要素は、分離によるセキュリティを実現することです。これは、秘密鍵、ユーザーデータ、セキュア機能などの重要なデータ資産を、グラフィカルユーザーインターフェース要素やリアルタイムオペレーティングシステム(RTOS)などの一般的なデータおよび機能から分離する、という考え方です。ソフトウェアを分離させるために使用可能な方法はありますが、セキュリティ専門家の間で一致している見解は、組み込みシステムではハードウェアを分離しながらセキュリティを実装する必要がある、ということです。

ハードウェアを使用して分離を可能にする方法はいくつかあり、たとえばマイクロコントローラおよびセキュリティプロセッサを使用する方法、またはマルチコアプロセッサを使用して1つのコアをセキュアプロセッシング専用に割り当てる方法などが挙げられます。Armの新しいCortex®-M23、Cortex-M33、およびCortex-M55プロセッサでは、ハードウェアベースの分離機能、いわゆるTrustZoneがオプションでサポートされます。

Arm TrustZoneとは?

TrustZoneは、シングルコアのマイクロコントローラに実装されるハードウェアメカニズムで、実行環境がセキュアなメモリ/ペリフェラル/機能と、非セキュアなメモリ/ペリフェラル/機能に分けられます。また、それぞれの実行環境にはMPU(Memory Protection Unit)が含まれ、MPUを使用してメモリ領域をさらに分離することで、データ資産へのアクセスを狙う攻撃者を抑止する「玉ねぎ状の多層構造」を実現できます。

通常、組み込みシステムの開発者は各自のシステムを2つ以上のプロジェクトに仕切ります。それらの1つは非セキュア実行プロジェクトでユーザープロジェクトとも呼ばれ、もう1つはセキュア実行プロジェクトでファームウェアプロジェクトとも呼ばれます。TrustZone対応のマイクロコントローラはセキュアステートにブートしてシステムを起動してから、非セキュアステートに入りユーザーアプリケーションを実行します(図1)。

ハードウェアメカニズムにより分離を行うTrustZoneプロジェクトの図図1:TrustZoneプロジェクトは、組み込みソフトウェアをユーザープロジェクト(非セキュア)とファームウェアプロジェクト(セキュア)に分けるハードウェアメカニズムにより分離を可能にします。(画像提供:Arm)

ユーザープロジェクトは、ファームウェアプロジェクトおよびユーザープロジェクト間に作成されたセキュアゲートウェイを介してのみセキュア機能にアクセスできます。また、例外のトリガなしにはセキュアメモリロケーションにアクセスできません。

TrustZone対応開発ボードの選択

TrustZoneについて理解する最も簡単な方法は、TrustZoneに実際に触れて使い始めることです。そこで、まず開発者に必要なのは開発ボードを選ぶことです。マイクロコントローラのサプライヤ各社から各種の開発ボードが提供されていますが、その中からボードを選ぶとき注意すべきなのは、すべてのボードでTrustZoneが同じ方法で実装されてはいないので、慎重に見分ける必要があることです。

TrustZoneを試すために適する開発ボードの一例として、STMicroelectronicsのSTM32L562Eディスカバリキットがあります(図2)。

STMicroelectronicsのSTM32L562Eディスカバリキットの画像図2:STM32L562Eディスカバリキットには、オンボードセンサ、Bluetooth、I/O拡張ボードなどの各種機能が含まれるため、TrustZoneアプリケーションを簡単に試すことができます。(画像提供:STMicroelectronics)

この開発キットには、TrustZoneを初めて使用するときに役立つ多くのサポート機能が含まれています。たとえば、タッチ制御パネルを含む1.54インチ、240x240ピクセルのTFT LCDモジュール、Bluetooth Low Energy v4.1モジュール、iNEMO 3D加速度センサおよびジャイロスコープ、オンボードSTLINK-V3E、そしてI/Oおよびペリフェラル拡張用の各種機能などがあります。

TrustZoneを試すために適するもう1つの開発ボードには、STMicroelectronicsのNUCLEO-L552ZE-Q Nucleoボードがあります(図3)。

STMicroelectronicsのSTM32L552ZE-Q NUCLEO開発ボードの画像図3:STM32L552ZE-Q NUCLEO開発ボードには、TrustZone対応プロセッサ、ST-LinkV3、およびカスタム開発アクティビティ用の拡張ヘッダが含まれています。(画像提供:STMicroelectronics)

STM32L562Eディスカバリキットとは異なり、NUCLEO-L552ZE-Qは入門レベルの開発ボードで、ST-LinkV3、STM32L552VET6マイクロコントローラ、拡張ポート、およびLEDが含まれています。この開発ボードは、TrustZoneを試して独自のハードウェアコンポーネントにできるだけ早く組み込みたいと考える開発者に最適です。

NUCLEO-L552ZE-Qはオプション機能を幅広く備えてはいませんが、STM32L552VET6を搭載する点が注目されます。このマイクロコントローラのコアプロセッサはArm Cortex-M33で、浮動小数点ユニット(FPU)、最大512KBのフラッシュメモリ、256KBのSRAMを備えています。TrustZoneの上に他のセキュリティ機能もいくつか加えられており、固有のブートエントリによるルートオブトラスト、Trusted Firmware for Cortex-M(TF-M、Cortex-M用ファームウェア)によるセキュアなファームウェアインストールおよびセキュアなファームウェアアップグレードのサポートが含まれます。

両方の開発ボードとも、プロセッサにはTrustZone SAU(Security Arbitration Unit)が含まれており、SAUを使用して、どのメモリおよびペリフェラルをTrustZoneで保護するかを設定します。マイクロコントローラのサプライヤによっては、TrustZone実装にSAUが含まれていない場合もあります。これは必ずしも問題ではありませんが、TrustZoneの設定に別の手順が必要になります。

TrustZoneベースアプリケーションの初めての使用

STMicroelectronicsのいずれかの開発ボードを使用するには、いくつかの手順を実行し、ソフトウェアパッケージを用意する必要があります。最初の手順は、STM32CubeIDEのダウンロードです。STM32CubeIDEには、コンパイラ、マイクロコントローラパッケージ、アプリケーション開発用のIDE、および関連するアプリケーションノート(STM AN5394など)が含まれています。

既存のTrustZoneサンプルプロジェクトを使用することで、アプリケーションをすばやく稼働させることができます。いくつかのプロジェクトが、STM32Cube_FW_L5ソフトウェアパッケージの中に含まれています。このソフトウェアは、STM32CubeL5ソフトウェアの一部としてダウンロードできます。ダウンロードしたら、次のようなディレクトリパスにあるTrustZoneEnabledプロジェクトをインポートできます。

STM32Cube_FW_L5_V1.2.0\STM32Cube_FW_L5_V1.2.0\Projects\STM32L552E-EV\Templates\TrustZoneEnabled\

このプロジェクトをインポートすると、プロジェクトが階層的なプロジェクト構造になっており、その中でアプリケーションがセキュアなアプリケーションと非セキュアなアプリケーションに分かれていることがわかります(図4)。

階層的なプロジェクト構造で実装されているTrustZoneプロジェクトの画像図4:TrustZoneプロジェクトは階層的なプロジェクト構造で実装されており、セキュアなプロジェクトと非セキュアなプロジェクトが含まれています。(画像提供:Beningo Embedded Group)

これらのプロジェクトには、詳しく検討すべき要素が数多くあります。AN5394には詳細が多岐にわたり示されており、それぞれのプロジェクトのDocフォルダにあるreadme.txtファイルには、セキュアなプロジェクトと非セキュアなプロジェクトが詳述されています。この記事の主旨に合わせて、ここではTrustZoneに関連する最も重要な概念について検討します。具体的には、TrustZoneがどのように構成されているかです。構成については、次の場所にあるpartition_stm32L562xx.hファイルに含まれています。

C:\STM32Cube_FW_L5_V1.2.0\Projects\STM32L562E-DK\Templates\TrustZoneEnabled\Secure\Inc

このファイルには、SAUの設定が含まれています。例として、図5にSAU Region 0の設定を示します。現在この領域は、セキュアな実行に設定されています。一方、図6に非セキュアな設定の例としてSAU Region 1を示します。

セキュアな実行に設定されているSAU Region 0のコード図5:SAUを使用して、どのメモリ領域がセキュア領域および非セキュア領域かを設定します。上記のコードには、SAU Region 0をセキュアな実行に設定する方法が示されています。(画像提供:Beningo Embedded Group)

非セキュアな実行に設定されているSAU Region 1の画像図6:SAUを使用して、どのメモリ領域がセキュア領域および非セキュア領域かを設定します。上記のコードには、SAU Region 1を非セキュアな実行に設定する方法が示されています。(画像提供:Beningo Embedded Group)

開発者は、どの領域をセキュア領域および非セキュア領域に設定する必要があるかを決め、パーティションファイルを使用してSAUを構成します。これらの設定を行えばTrustZoneが有効になる、というわけではありません!TrustZoneベースのアプリケーションをターゲット上にプログラミングする場合、開発者はTZオプションバイトを1に設定してTrustZoneを有効にする必要があります。これで、起動時にTrustZoneが有効になり、SAUの構成が読み込まれて利用されます。

TrustZoneを使用するヒントとコツ

TrustZoneを初めて使用するとき、そのハードルは高くありませんが、開発者は各自のアプリケーション設計についての考え方を多少変える必要があります。TrustZoneを使用するいくつかの「ヒントとコツ」を次に示します。

  • すべてのデータを保護する必要はありません。保護が必要な重要なデータ資産を前もって特定します。
  • 既存のセキュリティフレームワーク、たとえばCMSIS-ZoneおよびTrusted Firmware for Cortex-M(TF-M)などを活用することで、開発を加速します。
  • デバイスに対する潜在的な脅威を慎重に調べ、それらの脅威からの保護に必要なハードウェアおよびソフトウェアソリューションをサポートするマイクロコントローラを選択します。
  • TrustZoneは、シングルレイヤの分離を可能にします。MPUなどのハードウェアメカニズムを利用することで、ハードウェアベースの複数の分離レイヤを形成します。
  • 実装時ではなくアーキテクチャフェーズで、セキュアなコードエレメントと非セキュアなコードエレメントを識別します。

これらの「ヒントとコツ」に従えば、IoTデバイスのセキュリティ対策に取り組む場合に大幅に時間を節約でき、悩み事が減ることでしょう。

まとめ

TrustZoneは、IoTの開発者がデバイスのセキュリティを確保してデータ資産を保護しようとするときに利用できる重要なツールです。安全なソリューションはさまざまな方法で実装できますが、これまで述べたように、TrustZoneは従来のソフトウェア開発モデルを可能にするシングルコアソリューションを開発者にもたらします。従来との唯一の違いは、セキュアおよび非セキュアなコンポーネント、データ、スレッドという観点でシステム開発を考える必要があることです。

免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、Digi-Key Electronicsの意見、信念および視点またはDigi-Key Electronicsの公式な方針を必ずしも反映するものではありません。

著者について

Jacob Beningo

Jacob Beningo氏は組み込みソフトウェアコンサルタントで、現在、製品の品質、コスト、市場投入までの時間を改善することで、ビジネスを劇的に変革するために数十か国以上のお客様と作業しています。同氏は、組み込みソフトウェア開発技術に関する200以上の記事を発表しており、引っ張りだこのスピーカーでありテクニカルトレーナです。ミシガン大学のエンジニアリングマスターを含む3つの学位を取得しています。気楽にjacob@beningo.comにメールするか、彼のウェブサイトwww.beningo.comから連絡してみてください。そして毎月のEmbedded Bytes Newsletterにサインアップしましょう。

出版者について

Digi-Keyの北米担当編集者