アップデート一覧に戻る
New releaseJul 26, 2026

mojo-v mojov-v1.02

ML-KEM-512鍵カプセル化とSIMON-128暗号化を用いたハードウェア強制型秘密計算のためのRISC-V ISA拡張であり、ネイティブに近いパフォーマンスでデータ非依存実行を可能にします。

共有

Mojo-V Logo

Mojo-V: RISC-V向け秘密計算

Mojo-V(“mojo-five” と発音)は、RISC-Vにプライバシー指向のプログラミング機能をもたらす新しいRISC-V拡張機能です。Mojo-Vは秘密計算を実装し、脆弱なソフトウェアやプログラマの信頼に依存することなく、安全・効率的・データ非依存(data-oblivious)な実行を可能にします。機密データを専用のシークレットレジスタに隔離し、第三者鍵でメモリを暗号化することで、Mojo-Vは情報漏えいを防ぎ、ブラインド(直接的な漏えいなし)かつサイレント(サイドチャネル漏えいなし)な計算を強制します。この設計は、モードビット1つと新しい命令4つのみで既存のRISC-V ISAにシームレスに統合され、すべてデコード時に強制されます。初期の結果では、完全準同型暗号(FHE)と比較して5〜7桁以上の性能向上を実現しつつ、ネイティブに近い実行速度を示しています。CPU、GPU、専用アクセラレータへの統合に向けた明確なロードマップもあります。

詳細はこちら...

現在のMojo-V ISA拡張仕様(リリース1.02):

Mojo-Vの開発者への連絡先:

🧩 Mojo-Vリファレンスプラットフォーム — リリース1.03

🚧 プロジェクトの状況

Mojo-Vリファレンスプラットフォーム リリース1.03は、RISC-V RV64GC向けのリファレンスSpikeシミュレータプラットフォームと、Mojo-V ISA仕様v1.02向けのEXOコンパイラを実装しています。現在の実装は、高速・強力・証明運搬(proof-carrying)暗号化モードに加え、暗号化された計算結果の安全な開示と認定乱数生成をサポートしています。このリリースには、多種多様なMojo-Vテスト、プライバシー指向ベンチマーク、安全な開示のためのデモンストレータアプリケーションが含まれています。また、完全なMojo-V ISA仕様と開発者向けドキュメントも含まれています。

本リリースは、i) Mojo-Vアプリケーション開発プラットフォーム、ii) Mojo-Vハードウェア実装を検証するためのゴールデンモデル、iii) セキュリティ解析のためのリファレンス実装として使用することが適切です。現在の作業は、i) LLVMベースのMojo-Vコンパイラ、ii) アーキテクチャ探索・解析のためのgem5ベースのMojo-Vモデル、iii) Mojo-V拡張を備えたRISC-V RV64GCのリファレンスCVA6 SystemVerilog RTL実装の開発に焦点を当てています。

仕様バージョン: 1.02 (2026年8月)
連絡先: [email protected]

現在のコンポーネント

  1. Mojo-V ISA仕様 v1.02

    • doc/ にリリースされています。
  2. Mojo-V拡張機能を備えたSpike(命令セットシミュレータ)

    • Mojo-Vは riscv-isa-sim に統合され、データコントラクト読み込み用のML-KEM-512鍵カプセル化と、秘密計算保護用のSIMON-128対称鍵暗号化を備えたRV64GC CPU向けに機能完全となっています。
    • Mojo-V拡張機能を有効にしてSpikeを実行するには、spike の実行時に --isa=rv64gc_zicond_zkmojov_zicntr フラグを追加します。
  3. データコントラクトマルチツール

    データコントラクトは暗号化されたパケットであり、Mojo-V CPUのハードウェアがMojo-V暗号化データセットのデータアクセス鍵と設定情報(例: メモリ暗号化モード)にアクセスできるようにします。DCマルチツールは以下の機能を提供します。

    • ハードウェア開発者は、公開/秘密のML-KEM512鍵ペアを作成できます: 公開鍵はサービスプロバイダと共有され、秘密鍵はMojo-Vハードウェア実装に埋め込まれます。
    • データ所有者はデータコントラクトを作成し、サービスプロバイダの公開ML-KEM512鍵で暗号化できます。対応するMojo-Vハードウェアは、保護された第三者暗号化データに対して秘密計算を実行できます。
  4. Mojo-V Bringup-Bench ベンチマーク

    • RV64GC+Mojo-V向けのセキュリティテスト一式
    • RV64GC+Mojo-V向けの完全性攻撃テスト一式
    • EXOコンパイラライブラリテスト一式
    • EXO数学ライブラリと文字列ライブラリのテスト一式
    • EXO Mojo-Vコンパイラライブラリを使用して構築された多数のプライバシー指向ベンチマーク
    • 安全な開示デモンストレーションアプリケーション一式
    • 認定TRNGデモンストレーションアプリケーション一式
    • Mojo-Vの秘密計算の動作を示す手書きコード例(例: バブルソート)

