
Referenzimplementierung der datenschutzwahrenden Gesichtserkennung mittels repliziertem Secret Sharing in MP-SPDZ, mit quantisierter GhostFaceNet-Inferenz, Benchmarks und QAT-Tooling.
Offizielle Implementierung von GhostFaceMPC: Privacy-Preserving Face Recognition with Multi-Party Computation (Davide Carnemolla, Dario Catalano, Mario Di Raimondo — Universität Catania). Paper: Cryptology ePrint Archive, Paper 2026/2499.
GhostFaceMPC führt Gesichtserkennung mit GhostFaceNetV1 (Breite 1.3, Schrittweite 1, ArcFace-Head, trainiert auf MS1MV3) unter drei Servern mit repliziertem Secret Sharing in MP-SPDZ aus.
replicated-ring-party) und
malicious mit Abbruch (ps-rep-ring-party).Dieses Repository enthält genau den Code, der benötigt wird, um die Experimente des Papers zu reproduzieren.
@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}
}
| Pfad | Was es ist |
|---|---|
src/ghostmpc/ | Python-Paket und ghostmpc-Kommandozeile |
src/ghostmpc/codegen/ | Compiler vom Modell-Manifest zu einem MP-SPDZ-Programm |
src/ghostmpc/eval/ | Klartext-Ring-Orakel (bit-exakt mit dem MPC-Programm) und Genauigkeitsbewertung |
src/ghostmpc/benchmark/ | Drei-Parteien-Benchmark-Harness und emulierte Netzwerke |
src/ghostmpc/training/ | quantisierungsbewusstes Training auf dem ringgetreuen Forward-Pass |
third_party/patches/ | die Virtual-Machine-Instruktionen, die diese Arbeit zu MP-SPDZ hinzufügt |
baselines/ | die Baselines: TensorFlow im Klartext, naives MP-SPDZ, EzPC/Porthos |
run_experiments.sh | ein Skript, das jedes Experiment des Papers ausführt |
scripts/ | Einrichtung, rootlose Netzwerkemulation, Tabellenerfassung |
tests/ | Unit-Tests (pytest) |
Rechner. Linux auf x86-64. Das Paper verwendete eine 32-Kern-VM (Intel Xeon Gold 6238R) und führt 8 Threads pro Partei aus. Alle drei Server laufen auf einem Host.
Python. Python ≥ 3.10 (getestet mit 3.11).
MP-SPDZ-Build-Abhängigkeiten (Upstream-Liste):
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-Emulation. Benötigt iproute2 (ip, tc), iputils-ping,
unshare (util-linux) und unprivilegierte User-Namespaces. Das Skript benötigt kein
Root. Unter Debian/Ubuntu: sudo sysctl kernel.unprivileged_userns_clone=1.
Nur Porthos-Baseline.
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 erledigt vier Dinge:
.venv und installiert das Paket. Dabei werden tensorflow-cpu,
Pillow, onnx, onnxruntime und onnxsim heruntergeladen.third_party/MP-SPDZ vor:
third_party/patches/ an;MY_CFLAGS += -DRING_SIZE=32 in CONFIG.mine);replicated-ring-party.x und ps-rep-ring-party.x;Die Modelldateien landen in artifacts/:
| Datei | Inhalt |
|---|---|
GhostFaceNet_W1.3_S1_ArcFace.h5 | Float-Teacher, aus dem Release von GhostFaceNets |
model/ | das quantisierte ring32/f6/f_w9-Modell mit seinen Genauigkeitsberichten |
model-ring64-f16-b0/ | ring64-Manifest, aus dem die Porthos-Baseline exportiert wird |
legacy-scalar-236/ | ring64/f20-Manifest der naiven MP-SPDZ-Baseline |
Die Bundles sind Release-Assets dieses Repositorys, und jedes Archiv wird
gegen seinen SHA-256 geprüft. ghostmpc fetch-bundles --bundle qat-start lädt
außerdem das Manifest herunter, von dem QAT startet (siehe §5).
Das Genauigkeitsexperiment und die Klartext-Baseline lesen fünf
InsightFace-Evaluierungssets: LFW, AgeDB-30, CALFW, CPLFW und CFP-FP. Verwende
die .bin-Dateien, die mit den MS1MV3-Trainingsdaten des
InsightFace dataset zoo
verteilt werden, und lege sie wie folgt ab:
datasets/benchmarks/{lfw,agedb_30,calfw,cplfw,cfp_fp}.bin
scripts/setup.sh überprüft sie anhand der SHA-256-Digests, die wir verwendet haben. Die MPC-Benchmarks benötigen die Datensätze nicht: Ihre Kommunikation hängt nicht von den Eingabewerten ab, daher teilen sie synthetische Eingaben per Secret-Sharing auf.
./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
Die Ergebnisse werden in results/ abgelegt (eine report.json und summary.csv pro Lauf), und
tables schreibt results/tables.md im Layout des Papers. Die Targets können
separat und in beliebiger Reihenfolge ausgeführt werden. Ein Lauf, dessen Report bereits existiert, wird übersprungen.
| Target | Paper | Laufzeit auf unserer Maschine (ca.) |
|---|---|---|
accuracy | Vergleichstabelle, Genauigkeits-Spalten | 3 h pro Datensatz pro Kern; aufteilen mit WORKERS |
verification | Face Verification Benchmarks: HbC und M, Co-Host / LAN / Fast-WAN / WAN | ~6 h |
identification | Face Identification Benchmarks: 1:128 Closed-Set, gleiches Raster | ~6 h |
plaintext | Vergleichstabelle, TensorFlow-Zeile | 1 min |
naive | Vergleichstabelle, MP-SPDZ (naive)-Zeile | ~1 h inklusive Kompilierung |
porthos | Vergleichstabelle, EzPC (Porthos)-Zeile | ~5 min Build + ~1,5 h |
baselines | die drei Baselines | |
ablation | Ablationstabelle: die Optimierungen einzeln, von der naiven Baseline bis GhostFaceMPC (HbC, Co-Host) | ~4 h |
Umgebungsvariablen: