Hot Chips 34初日午後の後半はアカデミア枠になっているが、ここでArmの「Morello Evaluation Platform」が発表された。Morello Programはこちらでもちょっと触れているが、要するにセキュリティに対する新しい実装を設計段階から盛り込んでゆく研究プロジェクトであり、こちらのページにもあるように、英国のISCF(Industrial Strategy Challenge Fund)の中のDigital Security by Design(DSbD) Programを利用して行われているプロジェクトである。ただしArm単体ではなくケンブリッジ大とSRI Internationalとの共同であり、それもあってアカデミア枠での発表になったものと思われる。
MorelloのベースはCHERI(Capability Hardware Enhanced RISC Instructions)というケンブリッジ大の研究をベースとしたもので、今年初頭にArmはこのCHERIを実装したプロトタイプシリコンを出荷している(Photo01)。
まずMorelloの動機であるが、そもそもCPUの脆弱性と言われているものの7割ほどがメモリの取り扱いに関わるものであり、しかも以前からこれは指摘されていたものである。これを何とかしたい、という訳だ。
もともとArmでもArm v8.3-AでRCpc(Release Consistent processor consistent)とPointer Authentication、v8.4-AでMPAM(Memory Partitioning and Monitoring)、v8.5-AでBTI(Branch Target Identifier)と(Memory Tagging)、v8.6-AでEnhanced PAC2/FPAC(とPointer Authenticationの強化版)と次々にメモリ管理周りを強化しているが、もう少し根本的に対策が必要、という考え方からかCHERIの仕組みをプロセッサに取り込むことを行ったのが今回の発表になる。
さてそのCHERIの仕組みを1ページにまとめたのがこちら(Photo03)。
要するにCapabilityと呼ばれる新しい機能を付け加える形だ。Capabilityは直訳すれば「能力」だが、ここで言うのは「能力」というよりも「何が許されるか」のAttributeみたいなもの、と考えるのが正しいだろう。Load/Storeとか命令の処理も、このCapabilityに基づく形で処理が行われることになる。なんというか、これだけ見ていると古のiAPX 432の実装を彷彿させる。iAPX 432はアドレスがAddress Descriptorと呼ばれるデータ構造で示され、またデータはオブジェクトとして扱われるが、これを扱うのにCBA(Capability Based Addressing)と呼ばれる仕組みを使う必要があった。直接アドレスやデータを扱わないことで安全性を高める、という意味では近いものがあるのかもしれない。
話を戻すと、そのCHERIを使うためのコツがこちら(Photo04)で、すでにCHERIを利用するためのソフトウェアも色々開発されており、これらを利用する事でオーバーヘッドは最小に抑えられる、としている。
さてArmの今回の発表は、このCHERIを実装したプロトタイプのハードウェアと、これを利用するためのソフトウェア類をまとめて提供する、という点にある(Photo05)。
チップそのものはTSMCのN7で製造され、ダイサイズは109.9平方mmとそれなりに大きい(Photo06)。
先にPhoto02でCHERIでは128bitのCapabilityフィールドが追加されると説明されていたが、MorelloではこれにTagを付けた129bitに拡張。また転送データにもTagがつけられる構造になっている(Photo07)。
このTagとかCapability Fieldをどう使うかという話だが、MemoryのLoad/Saveが発生する際には自動的にCapabilityを確認し、ここで問題があったらFaultを発生する仕組みである(Photo08)。
もっともソフトウェアの側で命令ごとにいちいち実行できたかどうかを確認なんてしてられないので、何かしらスマートにFaultをハンドリングできる仕組みが求められるところだ。またCapability関連命令はすべてAtomicにするといった工夫もなされるとする。
Bound Checkのメカニズムはこんな感じ(Photo09)。
ハードウェアの実装はこうなる(Photo10)。
ここのアドレスは、流石に完全に自由な64bitアドレスという訳にはいかず、なので加減算では高速に実行できるが、それ以外の場合には一度アドレスの絶対値を求めて処理する必要がある、というのはまぁ理解できる。
PCCも129bitの表現になる(Photo12)。
これはまぁ仕方がないとは思うが、もう単純にPCをインクリメントとかが出来なくなるわけだ。当然メモリの構造も、MTE(Memory Tagging Extension)と同じようにTagの形で情報を保持する必要がある(Photo13)。
これを例えばECCのエリアを使うといった方法もあるが、このあたりは実装のトレードオフである、とする。
すでにこのMorelloにLLVMやFreeBSD、X11、KDEなどの移植が3か月で完了したとしている(Photo14)。
現時点ではこのMorelloはCHERIベースのカスタマイズ版AArch64ということで、既存のAArch64そのものとは互換性はない(一応Morelloは“Legacy” AArch64に基づくプログラムも実行できるが、逆にCHERI AArch64は他のArmコア上では動作しない)し、まだ研究プロジェクトの域を出ないからこれが近未来のArmコアにそのまま乗る訳でもないだろう。多分これが商用製品に乗るときには、Armv10-Aとかになりそうな気がする。ただArmがこれまで社内で独自に開発していた命令セットを、産学共同(ついでに言えばDARPAとかAFRS(Air Force Research Laboratory)の支援も受けているので、産学官共同というべきかもしれない)の形で開発するという方向に踏み切っているのはちょっと面白い。ちょっと地味な発表ではあるが、興味深いものであった。