ArmのTrustZoneとは何なのか

須藤欧佑氏:僕からはArmのTrustZoneについて発表いたします。

まず簡単に自己紹介します。須藤欧佑と申します。LayerXのLayerX Labsに所属しており、ソフトウェアエンジニアをしています。主に暗号技術とか、TEE(Trusted Execution Environment)を用いたデータのプライバシー保護とか、データの改ざん耐性の手法の研究開発に取り組んでいます。

先日発表した「ブロックチェーンにおける次世代のプライバシー保護技術『Anonify』」というところでも、ArmのTrustZoneではありませんが、IntelのSGXでハードウェアのセキュリティ機能を用いたプライバシー保護技術をオープンソースで公開しました。

本日のアジェンダですが、TrustZoneは少しマニアックな内容になると思うので、TrustZoneの内容に入る前にハードウェアのIsolationという概念の全体像を説明して、そのあとにTrustZoneの具体的な内容に入っていこうと思っています。

本日のゴールは、ArmのTrustZoneとは何なのかとか、あとはその仕組みの概要とかを全体的に理解していただければなと思っています。

今回のTrustZoneにおける内容とか、あと使用している画像については、(スライド)下の「Programmer's Guide for Armv8-A」「TrustZone for Armv8-A」の公式のレファレンスを参考にしていますので、ぜひご参照ください。

Secure Hardware

ではさっそくハードウェアのIsolationのほうに入っていきたいと思います。Secure Hardwareとは何なのかというと、ここでは耐タンパ性を備える機密データの記録や暗号処理といったハードウェアを総称して「Secure Hardware」と呼んでいます。

機密性の高いデータの処理とか、あとハードウェアというものをハードウェアのセキュリティ機構で防いでしまおうといったものです。なので、OSとかハイパーバイザーとかっていうソフトウェアベースでは防げない攻撃というものを物理的に保護しようとする取り組みになっています。

(スライドの)下に代表的な例をがーっと図にまとめていろいろ挙げました。例えばHSMとはクラウド上でも使われていますが、TLSのオフロードを暗号処理としてHSMの中で送ったりとかもします。あとはTPMとかだと、WindowsのBitLockerとかのデータ暗号化とか、ここのTPMのプロセッサの中で暗号処理が行われたりとか。

AppleのT2 chipとかもその部類に入ります。今回のArmのTrustZone上で実装されるセキュリティ機能もこのアーキテクチャの上で使われています。最近のものでは、GoogleのTitanやYubiKeyなど、FIDO2とかのセキュリティキーの秘密鍵を安全に保持したいときは、こういったセキュリティキーを利用します。

あとは昔からあるSmartCardとか、あるいはSIMとかもセキュアハードウェアの部類に入っています。こういった物理的な攻撃とか、あるいはソフトウェアベースの攻撃とかを防ぐものになっています。

TEEの特徴とその種類

この中でとくにTrusted Execution Environment(TEE)についてなのですが、やりたいことは、CPU、ハードウェアレベルによって論理的にメモリを分離することです。

これらのほかのセキュアハードウェアと比べたときのTEEの大きな特徴というのが、物理的にはメモリを分離していなくて、CPUのコントロールによって論理的にメモリを分離していることです。

これによる大きなメリットは、Secure World、「Trusted State」とか「Secure World」などのソフトウェア部分をベンダではなく、我々アプリケーション開発者が実装することが可能というところです。これが大きな特徴になっています。

あとは、論理的にメモリを分離しているだけなので、実際の処理は汎用のCPU上で行なわれます。当然メモリの暗号化とか、あとはアクセスコントロールとかで多少のオーバーヘッドはありますが、基本的には高速で行なわれることになります。

一方でデメリットとしては、CPUの論理的な保護なので、完璧なセキュリティ対策はできず、キャッシュとかは共通化されていますので、そこのサイドチャネル攻撃への対策が現状の課題となっています。

さらにTEEの種類も複数存在します。冒頭でお伝えしたようにIntel SGX。今回のテーマとなっているArm TrustZone。あとはRISC-V上でもKeystoneというものがあったり、あとAMD SEVとかもあります。

