2021年3月にArmがArmv9を発表した際に、Armv9で導入される「CCA(Confidential Compute Architecture)」と、そのCCAに含まれる「Realms」という概念について、夏頃に詳細が発表される予定という事をご紹介した。

その詳細であるが、6月23日(現地時間)に開催される「Linaro and Arm CCA Tech Event」にて、Deep DiveやCode Sampleが公開されることになった。このイベントに先立ち、Realmsの実装に関する一歩踏み込んだ説明がArmより行われたので、この内容をご紹介したい。

まず説明の総括がこちら(Photo01)。

  • Arm CCA

    Photo01:“Why”はすでに説明があった話である

CCA/Realmsは先の記事でも書いたようにArmv9のみに実装される(というか、Armv8との最大の違いがCCA)という事で、現在はソフトウェアの対応を進めている最中であり、これが一般的に使われる様になるのには向こう2~3年はかかるとArmでは見ている。

実際にソフトウェア実装の方式が根本的に変わってくる(特にシステムやカーネル廻り:ユーザー空間で動くアプリケーションは逆に変わらない)ため、この見積もりは妥当に思える。

そもそも論で言えば、Armはv4以降さまざまな命令拡張を繰り返してきており(Photo02)、今回のCCAもその一環である。

  • Arm CCA

    Photo02:以前のコレをもう少し詳細に説明したもの

この中でSecurity絡みで言えば、Armv4で導入されたTrustZoneに始まり、Armv7のVirtualization、Armv8のSecure EL2 Virtualizationと進化してきたが、v9でCCAというまったく新しいセキュリティ機能を導入した格好になる。

  • Arm CCA

    Photo03:もっともSecure EL2自体がArmv8.4-Aでの導入と割と最近なので、まだSecure EL2 Virtualizationに対応したHypervisorも少ないし、これに対応するSoCもそれほど多くない

さてそのCCAの概念図がこちら(Photo04)。

  • Arm CCA

    Photo04:このレベルの話は以前と大して変わらず

以前のスライドと同じであるが、要するに

  • 最初からSecureな扱いが必要なものは、専用領域で実行されるTrustZoneを利用する
  • 通常のアプリケーションは、基本的には非Secureな環境下で動作する
  • ただしRealmが利用できる環境の場合、それはTrustZoneと同じように、独立して稼働させられるようになる。 という感じだ。

この構図、ある意味コンテナに近い気がすると思ってMark Knight氏(Director of Architecture Product Management)に確認したところ、「コンテナの場合はHypervisorの管理下で、Non-Secureなメモリ空間をシェアする形で稼働するし、パーティショニングはSoftwareで行われるから、ハードウェア的なIsolationは不可能である」という返答があった。逆に言えば、いわばコンテナ的な実行環境をHardware Isolationの形で実行することで、より堅固なセキュリティ環境をアプリケーションに提供できる、ということになる。

ちなみになぜこれが? というと、TrustZoneは確かに堅固なセキュリティ環境を提供できる一方で、色々と制約も多い。昨今だと、例えばAIを使ってのデータ処理(Inference)や、そもそもIoTでセンサデータを集めるといった事も、そのデータそのものがCriticalなものという事があり得る。だからといってこうしたものを全部TrustZoneで処理する、というのは非現実的である。こうした処理をもっとSecureに、というのがCCAであり、その実装がRealmという訳だ。

そのRealmの実装に当たっては、新しく「RME(Reaml Management Extension)」が定義された。RMEはRealmそのものの稼働に加え、TrustZoneの稼働にも対応する。TrustZoneは上で書いたように、ハードウェアリソースそのものを物理的にIsolationすることで安全性を保つ仕組みだが、Realmの管理下ではそうしたリソースをTrustZoneに割り振る事で、最初からStaticにリソースを割り当てなくてもTrustZoneを実行可能になる、とする。

  • Arm CCA

    Photo05:イメージ的にはK8s(Kubernetes)のCCA対応版という感じだが、多分そういうとまたKnight氏に「違う」とか言われそうだ

このメモリ周りのTrustZoneとCCA(というかRealm)の違いが次の2枚(Photo06,07)である。

  • Arm CCA

    Photo06:TrustZoneとPage Tableの2段階Isolation

  • Arm CCA

    Photo07:以前はRoTとTrustZoneがほぼ一体だった気がするのだが、CCAではこれも分離された形だ

Trust Zone(+Secure EL2)の構成(Photo06)の場合、Secure Physical Addressに対してNon-Secureなアドレスからはアクセスできない、という形でIsolationされることになる。これに対してCCAでは、すべてにアクセスできるのはRoot(これは要するにRoTだと考えるのが妥当だろう)のみであり、仮にTrustZoneのContextであってもRealmで稼働中はRealmしかアクセスできないことになる。またメモリアドレスの保護に、新たにMMUにGPT(Granule Protection Table)が拡張された(というか、MMUのPage Tableとは別にGPTが新たに追加された?)形での実装が行われたとする。

この場合、非RealmとRealmの間の通信(or Realm同士の通信)をどうするか? という話だが、基本はRMM(Realm Management Monitor)が介在する格好になる。これは直接メモリアクセスをさせるのは危険という話であり、理解できる。気になるのはこの場合のパフォーマンスだが、そのあたりはRMMの実装次第なので現時点では何とも言い難い。

  • Arm CCA

    Photo08:非Realm環境からはDMI、別のRealmからはRSI経由でのデータ交換ということになる。このあたりのAPIは間もなく公開されるはずだ

具体的なAPIの詳細やRMMの実装などについては、冒頭で書いたイベントで公開される予定だ。またこれと同じタイミングでArmはCCAに関する資料をココで公開予定である(2021年6月23日22時時点(日本時間)ではまだ403が返ってくる)。