週刊アスキー

  • Facebookアイコン
  • Twitterアイコン
  • RSSフィード

組込用プロセッサにも高いセキュリティ機能が追加 「Cortex-M33/M23」

2016年10月28日 16時00分更新

 ソフトバンクの孫氏にちょっと話題を持って行かれた感じもある今回のARM TechConだが、メインの話題は新しい組み込み向けプロセッサのCortex-M23およびM33である。Cortex-Mシリーズは、コンピュータ以外の機器で利用する「組み込み」用のプロセッサだ。

 家電などプロセッサ(コントローラーと呼ばれることが多い)を組み込んだ製品は少なくないが、それ らの多くがこのCortex-Mシリーズを利用している。

Cortex-M33は、Cortex-M3/4相当となり、ARMv8-MアーキテクチャのMainlineを実装するプロセッサ

Cortex-M23は、Cortex-M0+相当のプロセッサコア。ARMv8-Mの最小実装であるBaseLineのプロセッサ

 2015年のARM TechConでは、その新しいアーキテクチャとなるARMv8-Mを発表した。スマートフォンなどで利用するARMv8-Aは、64bitアーキテクチャを含むが、ARMv8-Mは32bitのまま。しかし、これまでの組み込み向けプロセッサには無かった“セキュリティ”機能が強化されており、クラッキングやウイルスといった問題に対して強くなっている。

 まずCortex-M33は、従来のCortex-M3またはM4に相当し、Cortex-M23は、Cortex-M0+に相当する。ARMv8-Mでは、最低限の部分を定義したBaselineとフル定義のMainlineかあるが、Cortex-M23はbaseline、M33はMainlineを満たす。

Cortex-M系列のプロセッサコアは、前世代までは、フル実装のARMv7-M(Cortex-M3以上)と最小実装のARMv6-M(Cortex-M0/0+)に分かれていた。これに対してARMv8-Mでは、最小実装のbaselineとフル実装のMainlineが定義された。なお、ARMv6-Mは、従来のARMv6とは別にCortex-M0に対して定義されたアーキテクチャ

 ARM社の製品は、SoCを作るための設計データや特定のファウンダリーで製造するためのハードマクロ(簡単にいうと半導体製造のためのマスクパターン)などだが、これらはまとめて「IP」(知的財産)と呼ばれている。

 Cortex-M23/33コアに合わせ、SoC内のインターコネクトを作るためのIPとしてSIE-200と、インターコネクトや暗号化回路、IoT用の無線通信回路(Cordioというブランド名を持つ。ただしデジタル回路部分のみで高周波回路部分は含まない)などのIPやmbed OS、ドライバ類を含むSSE-200という製品も同時に発表されている。

Cortex-M用のTrustZoneに対応したSSE-200サブシステムには、SIE-200などのインターコネクトのIPや暗号化ハードウェアCryptoCellや無線ハードウェアCordioなどがある。また、mbed OSやライブラリ、ドライバなどのソフトウェアも含まれる

 ARM社のプロセッサのセキュリティ機能はTrustZoneと呼ばれているが、スマートフォンなどに利用するCortex-A(ARMv7/v8-A)と組み込み系のCortex-M(ARMv8-M)では、セキュリティモデルや実装に違いがある。

