
Implementação de referência de reconhecimento facial com preservação de privacidade usando compartilhamento de segredo replicado no MP-SPDZ, com inferência quantizada do GhostFaceNet, benchmarks e ferramentas de QAT.
Implementação oficial de GhostFaceMPC: Privacy-Preserving Face Recognition with Multi-Party Computation (Davide Carnemolla, Dario Catalano, Mario Di Raimondo — Universidade de Catania). Artigo: Cryptology ePrint Archive, Paper 2026/2499.
O GhostFaceMPC executa reconhecimento facial com o GhostFaceNetV1 (largura 1.3, stride 1, cabeça ArcFace, treinado no MS1MV3) entre três servidores com partilha de segredo replicada no MP-SPDZ.
replicated-ring-party) e
malicioso com aborto (ps-rep-ring-party).Este repositório contém exatamente o código necessário para reproduzir as experiências do artigo.
@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}
}
| Caminho | O que é |
|---|---|
src/ghostmpc/ | Pacote Python e linha de comando ghostmpc |
src/ghostmpc/codegen/ | compilador do manifesto do modelo para um programa MP-SPDZ |
src/ghostmpc/eval/ | oráculo de anel em texto claro (bit-exato com o programa MPC) e avaliação de precisão |
src/ghostmpc/benchmark/ | harness de benchmark de três partes e redes emuladas |
src/ghostmpc/training/ | treinamento com reconhecimento de quantização sobre o passo direto fiel ao anel |
third_party/patches/ | as instruções de máquina virtual que este trabalho adiciona ao MP-SPDZ |
baselines/ | as linhas de base: TensorFlow em texto claro, MP-SPDZ ingênuo, EzPC/Porthos |
run_experiments.sh | um script que executa todos os experimentos do artigo |
scripts/ | configuração, emulação de rede sem root, coleta de tabelas |
tests/ | testes unitários (pytest) |
Máquina. Linux em x86-64. O artigo usou uma VM de 32 núcleos (Intel Xeon Gold 6238R) e executa 8 threads por parte. Todos os três servidores são executados em um único host.
Python. Python ≥ 3.10 (testado com 3.11).
Dependências de compilação do MP-SPDZ (lista 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
Emulação LAN/WAN. Requer iproute2 (ip, tc), iputils-ping,
unshare (util-linux) e namespaces de usuário sem privilégios. O script não precisa de
root. No Debian/Ubuntu: sudo sysctl kernel.unprivileged_userns_clone=1.
Apenas o baseline do 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 faz quatro coisas:
.venv e instala o pacote. Isso baixa tensorflow-cpu,
Pillow, onnx, onnxruntime e onnxsim.third_party/MP-SPDZ:
third_party/patches/;MY_CFLAGS += -DRING_SIZE=32 em CONFIG.mine);replicated-ring-party.x e ps-rep-ring-party.x;Os arquivos do modelo ficam em artifacts/:
| Arquivo | Conteúdo |
|---|---|
GhostFaceNet_W1.3_S1_ArcFace.h5 | professor float, da release do GhostFaceNets |
model/ | o modelo quantizado ring32/f6/f_w9, com seus relatórios de acurácia |
model-ring64-f16-b0/ | manifesto ring64 a partir do qual a baseline Porthos é exportada |
legacy-scalar-236/ | manifesto ring64/f20 da baseline ingênua do MP-SPDZ |
Os bundles são assets de release deste repositório, e cada arquivo é
verificado contra seu SHA-256. ghostmpc fetch-bundles --bundle qat-start também
baixa o manifesto a partir do qual o QAT inicia (ver §5).
O experimento de acurácia e a baseline em texto claro leem cinco conjuntos de
avaliação do InsightFace: LFW, AgeDB-30, CALFW, CPLFW e CFP-FP. Use os arquivos .bin
distribuídos com os dados de treinamento MS1MV3 do
InsightFace dataset zoo
e coloque-os como:
datasets/benchmarks/{lfw,agedb_30,calfw,cplfw,cfp_fp}.bin
scripts/setup.sh verifica-os em relação aos resumos SHA-256 que utilizámos. Os benchmarks MPC não precisam dos conjuntos de dados: a sua comunicação não depende dos valores de entrada, pelo que partilham de forma secreta entradas sintéticas.
./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
Os resultados vão para results/ (um report.json e um summary.csv por execução), e
tables escreve results/tables.md no formato do artigo. Os alvos podem ser
executados separadamente e em qualquer ordem. Uma execução cujo relatório já existe é ignorada.
| Alvo | Artigo | Tempo de execução na nossa máquina (aprox.) |
|---|---|---|
accuracy | tabela de comparação, colunas de precisão | 3 h por conjunto de dados por núcleo; dividir com WORKERS |
verification | Face Verification Benchmarks: HbC e M, Co-Host / LAN / Fast-WAN / WAN | ~6 h |
identification | Face Identification Benchmarks: 1:128 closed set, mesma grelha | ~6 h |
plaintext | tabela de comparação, linha TensorFlow | 1 min |
naive | tabela de comparação, linha MP-SPDZ (naive) | ~1 h incluindo compilação |
porthos | tabela de comparação, linha EzPC (Porthos) | ~5 min de compilação + ~1,5 h |
baselines | as três baselines | |
ablation | tabela de ablação: as otimizações uma de cada vez, desde a baseline naive até GhostFaceMPC (HbC, co-host) | ~4 h |
Variáveis de ambiente:
| Variável | Significado | Predefinição |
|---|---|---|
THREADS | threads por parte | 8 |
NETWORKS | redes a medir | co-host lan fast-wan wan |
WORKERS | processos para o oráculo de precisão | número de CPUs |
POOLS, WARMUPS, TRIALS | substituir o desenho de pools | o do artigo |
RESULTS | diretório de saída | results |