
تنفيذ مرجعي للتعرّف على الوجوه مع الحفاظ على الخصوصية باستخدام مشاركة الأسرار المكررة في MP-SPDZ، مع استدلال GhostFaceNet المُكمَّم، واختبارات الأداء، وأدوات QAT.
التنفيذ الرسمي لـ GhostFaceMPC: Privacy-Preserving Face Recognition with Multi-Party Computation (Davide Carnemolla, Dario Catalano, Mario Di Raimondo — جامعة كاتانيا). الورقة البحثية: 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/ | الإعداد، محاكاة الشبكة بدون صلاحيات جذر، جمع الجداول |
tests/ | اختبارات الوحدة (pytest) |
الجهاز. Linux على x86-64. استخدمت الورقة جهازاً افتراضياً بـ 32 نواة (Intel Xeon Gold 6238R) وتشغّل 8 خيوط لكل طرف. تعمل الخوادم الثلاثة جميعها على مضيف واحد.
Python. Python ≥ 3.10 (تم الاختبار مع 3.11).
تبعيات بناء MP-SPDZ (قائمة المنبع):
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)، ومساحات أسماء مستخدمين غير مميزة. لا يحتاج السكربت إلى
صلاحيات الجذر. على 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 teacher)، من إصدار GhostFaceNets |
model/ | نموذج ring32/f6/f_w9 المكمَّم (quantized)، مع تقارير دقته |
model-ring64-f16-b0/ | بيان (manifest) ring64 الذي يُصدَّر منه خط أساس Porthos |
legacy-scalar-236/ | بيان ring64/f20 لخط أساس MP-SPDZ الساذج (naive) |
الحزم (bundles) هي أصول إصدار (release assets) لهذا المستودع، ويُتحقق من كل أرشيف مقابل تجزئته SHA-256. كما ينزّل ghostmpc fetch-bundles --bundle qat-start البيان الذي يبدأ منه QAT (انظر §5).
تقرأ تجربة الدقة وخط الأساس النصي الصريح (plaintext baseline) خمس مجموعات تقييم من 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 | معايير التحقق من الوجه: HbC وM، وCo-Host / LAN / Fast-WAN / WAN | ~6 ساعات |
identification | معايير التعرف على الوجه: 1:128 مجموعة مغلقة، نفس الشبكة | ~6 ساعات |
plaintext | جدول المقارنة، صف TensorFlow | دقيقة واحدة |
naive | جدول المقارنة، صف MP-SPDZ (naive) | ~ساعة واحدة بما في ذلك الترجمة |
porthos | جدول المقارنة، صف EzPC (Porthos) | ~5 دقائق بناء + ~1.5 ساعة |
baselines | خطوط الأساس الثلاثة | |
ablation | جدول الاستئصال: التحسينات واحدًا تلو الآخر، من خط الأساس naive إلى GhostFaceMPC (HbC، co-host) | ~4 ساعات |
متغيرات البيئة:
| المتغير | المعنى | القيمة الافتراضية |
|---|---|---|
THREADS | عدد الخيوط لكل طرف | 8 |
NETWORKS | الشبكات المراد قياسها | co-host lan fast-wan wan |
WORKERS | عدد العمليات لأوراكل الدقة | عدد وحدات المعالجة المركزية |
POOLS، WARMUPS، TRIALS | تجاوز تصميم المجموعات | تصميم الورقة البحثية |
RESULTS | دليل الإخراج | results |
يشغّل --quick مجموعة واحدة من تسخين واحد وطلب مقاس واحد، والدقة على أول 600 زوج من كل مجموعة بيانات.