同じTrustZoneでもARMv8-A(Cortex-A。実際にはARMv7-Aも同じ)とARMv8-M(Cortex-M)では、セキュリティモデルが違う。TrustZone-Aでは、セキュアモニターを介して、セキュアとノンセキュア状態を遷移するが、TrustZone-Mでは、割り込みか特定のエントリポイントの呼び出しで遷移が行なわれてハードウェアが介在し、ソフトウェアは介入しない

 アプリケーションプロセッサであるCortex-AのTrustZoneでは、セキュリティモニターを経由してセキュアゾーンとノンセキュアゾーンを行き来する。また、OSでメモリ管理や仮想メモリなどが行なわれているため、他のプロセスのメモリを見ることも困難だ。

 これに対して、組み込み系では、OSが入らない場合もあり、また仮想メモリもない。このため、ARMv8-Mでは、System Secury Controlerと呼ばれるハードウェアが基本的なセキュリティを管理し、システム全体を「セキュア」領域と「ノンセキュア」領域に分割する。ソフトウェアはもちろん、プロセッサコアや周辺回路、メモリなどのハードウェアにも「セキュア」なものと、「ノンセキュア」なものに分割される。

 ソフトウェアから見ると、セキュアとノンセキュアの遷移は、割り込みか、セキュア側で予め定義されたエントリポイントの呼び出ししかできない。セキュリティの大部分をハードウェア化し、ソフトウェアの介入を最小になるようにしているのは、組み込み系の場合、CPU性能が高くないこともあるのに対して、リアルタイム性や一定時間内の応答が要求されるからだ。

 ARMv8-MのTrustZone(以後、便宜的にTrustZone-Mと表記する)では、メモリをセキュア、ノンセキュアに分割するが、仮想メモリを利用しないCortex-Mでは、物理メモリをアクセスする。しかし、SoC内では、絶対番地で指定された用途の決まった領域がある。

 たとえば、Cortex-Mでは、起動時や割り込みが発生した場合にゼロ番地から始まるベクターテーブル(アドレス表)を使って、対応するルーチンを実行する。前述のようにプロセッサコアにも「セキュア」と「ノンセキュア」がある場合、ここを共有してしまうと問題が起きる。

 まず、電源オンやリセットによりシステムが初期化されると、最初に起動するのはセキュアなプロセッサコアとなり、これは、物理メモリのゼロ番地にあるベクターテーブルを使って起動が行われる。セキュアコアは、SoCやセキュリティ関係の設定をし、これにより、System Security Controller(SSC)が設定され、以後のセキュリティ機能は、このSSCが中心になる。CPUコアからメモリへのアクセスに関しても、セキュア側のコアかどうかを判断して適切なメモリ保護を行なう。

TrustZone-Mに対応したSoCでは、多くのセキュリティ機能を「System Security Controller」(SSC)が制御する。RAM(メインメモリ)やフラッシュメモリ、メモリマッピングされている周辺回路などもセキュア、ノンセキュア領域に分かれる。メモリなどは、MPU(Memory Protection Unit)が実際の制御を行なうが、SSCがこれをコントロールしている

 これにより、ノンセキュア側のコアは、セキュア側に属するメモリ領域へのアクセスができなくなる。もともと、組み込み系では、アドレス空間がすべて埋まっているわけではなく、ところどころに何もない領域が挟まる。どこに何があるのかは、SoCの仕様であり、基本的には、SoCの仕様に合わせてプログラムを作るため、セキュア側のメモリやメモリマップされたデバイスが存在しないようになっても特に問題はない。仮想アドレスのようにアドレスが連続しているように全体をマッピングする必要はないわけだ。

 しかし,前述のベクターテーブルなどは、CPUアーキテクチャで定義されている利用方法の決まったアドレスであるため、そのままでは問題がある。TrustZone-Mでは、ノンセキュアコアのベクターテーブルの位置が変わる。

ノンセキュア状態でのメモリマップの例(実際の割り当てはSoCや設定で変わってくる)。斜線の入ったことろは、セキュア状態で利用するためノンセキュア状態のプロセッサなどからは見ることができない

 また、メモリ空間の上部にあるシステム制御用のレジスタは、やはりノンセキュアとセキュアでは違って見える。ただし、セキュア側からは、ノンセキュア側のレジスタ値を別のアドレスでアクセスすることが可能だ。

セキュア状態のプロセッサからみたメモリマップ。セキュア状態からは、ノンセキュア状態のメモリなどにアクセスすることができる

 Cortex-M23/33では、高いセキュリティ機能を手に入れたが、そのためには、TrustZone-Mに対応したコードを追加する必要があり、また、ノンセキュア側でも仕様の変更があるため、ある程度の変更が必要になる。

この記事をシェアしよう

週刊アスキーの最新情報を購読しよう