Intel SGXは一番代表的というか、いろいろなところで使われたり、開発環境やSDKとかも一番整っているTEEなのかなと思います。実際にクラウド上でもAzure、IBM Cloud、Alibaba Cloudとかいろいろな場所で使えるTEEの技術になっています。

一方Arm TrustZoneはモバイルデバイス型のTEEを実装できるCPUとして広まっていまして、任天堂のSwitchとかにも搭載されていますし、さまざまなスマートフォン上のデバイスにも実装されています。

RISC-Vに関しては、まだ試験段階で、RISC-VのPMPという機能を使ったTEEとなっています。

AMD SEVは、ちょうど先日Google CloudでConfidential VMというインスタンスが発表されて話題になりましたが、そのConfidential VMのセキュリティ機能のベースがAMD SEVに由来するものとなっています。

TrustZoneのアーキテクチャ

ここまでがTEEの全体像、Hardware Isolationの全体像について紹介しましたが、ここからArm TrustZoneの話に入っていきます。

Arm TrustZoneは、MMUなどによってハードウェアレベルのアクセスコントロールを行なって、ハードウェアのリソース、メモリのリソースとかをNormal WorldとSecure WorldあるいはTrusted Worldに分離します。そして、機密性の高い暗号処理とか署名とか、あとは指紋とかパスワードとか、そういったセンシティブなデータの取り扱いをこっちのTrusted Worldですべて行なってしまおうと。ここのNormal WorldとTrusted Worldの境界は厳密にハードウェアレベルのIsolationで管理しようという思想になっています。

Normal WorldがSecure Worldのリソースに不正にアクセスできないようにコントロールされている一方で、Trusted Worldは逆にNormal Worldにアクセスできるようになっています。具体例としては、FIDO2における署名とかはTrusted Worldで処理が行なわれるかたちになります。

TrustZoneはCortex-AとCortex-Mのどちらにも対応していますが、アーキテクチャ的にはかなり違っています。

Cortex-AのほうはSecure Monitorのハンドラが唯一のエントリーポイントとなっていてレイヤーアーキテクチャになっています。一方で、Cortex-Mは低レイテンシの状態遷移を重視していますので、Secure Monitorのようなレイヤーアーキテクチャではなく、ハンドラ/スレッドモードとか言われるかたちになっています。

今回の内容はCortex-Aのアーキテクチャをもとに発表いたします。

さらに、TrustZone自体はこういったアーキテクチャの名前になっていて、その上でSecure OSと呼ばれる部分の実装としてTEEのいろいろな種類があります。

オープンソースではOP-TEEやTrustyとかがとても有名で、実際にソースコードが公開されています。コマーシャルなほうのベンダでもいろいろ開発されていまして、QTEEとかTrustedCoreといったものが、みなさまがお持ちのスマートフォンとかにも内蔵されるかたちで実装されています。

例外レベル

実際にそのTrustZoneのアーキテクチャとか、あとは例外レベルの概念がとても重要になってくるので、そこを中心にお伝えしていきます。

(スライドを示す)これは、ここまでの発表で何回か出てきた図ですが、例外レベルがArmではこのようなレイヤー構造に分かれています。

一番上のユーザーランドの部分がException Level、EL0で、x86だったらRing3に対応する部分になっています。次にEL1でRing0に対応する部分。EL2のハイパーバイザーとかでRing-1とかに対応する部分。もちろん厳密な対応ではありませんが、概要的にはx86とこのような対応関係になっています。

同じException LevelにSecure WorldとNormal Worldがそれぞれ分かれていて、Trusted OS、あるいはSecure OSとか、表記揺れがあって申し訳ないんですけれども、いろいろあります。

ここのNormal WorldとSecure Worldをどうやって橋渡しするか、命令を橋渡しするのかという部分になるんですけれども、ここのEL3のException Level、ファームウェアとか、x86だったらIntel MEとかSMMとか呼ばれるレイヤーの部分で橋渡しを行ないます。

Rich OSとかHypervisorからSMC命令という例外命令が吐き出されて、その例外に対する処理をSecure Monitorで受け取ってハンドリングして、そこでいろいろな処理を行なうことによって、Secure WorldのTrusted OSとかにハンドリング状態が移るかたちになっています。

では、実際にこの図の(1)から(5)までの内容をこれからお話ししていきます。

(次回へつづく)