なお、Bringup-benchベンチマークの残りの部分はまだMojo-Vに移植されていません。

⚙️ Mojo-Vリファレンスプラットフォームのビルドと実行

A. RISC-V LLVMコンパイラをインストールする

RV64GC バイナリを生成できるLLVMベースのRISC-Vクロスコンパイラが必要です。

ここから始めるのが良いでしょう: https://github.com/openssl/openssl

B. OpenSSLバージョン3.6以降をインストールする

OpenSSLバージョン3.6以降の開発者向けインストールが必要です。これにより、Spikeが保護された鍵交換に使用するML-KEM512を実装するライブラリが提供されます。

ここから始めるのが良いでしょう: https://clang.llvm.org/get_started.html

C. Mojo-Vリポジトリをクローンする```bash

git clone https://github.com/toddmaustin/mojo-v.git cd mojo-v

### D. Mojo-V対応のRISC-V Spikeシミュレータをビルドする```bash
sudo apt-get install device-tree-compiler libboost-regex-dev libboost-system-dev
cd riscv-isa-sim
mkdir build
cd build
../configure --prefix=$RISCV
make

E. Data Contract Multi-tool のビルドとテスト

データ契約は、Mojo-V CPU のハードウェアが、Mojo-V で暗号化されたデータセットのデータアクセスキーと設定情報(例: メモリ暗号化モード)にアクセスできるようにする暗号化されたパケットです。``` cd dc-tool make clean build test

### **E. Mojo-V Bringup-Bench ベンチマークテストのビルドと実行**

1. **Spike デバイスドライバをビルドする**   ```bash
   cd bringup-bench/target
   make
  1. コンパイラを設定する

    ../Makefile を編集して、mojov ターゲットの TARGET_CC を、LVM ClangベースのRISC-Vコンパイラの場所に設定してください。

  2. Bringup-Bench テストプログラムをビルドしてテストする ```bash cd .. # go to the top-level bringup-bench directory make TARGET=mojov-spike mojov-tests # run all Mojo-V tests

または、個々のベンチマークを実行するには、そのディレクトリに移動して次のコマンドを実行します。 ```bash cd ../mojov-test make TARGET=mojov-spike clean build test

## 🧪 Mojo-V Bringup-Bench テスト概要

| Program | 説明 |
|:---------|:-------------|
| `mojov-test` | スライドの導入例 |
| `mojov-test1` | シークレットレジスタと暗号化メモリのセマンティクスをテストする |
| `mojov-test2` | Mojo-V 高速暗号化を使用した手書きのデータ非依存整数バブルソートベンチマーク (int,fast) |
| `mojov-test3` | Mojo-V 高速暗号化を使用した手書きのデータ非依存浮動小数点バブルソートベンチマーク (fp,fast) |
| `mojov-test4` | Mojo-V 強力な暗号化を使用した手書きのデータ非依存整数バブルソートベンチマーク (int,strong) |
| `mojov-test5` | Mojo-V 強力な暗号化を使用した手書きのデータ非依存浮動小数点バブルソートベンチマーク (fp,strong) |
| `mojov-typetests` | Mojo-V 暗号化型と EXO ライブラリ使用法の型システム検証テスト |
| `mojov-pctests` | RV64GC+Mojo-V 向けの手書き整合性チェックテストスイート。Mojo-V の証明担持暗号化形式(proofcarrying)のポジティブテストとネガティブテストを含む |
| `mojov-sectests` | RV64GC+Mojo-V 向けの手書きセキュリティテストスイート。ポジティブ130件 + ネガティブ245件 = 合計375件(int,fp,fast,strong) |
| `mojov-stringtests` | 安全な文字列操作と比較のための暗号化 EXO 文字列ライブラリ検証テスト |
| `mojov-mathtests` | `_sincos`、`mojov_sin`、`mojov_cos`、`mojov_fabs`、`mojov_floor`、`mojov_pow`、`mojov_round`、`mojov_sqrt` のための暗号化 EXO 数学ライブラリ検証テスト |

これらのテストベンチマークは、Mojo-V ISA ルール、EXO ライブラリの動作、およびセキュリティセマンティクスを示しています。

## 🧪 Mojo-V Bringup-Bench ベンチマーク概要

現在のブリングアップベンチマークセットには、次の Mojo-V ベンチマークアプリケーションが含まれています。

