Mojo-V(发音为 “mojo-five”)是一种新的 RISC-V 扩展,为 RISC-V 引入了面向隐私的编程能力。Mojo-V 实现了秘密计算,可在不依赖脆弱软件和程序员信任的情况下,实现安全、高效且数据无关的执行。通过将敏感数据隔离在专用的秘密寄存器中,并在第三方密钥下加密内存,Mojo-V 可防止泄露,并强制执行既盲(无直接泄露)又静默(无侧信道泄漏)的计算。该设计仅通过一个模式位和四条新指令即可无缝集成到现有 RISC-V ISA 中,并完全在译码阶段强制执行。早期结果显示,其执行速度接近原生水平,同时与全同态加密(FHE)相比,性能提升超过 5-7 个数量级,并拥有集成到 CPU、GPU 和专用加速器的清晰路线图。
了解更多...
当前 Mojo-V ISA 扩展规范(版本 1.02):
联系 Mojo-V 开发者:
Mojo-V 参考平台 1.03 版为 RISC-V RV64GC 实现了参考 Spike 模拟器平台,并为 Mojo-V ISA 规范 v1.02 实现了 EXO 编译器。当前实现支持快速、强安全和携带证明的加密模式,以及加密计算结果的安全披露和认证随机数生成。该版本包含广泛的 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]
Mojo-V ISA 规范 v1.02
doc/ 发布Spike(指令集模拟器)及 Mojo-V 扩展
riscv-isa-sim 中,并且针对 RV64GC CPU 功能完善,支持用于数据契约加载的 ML-KEM-512 密钥封装,以及用于秘密计算保护的 SIMON-128 对称密钥加密。spike 时添加 --isa=rv64gc_zicond_zkmojov_zicntr 标志数据契约多工具
数据契约是经过加密的数据包,允许 Mojo-V CPU 的硬件访问 Mojo-V 加密数据集的访问密钥和配置信息(例如内存加密模式)。DC 多工具支持以下功能:
Mojo-V Bringup-Bench 基准测试
请注意,Bringup-bench 基准测试的其余部分尚未移植到 Mojo-V。
你需要一个基于 LLVM 的 RISC-V 交叉编译器,它能生成 RV64GC 二进制文件。
这里是一个很好的起点:https://github.com/openssl/openssl
你需要安装 OpenSSL 3.6 或更新版本的开发者安装包。这会提供实现 ML-KEM512 的库,Spike 使用该库进行受保护的密钥交换。
这里是一个很好的起点:https://clang.llvm.org/get_started.html
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
数据合约是加密数据包,允许 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
配置你的编译器
编辑 ../Makefile,为 mojov 目标设置 TARGET_CC,指向你的基于 LVM Clang 的 RISC-V 编译器位置。
构建并测试 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 测试概述
| 程序 | 说明 |
|:---------|:-------------|
| `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 基准测试应用程序:
| 程序 | 说明 |
|:---------|:-------------|
| `bitonic-sort` | 数据无关双调排序基准测试 |
| `bloom-filter` | Bloom 过滤器集合成员资格基准测试 |
| `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-strong` | 配置为强加密的 GEMM 基准测试 |
| `grad-descent` | 梯度下降优化基准测试 |
| `heat-calc` | 热传导/热方程计算基准测试 |
| `heldkarp-tsp` | 基于加密图的 Held-Karp 动态规划旅行商问题基准测试 |
| `highlife` | 带加密棋盘状态演化的 HighLife 元胞自动机基准测试 |
| `kadane` | 最大子数组基准测试(Kadane 算法) |
| `kalman-filter` | 卡尔曼滤波基准测试 |
| `kcore-decomp` | 图 k-core 分解基准测试 |
| `kepler-calc` | 开普勒方程/数值计算基准测试 |
| `knapsack` | 背包优化基准测试 |
| `lcs` | 基于加密字符串的数据无关最长公共子序列基准测试 |
| `lda` | 潜在狄利克雷分配基准测试 |
| `manacher-lps` | 最长回文子串基准测试(Manacher 算法) |
| `mersenne` | 梅森数计算基准测试 |
| `minspan` | 最小生成结构基准测试 |
| `monte-carlo` | 蒙特卡洛模拟基准测试 |
| `moving-average` | 移动平均分析基准测试 |
| `moving-average-fp64` | FP64 移动平均分析基准测试 |
| `nbody-sim` | N 体模拟基准测试 |
| `nonlinear-nn` | 非线性神经网络基准测试 |
| `nr-solver` | Newton-Raphson 求解器基准测试 |
| `ntt-kernel` | 数论变换内核基准测试 |
| `packet-filter` | 数据包过滤基准测试 |
| `pagerank` | PageRank 图基准测试 |
| `parrondo` | Parrondo 过程/策略基准测试 |
| `partition-equal` | 基于加密集合的相等子集和分区基准测试 |
| `pca-analysis` | 主成分分析基准测试 |
| `primal-test` | 素性检验基准测试 |
| `private-join` | 隐私保护连接基准测试 |
| `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 安全披露演示程序概述
Mojo-V 在 `bringup-bench` 中包含了三个安全披露演示基准测试。这些应用程序使用证明承载加密内存和加密数据授权,以展示程序如何对敏感输入进行计算、仅披露经明确授权的派生结果,并捕获针对不同值、原始输入、过期计算、被篡改授权或中间谓词重用授权的尝试。
| 程序 | 敏感输入 | 授权披露 | 演示的保护 |
|:---------|:----------------|:------------------------|:--------------------------|
| `private-auction` | 八个加密的私人出价。 | 中标者 ID 和中标出价金额。 | 使用加密比较和 `cmov()` 找出最高出价,然后验证每个输出的数据授权。负向用例拒绝不匹配的授权、原始中标出价披露、伪造或篡改的授权、更改拍卖后过期的授权、派生的 `winning_bid + 1` 值以及中间比较谓词。 |
| `vote-tally` | 三名候选人共三十二张加密选票,其中包含两张无效选票。 | 候选人 A、B、C 的总计票数,以及每张选票的修复谓词。 | 以加密形式计算所有候选人计票数和选票有效性谓词。负向用例拒绝将某个计票授权用于另一计票、原始选票披露、伪造或篡改的授权、修改选票后过期的授权、派生的计票值以及中间选票谓词。 |
| `gene-risk` | 一个玩具基因组风险工作负载的八个加密 SNP 标记剂量。 | 派生的多基因风险评分和一个低/中/高风险分桶。 | 累加加权风险评分,并使用加密谓词和 `cmov()` 派生风险分桶。负向用例拒绝交叉使用评分和分桶授权、原始标记披露、伪造或篡改的授权、更改基因组后过期的授权、派生的评分值以及中间高风险谓词。 |
每个演示程序都列在 `MOJOV_DISCAPPS` 中,因此它们是安全披露应用程序测试集的一部分。要直接运行其中一个,请进入其基准测试目录并使用 Mojo-V 目标,例如:```bash
cd bringup-bench/private-auction
make TARGET=mojov-spike clean build test
Use Spike 的 --mojov-arg=<n> 选项,在手动运行演示程序时选择正向路径(0)或某个负向披露测试(1 及更高)。