
Расширение системы команд RISC-V для аппаратно-обеспечиваемых секретных вычислений с использованием инкапсуляции ключей ML-KEM-512 и шифрования SIMON-128, обеспечивающее не зависящее от данных выполнение с производительностью, близкой к нативной.
<p align="center"> <img src="https://assets.kitploit.com/production/public/readmes/9608/67cb1dbfb4bdedcc5db7b59178bbc7a64f6e88cc7f73952ed87aad1b818d6698.png" alt="Mojo-V Logo" width="550"/> </p> # Mojo-V: секретные вычисления для RISC-V **Mojo-V** (произносится *«mojo-five»*) — это новое расширение RISC-V, которое добавляет возможности программирования, ориентированные на конфиденциальность, для RISC-V. Mojo-V реализует секретные вычисления, обеспечивая безопасное, эффективное и не зависящее от данных исполнение без опоры на хрупкое программное обеспечение и доверие к программисту. Изолируя конфиденциальные данные в выделенных секретных регистрах и шифруя память с помощью стороннего ключа, Mojo-V предотвращает раскрытие информации и обеспечивает вычисления, которые являются одновременно «слепыми» (без прямых раскрытий) и «тихими» (без утечек по побочным каналам). Архитектура бесшовно интегрируется в существующую ISA RISC-V всего лишь с одним битом режима и четырьмя новыми инструкциями, контроль которых осуществляется полностью на этапе декодирования. Ранние результаты демонстрируют скорость исполнения, близкую к нативной, обеспечивая при этом улучшение производительности на 5–7 порядков по сравнению с полностью гомоморфным шифрованием (FHE), а также содержат чёткую дорожную карту интеграции в CPU, GPU и специализированные ускорители. Чтобы узнать больше... - Вот вводное видео, описывающее Mojo-V: https://www.youtube.com/watch?v=HUT46TcNyyM - Слайды, дающие обзор проекта Mojo-V: https://drive.google.com/file/d/1VVzZqYHvQgnKMgXZjg7I_cX2GzF7awSN Текущая спецификация расширения ISA Mojo-V (релиз 1.02): - [в формате PDF.] (https://drive.google.com/file/d/1yfiBqp0xyXD-S_G5d2o7Ggta5wI6nRot) Для связи с разработчиками Mojo-V: - Электронная почта: [[email protected]](mailto:[email protected]) # 🧩 Эталонная платформа Mojo-V — выпуск 1.03 ## 🚧 Статус проекта Выпуск 1.03 эталонной платформы Mojo-V реализует эталонную платформу симулятора Spike для RISC-V RV64GC и компилятор EXO для спецификации ISA Mojo-V v1.02. Текущая реализация поддерживает быстрые, строгие и proof-carrying режимы шифрования, а также безопасное раскрытие результатов зашифрованных вычислений и сертифицированную генерацию случайных чисел. Релиз включает широкий набор тестов Mojo-V, ориентированных на конфиденциальность бенчмарков и демонстрационных приложений для безопасного раскрытия. Он также включает полную спецификацию ISA Mojo-V и документацию для разработчиков. Этот выпуск подходит для использования в качестве i) платформы разработки приложений Mojo-V, ii) эталонной модели для проверки аппаратных реализаций Mojo-V и iii) эталонной реализации для анализа безопасности. Текущая работа сосредоточена на разработке i) компилятора Mojo-V на основе LLVM, ii) модели Mojo-V на основе gem5 для архитектурных исследований и анализа, и iii) эталонной реализации CVA6 SystemVerilog RTL для RISC-V RV64GC с расширениями Mojo-V. **Версия спецификации:** 1.02 (август 2026) **Контакт:** [[email protected]](mailto:[email protected]) ## Текущие компоненты 1. **Спецификация ISA Mojo-V v1.02** - выпущена в `doc/` 2. **Spike (симулятор набора инструкций) с расширениями Mojo-V** - Mojo-V интегрирован в `riscv-isa-sim` и функционально полон для процессора RV64GC с инкапсуляцией ключей ML-KEM-512 для загрузки контрактов данных и симметричным шифрованием SIMON-128 для защиты секретных вычислений. - Чтобы запустить Spike с включёнными расширениями Mojo-V, добавьте флаг `--isa=rv64gc_zicond_zkmojov_zicntr` при запуске `spike` 3. **Data Contract Multi-tool** Контракты данных — это зашифрованные пакеты, которые позволяют аппаратному обеспечению процессора Mojo-V получать доступ к ключу доступа к данным и информации о конфигурации (например, режиму шифрования памяти) для набора данных, зашифрованного с помощью Mojo-V. Инструмент DC Multi-tool предоставляет следующие возможности: * Разработчики аппаратного обеспечения могут создавать пары открытый/закрытый ключей 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-компилятора Вам понадобится кросс-компилятор RISC-V на основе LLVM, способный создавать бинарные файлы `RV64GC`. Вот хорошая отправная точка: https://github.com/openssl/openssl ### B. Установка OpenSSL версии 3.6 или новее Вам понадобится установка OpenSSL версии 3.6 или новее для разработчиков. Она предоставляет библиотеки, реализующие ML-KEM512, используемые Spike для защищённого обмена ключами. Вот хорошая отправная точка: https://clang.llvm.org/get_started.html ### C. Клонирование репозитория Mojo-V```bash git clone https://github.com/toddmaustin/mojo-v.git cd mojo-v ``` ### D. Сборка симулятора RISC-V Spike с поддержкой Mojo-V```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** Контракты данных — это зашифрованные пакеты, которые позволяют аппаратному обеспечению CPU Mojo-V получить доступ к ключу доступа к данным и конфигурационной информации (например, режиму шифрования памяти) для зашифрованного набора данных Mojo-V.``` cd dc-tool make clean build test ``` ### **E. Сборка и запуск бенчмарк-тестов Mojo-V Bringup-Bench** 1. **Соберите драйвер устройства Spike** ```bash cd bringup-bench/target make ``` 2. **Настройте ваш компилятор** Отредактируйте `../Makefile` и укажите `TARGET_CC` для цели `mojov` на расположение вашего LVM Clang-based RISC-V компилятора. 3. **Соберите и протестируйте тестовые программы 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` | Тесты проверки зашифрованной математической библиотеки EXO для `_sincos`, `mojov_sin`, `mojov_cos`, `mojov_fabs`, `mojov_floor`, `mojov_pow`, `mojov_round` и `mojov_sqrt` | Эти тестовые бенчмарки демонстрируют правила ISA Mojo-V, поведение библиотеки EXO и семантику безопасности. ## 🧪 Обзор бенчмарков Mojo-V Bringup-Bench Текущий набор бенчмарков bring-up включает следующие бенчмарк-приложения 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) | | `flood-fill-On2` | Вариант бенчмарка заливки с поведением O(n²) | | `fuzzy-match` | Бенчмарк нечёткого сопоставления строк | | `gcd-list` | Бенчмарк наибольшего общего делителя для списка | | `gemm` | Бенчмарк общего перемножения матриц | | `gemm-strong` | Бенчмарк GEMM, настроенный на сильное шифрование | | `grad-descent` | Бенчмарк оптимизации градиентным спуском | | `heat-calc` | Бенчмарк расчёта теплопередачи/уравнения теплопроводности | | `heldkarp-tsp` | Бенчмарк задачи коммивояжёра методом динамического программирования Хелда–Карпа на зашифрованных графах | | `highlife` | Бенчмарк клеточного автомата HighLife с эволюцией зашифрованного состояния поля | | `kadane` | Бенчмарк поиска максимального подмассива (алгоритм Кадане) | | `kalman-filter` | Бенчмарк фильтра Калмана | | `kcore-decomp` | Бенчмарк декомпозиции графа на k-ядра | | `kepler-calc` | Бенчмарк численного расчёта уравнения Кеплера | | `knapsack` | Бенчмарк оптимизации задачи о рюкзаке | | `lcs` | Бенчмарк не зависящей от данных наибольшей общей подпоследовательности на зашифрованных строках | | `lda` | Бенчмарк латентного размещения Дирихле | | `manacher-lps` | Бенчмарк поиска наибольшей палиндромной подстроки (алгоритм Манакера) | | `mersenne` | Бенчмарк вычисления чисел Мерсенна | | `minspan` | Бенчмарк минимальной остовной структуры | | `monte-carlo` | Бенчмарк моделирования методом Монте-Карло | | `moving-average` | Бенчмарк аналитики скользящего среднего | | `moving-average-fp64` | Бенчмарк аналитики скользящего среднего в FP64 | | `nbody-sim` | Бенчмарк моделирования задачи N тел | | `nonlinear-nn` | Бенчмарк нелинейной нейронной сети | | `nr-solver` | Бенчмарк решателя Ньютона–Рафсона | | `ntt-kernel` | Бенчмарк ядра теоретико-числового преобразования | | `packet-filter` | Бенчмарк фильтрации пакетов | | `pagerank` | Графовый бенчмарк PageRank | | `parrondo` | Бенчмарк процесса/стратегии Паррондо | | `partition-equal` | Бенчмарк разбиения на подмножества с равной суммой на зашифрованных множествах | | `pca-analysis` | Бенчмарк анализа главных компонент | | `primal-test` | Бенчмарк проверки чисел на простоту | | `private-join` | Бенчмарк соединения данных с сохранением конфиденциальности | | `psi` | Бенчмарк приватного пересечения множеств | | `quartile-stats` | Бенчмарк аналитики квартильных границ и квартильных средних на зашифрованных данных | | `rabinkarp-search` | Бенчмарк поиска по образцу с помощью алгоритма Рабина–Карпа | | `rad-to-deg` | Бенчмарк преобразования радианов в градусы | | `randshell-sort` | Бенчмарк рандомизированной сортировки Шелла | | `ransac` | Бенчмарк подгонки модели методом RANSAC | | `regex-match` | Бенчмарк сопоставления с регулярными выражениями | | `risk-score` | Бенчмарк аналитики оценки рисков | | `scrambled-compare` | Бенчмарк сравнения переставленных строк с использованием зашифрованного динамического программирования | | `seq-align` | Бенчмарк глобального выравнивания последовательностей (Нидлмана–Вунша) на зашифрованных строках | | `shortest-path` | Графовый бенчмарк кратчайшего пути | | `sieve` | Бенчмарк решета простых чисел | | `skeleton` | Бенчмарк-скелет/шаблон, используемый в качестве базового для bring-up | | `soundex` | Бенчмарк фонетического кодирования Soundex | | `string-search` | Бенчмарк поиска в строке | | `tea-cipher` | Бенчмарк шифра TEA | | `tiny-NN` | Бенчмарк инференса крошечной нейронной сети | | `triangle-count` | Графовый бенчмарк подсчёта треугольников | | `variability-sample` | Бенчмарк вариативности и выборочных статистик | | `verlet` | Физический бенчмарк интегрирования по Верле | ## Обзор демонстраторов безопасного раскрытия Mojo-V Mojo-V включает три демонстрационных бенчмарка безопасного раскрытия в `bringup-bench`. Эти приложения используют зашифрованную память с доказательством (proof-carrying) и зашифрованные гранты на данные, чтобы показать, как программа может выполнять вычисления над чувствительными входными данными, раскрывать только явно разрешённые производные результаты и перехватывать попытки повторного использования гранта для другого значения, исходного ввода, устаревшего вычисления, подделанного гранта или промежуточного предиката. | Program | Чувствительные входные данные | Разрешённые раскрытия | Демонстрируемые защиты | |:---------|:----------------|:------------------------|:--------------------------| | `private-auction` | Восемь зашифрованных приватных ставок. | Идентификатор победителя и стоимость выигравшей ставки. | Находит максимальную ставку с помощью зашифрованных сравнений и `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 ``` Используйте опцию Spike `--mojov-arg=<n>`, чтобы выбрать положительный путь (`0`) или один из негативных тестов раскрытия (`1` и выше) при ручном запуске демонстратора. ## Обзор демонстраторов сертифицированного TRNG Mojo-V Mojo-V включает три демонстрационных бенчмарка сертифицированного генератора истинных случайных чисел (CERTRNG) в `bringup-bench`. Они используют различные участки `CERTRNG`, шифрованное вычисление с доказательством и nonce запросов, чтобы показать, что клиент может проверить, где свежие случайные значения вошли в одобренное вычисление. Результаты остаются зашифрованными до проверки квитанции и коммитмента. Негативные случаи демонстрируют, что программно сгенерированная случайность, отсутствующие или повторно используемые выборки, неправильные назначения участков, устаревшие запросы, изменённые графы вычислений и смещённая повторная выборка не удовлетворяют условиям честного предоставления данных. Они также показывают важное ограничение: сертифицированная случайность сама по себе не может остановить перебор (grinding), если результаты раскрываются (с использованием инструкций Mojo-V DISC или FDISC) до коммитмента. | Программа | Сертифицированная случайная нагрузка | Положительное поведение | Продемонстрированные защиты | |:---------|:--------------------------|:------------------|:--------------------------| | `blind-audit` | Выбирает одну из восьми записей аудита, беря минимум из восьми различных случайных приоритетов, привязанных к запросу. | Сертифицирует полный фиксированный граф argmin; также показывает, что неиспользуемые выборки не влияют на квитанцию и что преждевременное раскрытие позволяет перебор. | Отклоняет навязанную цель, программный ГСЧ, отсутствующий или устаревший nonce, повторное использование выборок, отброшенного кандидата, переставленные участки и воспроизведение предвычисленного выбора. | | `diffpriv-count` | Добавляет центрированный биномиальный шум, образованный как разность двух независимых значений `Binomial(8, 1/2)`, к зашифрованному счётчику, используя 16 различных случайных участков. | Сертифицирует точный граф генерации шума и привязки к запросу, сохраняя как шум, так и ответ скрытыми до проверки. | Отклоняет пропущенный или ослабленный шум, программный ГСЧ, благоприятную повторную выборку и повтор устаревшего запроса; несвязанная неиспользуемая случайность остаётся вне квитанции. | | `certified-lotto` | Выбирает допустимого участника с наибольшим количеством очков среди восьми зашифрованных записей и использует различные привязанные к запросу приоритеты для разрешения равенства очков. | Сертифицирует каждого участника, случайный участок, смесь nonce и каждый шаг турнира; также демонстрирует поведение неиспользуемых выборок и опасность перебора при раскрытии до коммитмента. | Отклоняет пропущенного участника, программный ГСЧ, пропущенный или устаревший nonce, повторное использование выборок, переставленные участки и детерминированный критерий разрешения равенства. | Эти демонстраторы перечислены в `MOJOV_CERTRNG_APPS`, поэтому они включены в набор эталонных тестов Mojo-V. Запустите один из них напрямую из его каталога, например:```bash cd bringup-bench/blind-audit make TARGET=mojov-spike clean build test ``` Используйте опцию Spike `--mojov-arg=<n>` при ручном запуске демонстратора. Вариант `0` — это честный путь, варианты с низкими номерами — успешные поясняющие проверки, а варианты `10` и выше — атаки, которые, как ожидается, завершатся исключением безопасности Mojo-V. Точная матрица для каждого приложения описана в его локальном для бенчмарка `README.md`. ## 🛠️ Использование многофункционального инструмента контрактов данных Mojo-V Многофункциональный инструмент контактов данных "dc-tool" используется для создания и проверки контрактов данных Mojo-V. --- [Read more](https://github.com/toddmaustin/mojo-v)