以前の記事にて,SiFiveのRISC-Vボードを調達した.これの上で(エミュレーションではなく)実際にRISC-V TEEを動作させてアテステーションなど色々と試したい.そのために先ずRISC-V TEEを調べる必要があったので,その調べた(調べている)内容を書き留めておく.
RISC-V TEE
RISC-Vはオープンソースの命令セットアーキテクチャ(Instruction Set Architecture, ISA)である.オープンソースというよりパテントフリーという言い方のほうが自然な気もするが.
権限分離
RISC-Vでは3つの基本的な特権レベルとしてMachineモード(M-mode),Supervisorモード(S-mode),Userモード(U-mode)が存在する.それぞれのレベルで実行可能な命令が異なる1.
| RISC-V Privilege Level | Ring Protection | What is running |
|---|---|---|
| U-mode | 2 | User app |
| S-mode | 1 | OS/Kernel |
| M-mode | 0 | FW/HV |
さらに,仮想化のためのHypervisor拡張2においては,権限レベルとしてHypervisor拡張Supervisorモード(HS-mode)と呼ばれる権限レベルが存在する.また,仮想化されたS-mode及びU-modeとして,仮想Supervisorモード(VS-mode)及び仮想Userモード(VU-mode)が用意されている.
メモリアクセス分離
物理メモリへのアクセス制御機構としてPhysical Memory Protection(PMP)機能が存在する(プロセッサ依存).PMP機能を持つハードウェアにおいては,M-modeからのみアクセス可能なレジスタ pmpaddr / pmpcfg に対し,保護したいメモリアドレス領域とアクセス権限を設定することで,メモリアクセス分離(memory access isolation)を実現する.
PMPはあくまでCPU↔DRAM間のメモリアクセス制御である.よってペリフェラルからDRAMへのDirect Memory Access(DMA)などは保護対象外である.これらに対するアクセス制御についてはInput/Output Physical Memory Protection(IOPMP)やSiFive WorldGuardなどの保護機構が提案されている.
なお,PMP機能の有無,PMPに利用可能なレジスタの個数等は,全てハードウェア実装に依存する.
TEE
上記の権限階層とPMPとにより,Arm TrustZone3におけるSecure Worldのような,メモリアクセス分離ベースのTrusted Execution Environment(TEE)を構成できる.すなわち,Machine ModeにSecurity Monitorを置き,これがPMPによるメモリアクセス分離を行いつつ,それより低い権限レベルにあるコンポーネントを監視する.これがRISC-V TEEである45.
RISC-V TEEは「RISC-Vの機能を組み合わせればTEEが実現できる」という概念レベルの話であり,標準的なTEEアーキテクチャが存在するわけではない.RISC-VベースのTEEにはKeyStone6,Penglai7,Sanctum89など様々な実装例/PoCが存在する.オープンソースならでは.ユーザからすればどれを使えば分からないという弊害しかない.
さらに,Hypervisor拡張を含む複数の拡張機能により,仮想化ベースのTEEであるConfidential VMを実現する試みもある.こちらについては命令セット等の機能拡張を伴うので,RISC-V Confidential VM Extension(CoVE)10として仕様策定が進められている.
ただしRISC-VはHardware Root of Trustを提供しない.すなわちRoT keyを焼き込むためのe-fuse(あるいはそれを含むようなコプロセッサ)などのanti-tamper storageは別途用意されなければならない.
実態
RISC-V TEEは,Machineモードというのが特権的なモードなのだから,そこにPMP/IOPMP管理などを担うSecurity Monitorを乗っけて,それより権限レベルの低いモードでOSやTrusted/Untrusted Appsを動作させればいいだろう,というシンプルな話であった.とはいえTEEにおいてシンプルな話ほど信用ならないものはない.
実際,実装が乱立しているという話からも分かるように,現状はSecurity Monitorなど全て自前で実装しなければならないのであって,かつリファレンス実装があるわけでもない.例えば,KeyStoneのSecurity Monitorは特定のプラットフォームに対してのみ実装されている11ため,別のプラットフォームで動作させるためにはSMの実装を移植する必要がある.地獄である.
ちなみにKeyStoneは開発がinactiveに移行している.
RISC-V TEE対応マシン
RISC-Vプロセッサを搭載した実機は無数にあるのだが,TEEを実現するために必要な機能をサポートする実機は限られている.例えば,Raspberry PiにはRISC-Vプロセッサを搭載したRaspberry Pi Pico 2というのがあるが,これはTEE capabilityを持たない.
SiFive
SiFiveはRISC-Vプロセッサを開発する米国のファブレス半導体企業である.前述のWorldGuardはSiFiveが開発してRISC-Vに譲渡されたものである.
SiFive Essential U74(RV64GC),SiFive S7(RV64IMAC),SiFive P550(RV64)などのコアIPを保有し,中国のESWINなどの半導体企業がこれを搭載したSoCを製造している.ESWIN EIC7700Xは,CPUとして4-core P550を,GPUとしてImagination Technologies AXM-8-256,さらに19.95TOPS@INT8のNPUを搭載したSoCである.
SiFiveは自社でもSoCをプロダクトとして展開しており,4-core U74と1-core S7という異種のコアを同居させたSoCであるSiFive Freedom U740や,データセンタ向けの32-core P870からなるSiFive BigSky SoC(TSMC製造)などがある.
SiFiveは自社IPのプロセッサ/SoCを搭載したシステムも販売している.前述のU740を搭載したSBCであるHiFive Unmatched Rev.B,ESWIN EIC7700X搭載のSBC HiFive Premier P550,さらにBigSkyを搭載したラックマウントサーバ BigSky SF-2U870などを展開している.
HiFice Unmatched Rev.BやHiFive Premier P550はRISC-V TEEの機能を一定備えている.前者ではKeyStoneの動作実績があり.さらに後者は研究レベルではあるものの仮想化ベースのTEEの動作実績1213もある.
Milk-V
Shenzhen MilkV TechnologyはRISC-Vプロセッサを搭載したSBCや開発ボードを製造・販売する深圳のメーカーである.
前述のESWIN EIC7700Xを搭載したMilk-V MegrezなどのSBCを販売している.とくにMegrezはプロダクトページでHypervisor拡張によるネイティブ仮想化のサポートを明示している.
-
RISC-V: "H" Extension for Hypervisor Support, Version 1.0. https://docs.riscv.org/reference/isa/v20260120/priv/hypervisor.html ↩
-
Sandro Pinto and Nuno Santos. 2019. Demystifying Arm TrustZone: A Comprehensive Survey. ACM Comput. Surv. 51(6), Article 130 (November 2019), 36 pages. https://doi.org/10.1145/3291047 ↩
-
須崎有康. RISC-Vのセキュリティ技術, RISC-V Days Tokyo 2021 Spring. [slide] [video] ↩
-
Annika Wilde, Samira Briongos, Claudio Soriente, and Ghassan Karame. 2026. On Securing the Software Development Lifecycle in IoT RISC-V Trusted Execution Environments, SenSys 2026. https://doi.org/10.1145/3774906.3802779 ↩
-
KeyStone, GitHub repository. https://github.com/keystone-enclave/keystone ↩
-
Penglai-Enclave-sPMP, GitHub repository. https://github.com/Penglai-Enclave/Penglai-Enclave-sPMP ↩
-
Victor Costan, Ilia Lebedev, and Srinivas Devadas. USENIX Security 2016. Sanctum: Minimal Hardware Extensions for Strong Software Isolation. https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/costan ↩
-
Sanctum, GitHub repository. https://github.com/pwnall/sanctum ↩
-
RISC-V CoVE, GitHub repository. https://github.com/rivosinc/cove ↩
-
Keystone Security Monitor, GitHub repository. https://github.com/keystone-enclave/keystone/tree/73aeab79b97f4cea3e418897841e5534fc978f4b/sm ↩
-
Taro Kito, Ryosuke Yamamoto, Keisuke Horii, Hiroki Masuda, Koichi Mouri. Violet: Enabling Full Virtualization for M-mode RTOS on RISC-V, arXiv preprint. https://arxiv.org/abs/2609.09833 ↩
-
Violet, GitHub repository. https://github.com/nekomaru0510/Violet ↩