Cortex-M33のTrustZoneを実験する[第1章]


■第1章 TrustZoneはOFFになっている

●はじめに
 TrustZoneとは,アドレス空間をセキュアとノンセキュアに分別して,セキュア領域にある重要なデータを,ノンセキュア領域から守る技術です.実際には,決められた手順を踏めばノンセキュア領域からセキュア領域へのアクセスは可能なのですが,その手順を踏まないマルウェアなどのタスク(これらはノンセキュア領域で実行されている)がセキュア領域をアクセスしうようとするとフォルト例外が発生します.

 このTrustZoneの挙動を評価ボードで実験するというのが本稿の趣旨です.評価ボードは,ここではST マイクロエレクトロニクスの「STM32U5」(CPUはCortex-M33)を搭載したNucleoボードを使用します.このボードを選んだ理由は,単純に,TrustZoneが使えるCortex-M33を搭載しているSTM32マイコンが載ったボードだからです.トランジスタ技術の2023年9月号ではSTM32H5を搭載したNucleoボードでTrustZoneの実験を行っていました.このSTM32H5評価ボードは約8,700円(2023年7月)でした.今回,使用するボードの価格は約3,600円(2023年10月)です.

●Nucleoボードの概要
 写真1に今回使用するNucleoボードの概要を示します.Nucleoボードの型番はNUCLEO-U575ZI-Qで,STM32U575ZIT6-Qという144ピンQFPのSTM32U5マイコンを搭載しています.


写真1 NUCLEO-U575ZI-Qの外観(1)

 ボード自体は,電源回路,デバッグ用のSTLINK,PCと接続用のUSB(micro-B)コネクタ,LED,Aruduino互換ピン・ヘッダを搭載しているシンプルなものです.

 STLINKを搭載しているので,PCとNucleoボードをUSBで接続すると,STM32U5内蔵のフラッシュ・メモリに書き込むためのMSD(マス・ストレージ・デバイス)のウィンドウが開きます.このMSDウィンドウにヘキサ・ファイルをドラッグ&ドロップすればソフトウェアをSTM32U5の内蔵フラッシュ・メモリに書き込んで実行することができます.しかし,今回はSTM32CubeIDEという統合開発環境を使って,そこで作成したソフトウェアをSTM32U5のフラッシュ・メモリにダウンロード(書き込み)しますので,今回はこのMSDウィンドウは必要はありません.

●ソフトウェアを開発する手順
 STM32CubeIDEでソフトウェアを開発するためには,STマイクロエレクトロニクスのウェブ・サイトから次をダウンロードして,パソコンにインストールする必要があります.

  • STM32CubeIDE(STM32用統合開発環境)(2)
  • STM32プログラマ(内部メモリのプログラマ)(3)

 ここでつまずきやすいのですが,STM32CubeIDEだけでいいのではないかと思いますが,NUCLEO-U575ZI-Q(Nucleoボード一般)で,デフォルトではTrustZoneの使用がオプション・バイトと呼ばれるメモリ領域の設定で「使用禁止(無効)」になっています.

 つまり,オプション・バイトを書き換えてTrustZoneを許可しないと,TrustZoneのプログラムは実行できないのです.このオプション・バイトを書き換えるツールがSTM32プログラマなのです.

 統合開発環境のSTM32CubeIDEの選択理由は,IARのEWARMやArm Keil MDKの評価版もありますが,使用期間が2週間に限られたり,作成できるコード・サイズが32Kバイトに限定されていたり,するのでSTM32CubeIDEを選択しました.

●TrustZoneをONにする手順
▼1.STM32プログラマを起動する
 PCとNucleoボードを接続した状態でSTM32プログラマを起動すると図1のような画面が現れます.


図1 STM32プログラマの起動画面

▼2.オプション・バイトのタブを選択する
 STM32プログラマの起動画面の左端にある「OB」と書かれたアイコンをクリックします.すると図2のような画面になります.


図2 オプション・バイトの設定画面

▼3.TrustZoneを許可する
 オプション・バイトの画面で「User Configuration」のタブをクリックすると図3のような画面になります.ここでTZEN(TrustZone Enable)の右の四角にチェックを入れてください.図3ではチェックを入れた状態になっています.


図3 TrustZoneを許可する

▼4.SECWM(Security Watermark)を変更する
 オプション・バイトでTrustZoneを許可するだけではTrustZoneが使えるようになりません.SECWM(Security Watermark:セキュリティ透かし)とは,フラッシュ・メモリの領域をセキュアかノンセキュアかに分ける境界線を指定します.これはSTM32マイコン独特の機能であり,IDAU,SAU,GTZCの機能とは別物です.デフォルトでは全領域がセキュアになっていますから,TrustZoneを使用するためにはノンセキュアな領域を作ってやる必要があります.

 フラッシュ・メモリはバンク1とバンク2に分かれていますから,バンク1(SECWM1で設定)とバンク2(SECWM2で設定)の両方で設定を変更します.バンク1の設定はオプション・バイトの「Secure Area 1」タブ(図4),バンク2の設定はオプション・バイトの「Secure Area 2」タブ(図5)で設定します.その設定値は,次となります.

  • SECWM1_PSTRT=0x0, SECWM1_PEND=0x7F // バンク1をすべてセキュアに設定
  • SECWM2_PSTRT=0x1, SECWM2_PEND=0x0 // バンク2をすべてノンセキュアに設定

 図4図5は設定後の値を示しています.


図4 バンク1のセキュリティ設定(すべてセキュア)



図5 バンク2のセキュリティ設定(すべてノンセキュア)

 STM32U5のフラッシュ・メモリは次になります.

  • バンク1が0x0800 0000 - 0x080F FFFFの1Mバイト
  • バンク2が0x0810 0000 - 0x081F FFFFの1Mバイト

 各バンクとも8Kバイトのページが128個あり,SECWMは連続したページ単位で設定できるようです(4)




(1)STMicro,STM32U5 Nucleo-144 board (MB1549),UM2861
(2)STM32用統合開発環境
(3)STM32CubeProgrammer software for all STM32
(4)STMicro,STM32U575/585 Arm-based 32-bit MCUs Reference manual,RM0456

CQ connect とは

 「CQ connect」は,CQ出版の雑誌/書籍/評価キットの購読者,Webサイトの閲覧者,セミナ/イベントの参加者などを対象としたオンライン・サポート・サイトです.会員限定のコンテンツやプレゼント企画なども用意しています.
 CQ出版の商品やサービスをより深く楽しんだり,有効に活用していただくために,「CQ connect」への会員登録をお勧めします.

CQ出版社オフィシャルウェブサイトはこちらからどうぞ

CQ出版の雑誌・書籍のご購入は,ウェブショップで!

CQ出版の電子書籍(PDF版)のご購入は,Tech Village書庫&販売で!


CQ出版社 書籍・雑誌新刊


近日発売

トランジスタ技術 2025年 7月号

ソニーの超小型コンピュータSpresense

POWER ELECTRONICSシリーズ

スイッチング電源[3]LLC共振コンバータの設計

Interface 2025年 7月号

プログラム改善ビフォーアフター[技100]

別冊CQ ham radio QEX Japan No.55

巻頭企画 八重洲無線 SCU-LAN10+αで作るパーフェクトなリモート環境

CQ ham radio 2025年 6月号

初夏の電波伝搬攻略ガイド