| Program | 説明 |
|:---------|:-------------|
| `bitonic-sort` | データ非依存バイトニックソートベンチマーク |
| `bloom-filter` | ブルームフィルタの集合所属ベンチマーク |
| `bubble-sort` | 整数バブルソートベンチマーク |
| `bubble-sort-strong` | 強力な暗号化向けに構成された整数バブルソートベンチマーク |
| `chi-squared` | カイ二乗統計的適合度ベンチマーク |
| `distinctness` | 相異性解析ベンチマーク |
| `distinctness-Onlog2n` | O(n log² n) 戦略を用いた相異性ベンチマークの変種 |
| `edit-distance` | 編集距離(文字列距離)ベンチマーク |
| `eulers-approx` | オイラー定数・級数近似ベンチマーク |
| `fft-int` | 整数 FFT ベンチマーク |
| `flood-fill` | フラッドフィルベンチマーク |
| `flood-fill-On2` | O(n²) 動作のフラッドフィルベンチマークの変種 |
| `fuzzy-match` | ファジー文字列マッチングベンチマーク |
| `gcd-list` | リストに対する最大公約数ベンチマーク |
| `gemm` | 一般的な行列乗算(GEMM)ベンチマーク |
| `gemm-strong` | 強力な暗号化向けに構成された GEMM ベンチマーク |
| `grad-descent` | 勾配降下最適化ベンチマーク |
| `heat-calc` | 熱伝達・熱方程式計算ベンチマーク |
| `heldkarp-tsp` | 暗号化されたグラフ上の Held-Karp 動的計画法巡回セールスマンベンチマーク |
| `highlife` | 暗号化された盤面状態の進化を伴う HighLife セルオートマトンベンチマーク |
| `kadane` | 最大部分配列ベンチマーク(Kadane のアルゴリズム) |
| `kalman-filter` | カルマンフィルタリングベンチマーク |
| `kcore-decomp` | グラフ k コア分解ベンチマーク |
| `kepler-calc` | ケプラー方程式・数値計算ベンチマーク |
| `knapsack` | ナップサック最適化ベンチマーク |
| `lcs` | 暗号化文字列に対するデータ非依存最長共通部分列ベンチマーク |
| `lda` | 潜在的ディリクレ配分(LDA)ベンチマーク |
| `manacher-lps` | 最長回文部分文字列ベンチマーク(Manacher のアルゴリズム) |
| `mersenne` | メルセンヌ数の計算ベンチマーク |
| `minspan` | 最小全域構造ベンチマーク |
| `monte-carlo` | モンテカルロシミュレーションベンチマーク |
| `moving-average` | 移動平均分析ベンチマーク |
| `moving-average-fp64` | FP64 移動平均分析ベンチマーク |
| `nbody-sim` | N 体シミュレーションベンチマーク |
| `nonlinear-nn` | 非線形ニューラルネットワークベンチマーク |
| `nr-solver` | ニュートン・ラフソン法ソルバーベンチマーク |
| `ntt-kernel` | 数論変換(NTT)カーネルベンチマーク |
| `packet-filter` | パケットフィルタリングベンチマーク |
| `pagerank` | PageRank グラフベンチマーク |
| `parrondo` | Parrondo プロセス・戦略ベンチマーク |
| `partition-equal` | 暗号化された集合に対する Partition Equal Subset Sum ベンチマーク |
| `pca-analysis` | 主成分分析ベンチマーク |
| `primal-test` | 素数判定ベンチマーク |
| `private-join` | プライバシー保護ジョインベンチマーク |
| `psi` | プライベート集合交差(PSI)ベンチマーク |
| `quartile-stats` | 暗号化データに対する四分位カット・四分位平均分析ベンチマーク |
| `rabinkarp-search` | Rabin-Karp パターン検索ベンチマーク |
| `rad-to-deg` | ラジアンから度への変換ベンチマーク |
| `randshell-sort` | ランダム化シェルソートベンチマーク |
| `ransac` | RANSAC モデルフィッティングベンチマーク |
| `regex-match` | 正規表現マッチングベンチマーク |
| `risk-score` | リスクスコアリング分析ベンチマーク |
| `scrambled-compare` | 暗号化動的計画法を用いたスクランブル文字列比較ベンチマーク |
| `seq-align` | 暗号化文字列に対するグローバル配列アライメントベンチマーク(Needleman-Wunsch) |
| `shortest-path` | 最短経路グラフベンチマーク |
| `sieve` | 素数篩ベンチマーク |
| `skeleton` | ブリングアップのベースラインとして使用されるスケルトン・テンプレートベンチマーク |
| `soundex` | Soundex 音声エンコーディングベンチマーク |
| `string-search` | 文字列検索ベンチマーク |
| `tea-cipher` | TEA 暗号ベンチマーク |
| `tiny-NN` | タイニーニューラルネットワーク推論ベンチマーク |
| `triangle-count` | 三角形計数グラフベンチマーク |
| `variability-sample` | ばらつきとサンプリング統計ベンチマーク |
| `verlet` | Verlet 積分物理ベンチマーク |

## Mojo-V セーフディスクロージャデモンストレータ概要

カテゴリ