
Эталонная реализация конфиденциального распознавания лиц с использованием реплицированного разделения секрета в MP-SPDZ, включая квантованную инференцию GhostFaceNet, бенчмарки и инструменты QAT.
Официальная реализация GhostFaceMPC: Privacy-Preserving Face Recognition with Multi-Party Computation (Davide Carnemolla, Dario Catalano, Mario Di Raimondo — University of Catania). Статья: Cryptology ePrint Archive, Paper 2026/2499.
GhostFaceMPC выполняет распознавание лиц с помощью GhostFaceNetV1 (ширина 1.3, шаг 1, голова ArcFace, обученная на MS1MV3) на трёх серверах с реплицированным разделением секрета в MP-SPDZ.
replicated-ring-party) и
злонамеренный с прерыванием (ps-rep-ring-party).Этот репозиторий содержит ровно тот код, который нужен для воспроизведения экспериментов из статьи.
@misc{cryptoeprint:2026/2499,
author = {Davide Carnemolla and Dario Catalano and Mario Di Raimondo},
title = {{GhostFaceMPC}: Privacy-Preserving Face Recognition with Multi-Party Computation},
howpublished = {Cryptology {ePrint} Archive, Paper 2026/2499},
year = {2026},
url = {https://eprint.iacr.org/2026/2499}
}
| Путь | Что это |
|---|---|
src/ghostmpc/ | Python-пакет и командная строка ghostmpc |
src/ghostmpc/codegen/ | компилятор из манифеста модели в программу MP-SPDZ |
src/ghostmpc/eval/ | открытый кольцевой оракул (побитово точный с MPC-программой) и оценка точности |
src/ghostmpc/benchmark/ | трёхсторонний стенд для бенчмарков и эмулируемые сети |
src/ghostmpc/training/ | обучение с учётом квантования на кольцево-точном прямом проходе |
third_party/patches/ | инструкции виртуальной машины, которые эта работа добавляет в MP-SPDZ |
baselines/ | базовые варианты: TensorFlow в открытом виде, наивный MP-SPDZ, EzPC/Porthos |
run_experiments.sh | один скрипт, запускающий все эксперименты из статьи |
scripts/ | настройка, эмуляция сети без root-прав, сбор таблиц |
tests/ | модульные тесты (pytest) |
Машина. Linux на x86-64. В статье использовалась 32-ядерная виртуальная машина (Intel Xeon Gold 6238R), запускающая по 8 потоков на сторону. Все три сервера работают на одном хосте.
Python. Python ≥ 3.10 (протестировано с 3.11).
Зависимости сборки MP-SPDZ (список upstream):
sudo apt-get install automake build-essential clang cmake git libboost-dev \
libboost-filesystem-dev libboost-iostreams-dev libboost-thread-dev \
libgmp-dev libntl-dev libsodium-dev libssl-dev libtool python3 python3-venv
Эмуляция LAN/WAN. Требуются iproute2 (ip, tc), iputils-ping,
unshare (util-linux) и непривилегированные пользовательские пространства имён. Скрипту не нужен
root. В Debian/Ubuntu: sudo sysctl kernel.unprivileged_userns_clone=1.
Только базовая версия Porthos.
libboost-system-devopam install ocamlbuild menhir ocamlfind stdintgit clone --recursive https://github.com/crypto-unict/ghostfacempc.git
cd ghostfacempc
scripts/setup.sh
scripts/setup.sh выполняет четыре действия:
.venv и устанавливает пакет. При этом загружаются tensorflow-cpu,
Pillow, onnx, onnxruntime и onnxsim.third_party/MP-SPDZ:
third_party/patches/;MY_CFLAGS += -DRING_SIZE=32 в CONFIG.mine);replicated-ring-party.x и ps-rep-ring-party.x;Файлы моделей размещаются в artifacts/:
| Файл | Содержимое |
|---|---|
GhostFaceNet_W1.3_S1_ArcFace.h5 | float-учитель из релиза GhostFaceNets |
model/ | квантованная модель ring32/f6/f_w9 с отчётами о точности |
model-ring64-f16-b0/ | манифест ring64, из которого экспортируется базовая линия Porthos |
legacy-scalar-236/ | манифест ring64/f20 наивной базовой линии MP-SPDZ |
Бандлы являются релизными артефактами этого репозитория, и каждый архив
проверяется по его SHA-256. ghostmpc fetch-bundles --bundle qat-start также
загружает манифест, с которого начинается QAT (см. §5).
Эксперимент по точности и базовая линия на открытом тексте используют пять
наборов для оценки InsightFace: LFW, AgeDB-30, CALFW, CPLFW и CFP-FP. Используйте файлы .bin,
распространяемые с обучающими данными MS1MV3 из
InsightFace dataset zoo,
и разместите их следующим образом:
datasets/benchmarks/{lfw,agedb_30,calfw,cplfw,cfp_fp}.bin
scripts/setup.sh проверяет их по дайджестам SHA-256, которые мы использовали. Бенчмаркам MPC
наборы данных не нужны: их коммуникация не зависит от
входных значений, поэтому они секретно разделяют синтетические входные данные.
./run_experiments.sh --quick verification # smoke test, about one hour
./run_experiments.sh all # every table of the paper
./run_experiments.sh tables # print the tables measured so far
Результаты сохраняются в results/ (один report.json и summary.csv на каждый запуск), а tables записывает results/tables.md в формате, соответствующем статье. Цели можно запускать отдельно и в любом порядке. Запуск, отчёт которого уже существует, пропускается.
| Цель | Статья | Время выполнения на нашей машине (приблизительно) |
|---|---|---|
accuracy | таблица сравнения, столбцы точности | 3 ч на набор данных на ядро; разделяется с помощью WORKERS |
verification | Face Verification Benchmarks: HbC и M, Co-Host / LAN / Fast-WAN / WAN | ~6 ч |
identification | Face Identification Benchmarks: 1:128 closed set, та же сетка | ~6 ч |
plaintext | таблица сравнения, строка TensorFlow | 1 мин |
naive | таблица сравнения, строка MP-SPDZ (naive) | ~1 ч, включая компиляцию |
porthos | таблица сравнения, строка EzPC (Porthos) | ~5 мин сборка + ~1,5 ч |
baselines | три базовых варианта | |
ablation | таблица абляции: оптимизации по одной, от базового варианта naive до GhostFaceMPC (HbC, co-host) | ~4 ч |
Переменные окружения:
| Переменная | Значение | По умолчанию |
|---|---|---|
THREADS | потоков на сторону | 8 |
NETWORKS | сети для измерения | co-host lan fast-wan wan |
WORKERS | процессов для оракула точности | число CPU |
POOLS, WARMUPS, TRIALS | переопределить схему пулов | как в статье |
RESULTS | каталог вывода | results |
--quick запускает один пул из одного прогревочного и одного измеряемого запроса, а также точность на первых 600 парах каждого набора данных.